Plan OpenGL shader command metadata
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user