diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-05-08 14:41:30 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-08 14:41:30 +0300 |
commit | d638d2df9c8c4a862e0af829cf49cc6dcbb235a2 (patch) | |
tree | dc76cae5df3c4c49b97882a5ec61c424231526f0 | |
parent | b7823ec38921d69977cdefb570da740d85320236 (diff) | |
parent | 86380acf4dc8c234c83f99538aa99471b522d427 (diff) |
Merge pull request #1363 from KhronosGroup/rt-gl-instance-id
Support gl_InstanceID in RT shaders.
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) |