Expose recording renderer clear reset automation
This commit is contained in:
@@ -130,6 +130,7 @@ struct SimulateDocumentHistoryArgs {
|
||||
struct RecordRenderArgs {
|
||||
std::uint32_t width = 64;
|
||||
std::uint32_t height = 32;
|
||||
bool exercise_clear = false;
|
||||
};
|
||||
|
||||
void print_error(std::string_view command, std::string_view message)
|
||||
@@ -240,7 +241,7 @@ void print_help()
|
||||
<< " inspect-project --path FILE\n"
|
||||
<< " load-project --path FILE\n"
|
||||
<< " parse-layout --path FILE\n"
|
||||
<< " record-render [--width N] [--height N]\n"
|
||||
<< " record-render [--width N] [--height N] [--exercise-clear]\n"
|
||||
<< " save-document-project --path FILE [--width N] [--height N]\n"
|
||||
<< " save-project --path FILE --width N --height N [--layer-name NAME] [--layer-opacity N] [--blend-mode N] [--alpha-locked] [--hidden] [--layers N] [--frames N] [--frame-duration-ms N] [--include-test-face-payload] [--payload-layer N] [--payload-frame N]\n"
|
||||
<< " simulate-document-edits [--width N] [--height N]\n"
|
||||
@@ -2244,7 +2245,9 @@ pp::foundation::Status parse_record_render_args(int argc, char** argv, RecordRen
|
||||
{
|
||||
for (int i = 2; i < argc; ++i) {
|
||||
const std::string_view key(argv[i]);
|
||||
if (key == "--width" || key == "--height") {
|
||||
if (key == "--exercise-clear") {
|
||||
args.exercise_clear = true;
|
||||
} else if (key == "--width" || key == "--height") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
@@ -2365,6 +2368,40 @@ int record_render(int argc, char** argv)
|
||||
constexpr std::size_t created_resources = 7;
|
||||
|
||||
auto* trace = device.trace();
|
||||
auto& context = device.immediate_context();
|
||||
bool clear_rejected_orphaned_trace_end = false;
|
||||
bool clear_reused_render_pass = false;
|
||||
if (args.exercise_clear) {
|
||||
const auto interrupted_trace_status = trace->begin_scope("renderer", "interrupted-frame");
|
||||
if (!interrupted_trace_status.ok()) {
|
||||
print_error("record-render", interrupted_trace_status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto interrupted_begin_status = context.begin_render_pass(*target.value(), pp::renderer::RenderPassDesc {});
|
||||
if (!interrupted_begin_status.ok()) {
|
||||
print_error("record-render", interrupted_begin_status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
device.clear();
|
||||
const auto stale_trace_end_status = trace->end_scope();
|
||||
if (stale_trace_end_status.ok()) {
|
||||
print_error("record-render", "recording clear did not reset trace scope state");
|
||||
return 2;
|
||||
}
|
||||
clear_rejected_orphaned_trace_end = true;
|
||||
|
||||
const auto reuse_begin_status = context.begin_render_pass(*target.value(), pp::renderer::RenderPassDesc {});
|
||||
if (!reuse_begin_status.ok()) {
|
||||
print_error("record-render", reuse_begin_status.message);
|
||||
return 2;
|
||||
}
|
||||
context.end_render_pass();
|
||||
clear_reused_render_pass = true;
|
||||
device.clear();
|
||||
}
|
||||
|
||||
const auto trace_begin_status = trace->begin_scope("renderer", "pano_cli_record_render");
|
||||
if (!trace_begin_status.ok()) {
|
||||
print_error("record-render", trace_begin_status.message);
|
||||
@@ -2381,7 +2418,6 @@ int record_render(int argc, char** argv)
|
||||
return 2;
|
||||
}
|
||||
|
||||
auto& context = device.immediate_context();
|
||||
const auto transition_upload_status = context.transition_texture(
|
||||
*texture.value(),
|
||||
pp::renderer::TextureState::undefined,
|
||||
@@ -2732,6 +2768,9 @@ int record_render(int argc, char** argv)
|
||||
<< ",\"height\":" << args.height
|
||||
<< ",\"format\":\"rgba8\"}"
|
||||
<< ",\"createdResources\":" << created_resources
|
||||
<< ",\"exercisedClearReset\":" << json_bool(args.exercise_clear)
|
||||
<< ",\"clearRejectedOrphanedTraceEnd\":" << json_bool(clear_rejected_orphaned_trace_end)
|
||||
<< ",\"clearReusedRenderPass\":" << json_bool(clear_reused_render_pass)
|
||||
<< ",\"labeledCommandDescriptors\":" << labeled_command_descriptors
|
||||
<< ",\"commands\":" << commands.size()
|
||||
<< ",\"renderPasses\":" << render_passes
|
||||
|
||||
Reference in New Issue
Block a user