Reset recording renderer state on clear

This commit is contained in:
2026-06-02 17:53:17 +02:00
parent 9b00acec6f
commit 860e5ad31e
5 changed files with 70 additions and 4 deletions

View File

@@ -2127,6 +2127,49 @@ void recording_renderer_records_valid_command_sequences(pp::tests::Harness& h)
PP_EXPECT(h, device.commands().empty());
}
void recording_renderer_clear_resets_context_and_trace_state(pp::tests::Harness& h)
{
RecordingRenderDevice device;
RecordingRenderTarget target(TextureDesc {
.extent = Extent2D { .width = 16, .height = 8 },
.format = TextureFormat::rgba8,
.usage = TextureUsage::render_target | TextureUsage::sampled | TextureUsage::readback_source,
.debug_name = "reset-target",
});
auto* trace = device.trace();
PP_EXPECT(h, trace != nullptr);
if (trace == nullptr) {
return;
}
PP_EXPECT(h, trace->begin_scope("renderer", "interrupted-frame").ok());
auto& context = device.immediate_context();
PP_EXPECT(h, context.begin_render_pass(target, RenderPassDesc {}).ok());
PP_EXPECT(h, !device.commands().empty());
device.clear();
PP_EXPECT(h, device.commands().empty());
const auto trace_end_after_clear = trace->end_scope();
PP_EXPECT(h, !trace_end_after_clear.ok());
PP_EXPECT(h, trace_end_after_clear.code == StatusCode::invalid_argument);
PP_EXPECT(h, device.commands().empty());
PP_EXPECT(h, trace->begin_scope("renderer", "next-frame").ok());
PP_EXPECT(h, trace->end_scope().ok());
PP_EXPECT(h, context.begin_render_pass(target, RenderPassDesc {}).ok());
context.end_render_pass();
const auto commands = device.commands();
PP_EXPECT(h, commands.size() == 4U);
PP_EXPECT(h, commands[0].kind == RecordedRenderCommandKind::trace_begin_scope);
PP_EXPECT(h, commands[1].kind == RecordedRenderCommandKind::trace_end_scope);
PP_EXPECT(h, commands[2].kind == RecordedRenderCommandKind::begin_render_pass);
PP_EXPECT(h, commands[3].kind == RecordedRenderCommandKind::end_render_pass);
}
void recording_renderer_rejects_invalid_command_order_and_targets(pp::tests::Harness& h)
{
RecordingRenderDevice device;
@@ -2565,6 +2608,7 @@ int main()
harness.run("recording_renderer_records_mipmap_generation", recording_renderer_records_mipmap_generation);
harness.run("recording_renderer_records_texture_transitions", recording_renderer_records_texture_transitions);
harness.run("recording_renderer_records_valid_command_sequences", recording_renderer_records_valid_command_sequences);
harness.run("recording_renderer_clear_resets_context_and_trace_state", recording_renderer_clear_resets_context_and_trace_state);
harness.run("recording_renderer_rejects_invalid_command_order_and_targets", recording_renderer_rejects_invalid_command_order_and_targets);
return harness.finish();
}