Plan renderer diagnostics in app status

This commit is contained in:
2026-06-03 19:49:54 +02:00
parent fa1493b843
commit 164f99fe48
8 changed files with 151 additions and 17 deletions

View File

@@ -236,6 +236,10 @@ struct PlanAppStatusArgs {
bool recording_running = false;
bool encoder_available = false;
std::uint32_t encoded_frames = 0;
bool framebuffer_fetch = false;
bool float32_render_targets = false;
bool float32_linear_filtering = false;
bool float16_render_targets = false;
};
struct PlanDocumentResizeArgs {
@@ -1766,7 +1770,7 @@ void print_help()
<< " plan-cloud-upload-all [--file-count N] [--no-progress-ui]\n"
<< " plan-recording-session [--running] [--frame-count N] [--platform-deletes-recorded-files]\n"
<< " plan-app-preferences [--ui-scale N] [--display-density N] [--current-scale N] [--scale-option N] [--viewport-scale N] [--rtl] [--timelapse-disabled] [--recording-running] [--vr-controllers-disabled] [--cursor-mode N]\n"
<< " plan-app-status [--doc-name NAME] [--unsaved] [--resolution N] [--resolution-index N] [--zoom N] [--history-bytes N] [--recording-running] [--encoder-available] [--encoded-frames N]\n"
<< " plan-app-status [--doc-name NAME] [--unsaved] [--resolution N] [--resolution-index N] [--zoom N] [--history-bytes N] [--recording-running] [--encoder-available] [--encoded-frames N] [--framebuffer-fetch] [--float32] [--float32-linear] [--float16]\n"
<< " plan-tools-menu --command panels|options|clear-grids|reset-camera|shortcuts|sonarpen [--sonarpen-available]\n"
<< " plan-tools-panel --panel presets|color|color-advanced|layers|brush|grids|animation [--already-visible]\n"
<< " plan-about-menu --command help|about|news|crash|performance [--version-major N] [--version-minor N] [--version-fix N] [--no-diagnostics] [--no-canvas]\n"
@@ -3558,6 +3562,14 @@ pp::foundation::Status parse_plan_app_status_args(
args.recording_running = true;
} else if (key == "--encoder-available") {
args.encoder_available = true;
} else if (key == "--framebuffer-fetch") {
args.framebuffer_fetch = true;
} else if (key == "--float32") {
args.float32_render_targets = true;
} else if (key == "--float32-linear") {
args.float32_linear_filtering = true;
} else if (key == "--float16") {
args.float16_render_targets = true;
} else {
return pp::foundation::Status::invalid_argument("unknown option");
}
@@ -3582,6 +3594,12 @@ int plan_app_status(int argc, char** argv)
args.recording_running,
args.encoder_available,
static_cast<int>(args.encoded_frames));
const auto diagnostics = pp::app::plan_renderer_diagnostics({
.framebuffer_fetch = args.framebuffer_fetch,
.float32_render_targets = args.float32_render_targets,
.float32_linear_filtering = args.float32_linear_filtering,
.float16_render_targets = args.float16_render_targets,
});
std::cout << "{\"ok\":true,\"command\":\"plan-app-status\""
<< ",\"state\":{\"documentName\":\"" << json_escape(args.document_name)
@@ -3593,6 +3611,10 @@ int plan_app_status(int argc, char** argv)
<< ",\"recordingRunning\":" << json_bool(args.recording_running)
<< ",\"encoderAvailable\":" << json_bool(args.encoder_available)
<< ",\"encodedFrames\":" << args.encoded_frames
<< ",\"framebufferFetch\":" << json_bool(args.framebuffer_fetch)
<< ",\"float32\":" << json_bool(args.float32_render_targets)
<< ",\"float32Linear\":" << json_bool(args.float32_linear_filtering)
<< ",\"float16\":" << json_bool(args.float16_render_targets)
<< "},\"title\":\"" << json_escape(pp::app::make_document_title(
args.document_name,
args.unsaved,
@@ -3601,7 +3623,13 @@ int plan_app_status(int argc, char** argv)
<< "\",\"memory\":\"" << json_escape(pp::app::make_history_memory_label(args.history_bytes))
<< "\",\"recording\":{\"visible\":" << json_bool(recording_label.visible)
<< ",\"text\":\"" << json_escape(recording_label.text)
<< "\"},\"resolutionMap\":{\"fromIndexValid\":" << json_bool(static_cast<bool>(resolution_from_index))
<< "\"},\"rendererDiagnostics\":{\"framebufferFetch\":{\"supported\":"
<< json_bool(diagnostics.framebuffer_fetch.supported)
<< ",\"label\":\"" << json_escape(std::string(diagnostics.framebuffer_fetch.label))
<< "\"},\"floatingPointTargets\":{\"supported\":"
<< json_bool(diagnostics.floating_point_targets.supported)
<< ",\"label\":\"" << json_escape(std::string(diagnostics.floating_point_targets.label))
<< "\"}},\"resolutionMap\":{\"fromIndexValid\":" << json_bool(static_cast<bool>(resolution_from_index))
<< ",\"fromIndex\":" << (resolution_from_index ? resolution_from_index.value() : 0)
<< ",\"toIndexValid\":" << json_bool(static_cast<bool>(resolution_index))
<< ",\"toIndex\":" << (resolution_index ? resolution_index.value() : 0)