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)