summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs/ray-query-in-generic.slang77
-rw-r--r--tests/bugs/ray-query-in-generic.slang.expected.txt2
-rw-r--r--tests/expected-failure.txt1
3 files changed, 80 insertions, 0 deletions
diff --git a/tests/bugs/ray-query-in-generic.slang b/tests/bugs/ray-query-in-generic.slang
new file mode 100644
index 000000000..fdbafe8fc
--- /dev/null
+++ b/tests/bugs/ray-query-in-generic.slang
@@ -0,0 +1,77 @@
+
+//TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-query
+//TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
+
+//TEST_INPUT: set scene = AccelerationStructure
+uniform RaytracingAccelerationStructure scene;
+
+struct Ray
+{
+ float3 origin;
+ float tMin;
+ float3 dir;
+ float tMax;
+
+ /**
+ * Initializes a ray.
+ */
+ __init(float3 origin, float3 dir, float tMin = 0.f, float tMax = 10000.0)
+ {
+ this.origin = origin;
+ this.dir = dir;
+ this.tMin = tMin;
+ this.tMax = tMax;
+ }
+
+ /**
+ * Convert to DXR RayDesc.
+ */
+ RayDesc toRayDesc() { return { origin, tMin, dir, tMax }; }
+
+ /**
+ * Evaluate position on the ray.
+ * @param[in] t Ray parameter.
+ * @return Returns evaluated position.
+ */
+ float3 eval(float t) { return origin + t * dir; }
+};
+
+RaytracingAccelerationStructure sceneBVH;
+
+// TODO: remove force inline here will result in an error.
+[ForceInline]
+bool traceSceneVisibilityRayImpl<let Flags : int>(const bool useAlphaTest, inout RayQuery<Flags> q, const Ray ray, uint rayFlags, uint instanceInclusionMask)
+{
+ var rayDesc = ray.toRayDesc();
+ q.TraceRayInline(
+ scene,
+ rayFlags,
+ 0xff,
+ rayDesc);
+ q.Proceed();
+ if (q.CommittedStatus() == COMMITTED_TRIANGLE_HIT)
+ {
+ q.CommittedRayT();
+ return true;
+ }
+ return false;
+}
+
+bool traceSceneVisibilityRay<let UseAlphaTest : int>(const Ray ray, uint rayFlags, uint instanceInclusionMask)
+{
+ RayQuery rayQuery;
+ return traceSceneVisibilityRayImpl(false, rayQuery, ray, rayFlags, instanceInclusionMask);
+}
+
+//TEST_INPUT:set outputBuffer = out ubuffer(data=[0], stride=4)
+RWStructuredBuffer<float> outputBuffer;
+
+[shader("compute")]
+[numthreads(1, 1, 1)]
+void computeMain(
+ uint3 threadIdx: SV_DispatchThreadID)
+{
+ Ray ray = Ray(float3(0.1, 0.1, 0.0), float3(0, 0, 1), 0.1);
+ if (traceSceneVisibilityRay<0>(ray, 0, 0xffff))
+ outputBuffer[threadIdx.x] = 1.0;
+}
diff --git a/tests/bugs/ray-query-in-generic.slang.expected.txt b/tests/bugs/ray-query-in-generic.slang.expected.txt
new file mode 100644
index 000000000..d488b86d5
--- /dev/null
+++ b/tests/bugs/ray-query-in-generic.slang.expected.txt
@@ -0,0 +1,2 @@
+type: float
+1.000000
diff --git a/tests/expected-failure.txt b/tests/expected-failure.txt
index 98cf36724..effee0e2b 100644
--- a/tests/expected-failure.txt
+++ b/tests/expected-failure.txt
@@ -60,6 +60,7 @@ tests/bugs/matrix-reshape.slang.1 (vk)
tests/bugs/nested-switch.slang.1 (vk)
tests/bugs/parameter-block-load.slang (vk)
tests/bugs/parens-cast-issue.slang.1 (vk)
+tests/bugs/ray-query-in-generic.slang.1 (vk)
tests/bugs/string-inline.slang.4 (vk)
tests/bugs/vec-compare.slang.2 (vk)
tests/bugs/vec-init.slang.2 (vk)