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