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)