spv.multiStructFuncall.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 66

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main"
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "S"
                              MemberName 9(S) 0  "m"
                              Name 12  "fooConst(struct-S-mf441;"
                              Name 11  "s"
                              Name 17  "foo(struct-S-mf441;"
                              Name 16  "s"
                              Name 20  "fooOut(struct-S-mf441;"
                              Name 19  "s"
                              Name 22  "S"
                              MemberName 22(S) 0  "m"
                              Name 23  "blockName"
                              MemberName 23(blockName) 0  "s1"
                              Name 25  ""
                              Name 31  "S"
                              MemberName 31(S) 0  "m"
                              Name 32  "arg"
                              Name 39  "s2"
                              Name 42  "param"
                              Name 48  "param"
                              Name 51  "param"
                              Name 62  "param"
                              MemberDecorate 22(S) 0 ColMajor
                              MemberDecorate 22(S) 0 Offset 0
                              MemberDecorate 22(S) 0 MatrixStride 16
                              MemberDecorate 23(blockName) 0 Offset 0
                              Decorate 23(blockName) BufferBlock
                              Decorate 25 DescriptorSet 0
                              Decorate 25 Binding 0
                              MemberDecorate 31(S) 0 ColMajor
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeMatrix 7(fvec4) 4
            9(S):             TypeStruct 8
              10:             TypeFunction 2 9(S)
              14:             TypePointer Function 9(S)
              15:             TypeFunction 2 14(ptr)
           22(S):             TypeStruct 8
   23(blockName):             TypeStruct 22(S)
              24:             TypePointer Uniform 23(blockName)
              25:     24(ptr) Variable Uniform
              26:             TypeInt 32 1
              27:     26(int) Constant 0
              28:             TypePointer Uniform 22(S)
           31(S):             TypeStruct 8
              34:             TypePointer Function 8
              38:             TypePointer Private 9(S)
          39(s2):     38(ptr) Variable Private
              60:             TypePointer Uniform 8
         4(main):           2 Function None 3
               5:             Label
         32(arg):     14(ptr) Variable Function
       42(param):     14(ptr) Variable Function
       48(param):     14(ptr) Variable Function
       51(param):     14(ptr) Variable Function
       62(param):     14(ptr) Variable Function
              29:     28(ptr) AccessChain 25 27
              30:       22(S) Load 29
              33:           8 CompositeExtract 30 0
              35:     34(ptr) AccessChain 32(arg) 27
                              Store 35 33
              36:        9(S) Load 32(arg)
              37:           2 FunctionCall 12(fooConst(struct-S-mf441;) 36
              40:        9(S) Load 39(s2)
              41:           2 FunctionCall 12(fooConst(struct-S-mf441;) 40
              43:     28(ptr) AccessChain 25 27
              44:       22(S) Load 43
              45:           8 CompositeExtract 44 0
              46:     34(ptr) AccessChain 42(param) 27
                              Store 46 45
              47:           2 FunctionCall 17(foo(struct-S-mf441;) 42(param)
              49:        9(S) Load 39(s2)
                              Store 48(param) 49
              50:           2 FunctionCall 17(foo(struct-S-mf441;) 48(param)
              52:     28(ptr) AccessChain 25 27
              53:       22(S) Load 52
              54:           8 CompositeExtract 53 0
              55:     34(ptr) AccessChain 51(param) 27
                              Store 55 54
              56:           2 FunctionCall 20(fooOut(struct-S-mf441;) 51(param)
              57:        9(S) Load 51(param)
              58:     28(ptr) AccessChain 25 27
              59:           8 CompositeExtract 57 0
              61:     60(ptr) AccessChain 58 27
                              Store 61 59
              63:        9(S) Load 39(s2)
                              Store 62(param) 63
              64:           2 FunctionCall 20(fooOut(struct-S-mf441;) 62(param)
              65:        9(S) Load 62(param)
                              Store 39(s2) 65
                              Return
                              FunctionEnd
12(fooConst(struct-S-mf441;):           2 Function None 10
           11(s):        9(S) FunctionParameter
              13:             Label
                              Return
                              FunctionEnd
17(foo(struct-S-mf441;):           2 Function None 15
           16(s):     14(ptr) FunctionParameter
              18:             Label
                              Return
                              FunctionEnd
20(fooOut(struct-S-mf441;):           2 Function None 15
           19(s):     14(ptr) FunctionParameter
              21:             Label
                              Return
                              FunctionEnd
