summaryrefslogtreecommitdiff
path: root/tests/vkray
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vkray')
-rw-r--r--tests/vkray/raygen-trace-ray-param-non-struct.slang94
-rw-r--r--tests/vkray/raygen-trace-ray-param-struct.slang76
-rw-r--r--tests/vkray/raygen.slang16
3 files changed, 182 insertions, 4 deletions
diff --git a/tests/vkray/raygen-trace-ray-param-non-struct.slang b/tests/vkray/raygen-trace-ray-param-non-struct.slang
new file mode 100644
index 000000000..c4451d941
--- /dev/null
+++ b/tests/vkray/raygen-trace-ray-param-non-struct.slang
@@ -0,0 +1,94 @@
+//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage raygeneration -entry main
+
+RaytracingAccelerationStructure as;
+
+RWStructuredBuffer<float> outputBuffer1;
+
+// addComplexity ensures the code does not optimize any `someInData1`
+void addComplexity1(inout float someInData1)
+{
+ someInData1 = outputBuffer1[1];
+}
+void addComplexity2(float dataIn)
+{
+ outputBuffer1[2] = dataIn;
+}
+
+void main()
+{
+ RayDesc ray;
+ ray.Origin = float3(0);
+ ray.TMin = 1e-6;
+ ray.Direction = float3(0,0,1);
+ ray.TMax = 100.0f;
+
+ // CHECK: ForceVarIntoStructTemporarily_t{{_[0-9]}} forceVarIntoStructTemporarily{{_[0-9]}};
+ float someInData1 = 5.0f;
+ addComplexity1(someInData1);
+
+ // CHECK: forceVarIntoStructTemporarily{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
+ // CHECK: TraceRay(
+ // CHECK: {{.*}} = forceVarIntoStructTemporarily{{.*}}.data{{.*}};
+ TraceRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1;
+
+ // CHECK: forceVarIntoStructTemporarily{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
+ // CHECK: TraceMotionRay(
+ // CHECK: {{.*}} = forceVarIntoStructTemporarily{{.*}}.data{{.*}};
+ TraceMotionRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ 0.0f,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1;
+
+ // CHECK: forceVarIntoStructTemporarily{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
+ // CHECK: NvTraceRayHitObject(
+ // CHECK: {{.*}} = forceVarIntoStructTemporarily{{.*}}.data{{.*}};
+ HitObject::TraceRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1;
+
+ // CHECK: forceVarIntoStructTemporarily{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
+ // CHECK: TraceMotionRay(
+ // CHECK: {{.*}} = forceVarIntoStructTemporarily{{.*}}.data{{.*}};
+ HitObject::TraceMotionRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ 0.0f,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1;
+
+ // CHECK: forceVarIntoStructTemporarily{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
+ // CHECK: NvInvokeHitObject(
+ // CHECK: {{.*}} = forceVarIntoStructTemporarily{{.*}}.data{{.*}};
+ HitObject hitObject_HitOrMiss;
+ HitObject::Invoke(
+ as,
+ hitObject_HitOrMiss,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1;
+
+ addComplexity2(someInData1);
+} \ No newline at end of file
diff --git a/tests/vkray/raygen-trace-ray-param-struct.slang b/tests/vkray/raygen-trace-ray-param-struct.slang
new file mode 100644
index 000000000..d9a6d134a
--- /dev/null
+++ b/tests/vkray/raygen-trace-ray-param-struct.slang
@@ -0,0 +1,76 @@
+//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage raygeneration -entry main
+
+RaytracingAccelerationStructure as;
+
+struct testStruct
+{
+ int data;
+}
+
+RWStructuredBuffer<int> outputBuffer1;
+
+void main()
+{
+ RayDesc ray;
+ ray.Origin = float3(0);
+ ray.TMin = 1e-6;
+ ray.Direction = float3(0,0,1);
+ ray.TMax = 100.0f;
+
+ testStruct someInData1;
+ someInData1.data = 5;
+
+ // CHECK: TraceRay(
+ TraceRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1.data;
+
+ // CHECK: TraceMotionRay(
+ TraceMotionRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ 0.0f,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1.data;
+
+ // CHECK: NvTraceRayHitObject(
+ HitObject::TraceRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1.data;
+
+ // CHECK: TraceMotionRay(
+ HitObject::TraceMotionRay(as,
+ 1,
+ 0xff,
+ 0,
+ 0,
+ 2,
+ ray,
+ 0.0f,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1.data;
+
+ // CHECK: NvInvokeHitObject(
+ HitObject hitObject_HitOrMiss;
+ HitObject::Invoke(
+ as,
+ hitObject_HitOrMiss,
+ someInData1);
+ outputBuffer1[0] = outputBuffer1[0]+someInData1.data;
+} \ No newline at end of file
diff --git a/tests/vkray/raygen.slang b/tests/vkray/raygen.slang
index 18ac74d4b..d63b3a668 100644
--- a/tests/vkray/raygen.slang
+++ b/tests/vkray/raygen.slang
@@ -1,5 +1,6 @@
-//TEST:CROSS_COMPILE: -profile glsl_460+GL_EXT_ray_tracing -stage raygeneration -entry main -target spirv-assembly
-//TEST:SIMPLE(filecheck=CHECK): -emit-spirv-directly -stage raygeneration -entry main -target spirv-assembly
+//TEST:SIMPLE(filecheck=CHECK_SPV): -emit-spirv-directly -stage raygeneration -entry main -target spirv-assembly
+//TEST:SIMPLE(filecheck=CHECK_HLSL): -stage raygeneration -entry main -target hlsl
+//TEST:SIMPLE(filecheck=CHECK_GLSL): -stage raygeneration -entry main -target glsl
#define TRACING_EPSILON 1e-6
@@ -116,5 +117,12 @@ void main()
outputImage[int2(gl_LaunchIDNV.xy)] = float4(color, 1.0);
}
-// CHECK: %{{.*}} = OpVariable %_ptr_RayPayload{{(NV)?}}_ReflectionRay{{.*}} RayPayload
-// CHECK: OpTraceRayKHR
+// CHECK_SPV: %{{.*}} = OpVariable %_ptr_RayPayload{{(NV)?}}_ReflectionRay{{.*}} RayPayload
+// CHECK_SPV: OpTraceRayKHR
+// CHECK_SPV: OpTraceRayKHR
+
+// CHECK_HLSL: TraceRay
+// CHECK_HLSL: TraceRay
+
+// CHECK_GLSL: traceRayEXT(
+// CHECK_GLSL: traceRayEXT( \ No newline at end of file