spv.matFun.vert

Linked vertex stage:


// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 94

                              Source GLSL 130
                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main"
                              Name 4  "main"
                              Name 15  "xf(mf33;vf3;"
                              Name 13  "m"
                              Name 14  "v"
                              Name 22  "Mat3(mf44;"
                              Name 21  "m"
                              Name 27  "mxv(mf44;vf3;"
                              Name 25  "m4"
                              Name 26  "v"
                              Name 64  "param"
                              Name 70  "gl_Position"
                              Name 72  "m4"
                              Name 74  "v3"
                              Name 75  "param"
                              Name 77  "param"
                              Name 81  "m3"
                              Name 82  "param"
                              Name 84  "param"
                              Name 93  "gl_VertexID"
                              Decorate 70(gl_Position) BuiltIn Position
                              Decorate 93(gl_VertexID) BuiltIn VertexId
                              Decorate 93(gl_VertexID) NoStaticUse
               2:             TypeVoid
               3:             TypeFunction 2
               7:             TypeFloat 32
               8:             TypeVector 7(float) 3
               9:             TypeMatrix 8(fvec3) 3
              10:             TypePointer Function 9
              11:             TypePointer Function 8(fvec3)
              12:             TypeFunction 8(fvec3) 10(ptr) 11(ptr)
              17:             TypeVector 7(float) 4
              18:             TypeMatrix 17(fvec4) 4
              19:             TypePointer Function 18
              20:             TypeFunction 9 19(ptr)
              24:             TypeFunction 8(fvec3) 19(ptr) 11(ptr)
              33:             TypeInt 32 1
              34:     33(int) Constant 0
              35:             TypePointer Function 17(fvec4)
              39:     33(int) Constant 1
              43:     33(int) Constant 2
              47:    7(float) Constant 1065353216
              48:    7(float) Constant 0
              69:             TypePointer Output 17(fvec4)
 70(gl_Position):     69(ptr) Variable Output
              71:             TypePointer UniformConstant 18
          72(m4):     71(ptr) Variable UniformConstant
              73:             TypePointer Input 8(fvec3)
          74(v3):     73(ptr) Variable Input
              80:             TypePointer UniformConstant 9
          81(m3):     80(ptr) Variable UniformConstant
              92:             TypePointer Input 33(int)
 93(gl_VertexID):     92(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
       75(param):     19(ptr) Variable Function
       77(param):     11(ptr) Variable Function
       82(param):     10(ptr) Variable Function
       84(param):     11(ptr) Variable Function
              76:          18 Load 72(m4)
                              Store 75(param) 76
              78:    8(fvec3) Load 74(v3)
                              Store 77(param) 78
              79:    8(fvec3) FunctionCall 27(mxv(mf44;vf3;) 75(param) 77(param)
              83:           9 Load 81(m3)
                              Store 82(param) 83
              85:    8(fvec3) Load 74(v3)
                              Store 84(param) 85
              86:    8(fvec3) FunctionCall 15(xf(mf33;vf3;) 82(param) 84(param)
              87:    8(fvec3) FAdd 79 86
              88:    7(float) CompositeExtract 87 0
              89:    7(float) CompositeExtract 87 1
              90:    7(float) CompositeExtract 87 2
              91:   17(fvec4) CompositeConstruct 88 89 90 47
                              Store 70(gl_Position) 91
                              Branch 6
               6:             Label
                              Return
                              FunctionEnd
15(xf(mf33;vf3;):    8(fvec3) Function None 12
           13(m):     10(ptr) FunctionParameter
           14(v):     11(ptr) FunctionParameter
              16:             Label
              29:    8(fvec3) Load 14(v)
              30:           9 Load 13(m)
              31:    8(fvec3) VectorTimesMatrix 29 30
                              ReturnValue 31
                              FunctionEnd
  22(Mat3(mf44;):           9 Function None 20
           21(m):     19(ptr) FunctionParameter
              23:             Label
              36:     35(ptr) AccessChain 21(m) 34
              37:   17(fvec4) Load 36
              38:    8(fvec3) VectorShuffle 37 37 0 1 2
              40:     35(ptr) AccessChain 21(m) 39
              41:   17(fvec4) Load 40
              42:    8(fvec3) VectorShuffle 41 41 0 1 2
              44:     35(ptr) AccessChain 21(m) 43
              45:   17(fvec4) Load 44
              46:    8(fvec3) VectorShuffle 45 45 0 1 2
              49:    7(float) CompositeExtract 38 0
              50:    7(float) CompositeExtract 38 1
              51:    7(float) CompositeExtract 38 2
              52:    7(float) CompositeExtract 42 0
              53:    7(float) CompositeExtract 42 1
              54:    7(float) CompositeExtract 42 2
              55:    7(float) CompositeExtract 46 0
              56:    7(float) CompositeExtract 46 1
              57:    7(float) CompositeExtract 46 2
              58:    8(fvec3) CompositeConstruct 49 50 51
              59:    8(fvec3) CompositeConstruct 52 53 54
              60:    8(fvec3) CompositeConstruct 55 56 57
              61:           9 CompositeConstruct 58 59 60
                              ReturnValue 61
                              FunctionEnd
27(mxv(mf44;vf3;):    8(fvec3) Function None 24
          25(m4):     19(ptr) FunctionParameter
           26(v):     11(ptr) FunctionParameter
              28:             Label
       64(param):     19(ptr) Variable Function
              63:    8(fvec3) Load 26(v)
              65:          18 Load 25(m4)
                              Store 64(param) 65
              66:           9 FunctionCall 22(Mat3(mf44;) 64(param)
              67:    8(fvec3) VectorTimesMatrix 63 66
                              ReturnValue 67
                              FunctionEnd
