yum-mirror/slang

Making it easier to work with shaders

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

Yong HeEnhance buffer load specialization pass to specialize past field extracts. (#8547)e4611e2e3

master
2.3 KiB94 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage raygeneration -entry main
2
3RaytracingAccelerationStructure as;
4
5RWStructuredBuffer<float> outputBuffer1;
6
7// addComplexity ensures the code does not optimize any `someInData1`
8void addComplexity1(inout float someInData1)
9{
10    someInData1 = outputBuffer1[1];
11}
12void addComplexity2(float dataIn)
13{
14    outputBuffer1[2] = dataIn;
15}
16
17void main()
18{
19    RayDesc ray;
20    ray.Origin = float3(0);
21    ray.TMin = 1e-6;
22    ray.Direction = float3(0,0,1);
23    ray.TMax = 100.0f;
24
25    // CHECK: RayPayload_t{{_[0-9]}} rayPayload{{_[0-9]}};
26    float someInData1 = 5.0f;
27    addComplexity1(someInData1);
28
29    // CHECK: rayPayload{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
30    // CHECK: TraceRay(
31    // CHECK: rayPayload{{.*}}.data{{.*}};
32    TraceRay(as,
33             1,
34             0xff,
35             0,
36             0,
37             2,
38             ray,
39             someInData1);
40    outputBuffer1[0] = outputBuffer1[0]+someInData1;
41
42    // CHECK: rayPayload{{_[0-9]}}.data{{_[0-9]}} = rayPayload{{.*}}.data{{.*}};
43    // CHECK: TraceMotionRay(
44    // CHECK: rayPayload{{.*}}.data{{.*}};
45    TraceMotionRay(as,
46            1,
47            0xff,
48            0,
49            0,
50            2,
51            ray,
52            0.0f,
53            someInData1);
54    outputBuffer1[0] = outputBuffer1[0]+someInData1;
55
56    // CHECK: rayPayload{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
57    // CHECK: NvTraceRayHitObject(
58    // CHECK: rayPayload{{.*}}.data{{.*}};
59    HitObject::TraceRay(as,
60             1,
61             0xff,
62             0,
63             0,
64             2,
65             ray,
66             someInData1);
67    outputBuffer1[0] = outputBuffer1[0]+someInData1;
68
69    // CHECK: rayPayload{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
70    // CHECK: TraceMotionRay(
71    // CHECK: rayPayload{{.*}}.data{{.*}};
72    HitObject::TraceMotionRay(as,
73            1,
74            0xff,
75            0,
76            0,
77            2,
78            ray,
79            0.0f,
80            someInData1);
81    outputBuffer1[0] = outputBuffer1[0]+someInData1;
82
83    // CHECK: rayPayload{{_[0-9]}}.data{{_[0-9]}} = {{.*}}
84    // CHECK: NvInvokeHitObject(
85    // CHECK: rayPayload{{.*}}.data{{.*}};
86    HitObject hitObject_HitOrMiss;
87    HitObject::Invoke(
88        as,
89        hitObject_HitOrMiss,
90        someInData1);
91    outputBuffer1[0] = outputBuffer1[0]+someInData1;
92
93    addComplexity2(someInData1);
94}