hlsl.typeGraphCopy.vert
Shader version: 500
0:? Sequence
0:22  Function Definition: @main( ( temp float)
0:22    Function Parameters: 
0:?     Sequence
0:23      Branch: Return with expression
0:23        b: direct index for structure ( temp float)
0:23          s2: direct index for structure ( temp structure{ temp int a,  temp float b})
0:23            t3: direct index for structure ( temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2})
0:23              foo: direct index for structure ( uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3})
0:23                'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3} foo})
0:23                Constant:
0:23                  0 (const uint)
0:23              Constant:
0:23                2 (const int)
0:23            Constant:
0:23              1 (const int)
0:23          Constant:
0:23            1 (const int)
0:22  Function Definition: main( ( temp void)
0:22    Function Parameters: 
0:?     Sequence
0:22      move second child to first child ( temp float)
0:?         '@entryPointOutput' (layout( location=0) out float)
0:22        Function Call: @main( ( temp float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3} foo})
0:?     '@entryPointOutput' (layout( location=0) out float)


Linked vertex stage:


Shader version: 500
0:? Sequence
0:22  Function Definition: @main( ( temp float)
0:22    Function Parameters: 
0:?     Sequence
0:23      Branch: Return with expression
0:23        b: direct index for structure ( temp float)
0:23          s2: direct index for structure ( temp structure{ temp int a,  temp float b})
0:23            t3: direct index for structure ( temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2})
0:23              foo: direct index for structure ( uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3})
0:23                'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3} foo})
0:23                Constant:
0:23                  0 (const uint)
0:23              Constant:
0:23                2 (const int)
0:23            Constant:
0:23              1 (const int)
0:23          Constant:
0:23            1 (const int)
0:22  Function Definition: main( ( temp void)
0:22    Function Parameters: 
0:?     Sequence
0:22      move second child to first child ( temp float)
0:?         '@entryPointOutput' (layout( location=0) out float)
0:22        Function Call: @main( ( temp float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform structure{ temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t1,  temp structure{ temp int a,  temp float b} t2,  temp structure{ temp structure{ temp int a,  temp float b} s1,  temp structure{ temp int a,  temp float b} s2} t3} foo})
0:?     '@entryPointOutput' (layout( location=0) out float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 26
                              Source HLSL 500
                              Name 4  "main"
                              Name 8  "@main("
                              Name 11  "N1"
                              MemberName 11(N1) 0  "a"
                              MemberName 11(N1) 1  "b"
                              Name 12  "N2"
                              MemberName 12(N2) 0  "s1"
                              MemberName 12(N2) 1  "s2"
                              Name 13  "N3"
                              MemberName 13(N3) 0  "t1"
                              MemberName 13(N3) 1  "t2"
                              MemberName 13(N3) 2  "t3"
                              Name 14  "$Global"
                              MemberName 14($Global) 0  "foo"
                              Name 16  ""
                              Name 26  "@entryPointOutput"
                              MemberDecorate 11(N1) 0 Offset 0
                              MemberDecorate 11(N1) 1 Offset 4
                              MemberDecorate 12(N2) 0 Offset 0
                              MemberDecorate 12(N2) 1 Offset 16
                              MemberDecorate 13(N3) 0 Offset 0
                              MemberDecorate 13(N3) 1 Offset 32
                              MemberDecorate 13(N3) 2 Offset 48
                              MemberDecorate 14($Global) 0 Offset 0
                              Decorate 14($Global) Block
                              Decorate 16 DescriptorSet 0
                              Decorate 26(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeFunction 6(float)
              10:             TypeInt 32 1
          11(N1):             TypeStruct 10(int) 6(float)
          12(N2):             TypeStruct 11(N1) 11(N1)
          13(N3):             TypeStruct 12(N2) 11(N1) 12(N2)
     14($Global):             TypeStruct 13(N3)
              15:             TypePointer Uniform 14($Global)
              16:     15(ptr) Variable Uniform
              17:     10(int) Constant 0
              18:     10(int) Constant 2
              19:     10(int) Constant 1
              20:             TypePointer Uniform 6(float)
              25:             TypePointer Output 6(float)
26(@entryPointOutput):     25(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              27:    6(float) FunctionCall 8(@main()
                              Store 26(@entryPointOutput) 27
                              Return
                              FunctionEnd
       8(@main():    6(float) Function None 7
               9:             Label
              21:     20(ptr) AccessChain 16 17 18 19 19
              22:    6(float) Load 21
                              ReturnValue 22
                              FunctionEnd
