summaryrefslogtreecommitdiffstats
path: root/tests/compute/ray-tracing-inline.slang
blob: 47c6b6b792eab11390c92945733f919ccfc8ba15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -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;

//TEST_INPUT:set outputBuffer = out ubuffer(data=[0], stride=4)
RWStructuredBuffer<float> outputBuffer;

bool traceRayClosestHit(
    float3 rayOrigin,
    float3 rayDir,
    out float t)
{
    RayDesc ray;
    ray.Origin = rayOrigin;
    ray.TMin = 0.01f;
    ray.Direction = rayDir;
    ray.TMax = 1e4f;
    RayQuery<RAY_FLAG_NONE> q;
    let rayFlags = RAY_FLAG_NONE;

    q.TraceRayInline(
        scene,
        rayFlags,
        0xff,
        ray);

    q.Proceed();
    if(q.CommittedStatus() == COMMITTED_TRIANGLE_HIT)
    {
        t = q.CommittedRayT();
        //primitiveIndex = q.CommittedPrimitiveIndex();
        return true;
    }
    unused(t);
    return false;
}

[shader("compute")]
[numthreads(1,1,1)]
void computeMain(
    uint3 threadIdx : SV_DispatchThreadID)
{
    float t = 0.0;
    traceRayClosestHit(float3(0.1, 0.1, 0.0), float3(0,0,1), t);
    outputBuffer[threadIdx.x] = t;
}