Plan OpenGL shader command metadata
This commit is contained in:
@@ -384,7 +384,7 @@ if(TARGET pano_cli)
|
||||
COMMAND pano_cli record-render --width 32 --height 16)
|
||||
set_tests_properties(pano_cli_record_render_smoke PROPERTIES
|
||||
LABELS "renderer;integration;desktop-fast"
|
||||
PASS_REGULAR_EXPRESSION "\"backend\":\"recording\".*\"framebufferFetch\":false.*\"explicitTextureTransitions\":true.*\"textureCopy\":true.*\"renderTargetBlit\":true.*\"frameCapture\":true.*\"float16RenderTargets\":false.*\"float32RenderTargets\":false.*\"width\":32.*\"height\":16.*\"createdResources\":7.*\"exercisedClearReset\":false.*\"clearRejectedOrphanedTraceEnd\":false.*\"clearReusedRenderPass\":false.*\"labeledCommandDescriptors\":16.*\"commands\":25.*\"openGlPlan\":.*\"available\":true.*\"supported\":true.*\"commands\":25.*\"renderPasses\":1.*\"drawCommands\":1.*\"uploadCommands\":1.*\"mipmapCommands\":1.*\"transitionCommands\":4.*\"copyCommands\":1.*\"readbackCommands\":1.*\"captureCommands\":1.*\"passthroughCommands\":2.*\"traceCommands\":3.*\"unsupportedCommands\":0.*\"renderPassOrderErrors\":0.*\"endedInRenderPass\":false.*\"renderPasses\":1.*\"depthClears\":1.*\"stencilClears\":0.*\"drawCommands\":1.*\"drawVertices\":3.*\"drawIndices\":3.*\"scissorCommands\":1.*\"blendCommands\":1.*\"depthCommands\":1.*\"uniformCommands\":1.*\"uniformBytes\":64.*\"bindTextureCommands\":1.*\"bindSamplerCommands\":1.*\"boundTextureBytes\":2048.*\"uploadCommands\":1.*\"uploadBytes\":4.*\"mipmapCommands\":1.*\"mipmapLevels\":3.*\"mipmapBytes\":84.*\"transitionCommands\":4.*\"transitionToUpload\":1.*\"transitionToShaderRead\":2.*\"copyCommands\":1.*\"copySourceBytes\":2048.*\"copyDestinationBytes\":2048.*\"readbackCommands\":1.*\"readbackBytes\":2048.*\"captureCommands\":1.*\"captureBytes\":2048.*\"blitCommands\":1.*\"blitSourceBytes\":2048.*\"blitDestinationBytes\":2048.*\"traceMarkers\":1.*\"traceBeginScopes\":1.*\"traceEndScopes\":1")
|
||||
PASS_REGULAR_EXPRESSION "\"backend\":\"recording\".*\"framebufferFetch\":false.*\"explicitTextureTransitions\":true.*\"textureCopy\":true.*\"renderTargetBlit\":true.*\"frameCapture\":true.*\"float16RenderTargets\":false.*\"float32RenderTargets\":false.*\"width\":32.*\"height\":16.*\"createdResources\":7.*\"exercisedClearReset\":false.*\"clearRejectedOrphanedTraceEnd\":false.*\"clearReusedRenderPass\":false.*\"labeledCommandDescriptors\":16.*\"commands\":25.*\"openGlPlan\":.*\"available\":true.*\"supported\":true.*\"commands\":25.*\"renderPasses\":1.*\"drawCommands\":1.*\"shaderBindCommands\":1.*\"uniformCommands\":1.*\"uploadCommands\":1.*\"mipmapCommands\":1.*\"transitionCommands\":4.*\"copyCommands\":1.*\"readbackCommands\":1.*\"captureCommands\":1.*\"passthroughCommands\":0.*\"traceCommands\":3.*\"unsupportedCommands\":0.*\"renderPassOrderErrors\":0.*\"endedInRenderPass\":false.*\"renderPasses\":1.*\"depthClears\":1.*\"stencilClears\":0.*\"drawCommands\":1.*\"drawVertices\":3.*\"drawIndices\":3.*\"scissorCommands\":1.*\"blendCommands\":1.*\"depthCommands\":1.*\"uniformCommands\":1.*\"uniformBytes\":64.*\"bindTextureCommands\":1.*\"bindSamplerCommands\":1.*\"boundTextureBytes\":2048.*\"uploadCommands\":1.*\"uploadBytes\":4.*\"mipmapCommands\":1.*\"mipmapLevels\":3.*\"mipmapBytes\":84.*\"transitionCommands\":4.*\"transitionToUpload\":1.*\"transitionToShaderRead\":2.*\"copyCommands\":1.*\"copySourceBytes\":2048.*\"copyDestinationBytes\":2048.*\"readbackCommands\":1.*\"readbackBytes\":2048.*\"captureCommands\":1.*\"captureBytes\":2048.*\"blitCommands\":1.*\"blitSourceBytes\":2048.*\"blitDestinationBytes\":2048.*\"traceMarkers\":1.*\"traceBeginScopes\":1.*\"traceEndScopes\":1")
|
||||
|
||||
add_test(NAME pano_cli_record_render_exercises_clear_reset
|
||||
COMMAND pano_cli record-render --width 32 --height 16 --exercise-clear)
|
||||
|
||||
@@ -42,6 +42,23 @@ pp::renderer::RecordedRenderCommand draw_command() noexcept
|
||||
return command;
|
||||
}
|
||||
|
||||
pp::renderer::RecordedRenderCommand bind_shader_command(const char* name) noexcept
|
||||
{
|
||||
pp::renderer::RecordedRenderCommand command;
|
||||
command.kind = pp::renderer::RecordedRenderCommandKind::bind_shader;
|
||||
command.name = name;
|
||||
return command;
|
||||
}
|
||||
|
||||
pp::renderer::RecordedRenderCommand shader_uniform_command(const char* name, std::uint64_t bytes) noexcept
|
||||
{
|
||||
pp::renderer::RecordedRenderCommand command;
|
||||
command.kind = pp::renderer::RecordedRenderCommandKind::set_shader_uniform;
|
||||
command.name = name;
|
||||
command.uniform_bytes = bytes;
|
||||
return command;
|
||||
}
|
||||
|
||||
pp::renderer::RecordedRenderCommand blit_command(pp::renderer::BlitFilter filter) noexcept
|
||||
{
|
||||
pp::renderer::RecordedRenderCommand command;
|
||||
@@ -256,6 +273,24 @@ void maps_texture_io_and_capture_commands(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, capture.capture_bytes == 512U);
|
||||
}
|
||||
|
||||
void maps_shader_commands(pp::tests::Harness& h)
|
||||
{
|
||||
const auto shader = pp::renderer::gl::plan_recorded_render_command(
|
||||
bind_shader_command("stroke-composite"));
|
||||
const auto uniform = pp::renderer::gl::plan_recorded_render_command(
|
||||
shader_uniform_command("mvp", 64U));
|
||||
|
||||
PP_EXPECT(h, shader.supported);
|
||||
PP_EXPECT(h, shader.kind == pp::renderer::gl::OpenGlPlannedCommandKind::bind_shader);
|
||||
PP_EXPECT(h, shader.name == std::string_view("stroke-composite"));
|
||||
PP_EXPECT(h, shader.requires_render_pass);
|
||||
PP_EXPECT(h, uniform.supported);
|
||||
PP_EXPECT(h, uniform.kind == pp::renderer::gl::OpenGlPlannedCommandKind::set_shader_uniform);
|
||||
PP_EXPECT(h, uniform.name == std::string_view("mvp"));
|
||||
PP_EXPECT(h, uniform.uniform_bytes == 64U);
|
||||
PP_EXPECT(h, uniform.requires_render_pass);
|
||||
}
|
||||
|
||||
void rejects_unsupported_command_tokens(pp::tests::Harness& h)
|
||||
{
|
||||
const auto bad_blend = pp::renderer::gl::plan_recorded_render_command(pp::renderer::RecordedRenderCommand {
|
||||
@@ -290,6 +325,10 @@ void rejects_unsupported_command_tokens(pp::tests::Harness& h)
|
||||
bad_transition_command.before_state = static_cast<pp::renderer::TextureState>(255U);
|
||||
bad_transition_command.after_state = pp::renderer::TextureState::shader_read;
|
||||
const auto bad_transition = pp::renderer::gl::plan_recorded_render_command(bad_transition_command);
|
||||
const auto bad_shader = pp::renderer::gl::plan_recorded_render_command(
|
||||
bind_shader_command(""));
|
||||
const auto bad_uniform = pp::renderer::gl::plan_recorded_render_command(
|
||||
shader_uniform_command("mvp", 0U));
|
||||
const auto unknown = pp::renderer::gl::plan_recorded_render_command(pp::renderer::RecordedRenderCommand {
|
||||
.kind = static_cast<pp::renderer::RecordedRenderCommandKind>(255U),
|
||||
});
|
||||
@@ -306,6 +345,10 @@ void rejects_unsupported_command_tokens(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, bad_blit.blit_filter.value == 0U);
|
||||
PP_EXPECT(h, !bad_transition.supported);
|
||||
PP_EXPECT(h, bad_transition.kind == pp::renderer::gl::OpenGlPlannedCommandKind::transition_texture);
|
||||
PP_EXPECT(h, !bad_shader.supported);
|
||||
PP_EXPECT(h, bad_shader.kind == pp::renderer::gl::OpenGlPlannedCommandKind::bind_shader);
|
||||
PP_EXPECT(h, !bad_uniform.supported);
|
||||
PP_EXPECT(h, bad_uniform.kind == pp::renderer::gl::OpenGlPlannedCommandKind::set_shader_uniform);
|
||||
PP_EXPECT(h, !unknown.supported);
|
||||
PP_EXPECT(h, unknown.kind == pp::renderer::gl::OpenGlPlannedCommandKind::unknown);
|
||||
}
|
||||
@@ -321,6 +364,9 @@ void names_planned_command_kinds(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, pp::renderer::gl::planned_command_kind_name(
|
||||
pp::renderer::gl::OpenGlPlannedCommandKind::copy_texture)
|
||||
== std::string_view("copy_texture"));
|
||||
PP_EXPECT(h, pp::renderer::gl::planned_command_kind_name(
|
||||
pp::renderer::gl::OpenGlPlannedCommandKind::set_shader_uniform)
|
||||
== std::string_view("set_shader_uniform"));
|
||||
PP_EXPECT(h, pp::renderer::gl::planned_command_kind_name(
|
||||
static_cast<pp::renderer::gl::OpenGlPlannedCommandKind>(255U))
|
||||
== std::string_view("unknown"));
|
||||
@@ -332,7 +378,8 @@ void plans_valid_recorded_command_streams(pp::tests::Harness& h)
|
||||
command_with_kind(pp::renderer::RecordedRenderCommandKind::trace_begin_scope),
|
||||
begin_render_pass_command(),
|
||||
viewport_command(),
|
||||
command_with_kind(pp::renderer::RecordedRenderCommandKind::bind_shader),
|
||||
bind_shader_command("stream-shader"),
|
||||
shader_uniform_command("mvp", 64U),
|
||||
draw_command(),
|
||||
command_with_kind(pp::renderer::RecordedRenderCommandKind::end_render_pass),
|
||||
blit_command(pp::renderer::BlitFilter::nearest),
|
||||
@@ -344,7 +391,9 @@ void plans_valid_recorded_command_streams(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, plan.commands.size() == commands.size());
|
||||
PP_EXPECT(h, plan.render_pass_count == 1U);
|
||||
PP_EXPECT(h, plan.draw_command_count == 1U);
|
||||
PP_EXPECT(h, plan.passthrough_command_count == 1U);
|
||||
PP_EXPECT(h, plan.shader_bind_command_count == 1U);
|
||||
PP_EXPECT(h, plan.uniform_command_count == 1U);
|
||||
PP_EXPECT(h, plan.passthrough_command_count == 0U);
|
||||
PP_EXPECT(h, plan.trace_command_count == 1U);
|
||||
PP_EXPECT(h, plan.unsupported_command_count == 0U);
|
||||
PP_EXPECT(h, plan.render_pass_order_error_count == 0U);
|
||||
@@ -352,9 +401,10 @@ void plans_valid_recorded_command_streams(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, plan.first_render_pass_order_error == pp::renderer::gl::OpenGlCommandPlan::npos);
|
||||
PP_EXPECT(h, !plan.ended_in_render_pass);
|
||||
PP_EXPECT(h, plan.commands[1].kind == pp::renderer::gl::OpenGlPlannedCommandKind::begin_render_pass);
|
||||
PP_EXPECT(h, plan.commands[3].kind == pp::renderer::gl::OpenGlPlannedCommandKind::passthrough);
|
||||
PP_EXPECT(h, plan.commands[4].kind == pp::renderer::gl::OpenGlPlannedCommandKind::draw);
|
||||
PP_EXPECT(h, plan.commands[6].kind == pp::renderer::gl::OpenGlPlannedCommandKind::blit_render_target);
|
||||
PP_EXPECT(h, plan.commands[3].kind == pp::renderer::gl::OpenGlPlannedCommandKind::bind_shader);
|
||||
PP_EXPECT(h, plan.commands[4].kind == pp::renderer::gl::OpenGlPlannedCommandKind::set_shader_uniform);
|
||||
PP_EXPECT(h, plan.commands[5].kind == pp::renderer::gl::OpenGlPlannedCommandKind::draw);
|
||||
PP_EXPECT(h, plan.commands[7].kind == pp::renderer::gl::OpenGlPlannedCommandKind::blit_render_target);
|
||||
}
|
||||
|
||||
void flags_broken_render_pass_command_order(pp::tests::Harness& h)
|
||||
@@ -470,6 +520,7 @@ int main()
|
||||
harness.run("maps_render_pass_and_state_commands", maps_render_pass_and_state_commands);
|
||||
harness.run("maps_binding_draw_and_blit_commands", maps_binding_draw_and_blit_commands);
|
||||
harness.run("maps_texture_io_and_capture_commands", maps_texture_io_and_capture_commands);
|
||||
harness.run("maps_shader_commands", maps_shader_commands);
|
||||
harness.run("rejects_unsupported_command_tokens", rejects_unsupported_command_tokens);
|
||||
harness.run("names_planned_command_kinds", names_planned_command_kinds);
|
||||
harness.run("plans_valid_recorded_command_streams", plans_valid_recorded_command_streams);
|
||||
|
||||
Reference in New Issue
Block a user