spv.set.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.


Linked vertex stage:


// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 26

                              Source GLSL 450
                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main"
                              Name 4  "main"
                              Name 10  "color"
                              Name 11  "setBuf"
                              MemberName 11(setBuf) 0  "color"
                              Name 13  "setBufInst"
                              Name 22  "sampler"
                              Name 24  "gl_VertexID"
                              Name 25  "gl_InstanceID"
                              Decorate 10(color) Smooth
                              Decorate 11(setBuf) GLSLShared
                              Decorate 11(setBuf) BufferBlock
                              Decorate 13(setBufInst) DescriptorSet 0
                              Decorate 13(setBufInst) Binding 8
                              Decorate 22(sampler) DescriptorSet 4
                              Decorate 22(sampler) Binding 7
                              Decorate 22(sampler) NoStaticUse
                              Decorate 24(gl_VertexID) BuiltIn VertexId
                              Decorate 24(gl_VertexID) NoStaticUse
                              Decorate 25(gl_InstanceID) BuiltIn InstanceId
                              Decorate 25(gl_InstanceID) NoStaticUse
               2:             TypeVoid
               3:             TypeFunction 2
               7:             TypeFloat 32
               8:             TypeVector 7(float) 4
               9:             TypePointer Output 8(fvec4)
       10(color):      9(ptr) Variable Output
      11(setBuf):             TypeStruct 8(fvec4)
              12:             TypePointer Uniform 11(setBuf)
  13(setBufInst):     12(ptr) Variable Uniform
              14:             TypeInt 32 1
              15:     14(int) Constant 0
              16:             TypePointer Uniform 8(fvec4)
              19:             TypeImage 7(float) 2D sampled format:Unknown
              20:             TypeSampledImage 19
              21:             TypePointer UniformConstant 20
     22(sampler):     21(ptr) Variable UniformConstant
              23:             TypePointer Input 14(int)
 24(gl_VertexID):     23(ptr) Variable Input
25(gl_InstanceID):     23(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
              17:     16(ptr) AccessChain 13(setBufInst) 15
              18:    8(fvec4) Load 17
                              Store 10(color) 18
                              Branch 6
               6:             Label
                              Return
                              FunctionEnd
