From 66fb0bd9df04f3eba3bcccbf14f7394ec2fa05c7 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Fri, 22 Jan 2021 11:22:10 +0100 Subject: [PATCH] GLSL: Handle tracing against incoming payload/callable. --- .../terminators.khr.spv14.nocompat.vk.rahit.vk | 2 +- ...incoming-callable.khr.spv14.nocompat.vk.rcall.vk | 10 ++++++++++ ...ng_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk | 11 +++++++++++ .../terminators.khr.spv14.nocompat.vk.rahit.vk | 2 +- ...incoming-callable.khr.spv14.nocompat.vk.rcall.vk | 10 ++++++++++ ...ng_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk | 13 +++++++++++++ .../incoming-callable.khr.spv14.nocompat.vk.rcall | 9 +++++++++ ...acing_trace_incoming.khr.spv14.nocompat.vk.rmiss | 12 ++++++++++++ spirv_glsl.cpp | 4 +++- 9 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 reference/opt/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk create mode 100644 reference/opt/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk create mode 100644 reference/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk create mode 100644 reference/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk create mode 100644 shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall create mode 100644 shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss diff --git a/reference/opt/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk b/reference/opt/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk index a7f63a50..2f7fbc1d 100644 --- a/reference/opt/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk +++ b/reference/opt/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk @@ -1,7 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : require -rayPayloadInEXT float payload; +layout(location = 0) rayPayloadInEXT float payload; void main() { diff --git a/reference/opt/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk b/reference/opt/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk new file mode 100644 index 00000000..5adfac16 --- /dev/null +++ b/reference/opt/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk @@ -0,0 +1,10 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(location = 0) callableDataInEXT float c; + +void main() +{ + executeCallableEXT(10u, 0); +} + diff --git a/reference/opt/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk b/reference/opt/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk new file mode 100644 index 00000000..7e791266 --- /dev/null +++ b/reference/opt/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk @@ -0,0 +1,11 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(set = 0, binding = 0) uniform accelerationStructureEXT as; +layout(location = 0) rayPayloadInEXT float p; + +void main() +{ + traceRayEXT(as, 0u, 255u, 0u, 1u, 0u, vec3(float(gl_LaunchIDEXT.x) / float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y) / float(gl_LaunchSizeEXT.y), 1.0), 0.0, vec3(0.0, 0.0, -1.0), 1000.0, 0); +} + diff --git a/reference/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk b/reference/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk index 37252f31..4cb6bf8d 100644 --- a/reference/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk +++ b/reference/shaders/vulkan/rahit/terminators.khr.spv14.nocompat.vk.rahit.vk @@ -1,7 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : require -rayPayloadInEXT float payload; +layout(location = 0) rayPayloadInEXT float payload; void in_func() { diff --git a/reference/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk b/reference/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk new file mode 100644 index 00000000..5adfac16 --- /dev/null +++ b/reference/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall.vk @@ -0,0 +1,10 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(location = 0) callableDataInEXT float c; + +void main() +{ + executeCallableEXT(10u, 0); +} + diff --git a/reference/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk b/reference/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk new file mode 100644 index 00000000..696c998c --- /dev/null +++ b/reference/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss.vk @@ -0,0 +1,13 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(set = 0, binding = 0) uniform accelerationStructureEXT as; +layout(location = 0) rayPayloadInEXT float p; + +void main() +{ + vec3 origin = vec3(float(gl_LaunchIDEXT.x) / float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y) / float(gl_LaunchSizeEXT.y), 1.0); + vec3 direction = vec3(0.0, 0.0, -1.0); + traceRayEXT(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 0); +} + diff --git a/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall b/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall new file mode 100644 index 00000000..53c594b6 --- /dev/null +++ b/shaders/vulkan/rcall/incoming-callable.khr.spv14.nocompat.vk.rcall @@ -0,0 +1,9 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(location = 4) callableDataInEXT float c; + +void main() +{ + executeCallableEXT(10, 4); +} diff --git a/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss b/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss new file mode 100644 index 00000000..265a8f8b --- /dev/null +++ b/shaders/vulkan/rmiss/ray_tracing_trace_incoming.khr.spv14.nocompat.vk.rmiss @@ -0,0 +1,12 @@ +#version 460 +#extension GL_EXT_ray_tracing : require + +layout(set = 0, binding = 0) uniform accelerationStructureEXT as; +layout(location = 3) rayPayloadInEXT float p; + +void main() +{ + vec3 origin = vec3(float(gl_LaunchIDEXT.x) / float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y) / float(gl_LaunchSizeEXT.y), 1.0); + vec3 direction = vec3(0.0, 0.0, -1.0); + traceRayEXT(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 3); +} diff --git a/spirv_glsl.cpp b/spirv_glsl.cpp index 0b93413a..150b069d 100644 --- a/spirv_glsl.cpp +++ b/spirv_glsl.cpp @@ -538,7 +538,9 @@ void CompilerGLSL::ray_tracing_khr_fixup_locations() { uint32_t location = 0; ir.for_each_typed_id([&](uint32_t, SPIRVariable &var) { - if (var.storage != StorageClassRayPayloadKHR && var.storage != StorageClassCallableDataKHR) + // Incoming payload storage can also be used for tracing. + if (var.storage != StorageClassRayPayloadKHR && var.storage != StorageClassCallableDataKHR && + var.storage != StorageClassIncomingRayPayloadKHR && var.storage != StorageClassIncomingCallableDataKHR) return; if (!interface_variable_exists_in_entry_point(var.self)) return;