From 86221ff4757ee504307f3537b34acb05117ce272 Mon Sep 17 00:00:00 2001 From: Alexey Panteleev Date: Wed, 6 Apr 2022 19:07:30 -0700 Subject: Fixed the mapping of the ray tracing instance functions to GLSL (#2177) * Fixed the mapping of the *InstanceID() and *InstanceIndex() functions to GLSL. * Fixed and somewhat improved the vkray/closesthit test. --- source/slang/hlsl.meta.slang | 14 +++++++------- tests/vkray/closesthit.slang | 2 +- tests/vkray/closesthit.slang.glsl | 6 ++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index d3d77b804..971efcfcc 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -4736,12 +4736,12 @@ uint RayFlags(); // 10.4.3 - Primitive/Object Space System Values -__target_intrinsic(GL_NV_ray_tracing, "(gl_InstanceCustomIndexNV)") -__target_intrinsic(GL_EXT_ray_tracing, "(gl_InstanceCustomIndexEXT)") +__target_intrinsic(__glslRayTracing, "(gl_InstanceID)") __target_intrinsic(cuda, "optixGetInstanceIndex") uint InstanceIndex(); -__target_intrinsic(__glslRayTracing, "(gl_InstanceID)") +__target_intrinsic(GL_NV_ray_tracing, "(gl_InstanceCustomIndexNV)") +__target_intrinsic(GL_EXT_ray_tracing, "(gl_InstanceCustomIndexEXT)") __target_intrinsic(cuda, "optixGetInstanceId") uint InstanceID(); @@ -5148,12 +5148,12 @@ struct RayQuery __glsl_version(460) float4x3 CandidateWorldToObject4x3(); - __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, false)") + __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) uint CandidateInstanceIndex(); - __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, false)") + __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, false)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) uint CandidateInstanceID(); @@ -5255,12 +5255,12 @@ struct RayQuery __glsl_version(460) float CommittedRayT(); - __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, true)") + __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) uint CommittedInstanceIndex(); - __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceIdEXT($0, true)") + __target_intrinsic(glsl, "rayQueryGetIntersectionInstanceCustomIndexEXT($0, true)") __glsl_extension(GL_EXT_ray_query) __glsl_version(460) uint CommittedInstanceID(); diff --git a/tests/vkray/closesthit.slang b/tests/vkray/closesthit.slang index 28c759175..b1b73c94e 100644 --- a/tests/vkray/closesthit.slang +++ b/tests/vkray/closesthit.slang @@ -18,7 +18,7 @@ void main( BuiltInTriangleIntersectionAttributes attributes, in out ReflectionRay ioPayload) { - uint materialID = InstanceIndex() + uint materialID = (InstanceIndex() << 1) + InstanceID() + PrimitiveIndex() + HitKind() diff --git a/tests/vkray/closesthit.slang.glsl b/tests/vkray/closesthit.slang.glsl index e3af26a04..b5daef909 100644 --- a/tests/vkray/closesthit.slang.glsl +++ b/tests/vkray/closesthit.slang.glsl @@ -48,10 +48,12 @@ rayPayloadInNV ReflectionRay_0 tmp_payload; void main() { - uint tmp_customidx = gl_InstanceCustomIndexNV; uint tmp_instanceid = gl_InstanceID; + uint tmp_shift_0 = tmp_instanceid << 1; + + uint tmp_customidx = gl_InstanceCustomIndexNV; - uint tmp_add_0 = tmp_customidx + tmp_instanceid; + uint tmp_add_0 = tmp_shift_0 + tmp_customidx; uint tmp_primid = gl_PrimitiveID; uint tmp_add_1 = tmp_add_0 + tmp_primid; -- cgit v1.2.3