From 86380acf4dc8c234c83f99538aa99471b522d427 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Fri, 8 May 2020 13:39:43 +0200 Subject: Support gl_InstanceID in RT shaders. --- .../vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk | 2 +- .../vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk | 2 +- shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit | 2 +- spirv_glsl.cpp | 17 +++++++++++++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk b/reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk index 547b9cd5..103fd66b 100644 --- a/reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk +++ b/reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk @@ -5,6 +5,6 @@ layout(location = 0) rayPayloadInNV float payload; void main() { - payload = 1.0; + payload = 1.0 + float(gl_InstanceID); } diff --git a/reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk b/reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk index 547b9cd5..103fd66b 100644 --- a/reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk +++ b/reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk @@ -5,6 +5,6 @@ layout(location = 0) rayPayloadInNV float payload; void main() { - payload = 1.0; + payload = 1.0 + float(gl_InstanceID); } diff --git a/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit b/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit index 107f9751..44c814d7 100644 --- a/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit +++ b/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit @@ -5,5 +5,5 @@ layout(location = 0) rayPayloadInNV float payload; void main() { - payload = 1.0; + payload = 1.0 + float(gl_InstanceID); } diff --git a/spirv_glsl.cpp b/spirv_glsl.cpp index 50cc79ab..21525f5a 100644 --- a/spirv_glsl.cpp +++ b/spirv_glsl.cpp @@ -6792,8 +6792,21 @@ string CompilerGLSL::builtin_to_glsl(BuiltIn builtin, StorageClass storage) return "gl_VertexID"; case BuiltInInstanceId: if (options.vulkan_semantics) - SPIRV_CROSS_THROW( - "Cannot implement gl_InstanceID in Vulkan GLSL. This shader was created with GL semantics."); + { + auto model = get_entry_point().model; + switch (model) + { + case spv::ExecutionModelIntersectionKHR: + case spv::ExecutionModelAnyHitKHR: + case spv::ExecutionModelClosestHitKHR: + // gl_InstanceID is allowed in these shaders. + break; + + default: + SPIRV_CROSS_THROW( + "Cannot implement gl_InstanceID in Vulkan GLSL. This shader was created with GL semantics."); + } + } return "gl_InstanceID"; case BuiltInVertexIndex: if (options.vulkan_semantics) -- cgit v1.2.3