yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
7758625d3
master
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}