Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2020-05-08 14:41:30 +0300
committerGitHub <noreply@github.com>2020-05-08 14:41:30 +0300
commitd638d2df9c8c4a862e0af829cf49cc6dcbb235a2 (patch)
treedc76cae5df3c4c49b97882a5ec61c424231526f0
parentb7823ec38921d69977cdefb570da740d85320236 (diff)
parent86380acf4dc8c234c83f99538aa99471b522d427 (diff)
Merge pull request #1363 from KhronosGroup/rt-gl-instance-id
Support gl_InstanceID in RT shaders.
-rw-r--r--reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk2
-rw-r--r--reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk2
-rw-r--r--shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit2
-rw-r--r--spirv_glsl.cpp17
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)