| 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 10000 |
| // Generated by (magic number): 80001 |
| // Id's are bound by 74 |
| |
| Capability Shader |
| 1: ExtInstImport "GLSL.std.450" |
| MemoryModel Logical GLSL450 |
| EntryPoint GLCompute 4 "main" |
| ExecutionMode 4 LocalSize 1 1 1 |
| Source ESSL 310 |
| 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 "dataSSB" |
| MemberName 61(dataSSB) 0 "f" |
| MemberName 61(dataSSB) 1 "n_frames_rendered" |
| Name 63 "result" |
| Name 71 "arrX" |
| Name 72 "arrY" |
| Name 73 "arrZ" |
| Decorate 20(counter) Binding 0 |
| Decorate 28(countArr) Binding 0 |
| MemberDecorate 61(dataSSB) 0 Offset 0 |
| MemberDecorate 61(dataSSB) 1 Offset 16 |
| Decorate 61(dataSSB) BufferBlock |
| Decorate 63(result) Binding 0 |
| 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 1024 |
| 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 Workgroup 29(int) |
| 37(atomi): 36(ptr) Variable Workgroup |
| 38: 29(int) Constant 3 |
| 41: TypePointer Workgroup 6(int) |
| 42(atomu): 41(ptr) Variable Workgroup |
| 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: TypeFloat 32 |
| 60: TypeVector 29(int) 4 |
| 61(dataSSB): TypeStruct 59(float) 60(ivec4) |
| 62: TypePointer Uniform 61(dataSSB) |
| 63(result): 62(ptr) Variable Uniform |
| 64: 29(int) Constant 1 |
| 65: 6(int) Constant 2 |
| 66: TypePointer Uniform 29(int) |
| 69: TypeArray 29(int) 14 |
| 70: TypePointer Private 69 |
| 71(arrX): 70(ptr) Variable Private |
| 72(arrY): 70(ptr) Variable Private |
| 73(arrZ): 70(ptr) Variable Private |
| 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 |
| 67: 66(ptr) AccessChain 63(result) 64 65 |
| 68: 29(int) AtomicIAdd 67 14 15 64 |
| Return |
| FunctionEnd |