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
2.5 KiB51 linesraw
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}