spv.matFun.vert
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 103

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 76 81
                              Source GLSL 400
                              Name 4  "main"
                              Name 14  "xf(mf33;vf3;"
                              Name 12  "m"
                              Name 13  "v"
                              Name 21  "Mat3(mf44;"
                              Name 20  "m"
                              Name 26  "mxv(mf44;vf3;"
                              Name 24  "m4"
                              Name 25  "v"
                              Name 65  "param"
                              Name 74  "gl_PerVertex"
                              MemberName 74(gl_PerVertex) 0  "gl_Position"
                              MemberName 74(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 74(gl_PerVertex) 2  "gl_ClipDistance"
                              Name 76  ""
                              Name 77  "bl"
                              MemberName 77(bl) 0  "m4"
                              MemberName 77(bl) 1  "m3"
                              Name 79  "bName"
                              Name 81  "v3"
                              Name 82  "param"
                              Name 86  "param"
                              Name 89  "param"
                              Name 93  "param"
                              MemberDecorate 74(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 74(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 74(gl_PerVertex) 2 BuiltIn ClipDistance
                              Decorate 74(gl_PerVertex) Block
                              MemberDecorate 77(bl) 0 ColMajor
                              MemberDecorate 77(bl) 0 Offset 0
                              MemberDecorate 77(bl) 0 MatrixStride 16
                              MemberDecorate 77(bl) 1 ColMajor
                              MemberDecorate 77(bl) 1 Offset 64
                              MemberDecorate 77(bl) 1 MatrixStride 16
                              Decorate 77(bl) Block
                              Decorate 79(bName) DescriptorSet 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 3
               8:             TypeMatrix 7(fvec3) 3
               9:             TypePointer Function 8
              10:             TypePointer Function 7(fvec3)
              11:             TypeFunction 7(fvec3) 9(ptr) 10(ptr)
              16:             TypeVector 6(float) 4
              17:             TypeMatrix 16(fvec4) 4
              18:             TypePointer Function 17
              19:             TypeFunction 8 18(ptr)
              23:             TypeFunction 7(fvec3) 18(ptr) 10(ptr)
              33:             TypeInt 32 1
              34:     33(int) Constant 0
              35:             TypePointer Function 16(fvec4)
              39:     33(int) Constant 1
              43:     33(int) Constant 2
              47:    6(float) Constant 1065353216
              48:    6(float) Constant 0
              71:             TypeInt 32 0
              72:     71(int) Constant 1
              73:             TypeArray 6(float) 72
74(gl_PerVertex):             TypeStruct 16(fvec4) 6(float) 73
              75:             TypePointer Output 74(gl_PerVertex)
              76:     75(ptr) Variable Output
          77(bl):             TypeStruct 17 8
              78:             TypePointer Uniform 77(bl)
       79(bName):     78(ptr) Variable Uniform
              80:             TypePointer Input 7(fvec3)
          81(v3):     80(ptr) Variable Input
              83:             TypePointer Uniform 17
              90:             TypePointer Uniform 8
             101:             TypePointer Output 16(fvec4)
         4(main):           2 Function None 3
               5:             Label
       82(param):     18(ptr) Variable Function
       86(param):     10(ptr) Variable Function
       89(param):      9(ptr) Variable Function
       93(param):     10(ptr) Variable Function
              84:     83(ptr) AccessChain 79(bName) 34
              85:          17 Load 84
                              Store 82(param) 85
              87:    7(fvec3) Load 81(v3)
                              Store 86(param) 87
              88:    7(fvec3) FunctionCall 26(mxv(mf44;vf3;) 82(param) 86(param)
              91:     90(ptr) AccessChain 79(bName) 39
              92:           8 Load 91
                              Store 89(param) 92
              94:    7(fvec3) Load 81(v3)
                              Store 93(param) 94
              95:    7(fvec3) FunctionCall 14(xf(mf33;vf3;) 89(param) 93(param)
              96:    7(fvec3) FAdd 88 95
              97:    6(float) CompositeExtract 96 0
              98:    6(float) CompositeExtract 96 1
              99:    6(float) CompositeExtract 96 2
             100:   16(fvec4) CompositeConstruct 97 98 99 47
             102:    101(ptr) AccessChain 76 34
                              Store 102 100
                              Return
                              FunctionEnd
14(xf(mf33;vf3;):    7(fvec3) Function None 11
           12(m):      9(ptr) FunctionParameter
           13(v):     10(ptr) FunctionParameter
              15:             Label
              28:    7(fvec3) Load 13(v)
              29:           8 Load 12(m)
              30:    7(fvec3) VectorTimesMatrix 28 29
                              ReturnValue 30
                              FunctionEnd
  21(Mat3(mf44;):           8 Function None 19
           20(m):     18(ptr) FunctionParameter
              22:             Label
              36:     35(ptr) AccessChain 20(m) 34
              37:   16(fvec4) Load 36
              38:    7(fvec3) VectorShuffle 37 37 0 1 2
              40:     35(ptr) AccessChain 20(m) 39
              41:   16(fvec4) Load 40
              42:    7(fvec3) VectorShuffle 41 41 0 1 2
              44:     35(ptr) AccessChain 20(m) 43
              45:   16(fvec4) Load 44
              46:    7(fvec3) VectorShuffle 45 45 0 1 2
              49:    6(float) CompositeExtract 38 0
              50:    6(float) CompositeExtract 38 1
              51:    6(float) CompositeExtract 38 2
              52:    6(float) CompositeExtract 42 0
              53:    6(float) CompositeExtract 42 1
              54:    6(float) CompositeExtract 42 2
              55:    6(float) CompositeExtract 46 0
              56:    6(float) CompositeExtract 46 1
              57:    6(float) CompositeExtract 46 2
              58:    7(fvec3) CompositeConstruct 49 50 51
              59:    7(fvec3) CompositeConstruct 52 53 54
              60:    7(fvec3) CompositeConstruct 55 56 57
              61:           8 CompositeConstruct 58 59 60
                              ReturnValue 61
                              FunctionEnd
26(mxv(mf44;vf3;):    7(fvec3) Function None 23
          24(m4):     18(ptr) FunctionParameter
           25(v):     10(ptr) FunctionParameter
              27:             Label
       65(param):     18(ptr) Variable Function
              64:    7(fvec3) Load 25(v)
              66:          17 Load 24(m4)
                              Store 65(param) 66
              67:           8 FunctionCall 21(Mat3(mf44;) 65(param)
              68:    7(fvec3) VectorTimesMatrix 64 67
                              ReturnValue 68
                              FunctionEnd
