spv.310.comp
// Module Version 10000
// Generated by (magic number): 80006
// Id's are bound by 71

                              Capability Shader
                              Capability DeviceGroup
                              Extension  "SPV_KHR_device_group"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main" 53 64
                              ExecutionMode 4 LocalSize 16 32 4
                              Source ESSL 310
                              SourceExtension  "GL_EXT_device_group"
                              Name 4  "main"
                              Name 12  "outb"
                              MemberName 12(outb) 0  "f"
                              MemberName 12(outb) 1  "g"
                              MemberName 12(outb) 2  "h"
                              MemberName 12(outb) 3  "uns"
                              Name 14  "outbname"
                              Name 18  "s"
                              Name 23  "outbna"
                              MemberName 23(outbna) 0  "k"
                              MemberName 23(outbna) 1  "na"
                              Name 25  "outbnamena"
                              Name 42  "i"
                              Name 48  "outs"
                              MemberName 48(outs) 0  "s"
                              MemberName 48(outs) 1  "va"
                              Name 50  "outnames"
                              Name 53  "gl_LocalInvocationID"
                              Name 64  "gl_DeviceIndex"
                              Decorate 11 ArrayStride 16
                              MemberDecorate 12(outb) 0 Offset 0
                              MemberDecorate 12(outb) 1 Offset 4
                              MemberDecorate 12(outb) 2 Offset 8
                              MemberDecorate 12(outb) 3 Offset 16
                              Decorate 12(outb) BufferBlock
                              Decorate 14(outbname) DescriptorSet 0
                              MemberDecorate 23(outbna) 0 Offset 0
                              MemberDecorate 23(outbna) 1 Offset 16
                              Decorate 23(outbna) BufferBlock
                              Decorate 25(outbnamena) DescriptorSet 0
                              Decorate 47 ArrayStride 16
                              MemberDecorate 48(outs) 0 Offset 0
                              MemberDecorate 48(outs) 1 Offset 16
                              Decorate 48(outs) BufferBlock
                              Decorate 50(outnames) DescriptorSet 0
                              Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
                              Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex
                              Decorate 70 BuiltIn WorkgroupSize
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:      6(int) Constant 2
               8:      6(int) Constant 264
               9:             TypeFloat 32
              10:             TypeVector 9(float) 3
              11:             TypeRuntimeArray 10(fvec3)
        12(outb):             TypeStruct 9(float) 9(float) 9(float) 11
              13:             TypePointer Uniform 12(outb)
    14(outbname):     13(ptr) Variable Uniform
              15:             TypeInt 32 1
              16:     15(int) Constant 0
              17:             TypePointer Workgroup 9(float)
           18(s):     17(ptr) Variable Workgroup
              20:             TypePointer Uniform 9(float)
              22:             TypeVector 9(float) 4
      23(outbna):             TypeStruct 15(int) 22(fvec4)
              24:             TypePointer Uniform 23(outbna)
  25(outbnamena):     24(ptr) Variable Uniform
              26:     15(int) Constant 1
              29:             TypePointer Uniform 22(fvec4)
              31:     15(int) Constant 3
              32:     15(int) Constant 18
              33:      6(int) Constant 0
              36:     15(int) Constant 17
              37:    9(float) Constant 1077936128
              38:   10(fvec3) ConstantComposite 37 37 37
              39:             TypePointer Uniform 10(fvec3)
              41:             TypePointer Workgroup 15(int)
           42(i):     41(ptr) Variable Workgroup
              47:             TypeRuntimeArray 22(fvec4)
        48(outs):             TypeStruct 15(int) 47
              49:             TypePointer Uniform 48(outs)
    50(outnames):     49(ptr) Variable Uniform
              51:             TypeVector 6(int) 3
              52:             TypePointer Input 51(ivec3)
53(gl_LocalInvocationID):     52(ptr) Variable Input
              54:             TypePointer Input 6(int)
              61:             TypePointer Uniform 15(int)
              63:             TypePointer Input 15(int)
64(gl_DeviceIndex):     63(ptr) Variable Input
              65:      6(int) Constant 1
              66:      6(int) Constant 3400
              67:      6(int) Constant 16
              68:      6(int) Constant 32
              69:      6(int) Constant 4
              70:   51(ivec3) ConstantComposite 67 68 69
         4(main):           2 Function None 3
               5:             Label
                              ControlBarrier 7 7 8
              19:    9(float) Load 18(s)
              21:     20(ptr) AccessChain 14(outbname) 16
                              Store 21 19
              27:    9(float) Load 18(s)
              28:   22(fvec4) CompositeConstruct 27 27 27 27
              30:     29(ptr) AccessChain 25(outbnamena) 26
                              Store 30 28
              34:     20(ptr) AccessChain 14(outbname) 31 32 33
              35:    9(float) Load 34
                              Store 18(s) 35
              40:     39(ptr) AccessChain 14(outbname) 31 36
                              Store 40 38
              43:     15(int) Load 42(i)
              44:    9(float) Load 18(s)
              45:   10(fvec3) CompositeConstruct 44 44 44
              46:     39(ptr) AccessChain 14(outbname) 31 43
                              Store 46 45
              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 33
              56:      6(int) Load 55
              57:    9(float) Load 18(s)
              58:   22(fvec4) CompositeConstruct 57 57 57 57
              59:     29(ptr) AccessChain 50(outnames) 26 56
                              Store 59 58
              60:     15(int) ArrayLength 14(outbname) 3
              62:     61(ptr) AccessChain 50(outnames) 16
                              Store 62 60
                              MemoryBarrier 65 8
                              MemoryBarrier 7 66
                              Return
                              FunctionEnd
