yum-mirror/slang

Making it easier to work with shaders

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

ArielG-NVMove SPIRV global variables into a context variable (#4741)04e7327a2

master
957 B37 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target spirv -fvk-use-entrypoint-name -enable-experimental-passes
2
3// This test checks that spirv-opt is running SROA (scalar replacement of aggregates) to 
4// hoist out all member variables of a struct. If this sucsessfully runs, we should not see
5// any `OpCompositeConstruct` of our `%Data` struct.
6// Note: SROA will only run for 100 elements if spirv-opt does not manually set the spirv-opt `scalar-replacement` option
7
8//CHECK-NOT: OpCompositeConstruct %Data
9struct Data
10{
11    uint data0;
12    uint data1;
13    uint data2;
14};
15
16static Data globalVar;
17ByteAddressBuffer bab;
18RWStructuredBuffer<uint> outputBuffer;
19
20struct Payload_t
21{
22    uint dataOut;
23};
24
25[shader("anyhit")]
26void main1(inout Payload_t payload)
27{
28    globalVar = bab.Load<Data>(0);
29    payload.dataOut = globalVar.data0;
30}
31
32[shader("anyhit")]
33void main2(inout Payload_t payload)
34{
35    globalVar = bab.Load<Data>(0);
36    payload.dataOut = globalVar.data0;
37}