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