hlsl.partialFlattenMixed.vert
WARNING: AST will form illegal SPIR-V; need to transform to legalize
Shader version: 500
0:? Sequence
0:10  Function Definition: @main(vf4; ( temp 4-component vector of float)
0:10    Function Parameters: 
0:10      'pos' ( in 4-component vector of float)
0:?     Sequence
0:13      Sequence
0:13        move second child to first child ( temp texture2D)
0:13          direct index ( temp texture2D)
0:13            membTex: direct index for structure ( temp 2-element array of texture2D)
0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
0:13              Constant:
0:13                1 (const int)
0:13            Constant:
0:13              0 (const int)
0:?           'tex[0]' ( uniform texture2D)
0:13        move second child to first child ( temp texture2D)
0:13          direct index ( temp texture2D)
0:13            membTex: direct index for structure ( temp 2-element array of texture2D)
0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
0:13              Constant:
0:13                1 (const int)
0:13            Constant:
0:13              1 (const int)
0:?           'tex[1]' ( uniform texture2D)
0:15      Branch: Return with expression
0:15        'pos' ( in 4-component vector of float)
0:10  Function Definition: main( ( temp void)
0:10    Function Parameters: 
0:?     Sequence
0:10      move second child to first child ( temp 4-component vector of float)
0:?         'pos' ( temp 4-component vector of float)
0:?         'pos' (layout( location=0) in 4-component vector of float)
0:10      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' ( out 4-component vector of float Position)
0:10        Function Call: @main(vf4; ( temp 4-component vector of float)
0:?           'pos' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'tex[0]' ( uniform texture2D)
0:?     'tex[1]' ( uniform texture2D)
0:?     '@entryPointOutput' ( out 4-component vector of float Position)
0:?     'pos' (layout( location=0) in 4-component vector of float)


Linked vertex stage:


Shader version: 500
0:? Sequence
0:10  Function Definition: @main(vf4; ( temp 4-component vector of float)
0:10    Function Parameters: 
0:10      'pos' ( in 4-component vector of float)
0:?     Sequence
0:13      Sequence
0:13        move second child to first child ( temp texture2D)
0:13          direct index ( temp texture2D)
0:13            membTex: direct index for structure ( temp 2-element array of texture2D)
0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
0:13              Constant:
0:13                1 (const int)
0:13            Constant:
0:13              0 (const int)
0:?           'tex[0]' ( uniform texture2D)
0:13        move second child to first child ( temp texture2D)
0:13          direct index ( temp texture2D)
0:13            membTex: direct index for structure ( temp 2-element array of texture2D)
0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
0:13              Constant:
0:13                1 (const int)
0:13            Constant:
0:13              1 (const int)
0:?           'tex[1]' ( uniform texture2D)
0:15      Branch: Return with expression
0:15        'pos' ( in 4-component vector of float)
0:10  Function Definition: main( ( temp void)
0:10    Function Parameters: 
0:?     Sequence
0:10      move second child to first child ( temp 4-component vector of float)
0:?         'pos' ( temp 4-component vector of float)
0:?         'pos' (layout( location=0) in 4-component vector of float)
0:10      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' ( out 4-component vector of float Position)
0:10        Function Call: @main(vf4; ( temp 4-component vector of float)
0:?           'pos' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'tex[0]' ( uniform texture2D)
0:?     'tex[1]' ( uniform texture2D)
0:?     '@entryPointOutput' ( out 4-component vector of float Position)
0:?     'pos' (layout( location=0) in 4-component vector of float)

// Module Version 10000
// Generated by (magic number): 80006
// Id's are bound by 43

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 36 39
                              Source HLSL 500
                              Name 4  "main"
                              Name 11  "@main(vf4;"
                              Name 10  "pos"
                              Name 18  "Packed"
                              MemberName 18(Packed) 0  "a"
                              MemberName 18(Packed) 1  "membTex"
                              MemberName 18(Packed) 2  "b"
                              Name 20  "packed"
                              Name 24  "tex[0]"
                              Name 28  "tex[1]"
                              Name 34  "pos"
                              Name 36  "pos"
                              Name 39  "@entryPointOutput"
                              Name 40  "param"
                              Decorate 24(tex[0]) DescriptorSet 0
                              Decorate 28(tex[1]) DescriptorSet 0
                              Decorate 36(pos) Location 0
                              Decorate 39(@entryPointOutput) BuiltIn Position
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
               9:             TypeFunction 7(fvec4) 8(ptr)
              13:             TypeInt 32 1
              14:             TypeImage 6(float) 2D sampled format:Unknown
              15:             TypeInt 32 0
              16:     15(int) Constant 2
              17:             TypeArray 14 16
      18(Packed):             TypeStruct 13(int) 17 13(int)
              19:             TypePointer Function 18(Packed)
              21:     13(int) Constant 1
              22:     13(int) Constant 0
              23:             TypePointer UniformConstant 14
      24(tex[0]):     23(ptr) Variable UniformConstant
              26:             TypePointer Function 14
      28(tex[1]):     23(ptr) Variable UniformConstant
              35:             TypePointer Input 7(fvec4)
         36(pos):     35(ptr) Variable Input
              38:             TypePointer Output 7(fvec4)
39(@entryPointOutput):     38(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
         34(pos):      8(ptr) Variable Function
       40(param):      8(ptr) Variable Function
              37:    7(fvec4) Load 36(pos)
                              Store 34(pos) 37
              41:    7(fvec4) Load 34(pos)
                              Store 40(param) 41
              42:    7(fvec4) FunctionCall 11(@main(vf4;) 40(param)
                              Store 39(@entryPointOutput) 42
                              Return
                              FunctionEnd
  11(@main(vf4;):    7(fvec4) Function None 9
         10(pos):      8(ptr) FunctionParameter
              12:             Label
      20(packed):     19(ptr) Variable Function
              25:          14 Load 24(tex[0])
              27:     26(ptr) AccessChain 20(packed) 21 22
                              Store 27 25
              29:          14 Load 28(tex[1])
              30:     26(ptr) AccessChain 20(packed) 21 21
                              Store 30 29
              31:    7(fvec4) Load 10(pos)
                              ReturnValue 31
                              FunctionEnd
