Plan OpenGL shader command metadata

This commit is contained in:
2026-06-02 21:02:24 +02:00
parent b6a25474ff
commit 1dcd96ab36
7 changed files with 119 additions and 30 deletions

View File

@@ -29,6 +29,11 @@ namespace {
}
}
[[nodiscard]] bool non_empty_name(const char* name) noexcept
{
return name != nullptr && name[0] != '\0';
}
[[nodiscard]] bool requires_render_pass(pp::renderer::RecordedRenderCommandKind kind) noexcept
{
switch (kind) {
@@ -81,6 +86,10 @@ const char* planned_command_kind_name(OpenGlPlannedCommandKind kind) noexcept
return "set_blend_state";
case OpenGlPlannedCommandKind::set_depth_state:
return "set_depth_state";
case OpenGlPlannedCommandKind::bind_shader:
return "bind_shader";
case OpenGlPlannedCommandKind::set_shader_uniform:
return "set_shader_uniform";
case OpenGlPlannedCommandKind::bind_texture:
return "bind_texture";
case OpenGlPlannedCommandKind::bind_sampler:
@@ -160,6 +169,17 @@ OpenGlPlannedCommand plan_recorded_render_command(pp::renderer::RecordedRenderCo
planned.depth = depth_state_for_renderer_depth_state(command.depth_state);
planned.supported = planned.depth.supported;
break;
case pp::renderer::RecordedRenderCommandKind::bind_shader:
planned.kind = OpenGlPlannedCommandKind::bind_shader;
planned.name = command.name;
planned.supported = non_empty_name(planned.name);
break;
case pp::renderer::RecordedRenderCommandKind::set_shader_uniform:
planned.kind = OpenGlPlannedCommandKind::set_shader_uniform;
planned.name = command.name;
planned.uniform_bytes = command.uniform_bytes;
planned.supported = non_empty_name(planned.name) && planned.uniform_bytes > 0U;
break;
case pp::renderer::RecordedRenderCommandKind::bind_texture:
planned.kind = OpenGlPlannedCommandKind::bind_texture;
planned.texture_format = texture_format_for_renderer_format(command.texture_desc.format);
@@ -250,10 +270,6 @@ OpenGlPlannedCommand plan_recorded_render_command(pp::renderer::RecordedRenderCo
case pp::renderer::RecordedRenderCommandKind::trace_end_scope:
planned.kind = OpenGlPlannedCommandKind::trace;
break;
case pp::renderer::RecordedRenderCommandKind::bind_shader:
case pp::renderer::RecordedRenderCommandKind::set_shader_uniform:
planned.kind = OpenGlPlannedCommandKind::passthrough;
break;
default:
planned.kind = OpenGlPlannedCommandKind::unknown;
planned.supported = false;
@@ -297,6 +313,18 @@ OpenGlCommandPlan plan_recorded_render_commands(
record_render_pass_order_error(plan, index);
}
break;
case OpenGlPlannedCommandKind::bind_shader:
++plan.shader_bind_command_count;
if (!in_render_pass) {
record_render_pass_order_error(plan, index);
}
break;
case OpenGlPlannedCommandKind::set_shader_uniform:
++plan.uniform_command_count;
if (!in_render_pass) {
record_render_pass_order_error(plan, index);
}
break;
case OpenGlPlannedCommandKind::upload_texture:
++plan.upload_command_count;
break;

View File

@@ -17,6 +17,8 @@ enum class OpenGlPlannedCommandKind : std::uint8_t {
set_scissor,
set_blend_state,
set_depth_state,
bind_shader,
set_shader_uniform,
bind_texture,
bind_sampler,
bind_mesh,
@@ -60,9 +62,11 @@ struct OpenGlPlannedCommand {
std::uint64_t capture_bytes = 0;
std::uint64_t blit_source_bytes = 0;
std::uint64_t blit_destination_bytes = 0;
std::uint64_t uniform_bytes = 0;
std::uint32_t primitive_mode = 0;
std::uint32_t draw_vertex_count = 0;
std::uint32_t draw_index_count = 0;
const char* name = "";
bool requires_render_pass = false;
bool supported = false;
};
@@ -73,6 +77,8 @@ struct OpenGlCommandPlan {
std::vector<OpenGlPlannedCommand> commands;
std::uint32_t render_pass_count = 0;
std::uint32_t draw_command_count = 0;
std::uint32_t shader_bind_command_count = 0;
std::uint32_t uniform_command_count = 0;
std::uint32_t upload_command_count = 0;
std::uint32_t mipmap_command_count = 0;
std::uint32_t transition_command_count = 0;