yum-mirror/slang

Making it easier to work with shaders

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

ArielG-NV[CBP] Pointer frontend changes + groupshared pointer support (#7848)7758625d3

master
1.1 KiB55 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target spirv -entry main -stage compute -O0 -emit-spirv-directly
2
3
4struct PP
5{
6    int data;
7    int data2;
8}
9struct Data
10{
11    int data;
12    PP* pNext;
13};
14
15void funcThatTakesPointer(PP* p)
16{
17    p.data = 2;
18}
19int* funcThatReturnsPointer(PP* p)
20{
21    return &p.data;
22}
23
24void funcWithInOutParam(inout PP p)
25{
26    p.data = 0;
27}
28
29// CHECK: OpEntryPoint
30
31uniform Data* buffer;
32RWStructuredBuffer<int> output;
33void main(int id : SV_DispatchThreadID)
34{
35    output[0] = buffer[0].pNext.data;
36    let pData = __getAddress(buffer[0].pNext->data); // operator -> is also allowed on pointer types.
37    // CHECK: OpPtrAccessChain
38    int* pData1 = pData + 1;
39    *pData1 = 3;
40    *(int2*)pData = int2(1, 2);
41    pData1[-1] = 2;
42    buffer[0].pNext[1] = {5};
43    // CHECK: OpConvertPtrToU
44    // CHECK: OpINotEqual
45    if (pData1)
46    {
47        *(funcThatReturnsPointer(buffer[0].pNext)) = 4;
48    }
49    if (pData1 > pData)
50    {
51        funcThatTakesPointer(buffer[0].pNext);
52        output[1] = (*buffer[0].pNext).data;
53    }
54    funcWithInOutParam(*buffer[0].pNext);
55}