yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
2.0 KiB78 linesraw
1
2//TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -profile sm_6_5 -render-feature ray-query
3//TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
4
5//TEST_INPUT: set scene = AccelerationStructure
6uniform RaytracingAccelerationStructure scene;
7
8struct Ray
9{
10    float3 origin;
11    float tMin;
12    float3 dir;
13    float tMax;
14
15    /**
16     * Initializes a ray.
17     */
18    __init(float3 origin, float3 dir, float tMin = 0.f, float tMax = 10000.0)
19    {
20        this.origin = origin;
21        this.dir = dir;
22        this.tMin = tMin;
23        this.tMax = tMax;
24    }
25
26    /**
27     * Convert to DXR RayDesc.
28     */
29    RayDesc toRayDesc() { return { origin, tMin, dir, tMax }; }
30
31    /**
32     * Evaluate position on the ray.
33     * @param[in] t Ray parameter.
34     * @return Returns evaluated position.
35     */
36    float3 eval(float t) { return origin + t * dir; }
37};
38
39uint getCommittedStatus<let Flags : int>(RayQuery<Flags> q)
40{
41    return q.CommittedStatus();
42}
43
44bool traceSceneVisibilityRayImpl<let Flags : int>(const bool useAlphaTest, inout RayQuery<Flags> q, const Ray ray, uint rayFlags, uint instanceInclusionMask)
45{
46    var rayDesc = ray.toRayDesc();
47    q.TraceRayInline(
48        scene,
49        rayFlags,
50        0xff,
51        rayDesc);
52    q.Proceed();
53    if (getCommittedStatus(q) == COMMITTED_TRIANGLE_HIT)
54    {
55        q.CommittedRayT();
56        return true;
57    }
58    return false;
59}
60
61bool traceSceneVisibilityRay<let UseAlphaTest : int>(const Ray ray, uint rayFlags, uint instanceInclusionMask)
62{
63    RayQuery rayQuery;
64    return traceSceneVisibilityRayImpl(false, rayQuery, ray, rayFlags, instanceInclusionMask);
65}
66
67//TEST_INPUT:set outputBuffer = out ubuffer(data=[0], stride=4)
68RWStructuredBuffer<float> outputBuffer;
69
70[shader("compute")]
71[numthreads(1, 1, 1)]
72void computeMain(
73    uint3 threadIdx: SV_DispatchThreadID)
74{
75    Ray ray = Ray(float3(0.1, 0.1, 0.0), float3(0, 0, 1), 0.1);
76    if (traceSceneVisibilityRay<0>(ray, 0, 0xffff))
77        outputBuffer[threadIdx.x] = 1.0;
78}