diff options
author | Mark Adams <marka@nvidia.com> | 2015-10-15 17:16:48 -0400 |
---|---|---|
committer | Mark Adams <marka@nvidia.com> | 2015-10-19 19:16:18 -0400 |
commit | bed356befe23fd6591ee3cbbe5e04e304037b198 (patch) | |
tree | 8c9224219c58ea2297ed9c4b1fb88d1e87bb43f9 /libshaderc/src | |
parent | 94b9cfed5fb4977c26a6dc9aec8f209590827a3f (diff) | |
download | shaderc-bed356befe23fd6591ee3cbbe5e04e304037b198.tar.gz |
Add missing shader kinds
Currently only vertex and fragment shader types are exposed; this adds
mappings for the remainder.
Simple tests for each type have been added to verify they're functional.
Diffstat (limited to 'libshaderc/src')
-rw-r--r-- | libshaderc/src/shaderc.cc | 8 | ||||
-rw-r--r-- | libshaderc/src/shaderc_test.cc | 73 |
2 files changed, 81 insertions, 0 deletions
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc index 03e3b5f..2584a68 100644 --- a/libshaderc/src/shaderc.cc +++ b/libshaderc/src/shaderc.cc @@ -41,6 +41,14 @@ EShLanguage GetStage(shaderc_shader_kind kind) { return EShLangVertex; case shaderc_glsl_fragment_shader: return EShLangFragment; + case shaderc_glsl_compute_shader: + return EShLangCompute; + case shaderc_glsl_geometry_shader: + return EShLangGeometry; + case shaderc_glsl_tess_control_shader: + return EShLangTessControl; + case shaderc_glsl_tess_evaluation_shader: + return EShLangTessEvaluation; } assert(0 && "Unhandled shaderc_shader_kind"); return EShLangVertex; diff --git a/libshaderc/src/shaderc_test.cc b/libshaderc/src/shaderc_test.cc index ebdfac2..b4c0007 100644 --- a/libshaderc/src/shaderc_test.cc +++ b/libshaderc/src/shaderc_test.cc @@ -261,4 +261,77 @@ TEST(CompileString, MultipleThreadsCalling) { EXPECT_THAT(results, Each(true)); } +TEST(CompileKinds, Vertex) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kVertexShader = "void main(){ gl_Position = vec4(0);}"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kVertexShader, + shaderc_glsl_vertex_shader)); +} + +TEST(CompileKinds, Fragment) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kFragShader = "void main(){ gl_FragColor = vec4(0);}"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kFragShader, + shaderc_glsl_fragment_shader)); +} + +TEST(CompileKinds, Compute) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kCompShader = + R"(#version 310 es + void main() {} + )"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kCompShader, + shaderc_glsl_compute_shader)); +} + +TEST(CompileKinds, Geometry) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kGeoShader = + R"(#version 310 es + #extension GL_OES_geometry_shader : enable + layout(points) in; + layout(points, max_vertices=1) out; + void main() { + gl_Position = vec4(1.0); + EmitVertex(); + EndPrimitive(); + } + )"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kGeoShader, + shaderc_glsl_geometry_shader)); +} + +TEST(CompileKinds, TessControl) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kTCSShader = + R"(#version 310 es + #extension GL_OES_tessellation_shader : enable + layout(vertices=1) out; + void main() {} + )"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kTCSShader, + shaderc_glsl_tess_control_shader)); +} + +TEST(CompileKinds, TessEvaluation) { + Compiler compiler; + ASSERT_NE(nullptr, compiler.get_compiler_handle()); + const std::string kTESShader = + R"(#version 310 es + #extension GL_OES_tessellation_shader : enable + layout(triangles, equal_spacing, ccw) in; + void main() { + gl_Position = vec4(gl_TessCoord, 1.0); + } + )"; + EXPECT_TRUE(CompilationSuccess(compiler.get_compiler_handle(), kTESShader, + shaderc_glsl_tess_evaluation_shader)); +} + } // anonymous namespace |