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