From 288b079930ccd3dd1d6d45a431022bce7db0a177 Mon Sep 17 00:00:00 2001
From: Mara Vogt <mvogt@uni-koblenz.de>
Date: Sun, 5 Sep 2021 15:47:43 +0200
Subject: [PATCH] [#92] modified glslCompiler so that environment is configured
 for rt shaders

---
 .../src/vkcv/shader/GLSLCompiler.cpp          | 22 +++++++++++++++++++
 projects/rtx/resources/shaders/raytrace.rchit |  2 ++
 projects/rtx/resources/shaders/raytrace.rgen  |  3 ++-
 projects/rtx/src/main.cpp                     |  4 ++--
 4 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp
index 16067aeb..28e92aa1 100644
--- a/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp
@@ -56,6 +56,18 @@ namespace vkcv::shader {
 				return EShLangTaskNV;
 			case ShaderStage::MESH:
 				return EShLangMeshNV;
+			case ShaderStage::RAY_GEN:
+			    return EShLangRayGen;
+			case ShaderStage::RAY_CLOSEST_HIT:
+			    return EShLangClosestHit;
+			case ShaderStage::RAY_MISS:
+			    return EShLangMiss;
+			case ShaderStage::RAY_INTERSECTION:
+				return EShLangIntersect;
+			case ShaderStage::RAY_ANY_HIT:
+				return EShLangAnyHit;
+			case ShaderStage::RAY_CALLABLE:
+				return EShLangCallable;
 			default:
 				return EShLangCount;
 		}
@@ -214,6 +226,16 @@ namespace vkcv::shader {
 		}
 		
 		glslang::TShader shader (language);
+
+		//configure environment for rt shaders
+		if((shaderStage == ShaderStage::RAY_GEN) || (shaderStage == ShaderStage::RAY_ANY_HIT)
+		|| (shaderStage == ShaderStage::RAY_CLOSEST_HIT) || (shaderStage == ShaderStage::RAY_MISS)
+		|| (shaderStage == ShaderStage::RAY_INTERSECTION) || (shaderStage == ShaderStage::RAY_CALLABLE)){
+
+		    shader.setEnvClient(glslang::EShClientVulkan,glslang::EShTargetVulkan_1_2);
+		    shader.setEnvTarget(glslang::EShTargetSpv,glslang::EShTargetSpv_1_4);
+		}
+
 		glslang::TProgram program;
 		
 		std::string source (shaderSource);
diff --git a/projects/rtx/resources/shaders/raytrace.rchit b/projects/rtx/resources/shaders/raytrace.rchit
index 7eda8bd4..836edc70 100644
--- a/projects/rtx/resources/shaders/raytrace.rchit
+++ b/projects/rtx/resources/shaders/raytrace.rchit
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : require
 
+/*
 layout(binding = 3, set 0) buffer vertices
 {
     vec3 vertices[];
@@ -10,6 +11,7 @@ layout(binding = 4, set 0) buffer indices
 {
     uint indices[];
 };
+*/
 
 void main() {
 
diff --git a/projects/rtx/resources/shaders/raytrace.rgen b/projects/rtx/resources/shaders/raytrace.rgen
index 313ecdb2..58b0f0ab 100644
--- a/projects/rtx/resources/shaders/raytrace.rgen
+++ b/projects/rtx/resources/shaders/raytrace.rgen
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : require
 
+/*
 // A location for a ray payload (we can have multiple of these)
 layout(location = 0) rayPayloadEXT RayPayload pay;
 
@@ -15,7 +16,7 @@ layout( push_constant ) uniform constants {     // TODO: add push_constants in m
 
     uint frameCount;        // what is this? the actual frame?
 };
-
+*/
 
 void main() {
     // TODO
diff --git a/projects/rtx/src/main.cpp b/projects/rtx/src/main.cpp
index 340669ae..b518d26f 100644
--- a/projects/rtx/src/main.cpp
+++ b/projects/rtx/src/main.cpp
@@ -123,7 +123,7 @@ int main(int argc, const char** argv) {
 
 	const auto& material0 = scene.getMaterial(0);
 
-	/*
+
 	vkcv::ShaderProgram rayGenShaderProgram;
 	compiler.compile(vkcv::ShaderStage::RAY_GEN, std::filesystem::path("resources/shaders/raytrace.rgen"),
 		[&rayGenShaderProgram](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
@@ -141,7 +141,7 @@ int main(int argc, const char** argv) {
 		[&rayMissShaderProgram](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
 			rayMissShaderProgram.addShader(shaderStage, path);
 		});
-	*/
+
 
 	//TODO
 //	vkcv::DescriptorSetLayoutHandle rayGenShaderDescriptorSetLayout = core.createDescriptorSetLayout(rayGenShaderProgram.getReflectedDescriptors().at(0));
-- 
GitLab