spv.noBuiltInLoc.vert
// Module Version 10000
// Generated by (magic number): 80005
// Id's are bound by 33

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 9 11 18 31 32
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "bar"
                              Name 11  "foo"
                              Name 16  "gl_PerVertex"
                              MemberName 16(gl_PerVertex) 0  "gl_Position"
                              MemberName 16(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 16(gl_PerVertex) 2  "gl_ClipDistance"
                              MemberName 16(gl_PerVertex) 3  "gl_CullDistance"
                              Name 18  ""
                              Name 24  "uv1"
                              Name 26  "uv2"
                              Name 29  "uv3"
                              Name 31  "gl_VertexID"
                              Name 32  "gl_InstanceID"
                              Decorate 9(bar) Location 0
                              Decorate 11(foo) Location 0
                              MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
                              MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
                              Decorate 16(gl_PerVertex) Block
                              Decorate 24(uv1) Location 0
                              Decorate 24(uv1) DescriptorSet 0
                              Decorate 26(uv2) Location 1
                              Decorate 26(uv2) DescriptorSet 0
                              Decorate 29(uv3) Location 2
                              Decorate 29(uv3) DescriptorSet 0
                              Decorate 31(gl_VertexID) BuiltIn VertexId
                              Decorate 32(gl_InstanceID) BuiltIn InstanceId
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Output 7(fvec4)
          9(bar):      8(ptr) Variable Output
              10:             TypePointer Input 7(fvec4)
         11(foo):     10(ptr) Variable Input
              13:             TypeInt 32 0
              14:     13(int) Constant 1
              15:             TypeArray 6(float) 14
16(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 15 15
              17:             TypePointer Output 16(gl_PerVertex)
              18:     17(ptr) Variable Output
              19:             TypeInt 32 1
              20:     19(int) Constant 0
              23:             TypePointer UniformConstant 7(fvec4)
         24(uv1):     23(ptr) Variable UniformConstant
              25:             TypePointer UniformConstant 6(float)
         26(uv2):     25(ptr) Variable UniformConstant
              27:             TypeVector 6(float) 3
              28:             TypePointer UniformConstant 27(fvec3)
         29(uv3):     28(ptr) Variable UniformConstant
              30:             TypePointer Input 19(int)
 31(gl_VertexID):     30(ptr) Variable Input
32(gl_InstanceID):     30(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
              12:    7(fvec4) Load 11(foo)
                              Store 9(bar) 12
              21:    7(fvec4) Load 11(foo)
              22:      8(ptr) AccessChain 18 20
                              Store 22 21
                              Return
                              FunctionEnd
