diff --git a/glslc/src/shader_stage.cc b/glslc/src/shader_stage.cc index ec75a2fb1..40cf298a1 100644 --- a/glslc/src/shader_stage.cc +++ b/glslc/src/shader_stage.cc @@ -45,6 +45,11 @@ shaderc_shader_kind MapStageNameToForcedKind(const string_piece& stage_name) { {"compute", shaderc_glsl_compute_shader}, {"comp", shaderc_glsl_compute_shader}, #ifdef NV_EXTENSIONS + {"rgen", shaderc_glsl_raygen_shader }, + {"rahit", shaderc_glsl_anyhit_shader }, + {"rchit", shaderc_glsl_closesthit_shader }, + {"rmiss", shaderc_glsl_miss_shader }, + {"rint", shaderc_glsl_intersection_shader }, {"task", shaderc_glsl_task_shader }, {"mesh", shaderc_glsl_mesh_shader }, #endif @@ -74,6 +79,11 @@ shaderc_shader_kind DeduceDefaultShaderKindFromFileName( {"comp", shaderc_glsl_default_compute_shader}, {"spvasm", shaderc_spirv_assembly}, #ifdef NV_EXTENSIONS + {"rgen", shaderc_glsl_default_raygen_shader }, + {"rahit", shaderc_glsl_default_anyhit_shader }, + {"rchit", shaderc_glsl_default_closesthit_shader }, + {"rmiss", shaderc_glsl_default_miss_shader }, + {"rint", shaderc_glsl_default_intersection_shader }, {"task", shaderc_glsl_default_task_shader }, {"mesh", shaderc_glsl_default_mesh_shader }, #endif diff --git a/glslc/src/stage_test.cc b/glslc/src/stage_test.cc index 08d7853e9..0b7bca431 100644 --- a/glslc/src/stage_test.cc +++ b/glslc/src/stage_test.cc @@ -50,6 +50,21 @@ TEST(DeduceDefaultShaderKindFromFileName, ValidStage) { glslc::DeduceDefaultShaderKindFromFileName("a.comp")); #ifdef NV_EXTENSIONS + EXPECT_EQ(shaderc_glsl_default_raygen_shader, + glslc::DeduceDefaultShaderKindFromFileName("a.rgen")); + + EXPECT_EQ(shaderc_glsl_default_anyhit_shader, + glslc::DeduceDefaultShaderKindFromFileName("a.rahit")); + + EXPECT_EQ(shaderc_glsl_default_closesthit_shader, + glslc::DeduceDefaultShaderKindFromFileName("a.rchit")); + + EXPECT_EQ(shaderc_glsl_default_miss_shader, + glslc::DeduceDefaultShaderKindFromFileName("a.rmiss")); + + EXPECT_EQ(shaderc_glsl_default_intersection_shader, + glslc::DeduceDefaultShaderKindFromFileName("a.rint")); + EXPECT_EQ(shaderc_glsl_default_task_shader, glslc::DeduceDefaultShaderKindFromFileName("a.task")); diff --git a/libshaderc/include/shaderc/shaderc.h b/libshaderc/include/shaderc/shaderc.h index c50787c75..2bf68fe7c 100644 --- a/libshaderc/include/shaderc/shaderc.h +++ b/libshaderc/include/shaderc/shaderc.h @@ -58,7 +58,6 @@ typedef enum { shaderc_tess_control_shader, shaderc_tess_evaluation_shader, - shaderc_glsl_vertex_shader = shaderc_vertex_shader, shaderc_glsl_fragment_shader = shaderc_fragment_shader, shaderc_glsl_compute_shader = shaderc_compute_shader, @@ -66,7 +65,6 @@ typedef enum { shaderc_glsl_tess_control_shader = shaderc_tess_control_shader, shaderc_glsl_tess_evaluation_shader = shaderc_tess_evaluation_shader, - // Deduce the shader kind from #pragma annotation in the source code. Compiler // will emit error if #pragma annotation is not found. shaderc_glsl_infer_from_source, @@ -80,8 +78,22 @@ typedef enum { shaderc_glsl_default_tess_control_shader, shaderc_glsl_default_tess_evaluation_shader, shaderc_spirv_assembly, - #ifdef NV_EXTENSIONS + shaderc_raygen_shader, + shaderc_anyhit_shader, + shaderc_closesthit_shader, + shaderc_miss_shader, + shaderc_intersection_shader, + shaderc_glsl_raygen_shader = shaderc_raygen_shader, + shaderc_glsl_anyhit_shader = shaderc_anyhit_shader, + shaderc_glsl_closesthit_shader = shaderc_closesthit_shader, + shaderc_glsl_miss_shader = shaderc_miss_shader, + shaderc_glsl_intersection_shader = shaderc_intersection_shader, + shaderc_glsl_default_raygen_shader, + shaderc_glsl_default_anyhit_shader, + shaderc_glsl_default_closesthit_shader, + shaderc_glsl_default_miss_shader, + shaderc_glsl_default_intersection_shader, shaderc_task_shader, shaderc_mesh_shader, shaderc_glsl_task_shader = shaderc_task_shader, diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc index 64ea81044..6c780d1fa 100644 --- a/libshaderc/src/shaderc.cc +++ b/libshaderc/src/shaderc.cc @@ -56,7 +56,18 @@ EShLanguage GetForcedStage(shaderc_shader_kind kind) { return EShLangTessControl; case shaderc_glsl_tess_evaluation_shader: return EShLangTessEvaluation; + #ifdef NV_EXTENSIONS + case shaderc_glsl_raygen_shader: + return EShLangRayGenNV; + case shaderc_glsl_anyhit_shader: + return EShLangAnyHitNV; + case shaderc_glsl_closesthit_shader: + return EShLangClosestHitNV; + case shaderc_glsl_miss_shader: + return EShLangMissNV; + case shaderc_glsl_intersection_shader: + return EShLangIntersectNV; case shaderc_glsl_task_shader: return EShLangTaskNV; case shaderc_glsl_mesh_shader: @@ -71,6 +82,11 @@ EShLanguage GetForcedStage(shaderc_shader_kind kind) { case shaderc_glsl_default_tess_control_shader: case shaderc_glsl_default_tess_evaluation_shader: #ifdef NV_EXTENSIONS + case shaderc_glsl_default_raygen_shader: + case shaderc_glsl_default_anyhit_shader: + case shaderc_glsl_default_closesthit_shader: + case shaderc_glsl_default_miss_shader: + case shaderc_glsl_default_intersection_shader: case shaderc_glsl_default_task_shader: case shaderc_glsl_default_mesh_shader: #endif @@ -132,6 +148,11 @@ class StageDeducer { case shaderc_glsl_tess_evaluation_shader: case shaderc_glsl_infer_from_source: #ifdef NV_EXTENSIONS + case shaderc_glsl_raygen_shader: + case shaderc_glsl_anyhit_shader: + case shaderc_glsl_closesthit_shader: + case shaderc_glsl_miss_shader: + case shaderc_glsl_intersection_shader: case shaderc_glsl_task_shader: case shaderc_glsl_mesh_shader: #endif @@ -149,6 +170,16 @@ class StageDeducer { case shaderc_glsl_default_tess_evaluation_shader: return EShLangTessEvaluation; #ifdef NV_EXTENSIONS + case shaderc_glsl_default_raygen_shader: + return EShLangRayGenNV; + case shaderc_glsl_default_anyhit_shader: + return EShLangAnyHitNV; + case shaderc_glsl_default_closesthit_shader: + return EShLangClosestHitNV; + case shaderc_glsl_default_miss_shader: + return EShLangMissNV; + case shaderc_glsl_default_intersection_shader: + return EShLangIntersectNV; case shaderc_glsl_default_task_shader: return EShLangTaskNV; case shaderc_glsl_default_mesh_shader: diff --git a/libshaderc/src/shaderc_private.h b/libshaderc/src/shaderc_private.h index e8dde546e..8ae87598a 100644 --- a/libshaderc/src/shaderc_private.h +++ b/libshaderc/src/shaderc_private.h @@ -112,6 +112,16 @@ inline shaderc_util::Compiler::Stage shaderc_convert_specific_stage( case shaderc_compute_shader: return shaderc_util::Compiler::Stage::Compute; #if NV_EXTENSIONS + case shaderc_raygen_shader: + return shaderc_util::Compiler::Stage::RayGenNV; + case shaderc_intersection_shader: + return shaderc_util::Compiler::Stage::IntersectNV; + case shaderc_anyhit_shader: + return shaderc_util::Compiler::Stage::AnyHitNV; + case shaderc_closesthit_shader: + return shaderc_util::Compiler::Stage::ClosestHitNV; + case shaderc_miss_shader: + return shaderc_util::Compiler::Stage::MissNV; case shaderc_task_shader: return shaderc_util::Compiler::Stage::TaskNV; case shaderc_mesh_shader: diff --git a/libshaderc/src/shaderc_private_test.cc b/libshaderc/src/shaderc_private_test.cc index 34110a36f..a0845501c 100644 --- a/libshaderc/src/shaderc_private_test.cc +++ b/libshaderc/src/shaderc_private_test.cc @@ -31,6 +31,16 @@ TEST(ConvertSpecificStage, Exhaustive) { EXPECT_EQ(shaderc_util::Compiler::Stage::Compute, shaderc_convert_specific_stage(shaderc_compute_shader)); #ifdef NV_EXTENSIONS + EXPECT_EQ(shaderc_util::Compiler::Stage::RayGenNV, + shaderc_convert_specific_stage(shaderc_raygen_shader)); + EXPECT_EQ(shaderc_util::Compiler::Stage::AnyHitNV, + shaderc_convert_specific_stage(shaderc_anyhit_shader)); + EXPECT_EQ(shaderc_util::Compiler::Stage::ClosestHitNV, + shaderc_convert_specific_stage(shaderc_closesthit_shader)); + EXPECT_EQ(shaderc_util::Compiler::Stage::IntersectNV, + shaderc_convert_specific_stage(shaderc_intersection_shader)); + EXPECT_EQ(shaderc_util::Compiler::Stage::MissNV, + shaderc_convert_specific_stage(shaderc_miss_shader)); EXPECT_EQ(shaderc_util::Compiler::Stage::TaskNV, shaderc_convert_specific_stage(shaderc_task_shader)); EXPECT_EQ(shaderc_util::Compiler::Stage::MeshNV, diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h index 0dbcea771..93b1d4617 100644 --- a/libshaderc_util/include/libshaderc_util/compiler.h +++ b/libshaderc_util/include/libshaderc_util/compiler.h @@ -170,6 +170,11 @@ class Compiler { Fragment, Compute, #ifdef NV_EXTENSIONS + RayGenNV, + IntersectNV, + AnyHitNV, + ClosestHitNV, + MissNV, TaskNV, MeshNV, #endif @@ -183,8 +188,13 @@ class Compiler { {Stage::Vertex, Stage::TessEval, Stage::TessControl, Stage::Geometry, Stage::Fragment, Stage::Compute, #ifdef NV_EXTENSIONS - Stage::TaskNV, - Stage::MeshNV, + Stage::RayGenNV, + Stage::IntersectNV, + Stage::AnyHitNV, + Stage::ClosestHitNV, + Stage::MissNV, + Stage::TaskNV, + Stage::MeshNV, #endif }}; return values;