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):-stage compute -entry computeMain -target spirv 2 3// Tests pointer casting rules: Only explicit casting is allowed between pointer types. 4// All implicit conversions between pointer types should fail. 5int* processMemory; 6RWStructuredBuffer<int> output; 7 8[numthreads(1, 1, 1)] 9void computeMain(int id : SV_DispatchThreadID) 10{ 11 // regular address-of 12 // CHECK-NOT: ([[# @LINE+1]]): error 13 Ptr<int, Access::ReadWrite, AddressSpace::Device> rwPtr = processMemory + id.x; 14 // copying a pointer of T* syntax 15 // CHECK-NOT: ([[# @LINE+1]]): error 16 Ptr<int, Access::ReadWrite, AddressSpace::Device> copiedPtrOfLegacySyntax = processMemory; 17 // casting to Read ptr 18 // CHECK-NOT: ([[# @LINE+1]]): error 19 Ptr<int, Access::Read> rPtr = Ptr<int, Access::Read>(processMemory + id.x); 20 21 // casting to RW ptr from a R ptr 22 // CHECK-NOT: ([[# @LINE+1]]): error 23 Ptr<int, Access::ReadWrite, AddressSpace::Device> p1 = Ptr<int, Access::ReadWrite, AddressSpace::Device>(rPtr); 24 // casting to R ptr from a RW ptr 25 // CHECK-NOT: ([[# @LINE+1]]): error 26 Ptr<int, Access::Read, AddressSpace::Device> p2 = Ptr<int, Access::Read, AddressSpace::Device>(rwPtr); 27 // casting to ptr of different type 28 // CHECK-NOT: ([[# @LINE+1]]): error 29 Ptr<float, Access::ReadWrite, AddressSpace::Device> p3 = Ptr<float, Access::ReadWrite, AddressSpace::Device>(rPtr); 30 31 // Cannot implicit cast ptr's 32 // CHECK: ([[# @LINE+1]]): error 30019 33 Ptr<float, Access::ReadWrite, AddressSpace::Device> p4 = rPtr; 34 // cannot implcitly cast between different access qualifiers 35 // CHECK: ([[# @LINE+1]]): error 30019 36 Ptr<int, Access::Read> p5 = Ptr<int, Access::ReadWrite>(processMemory + id.x); 37 // cannot implcitly cast between different access qualifiers 38 // CHECK: ([[# @LINE+1]]): error 30019 39 Ptr<int, Access::ReadWrite> p6 = Ptr<int, Access::Read>(processMemory + id.x); 40 41 // TODO: Enable this when we allow user-defined group-shared address space, Issue #8173. 42 // Cannot cast between different address spaces. 43 // CHECK: ([[# @LINE+1]]): error 44 Ptr<float, Access::ReadWrite, AddressSpace::GroupShared> p7 = Ptr<float, Access::ReadWrite, AddressSpace::GroupShared>(rwPtr); 45 // CHECK: ([[# @LINE+1]]): error 46 Ptr<float, Access::ReadWrite, AddressSpace::GroupShared> p8 = Ptr<float, Access::ReadWrite, AddressSpace::GroupShared>(p1); 47 // CHECK: ([[# @LINE+1]]): error 48 Ptr<float, Access::ReadWrite, AddressSpace::GroupShared> p9 = rwPtr; 49 50 output[id] = *rwPtr; 51}