spv.shaderDrawParams.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.


Linked vertex stage:


// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 53

                              Capability Shader
                              Capability DrawParameters
                              Extension  "SPV_KHR_shader_draw_parameters"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 9 16 29 37
                              Source GLSL 450
                              SourceExtension  "GL_ARB_shader_draw_parameters"
                              Name 4  "main"
                              Name 9  "gl_BaseVertexARB"
                              Name 16  "gl_BaseInstanceARB"
                              Name 27  "gl_PerVertex"
                              MemberName 27(gl_PerVertex) 0  "gl_Position"
                              MemberName 27(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 27(gl_PerVertex) 2  "gl_ClipDistance"
                              MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
                              Name 29  ""
                              Name 34  "Block"
                              MemberName 34(Block) 0  "pos"
                              Name 36  "block"
                              Name 37  "gl_DrawIDARB"
                              Decorate 9(gl_BaseVertexARB) BuiltIn BaseVertex
                              Decorate 16(gl_BaseInstanceARB) BuiltIn BaseInstance
                              MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                              MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
                              Decorate 27(gl_PerVertex) Block
                              Decorate 31 ArrayStride 16
                              Decorate 33 ArrayStride 64
                              MemberDecorate 34(Block) 0 Offset 0
                              Decorate 34(Block) Block
                              Decorate 36(block) DescriptorSet 0
                              Decorate 36(block) Binding 0
                              Decorate 37(gl_DrawIDARB) BuiltIn DrawIndex
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeBool
               7:             TypeInt 32 1
               8:             TypePointer Input 7(int)
9(gl_BaseVertexARB):      8(ptr) Variable Input
              11:      7(int) Constant 0
16(gl_BaseInstanceARB):      8(ptr) Variable Input
              22:             TypeFloat 32
              23:             TypeVector 22(float) 4
              24:             TypeInt 32 0
              25:     24(int) Constant 1
              26:             TypeArray 22(float) 25
27(gl_PerVertex):             TypeStruct 23(fvec4) 22(float) 26 26
              28:             TypePointer Output 27(gl_PerVertex)
              29:     28(ptr) Variable Output
              30:     24(int) Constant 4
              31:             TypeArray 23(fvec4) 30
              32:     24(int) Constant 2
              33:             TypeArray 31 32
       34(Block):             TypeStruct 33
              35:             TypePointer Uniform 34(Block)
       36(block):     35(ptr) Variable Uniform
37(gl_DrawIDARB):      8(ptr) Variable Input
              39:      7(int) Constant 4
              41:             TypePointer Uniform 23(fvec4)
              44:             TypePointer Output 23(fvec4)
              47:      7(int) Constant 1
         4(main):           2 Function None 3
               5:             Label
              10:      7(int) Load 9(gl_BaseVertexARB)
              12:     6(bool) SGreaterThan 10 11
              13:     6(bool) LogicalNot 12
                              SelectionMerge 15 None
                              BranchConditional 13 14 15
              14:               Label
              17:      7(int)   Load 16(gl_BaseInstanceARB)
              18:     6(bool)   SGreaterThan 17 11
                                Branch 15
              15:             Label
              19:     6(bool) Phi 12 5 18 14
                              SelectionMerge 21 None
                              BranchConditional 19 20 46
              20:               Label
              38:      7(int)   Load 37(gl_DrawIDARB)
              40:      7(int)   SMod 38 39
              42:     41(ptr)   AccessChain 36(block) 11 11 40
              43:   23(fvec4)   Load 42
              45:     44(ptr)   AccessChain 29 11
                                Store 45 43
                                Branch 21
              46:               Label
              48:      7(int)   Load 37(gl_DrawIDARB)
              49:      7(int)   SMod 48 39
              50:     41(ptr)   AccessChain 36(block) 11 47 49
              51:   23(fvec4)   Load 50
              52:     44(ptr)   AccessChain 29 11
                                Store 52 51
                                Branch 21
              21:             Label
                              Return
                              FunctionEnd
