Reset recording renderer state on clear
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user