From 271ad33380cb8d2a146ed3f3ba2082b265bfabd9 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Wed, 20 May 2020 13:14:23 +0200 Subject: GLSL: Add some more focused RT test shaders. --- shaders/vulkan/rchit/hit_kind.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rchit/hit_t.nocompat.vk.rchit | 9 ++++ .../rchit/incoming_ray_flags.nocompat.vk.rchit | 9 ++++ .../rchit/instance_custom_id.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rchit/instance_id.nocompat.vk.rchit | 9 ++++ .../rchit/object_ray_direction.nocompat.vk.rchit | 9 ++++ .../rchit/object_ray_origin.nocompat.vk.rchit | 9 ++++ .../vulkan/rchit/object_to_world.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rchit/payloads.nocompat.vk.rchit | 19 ++++++++ .../vulkan/rchit/primitive_id.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rchit/ray_tmax.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rchit/ray_tmin.nocompat.vk.rchit | 9 ++++ .../rchit/world_ray_direction.nocompat.vk.rchit | 9 ++++ .../rchit/world_ray_origin.nocompat.vk.rchit | 9 ++++ .../vulkan/rchit/world_to_object.nocompat.vk.rchit | 9 ++++ shaders/vulkan/rgen/launch_id.nocompat.vk.rgen | 9 ++++ shaders/vulkan/rgen/launch_size.nocompat.vk.rgen | 9 ++++ shaders/vulkan/rgen/payloads.nocompat.vk.rgen | 51 ++++++++++++++++++++++ 18 files changed, 214 insertions(+) create mode 100644 shaders/vulkan/rchit/hit_kind.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/hit_t.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/incoming_ray_flags.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/instance_custom_id.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/instance_id.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/object_ray_direction.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/object_ray_origin.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/object_to_world.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/payloads.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/primitive_id.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/ray_tmax.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/ray_tmin.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/world_ray_direction.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/world_ray_origin.nocompat.vk.rchit create mode 100644 shaders/vulkan/rchit/world_to_object.nocompat.vk.rchit create mode 100644 shaders/vulkan/rgen/launch_id.nocompat.vk.rgen create mode 100644 shaders/vulkan/rgen/launch_size.nocompat.vk.rgen create mode 100644 shaders/vulkan/rgen/payloads.nocompat.vk.rgen (limited to 'shaders') diff --git a/shaders/vulkan/rchit/hit_kind.nocompat.vk.rchit b/shaders/vulkan/rchit/hit_kind.nocompat.vk.rchit new file mode 100644 index 00000000..39a088f4 --- /dev/null +++ b/shaders/vulkan/rchit/hit_kind.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV uint payload; + +void main() +{ + payload = gl_HitKindNV; +} diff --git a/shaders/vulkan/rchit/hit_t.nocompat.vk.rchit b/shaders/vulkan/rchit/hit_t.nocompat.vk.rchit new file mode 100644 index 00000000..16d6f06e --- /dev/null +++ b/shaders/vulkan/rchit/hit_t.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV float payload; + +void main() +{ + payload = gl_HitTNV; +} diff --git a/shaders/vulkan/rchit/incoming_ray_flags.nocompat.vk.rchit b/shaders/vulkan/rchit/incoming_ray_flags.nocompat.vk.rchit new file mode 100644 index 00000000..a1726d0e --- /dev/null +++ b/shaders/vulkan/rchit/incoming_ray_flags.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV uint payload; + +void main() +{ + payload = gl_IncomingRayFlagsNV; +} diff --git a/shaders/vulkan/rchit/instance_custom_id.nocompat.vk.rchit b/shaders/vulkan/rchit/instance_custom_id.nocompat.vk.rchit new file mode 100644 index 00000000..02ae3430 --- /dev/null +++ b/shaders/vulkan/rchit/instance_custom_id.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV uint payload; + +void main() +{ + payload = gl_InstanceCustomIndexNV; +} diff --git a/shaders/vulkan/rchit/instance_id.nocompat.vk.rchit b/shaders/vulkan/rchit/instance_id.nocompat.vk.rchit new file mode 100644 index 00000000..d6f99668 --- /dev/null +++ b/shaders/vulkan/rchit/instance_id.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV uint payload; + +void main() +{ + payload = gl_InstanceID; +} diff --git a/shaders/vulkan/rchit/object_ray_direction.nocompat.vk.rchit b/shaders/vulkan/rchit/object_ray_direction.nocompat.vk.rchit new file mode 100644 index 00000000..257175b5 --- /dev/null +++ b/shaders/vulkan/rchit/object_ray_direction.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_ObjectRayDirectionNV; +} diff --git a/shaders/vulkan/rchit/object_ray_origin.nocompat.vk.rchit b/shaders/vulkan/rchit/object_ray_origin.nocompat.vk.rchit new file mode 100644 index 00000000..8b71e7d9 --- /dev/null +++ b/shaders/vulkan/rchit/object_ray_origin.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_ObjectRayOriginNV; +} diff --git a/shaders/vulkan/rchit/object_to_world.nocompat.vk.rchit b/shaders/vulkan/rchit/object_to_world.nocompat.vk.rchit new file mode 100644 index 00000000..53b1406f --- /dev/null +++ b/shaders/vulkan/rchit/object_to_world.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_ObjectToWorldNV * vec4(payload, 1.0); +} diff --git a/shaders/vulkan/rchit/payloads.nocompat.vk.rchit b/shaders/vulkan/rchit/payloads.nocompat.vk.rchit new file mode 100644 index 00000000..61a86663 --- /dev/null +++ b/shaders/vulkan/rchit/payloads.nocompat.vk.rchit @@ -0,0 +1,19 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +struct Payload +{ + vec4 a; +}; + +layout(location = 0) rayPayloadInNV Payload payload; + +void write_incoming_payload_in_function() +{ + payload.a = vec4(10.0); +} + +void main() +{ + write_incoming_payload_in_function(); +} diff --git a/shaders/vulkan/rchit/primitive_id.nocompat.vk.rchit b/shaders/vulkan/rchit/primitive_id.nocompat.vk.rchit new file mode 100644 index 00000000..fdfa1ffa --- /dev/null +++ b/shaders/vulkan/rchit/primitive_id.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV uint payload; + +void main() +{ + payload = gl_PrimitiveID; +} diff --git a/shaders/vulkan/rchit/ray_tmax.nocompat.vk.rchit b/shaders/vulkan/rchit/ray_tmax.nocompat.vk.rchit new file mode 100644 index 00000000..c0e1387b --- /dev/null +++ b/shaders/vulkan/rchit/ray_tmax.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV float payload; + +void main() +{ + payload = gl_RayTmaxNV; +} diff --git a/shaders/vulkan/rchit/ray_tmin.nocompat.vk.rchit b/shaders/vulkan/rchit/ray_tmin.nocompat.vk.rchit new file mode 100644 index 00000000..896f4ffb --- /dev/null +++ b/shaders/vulkan/rchit/ray_tmin.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV float payload; + +void main() +{ + payload = gl_RayTminNV; +} diff --git a/shaders/vulkan/rchit/world_ray_direction.nocompat.vk.rchit b/shaders/vulkan/rchit/world_ray_direction.nocompat.vk.rchit new file mode 100644 index 00000000..43d14f28 --- /dev/null +++ b/shaders/vulkan/rchit/world_ray_direction.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_WorldRayDirectionNV; +} diff --git a/shaders/vulkan/rchit/world_ray_origin.nocompat.vk.rchit b/shaders/vulkan/rchit/world_ray_origin.nocompat.vk.rchit new file mode 100644 index 00000000..8b03e7de --- /dev/null +++ b/shaders/vulkan/rchit/world_ray_origin.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_WorldRayOriginNV; +} diff --git a/shaders/vulkan/rchit/world_to_object.nocompat.vk.rchit b/shaders/vulkan/rchit/world_to_object.nocompat.vk.rchit new file mode 100644 index 00000000..dc67c4a9 --- /dev/null +++ b/shaders/vulkan/rchit/world_to_object.nocompat.vk.rchit @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(location = 0) rayPayloadInNV vec3 payload; + +void main() +{ + payload = gl_WorldToObjectNV * vec4(payload, 1.0); +} diff --git a/shaders/vulkan/rgen/launch_id.nocompat.vk.rgen b/shaders/vulkan/rgen/launch_id.nocompat.vk.rgen new file mode 100644 index 00000000..b89792e3 --- /dev/null +++ b/shaders/vulkan/rgen/launch_id.nocompat.vk.rgen @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(set = 0, binding = 0) uniform writeonly image2D uImage; + +void main() +{ + imageStore(uImage, ivec2(gl_LaunchIDNV.xy), vec4(1.0)); +} diff --git a/shaders/vulkan/rgen/launch_size.nocompat.vk.rgen b/shaders/vulkan/rgen/launch_size.nocompat.vk.rgen new file mode 100644 index 00000000..1e1ff559 --- /dev/null +++ b/shaders/vulkan/rgen/launch_size.nocompat.vk.rgen @@ -0,0 +1,9 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(set = 0, binding = 0) uniform writeonly image2D uImage; + +void main() +{ + imageStore(uImage, ivec2(gl_LaunchSizeNV.xy) - 1, vec4(1.0)); +} diff --git a/shaders/vulkan/rgen/payloads.nocompat.vk.rgen b/shaders/vulkan/rgen/payloads.nocompat.vk.rgen new file mode 100644 index 00000000..333ccd1e --- /dev/null +++ b/shaders/vulkan/rgen/payloads.nocompat.vk.rgen @@ -0,0 +1,51 @@ +#version 460 +#extension GL_NV_ray_tracing : require + +layout(set = 0, binding = 0, rgba8) uniform image2D image; +layout(set = 0, binding = 1) uniform accelerationStructureNV as; + +struct Payload +{ + float a, b; +}; + +// Plain payload +layout(location = 0) rayPayloadNV float payload1; +// Struct payload +layout(location = 1) rayPayloadNV Payload payload2; + +#if 0 +// Not sure how this actually works yet. Do we get 4 different locations, or just 1 with 4 members? +layout(location = 2) rayPayloadNV Block +{ + float a, b; + Payload c, d; +}; +#endif + +vec4 trace_in_function() +{ + vec4 result = vec4(0.0); + // Test that we can write to a payload in a function. + vec3 origin = vec3(1.0, 0.0, 0.0); + vec3 direction = vec3(0.0, 1.0, 0.0); + traceNV(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 1); + result += payload2.a; + result += payload2.b; + return result; +} + +void main() +{ + vec3 origin = vec3(1.0, 0.0, 0.0); + vec3 direction = vec3(0.0, 1.0, 0.0); + traceNV(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 0); + vec4 result = vec4(payload1); + + result += trace_in_function(); + +#if 0 + traceNV(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 2); + result += a + b + c.a + c.b + d.a + d.b; +#endif +} -- cgit v1.2.3