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 64 | |
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 20 "counter" | |
Name 21 "param" | |
Name 24 "val" | |
Name 28 "countArr" | |
Name 35 "origi" | |
Name 37 "atomi" | |
Name 40 "origu" | |
Name 42 "atomu" | |
Name 44 "value" | |
Name 61 "arrX" | |
Name 62 "arrY" | |
Name 63 "arrZ" | |
Decorate 20(counter) Binding 0 | |
Decorate 28(countArr) Binding 0 | |
Decorate 61(arrX) NoStaticUse | |
Decorate 62(arrY) NoStaticUse | |
Decorate 63(arrZ) NoStaticUse | |
2: TypeVoid | |
3: TypeFunction 2 | |
6: TypeInt 32 0 | |
7: TypePointer Function 6(int) | |
8: TypeFunction 6(int) 7(ptr) | |
14: 6(int) Constant 1 | |
15: 6(int) Constant 0 | |
18: 6(int) Constant 256 | |
19: TypePointer AtomicCounter 6(int) | |
20(counter): 19(ptr) Variable AtomicCounter | |
25: 6(int) Constant 4 | |
26: TypeArray 6(int) 25 | |
27: TypePointer AtomicCounter 26 | |
28(countArr): 27(ptr) Variable AtomicCounter | |
29: TypeInt 32 1 | |
30: 29(int) Constant 2 | |
34: TypePointer Function 29(int) | |
36: TypePointer WorkgroupLocal 29(int) | |
37(atomi): 36(ptr) Variable WorkgroupLocal | |
38: 29(int) Constant 3 | |
41: TypePointer WorkgroupLocal 6(int) | |
42(atomu): 41(ptr) Variable WorkgroupLocal | |
43: TypePointer UniformConstant 6(int) | |
44(value): 43(ptr) Variable UniformConstant | |
47: 6(int) Constant 7 | |
52: 29(int) Constant 7 | |
56: 6(int) Constant 10 | |
59: TypeArray 29(int) 14 | |
60: TypePointer PrivateGlobal 59 | |
61(arrX): 60(ptr) Variable PrivateGlobal | |
62(arrY): 60(ptr) Variable PrivateGlobal | |
63(arrZ): 60(ptr) Variable PrivateGlobal | |
4(main): 2 Function None 3 | |
5: Label | |
21(param): 7(ptr) Variable Function | |
24(val): 7(ptr) Variable Function | |
MemoryBarrier 14 18 | |
22: 6(int) Load 20(counter) | |
Store 21(param) 22 | |
23: 6(int) FunctionCall 10(func(au1;) 21(param) | |
31: 19(ptr) AccessChain 28(countArr) 30 | |
32: 6(int) AtomicLoad 31 14 15 | |
Store 24(val) 32 | |
33: 6(int) AtomicIDecrement 20(counter) 14 15 | |
Return | |
FunctionEnd | |
10(func(au1;): 6(int) Function None 8 | |
9(c): 7(ptr) FunctionParameter | |
11: Label | |
16: 6(int) AtomicIIncrement 9(c) 14 15 | |
ReturnValue 16 | |
FunctionEnd | |
12(atoms(): 2 Function None 3 | |
13: Label | |
35(origi): 34(ptr) Variable Function | |
40(origu): 7(ptr) Variable Function | |
39: 29(int) AtomicIAdd 37(atomi) 14 15 38 | |
Store 35(origi) 39 | |
45: 6(int) Load 44(value) | |
46: 6(int) AtomicAnd 42(atomu) 14 15 45 | |
Store 40(origu) 46 | |
48: 6(int) AtomicOr 42(atomu) 14 15 47 | |
Store 40(origu) 48 | |
49: 6(int) AtomicXor 42(atomu) 14 15 47 | |
Store 40(origu) 49 | |
50: 6(int) Load 44(value) | |
51: 6(int) AtomicUMin 42(atomu) 14 15 50 | |
Store 40(origu) 51 | |
53: 29(int) AtomicSMax 37(atomi) 14 15 52 | |
Store 35(origi) 53 | |
54: 29(int) Load 35(origi) | |
55: 29(int) AtomicExchange 37(atomi) 14 15 54 | |
Store 35(origi) 55 | |
57: 6(int) Load 44(value) | |
58: 6(int) AtomicCompareExchange 42(atomu) 14 15 15 57 56 | |
Store 40(origu) 58 | |
Return | |
FunctionEnd |