spv.constructComposite.comp
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 29

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main"
                              ExecutionMode 4 LocalSize 64 1 1
                              Source GLSL 460
                              Name 4  "main"
                              Name 7  "sA"
                              MemberName 7(sA) 0  "x"
                              MemberName 7(sA) 1  "y"
                              Name 8  "sC"
                              MemberName 8(sC) 0  "state"
                              Name 10  "c"
                              Name 11  "sA"
                              MemberName 11(sA) 0  "x"
                              MemberName 11(sA) 1  "y"
                              Name 12  "sB"
                              MemberName 12(sB) 0  "a"
                              Name 13  "ubo"
                              MemberName 13(ubo) 0  "b"
                              Name 15  ""
                              MemberDecorate 11(sA) 0 Offset 0
                              MemberDecorate 11(sA) 1 Offset 4
                              MemberDecorate 12(sB) 0 Offset 0
                              MemberDecorate 13(ubo) 0 Offset 0
                              Decorate 13(ubo) Block
                              Decorate 15 DescriptorSet 0
                              Decorate 15 Binding 0
                              Decorate 28 BuiltIn WorkgroupSize
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 1
           7(sA):             TypeStruct 6(int) 6(int)
           8(sC):             TypeStruct 7(sA)
               9:             TypePointer Private 8(sC)
           10(c):      9(ptr) Variable Private
          11(sA):             TypeStruct 6(int) 6(int)
          12(sB):             TypeStruct 11(sA)
         13(ubo):             TypeStruct 12(sB)
              14:             TypePointer Uniform 13(ubo)
              15:     14(ptr) Variable Uniform
              16:      6(int) Constant 0
              17:             TypePointer Uniform 11(sA)
              24:             TypeInt 32 0
              25:             TypeVector 24(int) 3
              26:     24(int) Constant 64
              27:     24(int) Constant 1
              28:   25(ivec3) ConstantComposite 26 27 27
         4(main):           2 Function None 3
               5:             Label
              18:     17(ptr) AccessChain 15 16 16
              19:      11(sA) Load 18
              20:      6(int) CompositeExtract 19 0
              21:      6(int) CompositeExtract 19 1
              22:       7(sA) CompositeConstruct 20 21
              23:       8(sC) CompositeConstruct 22
                              Store 10(c) 23
                              Return
                              FunctionEnd
