Validate renderer shader descriptors
This commit is contained in:
@@ -15,9 +15,12 @@ using pp::renderer::IShaderProgram;
|
||||
using pp::renderer::MeshDesc;
|
||||
using pp::renderer::PrimitiveTopology;
|
||||
using pp::renderer::ReadbackRegion;
|
||||
using pp::renderer::ShaderProgramDesc;
|
||||
using pp::renderer::ShaderStageSource;
|
||||
using pp::renderer::TextureDesc;
|
||||
using pp::renderer::TextureFormat;
|
||||
using pp::renderer::Viewport;
|
||||
using pp::renderer::max_shader_source_bytes;
|
||||
using pp::renderer::max_texture_dimension;
|
||||
using pp::renderer::primitive_topology_name;
|
||||
using pp::renderer::texture_byte_size;
|
||||
@@ -25,6 +28,7 @@ using pp::renderer::texture_format_name;
|
||||
using pp::renderer::validate_extent;
|
||||
using pp::renderer::validate_mesh_desc;
|
||||
using pp::renderer::validate_readback_region;
|
||||
using pp::renderer::validate_shader_program_desc;
|
||||
using pp::renderer::validate_viewport;
|
||||
|
||||
namespace {
|
||||
@@ -220,6 +224,56 @@ void validates_viewports_and_mesh_descriptors(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, empty_mesh.code == StatusCode::invalid_argument);
|
||||
}
|
||||
|
||||
void validates_shader_program_descriptors(pp::tests::Harness& h)
|
||||
{
|
||||
constexpr char vertex_source[] = "#version 330 core\nvoid main(){}";
|
||||
constexpr char fragment_source[] = "#version 330 core\nout vec4 color; void main(){ color = vec4(1); }";
|
||||
|
||||
const ShaderProgramDesc valid {
|
||||
.debug_name = "solid-color",
|
||||
.vertex = ShaderStageSource {
|
||||
.entry_point = "main",
|
||||
.source = vertex_source,
|
||||
.source_size = sizeof(vertex_source) - 1U,
|
||||
},
|
||||
.fragment = ShaderStageSource {
|
||||
.entry_point = "main",
|
||||
.source = fragment_source,
|
||||
.source_size = sizeof(fragment_source) - 1U,
|
||||
},
|
||||
};
|
||||
|
||||
PP_EXPECT(h, validate_shader_program_desc(valid).ok());
|
||||
|
||||
auto missing_name = valid;
|
||||
missing_name.debug_name = nullptr;
|
||||
auto missing_vertex_entry = valid;
|
||||
missing_vertex_entry.vertex.entry_point = "";
|
||||
auto missing_fragment_source = valid;
|
||||
missing_fragment_source.fragment.source = nullptr;
|
||||
auto empty_fragment_source = valid;
|
||||
empty_fragment_source.fragment.source_size = 0;
|
||||
auto excessive_source = valid;
|
||||
excessive_source.vertex.source_size = max_shader_source_bytes + 1U;
|
||||
|
||||
const auto missing_name_status = validate_shader_program_desc(missing_name);
|
||||
const auto missing_vertex_entry_status = validate_shader_program_desc(missing_vertex_entry);
|
||||
const auto missing_fragment_source_status = validate_shader_program_desc(missing_fragment_source);
|
||||
const auto empty_fragment_source_status = validate_shader_program_desc(empty_fragment_source);
|
||||
const auto excessive_source_status = validate_shader_program_desc(excessive_source);
|
||||
|
||||
PP_EXPECT(h, !missing_name_status.ok());
|
||||
PP_EXPECT(h, missing_name_status.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !missing_vertex_entry_status.ok());
|
||||
PP_EXPECT(h, missing_vertex_entry_status.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !missing_fragment_source_status.ok());
|
||||
PP_EXPECT(h, missing_fragment_source_status.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !empty_fragment_source_status.ok());
|
||||
PP_EXPECT(h, empty_fragment_source_status.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !excessive_source_status.ok());
|
||||
PP_EXPECT(h, excessive_source_status.code == StatusCode::out_of_range);
|
||||
}
|
||||
|
||||
void renderer_interfaces_support_backend_neutral_dispatch(pp::tests::Harness& h)
|
||||
{
|
||||
FakeRenderDevice device;
|
||||
@@ -255,6 +309,7 @@ int main()
|
||||
harness.run("rejects_invalid_or_excessive_extents", rejects_invalid_or_excessive_extents);
|
||||
harness.run("validates_readback_bounds", validates_readback_bounds);
|
||||
harness.run("validates_viewports_and_mesh_descriptors", validates_viewports_and_mesh_descriptors);
|
||||
harness.run("validates_shader_program_descriptors", validates_shader_program_descriptors);
|
||||
harness.run("renderer_interfaces_support_backend_neutral_dispatch", renderer_interfaces_support_backend_neutral_dispatch);
|
||||
return harness.finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user