spv.subgroup.vert
// Module Version 10300
// Generated by (magic number): 8000b
// Id's are bound by 26

                              Capability Shader
                              Capability GroupNonUniform
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 15 18 20
                              Source GLSL 450
                              SourceExtension  "GL_KHR_shader_subgroup_basic"
                              Name 4  "main"
                              Name 9  "Output"
                              MemberName 9(Output) 0  "result"
                              Name 11  ""
                              Name 15  "gl_VertexIndex"
                              Name 18  "gl_SubgroupSize"
                              Name 20  "gl_SubgroupInvocationID"
                              Decorate 8 ArrayStride 16
                              MemberDecorate 9(Output) 0 Offset 0
                              Decorate 9(Output) Block
                              Decorate 11 DescriptorSet 0
                              Decorate 11 Binding 0
                              Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
                              Decorate 19 RelaxedPrecision
                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                              Decorate 21 RelaxedPrecision
                              Decorate 23 RelaxedPrecision
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeVector 6(int) 4
               8:             TypeRuntimeArray 7(ivec4)
       9(Output):             TypeStruct 8
              10:             TypePointer StorageBuffer 9(Output)
              11:     10(ptr) Variable StorageBuffer
              12:             TypeInt 32 1
              13:     12(int) Constant 0
              14:             TypePointer Input 12(int)
15(gl_VertexIndex):     14(ptr) Variable Input
              17:             TypePointer Input 6(int)
18(gl_SubgroupSize):     17(ptr) Variable Input
20(gl_SubgroupInvocationID):     17(ptr) Variable Input
              22:      6(int) Constant 0
              24:             TypePointer StorageBuffer 7(ivec4)
         4(main):           2 Function None 3
               5:             Label
              16:     12(int) Load 15(gl_VertexIndex)
              19:      6(int) Load 18(gl_SubgroupSize)
              21:      6(int) Load 20(gl_SubgroupInvocationID)
              23:    7(ivec4) CompositeConstruct 19 21 22 22
              25:     24(ptr) AccessChain 11 13 16
                              Store 25 23
                              Return
                              FunctionEnd
