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
              41:   38(float) SpecConstantOp 115 40
              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
              69:   38(float) SpecConstantOp 115 68
              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
              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
              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
