Merge pull request #1363 from KhronosGroup/rt-gl-instance-id
Support gl_InstanceID in RT shaders.
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 547b9cd..103fd66 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 @@
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 547b9cd..103fd66 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 @@
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 107f975..44c814d 100644
--- a/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit
+++ b/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit
@@ -5,5 +5,5 @@
void main()
{
- payload = 1.0;
+ payload = 1.0 + float(gl_InstanceID);
}
diff --git a/spirv_glsl.cpp b/spirv_glsl.cpp
index 50cc79a..21525f5 100644
--- a/spirv_glsl.cpp
+++ b/spirv_glsl.cpp
@@ -6792,8 +6792,21 @@
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)