yum-mirror/slang

Making it easier to work with shaders

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

Harsh Aggarwal (NVIDIA)Support for Payload Access Qualifiers (#3448) (#6595)ce87ab925

master
2.0 KiB83 linesraw
1// ray-tracing-test-shaders.slang
2
3struct [raypayload] RayPayload
4{
5    float4 color : read(caller) : write(caller, closesthit, miss);
6};
7
8uniform RWTexture2D resultTexture;
9uniform RaytracingAccelerationStructure sceneBVH;
10
11[shader("raygeneration")]
12void rayGenShaderA()
13{
14    int2 threadIdx = DispatchRaysIndex().xy;
15
16    float3 rayDir = float3(0, 0, 1);
17    float3 rayOrigin = 0;
18    rayOrigin.x = (threadIdx.x * 2) - 1;
19    rayOrigin.y = (threadIdx.y * 2) - 1;
20
21    // Trace the ray.
22    RayDesc ray;
23    ray.Origin = rayOrigin;
24    ray.Direction = rayDir;
25    ray.TMin = 0.001;
26    ray.TMax = 10000.0;
27    RayPayload payload = { float4(0, 0, 0, 0) };
28    TraceRay(sceneBVH, RAY_FLAG_NONE, ~0, 0, 0, 0, ray, payload);
29
30    resultTexture[threadIdx.xy] = payload.color;
31}
32
33[shader("raygeneration")]
34void rayGenShaderB()
35{
36    int2 threadIdx = DispatchRaysIndex().xy;
37
38    float3 rayDir = float3(0, 0, 1);
39    float3 rayOrigin = 0;
40    rayOrigin.x = (threadIdx.x * 2) - 1;
41    rayOrigin.y = (threadIdx.y * 2) - 1;
42
43    // Trace the ray.
44    RayDesc ray;
45    ray.Origin = rayOrigin;
46    ray.Direction = rayDir;
47    ray.TMin = 0.001;
48    ray.TMax = 10000.0;
49    RayPayload payload = { float4(0, 0, 0, 0) };
50    TraceRay(sceneBVH, RAY_FLAG_NONE, ~0, 1, 0, 1, ray, payload);
51
52    resultTexture[threadIdx.xy] = payload.color;
53}
54
55[shader("miss")]
56void missShaderA(inout RayPayload payload)
57{
58    payload.color = float4(1, 1, 1, 1);
59}
60
61[shader("miss")]
62void missShaderB(inout RayPayload payload)
63{
64    payload.color = float4(0, 0, 0, 1);
65}
66
67[shader("closesthit")]
68void closestHitShaderA(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
69{
70    uint primitiveIndex = PrimitiveIndex();
71    float4 color = float4(0, 0, 0, 1);
72    color[primitiveIndex] = 1;
73    payload.color = color;
74}
75
76[shader("closesthit")]
77void closestHitShaderB(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
78{
79    uint primitiveIndex = PrimitiveIndex();
80    float4 color = float4(1, 1, 1, 1);
81    color[primitiveIndex] = 0;
82    payload.color = color;
83}