summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cuda/lss-test.slang34
-rw-r--r--tests/hlsl-intrinsic/ray-tracing/rt-lss-intrinsics-chit.slang45
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang17
3 files changed, 96 insertions, 0 deletions
diff --git a/tests/cuda/lss-test.slang b/tests/cuda/lss-test.slang
new file mode 100644
index 000000000..4b0512cb1
--- /dev/null
+++ b/tests/cuda/lss-test.slang
@@ -0,0 +1,34 @@
+//TEST:SIMPLE(filecheck=CHECK): -target cuda
+//CHECK_: __global__ void __closesthit__closestHitShaderLss
+//CHECK: optixGetSpherePositionAndRadius
+//CHECK: optixObjectPositionsAndRadii
+//CHECK: optixIsSphereHit
+//CHECK: optixIsLSSHit
+
+struct RayPayload
+{
+ float4 color;
+ float2x4 lssData;
+ bool isSphere;
+ bool isLss;
+};
+
+[shader("closesthit")]
+void closestHitShaderLss(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
+{
+ // Test TraceRay API functions
+ payload.color = GetSpherePositionAndRadius();
+ payload.lssData = GetLssPositionsAndRadii();
+ payload.isSphere = IsSphereHit();
+ payload.isLss = IsLssHit();
+
+// TODO: This will be enabled once issue #6647 is completed.
+#if 0
+ // Test HitObject API functions
+ HitObject hitObj;
+ float4 sphereData = hitObj.GetSphereObjectPositionAndRadius();
+ float2x4 lssData = hitObj.GetLssObjectPositionsAndRadii();
+ bool isSphereHit = hitObj.IsSphereHit();
+ bool isLssHit = hitObj.IsLssHit();
+#endif
+} \ No newline at end of file
diff --git a/tests/hlsl-intrinsic/ray-tracing/rt-lss-intrinsics-chit.slang b/tests/hlsl-intrinsic/ray-tracing/rt-lss-intrinsics-chit.slang
new file mode 100644
index 000000000..b4d181c7d
--- /dev/null
+++ b/tests/hlsl-intrinsic/ray-tracing/rt-lss-intrinsics-chit.slang
@@ -0,0 +1,45 @@
+//TEST:SIMPLE(filecheck=HLSL): -target hlsl
+//TEST:SIMPLE(filecheck=SPIRV): -target spirv-asm
+//HLSL: NvRtSphereObjectPositionAndRadius
+//HLSL: NvRtLssObjectPositionsAndRadii
+//HLSL: NvRtIsSphereHit
+//HLSL: NvRtIsLssHit
+
+//SPIRV: HitSpherePositionNV
+//SPIRV: HitSphereRadiusNV
+//SPIRV: HitLSSPositionsNV
+//SPIRV: HitIsSphereNV
+//SPIRV: HitIsLSSNV
+
+// Hit object variants
+//SPIRV: OpHitObjectGetSpherePositionNV
+//SPIRV: OpHitObjectGetSphereRadiusNV
+//SPIRV: OpHitObjectGetLSSPositionsNV
+//SPIRV: OpHitObjectGetLSSRadiiNV
+//SPIRV: OpHitObjectIsSphereHitNV
+//SPIRV: OpHitObjectIsLSSHitNV
+
+struct RayPayload
+{
+ float4 color;
+ float2x4 lssData;
+ bool isSphere;
+ bool isLss;
+};
+
+[shader("closesthit")]
+void closestHitShaderLss(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
+{
+ // Test TraceRay API functions
+ payload.color = GetSpherePositionAndRadius();
+ payload.lssData = GetLssPositionsAndRadii();
+ payload.isSphere = IsSphereHit();
+ payload.isLss = IsLssHit();
+
+ // Test HitObject API functions
+ HitObject hitObj;
+ float4 sphereData = hitObj.GetSpherePositionAndRadius();
+ float2x4 lssData = hitObj.GetLssPositionsAndRadii();
+ bool isSphereHit = hitObj.IsSphereHit();
+ bool isLssHit = hitObj.IsLssHit();
+} \ No newline at end of file
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang
index 71c113934..be38915b1 100644
--- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang
@@ -32,6 +32,10 @@ uint calcValue(HitObject hit)
uint geometryIndex = hit.GetGeometryIndex();
uint primitiveIndex = hit.GetPrimitiveIndex();
int clusterID = hit.GetClusterID();
+ float4 posRadius = hit.GetSpherePositionAndRadius();
+ float2x4 positionsRadii = hit.GetLssPositionsAndRadii();
+ uint isSphereHit = uint(hit.IsSphereHit());
+ uint isLssHit = uint(hit.IsLssHit());
SomeValues objSomeValues = hit.GetAttributes<SomeValues>();
@@ -41,6 +45,19 @@ uint calcValue(HitObject hit)
r += primitiveIndex;
r += objSomeValues.a;
r += clusterID;
+
+ r += int(posRadius.x);
+ r += int(posRadius.y);
+ r += int(posRadius.z);
+ r += int(posRadius.w);
+
+ r += int(positionsRadii[0].x);
+ r += int(positionsRadii[0].y);
+ r += int(positionsRadii[0].z);
+ r += int(positionsRadii[0].w);
+
+ r += isSphereHit;
+ r += isLssHit;
}
return r;