spv.specConstant.vert
Warning, version 400 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 81

                              Capability Shader
                              Capability Float64
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 20 22 28 53
                              Source GLSL 400
                              Name 4  "main"
                              Name 14  "foo(vf4[s1516];"
                              Name 13  "p"
                              Name 17  "builtin_spec_constant("
                              Name 20  "color"
                              Name 22  "ucol"
                              Name 28  "size"
                              Name 47  "param"
                              Name 53  "dupUcol"
                              Name 76  "result"
                              Decorate 9 SpecId 16
                              Decorate 30 SpecId 17
                              Decorate 34 SpecId 22
                              Decorate 39 SpecId 19
                              Decorate 40 SpecId 18
                              Decorate 50 SpecId 116
                              Decorate 60 SpecId 117
                              Decorate 63 SpecId 122
                              Decorate 67 SpecId 119
                              Decorate 68 SpecId 118
                              Decorate 77 SpecId 24
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeInt 32 1
               9:      8(int) SpecConstant 5
              10:             TypeArray 7(fvec4) 9
              11:             TypePointer Function 10
              12:             TypeFunction 2 11(ptr)
              16:             TypeFunction 8(int)
              19:             TypePointer Output 7(fvec4)
       20(color):     19(ptr) Variable Output
              21:             TypePointer Input 10
        22(ucol):     21(ptr) Variable Input
              23:      8(int) Constant 2
              24:             TypePointer Input 7(fvec4)
              27:             TypePointer Output 8(int)
        28(size):     27(ptr) Variable Output
              29:             TypeBool
              30:    29(bool) SpecConstantTrue
              33:             TypeInt 32 0
              34:     33(int) SpecConstant 2
              38:             TypeFloat 64
              39:   38(float) SpecConstant 1413754136 1074340347
              40:    6(float) SpecConstant 1078523331
              50:      8(int) SpecConstant 12
              51:             TypeArray 7(fvec4) 50
              52:             TypePointer Input 51
     53(dupUcol):     52(ptr) Variable Input
              60:    29(bool) SpecConstantTrue
              63:     33(int) SpecConstant 2
              67:   38(float) SpecConstant 1413754136 1074340347
              68:    6(float) SpecConstant 1078523331
              75:             TypePointer Function 8(int)
              77:      8(int) SpecConstant 8
         4(main):           2 Function None 3
               5:             Label
       47(param):     11(ptr) Variable Function
              25:     24(ptr) AccessChain 22(ucol) 23
              26:    7(fvec4) Load 25
                              Store 20(color) 26
                              Store 28(size) 9
                              SelectionMerge 32 None
                              BranchConditional 30 31 32
              31:               Label
              35:    6(float)   ConvertUToF 34
              36:    7(fvec4)   Load 20(color)
              37:    7(fvec4)   VectorTimesScalar 36 35
                                Store 20(color) 37
                                Branch 32
              32:             Label
              41:   38(float) FConvert 40
              42:   38(float) FDiv 39 41
              43:    6(float) FConvert 42
              44:    7(fvec4) Load 20(color)
              45:    7(fvec4) CompositeConstruct 43 43 43 43
              46:    7(fvec4) FAdd 44 45
                              Store 20(color) 46
              48:          10 Load 22(ucol)
                              Store 47(param) 48
              49:           2 FunctionCall 14(foo(vf4[s1516];) 47(param)
                              Return
                              FunctionEnd
14(foo(vf4[s1516];):           2 Function None 12
           13(p):     11(ptr) FunctionParameter
              15:             Label
              54:     24(ptr) AccessChain 53(dupUcol) 23
              55:    7(fvec4) Load 54
              56:    7(fvec4) Load 20(color)
              57:    7(fvec4) FAdd 56 55
                              Store 20(color) 57
              58:      8(int) Load 28(size)
              59:      8(int) IAdd 58 50
                              Store 28(size) 59
                              SelectionMerge 62 None
                              BranchConditional 60 61 62
              61:               Label
              64:    6(float)   ConvertUToF 63
              65:    7(fvec4)   Load 20(color)
              66:    7(fvec4)   VectorTimesScalar 65 64
                                Store 20(color) 66
                                Branch 62
              62:             Label
              69:   38(float) FConvert 68
              70:   38(float) FDiv 67 69
              71:    6(float) FConvert 70
              72:    7(fvec4) Load 20(color)
              73:    7(fvec4) CompositeConstruct 71 71 71 71
              74:    7(fvec4) FAdd 72 73
                              Store 20(color) 74
                              Return
                              FunctionEnd
17(builtin_spec_constant():      8(int) Function None 16
              18:             Label
      76(result):     75(ptr) Variable Function
                              Store 76(result) 77
              78:      8(int) Load 76(result)
                              ReturnValue 78
                              FunctionEnd
