spv.atomic.comp | |
Warning, version 310 is not yet complete; most version-specific features are present, but some are missing. | |
Linked compute stage: | |
TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class? | |
// Module Version 99 | |
// Generated by (magic number): 51a00bb | |
// Id's are bound by 74 | |
Source ESSL 310 | |
Capability Shader | |
1: ExtInstImport "GLSL.std.450" | |
MemoryModel Logical GLSL450 | |
EntryPoint GLCompute 4 "main" | |
Name 4 "main" | |
Name 10 "func(au1;" | |
Name 9 "c" | |
Name 12 "atoms(" | |
Name 21 "counter" | |
Name 22 "param" | |
Name 25 "val" | |
Name 29 "countArr" | |
Name 38 "origi" | |
Name 40 "atomi" | |
Name 44 "origu" | |
Name 46 "atomu" | |
Name 48 "value" | |
Name 71 "arrX" | |
Name 72 "arrY" | |
Name 73 "arrZ" | |
Decorate 21(counter) Binding 0 | |
Decorate 29(countArr) Binding 0 | |
Decorate 71(arrX) NoStaticUse | |
Decorate 72(arrY) NoStaticUse | |
Decorate 73(arrZ) NoStaticUse | |
2: TypeVoid | |
3: TypeFunction 2 | |
6: TypeInt 32 0 | |
7: TypePointer Function 6(int) | |
8: TypeFunction 6(int) 7(ptr) | |
15: 6(int) Constant 1 | |
16: 6(int) Constant 0 | |
19: 6(int) Constant 256 | |
20: TypePointer UniformConstant 6(int) | |
21(counter): 20(ptr) Variable UniformConstant | |
26: 6(int) Constant 4 | |
27: TypeArray 6(int) 26 | |
28: TypePointer UniformConstant 27 | |
29(countArr): 28(ptr) Variable UniformConstant | |
30: TypeInt 32 1 | |
31: 30(int) Constant 2 | |
37: TypePointer Function 30(int) | |
39: TypePointer WorkgroupLocal 30(int) | |
40(atomi): 39(ptr) Variable WorkgroupLocal | |
42: 30(int) Constant 3 | |
45: TypePointer WorkgroupLocal 6(int) | |
46(atomu): 45(ptr) Variable WorkgroupLocal | |
48(value): 20(ptr) Variable UniformConstant | |
52: 6(int) Constant 7 | |
60: 30(int) Constant 7 | |
66: 6(int) Constant 10 | |
69: TypeArray 30(int) 15 | |
70: TypePointer PrivateGlobal 69 | |
71(arrX): 70(ptr) Variable PrivateGlobal | |
72(arrY): 70(ptr) Variable PrivateGlobal | |
73(arrZ): 70(ptr) Variable PrivateGlobal | |
4(main): 2 Function None 3 | |
5: Label | |
22(param): 7(ptr) Variable Function | |
25(val): 7(ptr) Variable Function | |
MemoryBarrier 15 19 | |
23: 6(int) Load 21(counter) | |
Store 22(param) 23 | |
24: 6(int) FunctionCall 10(func(au1;) 22(param) | |
32: 20(ptr) AccessChain 29(countArr) 31 | |
33: 6(int) Load 32 | |
34: 6(int) AtomicLoad 33 15 16 | |
Store 25(val) 34 | |
35: 6(int) Load 21(counter) | |
36: 6(int) AtomicIDecrement 35 15 16 | |
Return | |
FunctionEnd | |
10(func(au1;): 6(int) Function None 8 | |
9(c): 7(ptr) FunctionParameter | |
11: Label | |
14: 6(int) Load 9(c) | |
17: 6(int) AtomicIIncrement 14 15 16 | |
ReturnValue 17 | |
FunctionEnd | |
12(atoms(): 2 Function None 3 | |
13: Label | |
38(origi): 37(ptr) Variable Function | |
44(origu): 7(ptr) Variable Function | |
41: 30(int) Load 40(atomi) | |
43: 30(int) AtomicIAdd 41 15 16 42 | |
Store 38(origi) 43 | |
47: 6(int) Load 46(atomu) | |
49: 6(int) Load 48(value) | |
50: 6(int) AtomicAnd 47 15 16 49 | |
Store 44(origu) 50 | |
51: 6(int) Load 46(atomu) | |
53: 6(int) AtomicOr 51 15 16 52 | |
Store 44(origu) 53 | |
54: 6(int) Load 46(atomu) | |
55: 6(int) AtomicXor 54 15 16 52 | |
Store 44(origu) 55 | |
56: 6(int) Load 46(atomu) | |
57: 6(int) Load 48(value) | |
58: 6(int) AtomicSMin 56 15 16 57 | |
Store 44(origu) 58 | |
59: 30(int) Load 40(atomi) | |
61: 30(int) AtomicSMax 59 15 16 60 | |
Store 38(origi) 61 | |
62: 30(int) Load 40(atomi) | |
63: 30(int) Load 38(origi) | |
64: 30(int) AtomicExchange 62 15 16 63 | |
Store 38(origi) 64 | |
65: 6(int) Load 46(atomu) | |
67: 6(int) Load 48(value) | |
68: 6(int) AtomicCompareExchange 65 15 16 66 67 | |
Store 44(origu) 68 | |
Return | |
FunctionEnd |