xref: /aosp_15_r20/external/skia/resources/sksl/errors/InvalidAtomicDeclarations.compute (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1workgroup atomicUint wgAtomic;           // valid
2workgroup atomic_uint wgAtomicArray[2];  // valid
3
4atomic_uint globalAtomic;         // invalid
5atomicUint globalAtomicArray[2];  // invalid
6
7struct S {
8    atomicUint structMemberAtomic;           // valid
9    atomic_uint structMemberAtomicArray[2];  // valid
10};
11
12struct NestedS {
13    S nestedStructWithAtomicMember;  // valid
14};
15
16workgroup S wgStructWithAtomicMember;              // valid
17workgroup S wgStructWithAtomicMemberArray[2];      // valid
18workgroup NestedS wgStructWithNestedAtomicMember;  // valid
19
20S globalStructWithAtomicMember;              // invalid
21S globalStructWithAtomicMemberArray[2];      // invalid
22NestedS globalStructWithNestedAtomicMember;  // invalid
23
24layout(metal, binding = 0) buffer ssbo {
25    atomic_uint ssboAtomic;          // valid
26    atomicUint ssboAtomicArray[2];   // valid
27    S ssboStructWithAtomicMember;         // valid
28    S ssboStructWithAtomicMemberArray[2]; // valid
29};
30
31layout(metal, binding = 1) uniform ubo1 {
32    atomicUint uboAtomic;                     // invalid
33};
34layout(metal, binding = 2) uniform ubo2 {
35    atomic_uint uboAtomicArray[2];            // invalid
36};
37layout(metal, binding = 3) uniform ubo3 {
38    S uboStructWithAtomicMember;              // invalid
39};
40layout(metal, binding = 4) uniform ubo4 {
41    S uboStructWithAtomicMemberArray[2];      // invalid
42};
43layout(metal, binding = 5) uniform ubo5 {
44    NestedS uboStructWithNestedAtomicMember;  // invalid
45};
46
47layout(metal, binding = 6) readonly buffer roSsbo1 {
48    atomic_uint readonlySsboAtomic;                    // invalid
49};
50layout(metal, binding = 7) readonly buffer roSsbo2 {
51    atomicUint readonlySsboAtomicArray[2];             // invalid
52};
53layout(metal, binding = 8) readonly buffer roSsbo3 {
54    S readonlySsboStructWithAtomicMember;              // invalid
55};
56layout(metal, binding = 9) readonly buffer roSsbo4 {
57    S readonlySsboStructWithAtomicMemberArray[2];      // invalid
58};
59layout(metal, binding = 10) readonly buffer roSsbo5 {
60    NestedS readonlySsboStructWithNestedAtomicMember;  // invalid
61};
62
63void main() {
64    atomicUint localAtomic;                 // invalid
65    atomic_uint localAtomicArray[2];        // invalid
66    S localStructWithAtomicMember;          // invalid
67    S localStructWithAtomicMemberArray[2];  // invalid
68}
69
70/*%%*
71atomics are only permitted in workgroup variables and writable storage blocks
72atomics are only permitted in workgroup variables and writable storage blocks
73atomics are only permitted in workgroup variables and writable storage blocks
74atomics are only permitted in workgroup variables and writable storage blocks
75atomics are only permitted in workgroup variables and writable storage blocks
76variables of type 'ubo1' may not be uniform
77caused by:
78atomics are only permitted in workgroup variables and writable storage blocks
79variables of type 'ubo2' may not be uniform
80caused by:
81atomics are only permitted in workgroup variables and writable storage blocks
82variables of type 'ubo3' may not be uniform
83caused by:
84atomics are only permitted in workgroup variables and writable storage blocks
85variables of type 'ubo4' may not be uniform
86caused by:
87atomics are only permitted in workgroup variables and writable storage blocks
88variables of type 'ubo5' may not be uniform
89caused by:
90atomics are only permitted in workgroup variables and writable storage blocks
91atomics are only permitted in workgroup variables and writable storage blocks
92atomics are only permitted in workgroup variables and writable storage blocks
93atomics are only permitted in workgroup variables and writable storage blocks
94atomics are only permitted in workgroup variables and writable storage blocks
95atomics are only permitted in workgroup variables and writable storage blocks
96atomics are only permitted in workgroup variables and writable storage blocks
97atomics are only permitted in workgroup variables and writable storage blocks
98atomics are only permitted in workgroup variables and writable storage blocks
99atomics are only permitted in workgroup variables and writable storage blocks
100*%%*/
101