Selaa lähdekoodia

Updated glslang.

Branimir Karadžić 8 vuotta sitten
vanhempi
sitoutus
03bda78768

+ 20 - 11
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out

@@ -2,12 +2,12 @@ hlsl.flattenOpaqueInit.vert
 WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 125
+// Id's are bound by 176
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 82
+                              EntryPoint Vertex 4  "main" 99
                               Source HLSL 500
                               Name 4  "main"
                               Name 17  "FxaaTex"
@@ -15,10 +15,10 @@ WARNING: AST will form illegal SPIR-V; need to transform to legalize
                               MemberName 17(FxaaTex) 1  "tex"
                               Name 38  "g_tInputTexture_sampler"
                               Name 42  "g_tInputTexture"
-                              Name 82  "@entryPointOutput"
+                              Name 99  "@entryPointOutput"
                               Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 42(g_tInputTexture) DescriptorSet 0
-                              Decorate 82(@entryPointOutput) Location 0
+                              Decorate 99(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
@@ -36,14 +36,23 @@ WARNING: AST will form illegal SPIR-V; need to transform to legalize
 38(g_tInputTexture_sampler):     37(ptr) Variable UniformConstant
               41:             TypePointer UniformConstant 9
 42(g_tInputTexture):     41(ptr) Variable UniformConstant
-              81:             TypePointer Output 11(fvec4)
-82(@entryPointOutput):     81(ptr) Variable Output
+              98:             TypePointer Output 11(fvec4)
+99(@entryPointOutput):     98(ptr) Variable Output
+             175: 17(FxaaTex) Undef
          4(main):           2 Function None 3
                5:             Label
-              96:           6 Load 38(g_tInputTexture_sampler)
-              97:           9 Load 42(g_tInputTexture)
-             123:          26 SampledImage 97 96
-             124:   11(fvec4) ImageSampleExplicitLod 123 31 Lod 32
-                              Store 82(@entryPointOutput) 124
+             117:           6 Load 38(g_tInputTexture_sampler)
+             118:           9 Load 42(g_tInputTexture)
+             148:          26 SampledImage 118 117
+             149:   11(fvec4) ImageSampleExplicitLod 148 31 Lod 32
+             172:           6 CompositeExtract 175 0
+             174:           9 CompositeExtract 175 1
+             160:          26 SampledImage 174 172
+             161:   11(fvec4) ImageSampleExplicitLod 160 31 Lod 32
+             136:   11(fvec4) FAdd 149 161
+             165:          26 SampledImage 118 117
+             166:   11(fvec4) ImageSampleExplicitLod 165 31 Lod 32
+             143:   11(fvec4) FAdd 136 166
+                              Store 99(@entryPointOutput) 143
                               Return
                               FunctionEnd

+ 417 - 0
3rdparty/glslang/Test/baseResults/hlsl.cbuffer-identifier.vert.out

@@ -0,0 +1,417 @@
+hlsl.cbuffer-identifier.vert
+WARNING: 0:29: '' : mul() matrix size mismatch 
+
+Shader version: 500
+0:? Sequence
+0:22  Function Definition: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22    Function Parameters: 
+0:22      'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child ( temp int)
+0:23          'ConstantBuffer' ( temp int)
+0:23          Constant:
+0:23            42 (const int)
+0:25      Sequence
+0:25        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          Constant:
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        Pos: direct index for structure ( temp 4-component vector of float)
+0:26          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26          Constant:
+0:26            0 (const int)
+0:26        matrix-times-vector ( temp 4-component vector of float)
+0:26          World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:26            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:26            Constant:
+0:26              0 (const uint)
+0:26          Pos: direct index for structure ( temp 4-component vector of float)
+0:26            'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        Pos: direct index for structure ( temp 4-component vector of float)
+0:27          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27          Constant:
+0:27            0 (const int)
+0:27        matrix-times-vector ( temp 4-component vector of float)
+0:27          View: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:27            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:27            Constant:
+0:27              1 (const uint)
+0:27          Pos: direct index for structure ( temp 4-component vector of float)
+0:27            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27            Constant:
+0:27              0 (const int)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        Pos: direct index for structure ( temp 4-component vector of float)
+0:28          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28          Constant:
+0:28            0 (const int)
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          Projection: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:28            Constant:
+0:28              2 (const uint)
+0:28          Pos: direct index for structure ( temp 4-component vector of float)
+0:28            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp 3-component vector of float)
+0:29        Norm: direct index for structure ( temp 3-component vector of float)
+0:29          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Construct vec3 ( temp 3-component vector of float)
+0:29          matrix-times-vector ( temp 4-component vector of float)
+0:29            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:29              World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:29                'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29            Norm: direct index for structure ( temp 3-component vector of float)
+0:29              'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29              Constant:
+0:29                1 (const int)
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22  Function Definition: main( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp 4-component vector of float)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:?           'input.Pos' (layout( location=0) in 4-component vector of float)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?           'input.Norm' (layout( location=1) in 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          Function Call: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:?           '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:?     'input.Pos' (layout( location=0) in 4-component vector of float)
+0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:22  Function Definition: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22    Function Parameters: 
+0:22      'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child ( temp int)
+0:23          'ConstantBuffer' ( temp int)
+0:23          Constant:
+0:23            42 (const int)
+0:25      Sequence
+0:25        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          Constant:
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        Pos: direct index for structure ( temp 4-component vector of float)
+0:26          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26          Constant:
+0:26            0 (const int)
+0:26        matrix-times-vector ( temp 4-component vector of float)
+0:26          World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:26            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:26            Constant:
+0:26              0 (const uint)
+0:26          Pos: direct index for structure ( temp 4-component vector of float)
+0:26            'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        Pos: direct index for structure ( temp 4-component vector of float)
+0:27          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27          Constant:
+0:27            0 (const int)
+0:27        matrix-times-vector ( temp 4-component vector of float)
+0:27          View: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:27            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:27            Constant:
+0:27              1 (const uint)
+0:27          Pos: direct index for structure ( temp 4-component vector of float)
+0:27            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27            Constant:
+0:27              0 (const int)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        Pos: direct index for structure ( temp 4-component vector of float)
+0:28          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28          Constant:
+0:28            0 (const int)
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          Projection: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:28            Constant:
+0:28              2 (const uint)
+0:28          Pos: direct index for structure ( temp 4-component vector of float)
+0:28            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp 3-component vector of float)
+0:29        Norm: direct index for structure ( temp 3-component vector of float)
+0:29          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Construct vec3 ( temp 3-component vector of float)
+0:29          matrix-times-vector ( temp 4-component vector of float)
+0:29            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:29              World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:29                'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29            Norm: direct index for structure ( temp 3-component vector of float)
+0:29              'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29              Constant:
+0:29                1 (const int)
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22  Function Definition: main( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp 4-component vector of float)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:?           'input.Pos' (layout( location=0) in 4-component vector of float)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?           'input.Norm' (layout( location=1) in 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          Function Call: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:?           '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:?     'input.Pos' (layout( location=0) in 4-component vector of float)
+0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 106
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 87 91 99 103
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "VS_INPUT"
+                              MemberName 9(VS_INPUT) 0  "Pos"
+                              MemberName 9(VS_INPUT) 1  "Norm"
+                              Name 11  "PS_INPUT"
+                              MemberName 11(PS_INPUT) 0  "Pos"
+                              MemberName 11(PS_INPUT) 1  "Norm"
+                              Name 14  "@main(struct-VS_INPUT-vf4-vf31;"
+                              Name 13  "input"
+                              Name 18  "ConstantBuffer"
+                              Name 21  "output"
+                              Name 28  "C"
+                              MemberName 28(C) 0  "World"
+                              MemberName 28(C) 1  "View"
+                              MemberName 28(C) 2  "Projection"
+                              Name 30  ""
+                              Name 85  "input"
+                              Name 87  "input.Pos"
+                              Name 91  "input.Norm"
+                              Name 94  "flattenTemp"
+                              Name 95  "param"
+                              Name 99  "@entryPointOutput.Pos"
+                              Name 103  "@entryPointOutput.Norm"
+                              MemberDecorate 28(C) 0 RowMajor
+                              MemberDecorate 28(C) 0 Offset 0
+                              MemberDecorate 28(C) 0 MatrixStride 16
+                              MemberDecorate 28(C) 1 RowMajor
+                              MemberDecorate 28(C) 1 Offset 64
+                              MemberDecorate 28(C) 1 MatrixStride 16
+                              MemberDecorate 28(C) 2 RowMajor
+                              MemberDecorate 28(C) 2 Offset 128
+                              MemberDecorate 28(C) 2 MatrixStride 16
+                              Decorate 28(C) Block
+                              Decorate 30 DescriptorSet 0
+                              Decorate 30 Binding 0
+                              Decorate 87(input.Pos) Location 0
+                              Decorate 91(input.Norm) Location 1
+                              Decorate 99(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 103(@entryPointOutput.Norm) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeVector 6(float) 3
+     9(VS_INPUT):             TypeStruct 7(fvec4) 8(fvec3)
+              10:             TypePointer Function 9(VS_INPUT)
+    11(PS_INPUT):             TypeStruct 7(fvec4) 8(fvec3)
+              12:             TypeFunction 11(PS_INPUT) 10(ptr)
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:     16(int) Constant 42
+              20:             TypePointer Function 11(PS_INPUT)
+              22:    6(float) Constant 0
+              23:    7(fvec4) ConstantComposite 22 22 22 22
+              24:    8(fvec3) ConstantComposite 22 22 22
+              25:11(PS_INPUT) ConstantComposite 23 24
+              26:     16(int) Constant 0
+              27:             TypeMatrix 7(fvec4) 4
+           28(C):             TypeStruct 27 27 27
+              29:             TypePointer Uniform 28(C)
+              30:     29(ptr) Variable Uniform
+              31:             TypePointer Uniform 27
+              34:             TypePointer Function 7(fvec4)
+              39:     16(int) Constant 1
+              46:     16(int) Constant 2
+              55:             TypeMatrix 7(fvec4) 3
+              56:    6(float) Constant 1065353216
+              73:             TypePointer Function 8(fvec3)
+              86:             TypePointer Input 7(fvec4)
+   87(input.Pos):     86(ptr) Variable Input
+              90:             TypePointer Input 8(fvec3)
+  91(input.Norm):     90(ptr) Variable Input
+              98:             TypePointer Output 7(fvec4)
+99(@entryPointOutput.Pos):     98(ptr) Variable Output
+             102:             TypePointer Output 8(fvec3)
+103(@entryPointOutput.Norm):    102(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       85(input):     10(ptr) Variable Function
+ 94(flattenTemp):     20(ptr) Variable Function
+       95(param):     10(ptr) Variable Function
+              88:    7(fvec4) Load 87(input.Pos)
+              89:     34(ptr) AccessChain 85(input) 26
+                              Store 89 88
+              92:    8(fvec3) Load 91(input.Norm)
+              93:     73(ptr) AccessChain 85(input) 39
+                              Store 93 92
+              96: 9(VS_INPUT) Load 85(input)
+                              Store 95(param) 96
+              97:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 95(param)
+                              Store 94(flattenTemp) 97
+             100:     34(ptr) AccessChain 94(flattenTemp) 26
+             101:    7(fvec4) Load 100
+                              Store 99(@entryPointOutput.Pos) 101
+             104:     73(ptr) AccessChain 94(flattenTemp) 39
+             105:    8(fvec3) Load 104
+                              Store 103(@entryPointOutput.Norm) 105
+                              Return
+                              FunctionEnd
+14(@main(struct-VS_INPUT-vf4-vf31;):11(PS_INPUT) Function None 12
+       13(input):     10(ptr) FunctionParameter
+              15:             Label
+18(ConstantBuffer):     17(ptr) Variable Function
+      21(output):     20(ptr) Variable Function
+                              Store 18(ConstantBuffer) 19
+                              Store 21(output) 25
+              32:     31(ptr) AccessChain 30 26
+              33:          27 Load 32
+              35:     34(ptr) AccessChain 13(input) 26
+              36:    7(fvec4) Load 35
+              37:    7(fvec4) MatrixTimesVector 33 36
+              38:     34(ptr) AccessChain 21(output) 26
+                              Store 38 37
+              40:     31(ptr) AccessChain 30 39
+              41:          27 Load 40
+              42:     34(ptr) AccessChain 21(output) 26
+              43:    7(fvec4) Load 42
+              44:    7(fvec4) MatrixTimesVector 41 43
+              45:     34(ptr) AccessChain 21(output) 26
+                              Store 45 44
+              47:     31(ptr) AccessChain 30 46
+              48:          27 Load 47
+              49:     34(ptr) AccessChain 21(output) 26
+              50:    7(fvec4) Load 49
+              51:    7(fvec4) MatrixTimesVector 48 50
+              52:     34(ptr) AccessChain 21(output) 26
+                              Store 52 51
+              53:     31(ptr) AccessChain 30 26
+              54:          27 Load 53
+              57:    6(float) CompositeExtract 54 0 0
+              58:    6(float) CompositeExtract 54 0 1
+              59:    6(float) CompositeExtract 54 0 2
+              60:    6(float) CompositeExtract 54 0 3
+              61:    6(float) CompositeExtract 54 1 0
+              62:    6(float) CompositeExtract 54 1 1
+              63:    6(float) CompositeExtract 54 1 2
+              64:    6(float) CompositeExtract 54 1 3
+              65:    6(float) CompositeExtract 54 2 0
+              66:    6(float) CompositeExtract 54 2 1
+              67:    6(float) CompositeExtract 54 2 2
+              68:    6(float) CompositeExtract 54 2 3
+              69:    7(fvec4) CompositeConstruct 57 58 59 60
+              70:    7(fvec4) CompositeConstruct 61 62 63 64
+              71:    7(fvec4) CompositeConstruct 65 66 67 68
+              72:          55 CompositeConstruct 69 70 71
+              74:     73(ptr) AccessChain 13(input) 39
+              75:    8(fvec3) Load 74
+              76:    7(fvec4) MatrixTimesVector 72 75
+              77:    6(float) CompositeExtract 76 0
+              78:    6(float) CompositeExtract 76 1
+              79:    6(float) CompositeExtract 76 2
+              80:    8(fvec3) CompositeConstruct 77 78 79
+              81:     73(ptr) AccessChain 21(output) 39
+                              Store 81 80
+              82:11(PS_INPUT) Load 21(output)
+                              ReturnValue 82
+                              FunctionEnd

+ 135 - 78
3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out

@@ -49,34 +49,48 @@ Shader version: 500
 0:19              Constant:
 0:19                1 (const int)
 0:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20          move second child to first child ( temp sampler)
-0:?             'tex2.smpl' ( temp sampler)
-0:20            smpl: direct index for structure ( temp sampler)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child ( temp texture2D)
-0:?             'tex2.tex' ( temp texture2D)
-0:20            tex: direct index for structure ( temp texture2D)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                1 (const int)
+0:20        move second child to first child ( temp 4-component vector of float)
+0:20          'res' ( temp 4-component vector of float)
+0:20          Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?             'tex1.smpl' ( temp sampler)
+0:?             'tex1.tex' ( temp texture2D)
 0:21      Sequence
 0:21        Sequence
+0:21          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:21          move second child to first child ( temp sampler)
+0:?             'tex2.smpl' ( temp sampler)
+0:21            smpl: direct index for structure ( temp sampler)
+0:21              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21              Constant:
+0:21                0 (const int)
+0:21          move second child to first child ( temp texture2D)
+0:?             'tex2.tex' ( temp texture2D)
+0:21            tex: direct index for structure ( temp texture2D)
+0:21              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21              Constant:
+0:21                1 (const int)
+0:22      add second child into first child ( temp 4-component vector of float)
+0:22        'res' ( temp 4-component vector of float)
+0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?           'tex2.smpl' ( temp sampler)
+0:?           'tex2.tex' ( temp texture2D)
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp sampler)
 0:?             'tex3.smpl' ( temp sampler)
 0:?             'tex1.smpl' ( temp sampler)
-0:21          move second child to first child ( temp texture2D)
+0:23          move second child to first child ( temp texture2D)
 0:?             'tex3.tex' ( temp texture2D)
 0:?             'tex1.tex' ( temp texture2D)
-0:22      Branch: Return with expression
-0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:24      add second child into first child ( temp 4-component vector of float)
+0:24        'res' ( temp 4-component vector of float)
+0:24        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
 0:?           'tex3.smpl' ( temp sampler)
 0:?           'tex3.tex' ( temp texture2D)
+0:25      Branch: Return with expression
+0:25        'res' ( temp 4-component vector of float)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -141,34 +155,48 @@ Shader version: 500
 0:19              Constant:
 0:19                1 (const int)
 0:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20          move second child to first child ( temp sampler)
-0:?             'tex2.smpl' ( temp sampler)
-0:20            smpl: direct index for structure ( temp sampler)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child ( temp texture2D)
-0:?             'tex2.tex' ( temp texture2D)
-0:20            tex: direct index for structure ( temp texture2D)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                1 (const int)
+0:20        move second child to first child ( temp 4-component vector of float)
+0:20          'res' ( temp 4-component vector of float)
+0:20          Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?             'tex1.smpl' ( temp sampler)
+0:?             'tex1.tex' ( temp texture2D)
 0:21      Sequence
 0:21        Sequence
+0:21          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:21          move second child to first child ( temp sampler)
+0:?             'tex2.smpl' ( temp sampler)
+0:21            smpl: direct index for structure ( temp sampler)
+0:21              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21              Constant:
+0:21                0 (const int)
+0:21          move second child to first child ( temp texture2D)
+0:?             'tex2.tex' ( temp texture2D)
+0:21            tex: direct index for structure ( temp texture2D)
+0:21              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21              Constant:
+0:21                1 (const int)
+0:22      add second child into first child ( temp 4-component vector of float)
+0:22        'res' ( temp 4-component vector of float)
+0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?           'tex2.smpl' ( temp sampler)
+0:?           'tex2.tex' ( temp texture2D)
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp sampler)
 0:?             'tex3.smpl' ( temp sampler)
 0:?             'tex1.smpl' ( temp sampler)
-0:21          move second child to first child ( temp texture2D)
+0:23          move second child to first child ( temp texture2D)
 0:?             'tex3.tex' ( temp texture2D)
 0:?             'tex1.tex' ( temp texture2D)
-0:22      Branch: Return with expression
-0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:24      add second child into first child ( temp 4-component vector of float)
+0:24        'res' ( temp 4-component vector of float)
+0:24        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
 0:?           'tex3.smpl' ( temp sampler)
 0:?           'tex3.tex' ( temp texture2D)
+0:25      Branch: Return with expression
+0:25        'res' ( temp 4-component vector of float)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -182,12 +210,12 @@ Shader version: 500
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 84
+// Id's are bound by 101
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 82
+                              EntryPoint Vertex 4  "main" 99
                               Source HLSL 500
                               Name 4  "main"
                               Name 15  "lookUp(struct-FxaaTex-p1-t211;"
@@ -206,17 +234,22 @@ Shader version: 500
                               Name 49  "flattenTemp"
                               Name 53  "tex1.smpl"
                               Name 58  "tex1.tex"
-                              Name 62  "flattenTemp"
-                              Name 64  "tex2.smpl"
-                              Name 67  "tex2.tex"
-                              Name 70  "tex3.smpl"
-                              Name 72  "tex3.tex"
-                              Name 74  "param"
-                              Name 76  "param"
-                              Name 82  "@entryPointOutput"
+                              Name 63  "res"
+                              Name 64  "param"
+                              Name 66  "param"
+                              Name 69  "flattenTemp"
+                              Name 71  "tex2.smpl"
+                              Name 74  "tex2.tex"
+                              Name 77  "param"
+                              Name 79  "param"
+                              Name 84  "tex3.smpl"
+                              Name 86  "tex3.tex"
+                              Name 88  "param"
+                              Name 90  "param"
+                              Name 99  "@entryPointOutput"
                               Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 42(g_tInputTexture) DescriptorSet 0
-                              Decorate 82(@entryPointOutput) Location 0
+                              Decorate 99(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
@@ -243,12 +276,13 @@ Shader version: 500
               54:             TypeInt 32 1
               55:     54(int) Constant 0
               59:     54(int) Constant 1
-              81:             TypePointer Output 11(fvec4)
-82(@entryPointOutput):     81(ptr) Variable Output
+              62:             TypePointer Function 11(fvec4)
+              98:             TypePointer Output 11(fvec4)
+99(@entryPointOutput):     98(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              83:   11(fvec4) FunctionCall 22(@main()
-                              Store 82(@entryPointOutput) 83
+             100:   11(fvec4) FunctionCall 22(@main()
+                              Store 99(@entryPointOutput) 100
                               Return
                               FunctionEnd
 15(lookUp(struct-FxaaTex-p1-t211;):   11(fvec4) Function None 12
@@ -278,13 +312,18 @@ Shader version: 500
  49(flattenTemp):     44(ptr) Variable Function
    53(tex1.smpl):      7(ptr) Variable Function
     58(tex1.tex):     10(ptr) Variable Function
- 62(flattenTemp):     44(ptr) Variable Function
-   64(tex2.smpl):      7(ptr) Variable Function
-    67(tex2.tex):     10(ptr) Variable Function
-   70(tex3.smpl):      7(ptr) Variable Function
-    72(tex3.tex):     10(ptr) Variable Function
-       74(param):      7(ptr) Variable Function
-       76(param):     10(ptr) Variable Function
+         63(res):     62(ptr) Variable Function
+       64(param):      7(ptr) Variable Function
+       66(param):     10(ptr) Variable Function
+ 69(flattenTemp):     44(ptr) Variable Function
+   71(tex2.smpl):      7(ptr) Variable Function
+    74(tex2.tex):     10(ptr) Variable Function
+       77(param):      7(ptr) Variable Function
+       79(param):     10(ptr) Variable Function
+   84(tex3.smpl):      7(ptr) Variable Function
+    86(tex3.tex):     10(ptr) Variable Function
+       88(param):      7(ptr) Variable Function
+       90(param):     10(ptr) Variable Function
               50:           6 Load 38(g_tInputTexture_sampler)
               51:           9 Load 42(g_tInputTexture)
               52: 17(FxaaTex) CompositeConstruct 50 51
@@ -295,22 +334,40 @@ Shader version: 500
               60:     10(ptr) AccessChain 49(flattenTemp) 59
               61:           9 Load 60
                               Store 58(tex1.tex) 61
-              63: 17(FxaaTex) FunctionCall 19(fillOpaque()
-                              Store 62(flattenTemp) 63
-              65:      7(ptr) AccessChain 62(flattenTemp) 55
-              66:           6 Load 65
-                              Store 64(tex2.smpl) 66
-              68:     10(ptr) AccessChain 62(flattenTemp) 59
-              69:           9 Load 68
-                              Store 67(tex2.tex) 69
-              71:           6 Load 53(tex1.smpl)
-                              Store 70(tex3.smpl) 71
-              73:           9 Load 58(tex1.tex)
-                              Store 72(tex3.tex) 73
-              75:           6 Load 70(tex3.smpl)
-                              Store 74(param) 75
-              77:           9 Load 72(tex3.tex)
-                              Store 76(param) 77
-              78:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 74(param) 76(param)
-                              ReturnValue 78
+              65:           6 Load 53(tex1.smpl)
+                              Store 64(param) 65
+              67:           9 Load 58(tex1.tex)
+                              Store 66(param) 67
+              68:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 64(param) 66(param)
+                              Store 63(res) 68
+              70: 17(FxaaTex) FunctionCall 19(fillOpaque()
+                              Store 69(flattenTemp) 70
+              72:      7(ptr) AccessChain 69(flattenTemp) 55
+              73:           6 Load 72
+                              Store 71(tex2.smpl) 73
+              75:     10(ptr) AccessChain 69(flattenTemp) 59
+              76:           9 Load 75
+                              Store 74(tex2.tex) 76
+              78:           6 Load 71(tex2.smpl)
+                              Store 77(param) 78
+              80:           9 Load 74(tex2.tex)
+                              Store 79(param) 80
+              81:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 77(param) 79(param)
+              82:   11(fvec4) Load 63(res)
+              83:   11(fvec4) FAdd 82 81
+                              Store 63(res) 83
+              85:           6 Load 53(tex1.smpl)
+                              Store 84(tex3.smpl) 85
+              87:           9 Load 58(tex1.tex)
+                              Store 86(tex3.tex) 87
+              89:           6 Load 84(tex3.smpl)
+                              Store 88(param) 89
+              91:           9 Load 86(tex3.tex)
+                              Store 90(param) 91
+              92:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 88(param) 90(param)
+              93:   11(fvec4) Load 63(res)
+              94:   11(fvec4) FAdd 93 92
+                              Store 63(res) 94
+              95:   11(fvec4) Load 63(res)
+                              ReturnValue 95
                               FunctionEnd

+ 684 - 0
3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out

@@ -0,0 +1,684 @@
+hlsl.mul-truncate.frag
+WARNING: 0:24: '' : mul() matrix size mismatch 
+WARNING: 0:25: '' : mul() matrix size mismatch 
+WARNING: 0:28: '' : mul() matrix size mismatch 
+WARNING: 0:29: '' : mul() matrix size mismatch 
+WARNING: 0:32: '' : mul() matrix size mismatch 
+WARNING: 0:33: '' : mul() matrix size mismatch 
+WARNING: 0:34: '' : mul() matrix size mismatch 
+WARNING: 0:35: '' : mul() matrix size mismatch 
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:18  Function Definition: @main( ( temp 4-component vector of float)
+0:18    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r00' ( temp float)
+0:20          dot-product ( temp float)
+0:20            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:20              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20              Constant:
+0:20                8 (const uint)
+0:20            Construct vec2 ( in 2-component vector of float)
+0:20              v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:20                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20                Constant:
+0:20                  7 (const uint)
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r01' ( temp float)
+0:21          dot-product ( temp float)
+0:21            Construct vec2 ( in 2-component vector of float)
+0:21              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:21                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21                Constant:
+0:21                  6 (const uint)
+0:21            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:21              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21              Constant:
+0:21                8 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of float)
+0:24          'r10' ( temp 4-component vector of float)
+0:24          matrix-times-vector ( temp 4-component vector of float)
+0:24            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:24              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:24                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:24              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24              Constant:
+0:24                7 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of float)
+0:25          'r11' ( temp 4-component vector of float)
+0:25          matrix-times-vector ( temp 4-component vector of float)
+0:25            m34: direct index for structure (layout( row_major std140) uniform 3X4 matrix of float)
+0:25              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25              Constant:
+0:25                2 (const uint)
+0:25            Construct vec3 ( uniform 3-component vector of float)
+0:25              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:25                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25                Constant:
+0:25                  6 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'r20' ( temp 4-component vector of float)
+0:28          vector-times-matrix ( temp 4-component vector of float)
+0:28            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:28              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28              Constant:
+0:28                7 (const uint)
+0:28            Construct mat4x3 ( uniform 4X3 matrix of float)
+0:28              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of float)
+0:29          'r21' ( temp 4-component vector of float)
+0:29          vector-times-matrix ( temp 4-component vector of float)
+0:29            Construct vec3 ( uniform 3-component vector of float)
+0:29              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:29                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29                Constant:
+0:29                  6 (const uint)
+0:29            m43: direct index for structure (layout( row_major std140) uniform 4X3 matrix of float)
+0:29              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29              Constant:
+0:29                1 (const uint)
+0:32      Sequence
+0:32        move second child to first child ( temp 2X3 matrix of float)
+0:32          'r30' ( temp 2X3 matrix of float)
+0:32          matrix-multiply ( temp 2X3 matrix of float)
+0:32            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:32              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32              Constant:
+0:32                3 (const uint)
+0:32            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:32              m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:32                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32                Constant:
+0:32                  4 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp 3X4 matrix of float)
+0:33          'r31' ( temp 3X4 matrix of float)
+0:33          matrix-multiply ( temp 3X4 matrix of float)
+0:33            m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:33              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33              Constant:
+0:33                4 (const uint)
+0:33            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:33              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:33                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33                Constant:
+0:33                  3 (const uint)
+0:34      Sequence
+0:34        move second child to first child ( temp 3X2 matrix of float)
+0:34          'r32' ( temp 3X2 matrix of float)
+0:34          matrix-multiply ( temp 3X2 matrix of float)
+0:34            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:34              m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:34                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34                Constant:
+0:34                  5 (const uint)
+0:34            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:34              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34              Constant:
+0:34                3 (const uint)
+0:35      Sequence
+0:35        move second child to first child ( temp 4X3 matrix of float)
+0:35          'r33' ( temp 4X3 matrix of float)
+0:35          matrix-multiply ( temp 4X3 matrix of float)
+0:35            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:35              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:35                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35                Constant:
+0:35                  3 (const uint)
+0:35            m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:35              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35              Constant:
+0:35                5 (const uint)
+0:37      Branch: Return with expression
+0:37        add ( temp 4-component vector of float)
+0:37          add ( temp 4-component vector of float)
+0:37            add ( temp 4-component vector of float)
+0:37              add ( temp 4-component vector of float)
+0:37                add ( temp 4-component vector of float)
+0:37                  add ( temp 4-component vector of float)
+0:37                    add ( temp 4-component vector of float)
+0:37                      add ( temp 4-component vector of float)
+0:37                        add ( temp 4-component vector of float)
+0:37                          'r10' ( temp 4-component vector of float)
+0:37                          'r11' ( temp 4-component vector of float)
+0:37                        'r20' ( temp 4-component vector of float)
+0:37                      'r21' ( temp 4-component vector of float)
+0:37                    'r00' ( temp float)
+0:37                  'r01' ( temp float)
+0:37                direct index ( temp float)
+0:37                  direct index ( temp 3-component vector of float)
+0:37                    'r30' ( temp 2X3 matrix of float)
+0:37                    Constant:
+0:37                      0 (const int)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              direct index ( temp 4-component vector of float)
+0:37                'r31' ( temp 3X4 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            direct index ( temp float)
+0:37              direct index ( temp 2-component vector of float)
+0:37                'r32' ( temp 3X2 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          direct index ( temp 4-component vector of float)
+0:37            transpose ( temp 3X4 matrix of float)
+0:37              'r33' ( temp 4X3 matrix of float)
+0:37            Constant:
+0:37              0 (const int)
+0:18  Function Definition: main( ( temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:18  Function Definition: @main( ( temp 4-component vector of float)
+0:18    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r00' ( temp float)
+0:20          dot-product ( temp float)
+0:20            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:20              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20              Constant:
+0:20                8 (const uint)
+0:20            Construct vec2 ( in 2-component vector of float)
+0:20              v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:20                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20                Constant:
+0:20                  7 (const uint)
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r01' ( temp float)
+0:21          dot-product ( temp float)
+0:21            Construct vec2 ( in 2-component vector of float)
+0:21              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:21                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21                Constant:
+0:21                  6 (const uint)
+0:21            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:21              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21              Constant:
+0:21                8 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of float)
+0:24          'r10' ( temp 4-component vector of float)
+0:24          matrix-times-vector ( temp 4-component vector of float)
+0:24            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:24              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:24                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:24              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24              Constant:
+0:24                7 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of float)
+0:25          'r11' ( temp 4-component vector of float)
+0:25          matrix-times-vector ( temp 4-component vector of float)
+0:25            m34: direct index for structure (layout( row_major std140) uniform 3X4 matrix of float)
+0:25              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25              Constant:
+0:25                2 (const uint)
+0:25            Construct vec3 ( uniform 3-component vector of float)
+0:25              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:25                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25                Constant:
+0:25                  6 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'r20' ( temp 4-component vector of float)
+0:28          vector-times-matrix ( temp 4-component vector of float)
+0:28            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:28              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28              Constant:
+0:28                7 (const uint)
+0:28            Construct mat4x3 ( uniform 4X3 matrix of float)
+0:28              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of float)
+0:29          'r21' ( temp 4-component vector of float)
+0:29          vector-times-matrix ( temp 4-component vector of float)
+0:29            Construct vec3 ( uniform 3-component vector of float)
+0:29              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:29                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29                Constant:
+0:29                  6 (const uint)
+0:29            m43: direct index for structure (layout( row_major std140) uniform 4X3 matrix of float)
+0:29              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29              Constant:
+0:29                1 (const uint)
+0:32      Sequence
+0:32        move second child to first child ( temp 2X3 matrix of float)
+0:32          'r30' ( temp 2X3 matrix of float)
+0:32          matrix-multiply ( temp 2X3 matrix of float)
+0:32            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:32              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32              Constant:
+0:32                3 (const uint)
+0:32            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:32              m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:32                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32                Constant:
+0:32                  4 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp 3X4 matrix of float)
+0:33          'r31' ( temp 3X4 matrix of float)
+0:33          matrix-multiply ( temp 3X4 matrix of float)
+0:33            m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:33              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33              Constant:
+0:33                4 (const uint)
+0:33            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:33              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:33                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33                Constant:
+0:33                  3 (const uint)
+0:34      Sequence
+0:34        move second child to first child ( temp 3X2 matrix of float)
+0:34          'r32' ( temp 3X2 matrix of float)
+0:34          matrix-multiply ( temp 3X2 matrix of float)
+0:34            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:34              m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:34                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34                Constant:
+0:34                  5 (const uint)
+0:34            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:34              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34              Constant:
+0:34                3 (const uint)
+0:35      Sequence
+0:35        move second child to first child ( temp 4X3 matrix of float)
+0:35          'r33' ( temp 4X3 matrix of float)
+0:35          matrix-multiply ( temp 4X3 matrix of float)
+0:35            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:35              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:35                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35                Constant:
+0:35                  3 (const uint)
+0:35            m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:35              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35              Constant:
+0:35                5 (const uint)
+0:37      Branch: Return with expression
+0:37        add ( temp 4-component vector of float)
+0:37          add ( temp 4-component vector of float)
+0:37            add ( temp 4-component vector of float)
+0:37              add ( temp 4-component vector of float)
+0:37                add ( temp 4-component vector of float)
+0:37                  add ( temp 4-component vector of float)
+0:37                    add ( temp 4-component vector of float)
+0:37                      add ( temp 4-component vector of float)
+0:37                        add ( temp 4-component vector of float)
+0:37                          'r10' ( temp 4-component vector of float)
+0:37                          'r11' ( temp 4-component vector of float)
+0:37                        'r20' ( temp 4-component vector of float)
+0:37                      'r21' ( temp 4-component vector of float)
+0:37                    'r00' ( temp float)
+0:37                  'r01' ( temp float)
+0:37                direct index ( temp float)
+0:37                  direct index ( temp 3-component vector of float)
+0:37                    'r30' ( temp 2X3 matrix of float)
+0:37                    Constant:
+0:37                      0 (const int)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              direct index ( temp 4-component vector of float)
+0:37                'r31' ( temp 3X4 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            direct index ( temp float)
+0:37              direct index ( temp 2-component vector of float)
+0:37                'r32' ( temp 3X2 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          direct index ( temp 4-component vector of float)
+0:37            transpose ( temp 3X4 matrix of float)
+0:37              'r33' ( temp 4X3 matrix of float)
+0:37            Constant:
+0:37              0 (const int)
+0:18  Function Definition: main( ( temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 231
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 229
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 12  "r00"
+                              Name 21  "Matrix"
+                              MemberName 21(Matrix) 0  "m44"
+                              MemberName 21(Matrix) 1  "m43"
+                              MemberName 21(Matrix) 2  "m34"
+                              MemberName 21(Matrix) 3  "m33"
+                              MemberName 21(Matrix) 4  "m24"
+                              MemberName 21(Matrix) 5  "m42"
+                              MemberName 21(Matrix) 6  "v4"
+                              MemberName 21(Matrix) 7  "v3"
+                              MemberName 21(Matrix) 8  "v2"
+                              Name 23  ""
+                              Name 37  "r01"
+                              Name 49  "r10"
+                              Name 75  "r11"
+                              Name 87  "r20"
+                              Name 110  "r21"
+                              Name 124  "r30"
+                              Name 144  "r31"
+                              Name 162  "r32"
+                              Name 181  "r33"
+                              Name 229  "@entryPointOutput"
+                              MemberDecorate 21(Matrix) 0 RowMajor
+                              MemberDecorate 21(Matrix) 0 Offset 0
+                              MemberDecorate 21(Matrix) 0 MatrixStride 16
+                              MemberDecorate 21(Matrix) 1 RowMajor
+                              MemberDecorate 21(Matrix) 1 Offset 64
+                              MemberDecorate 21(Matrix) 1 MatrixStride 16
+                              MemberDecorate 21(Matrix) 2 RowMajor
+                              MemberDecorate 21(Matrix) 2 Offset 112
+                              MemberDecorate 21(Matrix) 2 MatrixStride 16
+                              MemberDecorate 21(Matrix) 3 RowMajor
+                              MemberDecorate 21(Matrix) 3 Offset 176
+                              MemberDecorate 21(Matrix) 3 MatrixStride 16
+                              MemberDecorate 21(Matrix) 4 RowMajor
+                              MemberDecorate 21(Matrix) 4 Offset 224
+                              MemberDecorate 21(Matrix) 4 MatrixStride 16
+                              MemberDecorate 21(Matrix) 5 RowMajor
+                              MemberDecorate 21(Matrix) 5 Offset 288
+                              MemberDecorate 21(Matrix) 5 MatrixStride 16
+                              MemberDecorate 21(Matrix) 6 Offset 320
+                              MemberDecorate 21(Matrix) 7 Offset 336
+                              MemberDecorate 21(Matrix) 8 Offset 352
+                              Decorate 21(Matrix) Block
+                              Decorate 23 DescriptorSet 0
+                              Decorate 229(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Function 6(float)
+              13:             TypeMatrix 7(fvec4) 4
+              14:             TypeVector 6(float) 3
+              15:             TypeMatrix 14(fvec3) 4
+              16:             TypeMatrix 7(fvec4) 3
+              17:             TypeMatrix 14(fvec3) 3
+              18:             TypeMatrix 7(fvec4) 2
+              19:             TypeVector 6(float) 2
+              20:             TypeMatrix 19(fvec2) 4
+      21(Matrix):             TypeStruct 13 15 16 17 18 20 7(fvec4) 14(fvec3) 19(fvec2)
+              22:             TypePointer Uniform 21(Matrix)
+              23:     22(ptr) Variable Uniform
+              24:             TypeInt 32 1
+              25:     24(int) Constant 8
+              26:             TypePointer Uniform 19(fvec2)
+              29:     24(int) Constant 7
+              30:             TypePointer Uniform 14(fvec3)
+              38:     24(int) Constant 6
+              39:             TypePointer Uniform 7(fvec4)
+              48:             TypePointer Function 7(fvec4)
+              50:     24(int) Constant 0
+              51:             TypePointer Uniform 13
+              54:    6(float) Constant 1065353216
+              55:    6(float) Constant 0
+              76:     24(int) Constant 2
+              77:             TypePointer Uniform 16
+             117:     24(int) Constant 1
+             118:             TypePointer Uniform 15
+             122:             TypeMatrix 14(fvec3) 2
+             123:             TypePointer Function 122
+             125:     24(int) Constant 3
+             126:             TypePointer Uniform 17
+             129:     24(int) Constant 4
+             130:             TypePointer Uniform 18
+             143:             TypePointer Function 16
+             149:             TypeMatrix 19(fvec2) 3
+             161:             TypePointer Function 149
+             163:     24(int) Constant 5
+             164:             TypePointer Uniform 20
+             180:             TypePointer Function 15
+             209:             TypeInt 32 0
+             210:    209(int) Constant 0
+             228:             TypePointer Output 7(fvec4)
+229(@entryPointOutput):    228(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+             230:    7(fvec4) FunctionCall 9(@main()
+                              Store 229(@entryPointOutput) 230
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+         12(r00):     11(ptr) Variable Function
+         37(r01):     11(ptr) Variable Function
+         49(r10):     48(ptr) Variable Function
+         75(r11):     48(ptr) Variable Function
+         87(r20):     48(ptr) Variable Function
+        110(r21):     48(ptr) Variable Function
+        124(r30):    123(ptr) Variable Function
+        144(r31):    143(ptr) Variable Function
+        162(r32):    161(ptr) Variable Function
+        181(r33):    180(ptr) Variable Function
+              27:     26(ptr) AccessChain 23 25
+              28:   19(fvec2) Load 27
+              31:     30(ptr) AccessChain 23 29
+              32:   14(fvec3) Load 31
+              33:    6(float) CompositeExtract 32 0
+              34:    6(float) CompositeExtract 32 1
+              35:   19(fvec2) CompositeConstruct 33 34
+              36:    6(float) Dot 28 35
+                              Store 12(r00) 36
+              40:     39(ptr) AccessChain 23 38
+              41:    7(fvec4) Load 40
+              42:    6(float) CompositeExtract 41 0
+              43:    6(float) CompositeExtract 41 1
+              44:   19(fvec2) CompositeConstruct 42 43
+              45:     26(ptr) AccessChain 23 25
+              46:   19(fvec2) Load 45
+              47:    6(float) Dot 44 46
+                              Store 37(r01) 47
+              52:     51(ptr) AccessChain 23 50
+              53:          13 Load 52
+              56:    6(float) CompositeExtract 53 0 0
+              57:    6(float) CompositeExtract 53 0 1
+              58:    6(float) CompositeExtract 53 0 2
+              59:    6(float) CompositeExtract 53 0 3
+              60:    6(float) CompositeExtract 53 1 0
+              61:    6(float) CompositeExtract 53 1 1
+              62:    6(float) CompositeExtract 53 1 2
+              63:    6(float) CompositeExtract 53 1 3
+              64:    6(float) CompositeExtract 53 2 0
+              65:    6(float) CompositeExtract 53 2 1
+              66:    6(float) CompositeExtract 53 2 2
+              67:    6(float) CompositeExtract 53 2 3
+              68:    7(fvec4) CompositeConstruct 56 57 58 59
+              69:    7(fvec4) CompositeConstruct 60 61 62 63
+              70:    7(fvec4) CompositeConstruct 64 65 66 67
+              71:          16 CompositeConstruct 68 69 70
+              72:     30(ptr) AccessChain 23 29
+              73:   14(fvec3) Load 72
+              74:    7(fvec4) MatrixTimesVector 71 73
+                              Store 49(r10) 74
+              78:     77(ptr) AccessChain 23 76
+              79:          16 Load 78
+              80:     39(ptr) AccessChain 23 38
+              81:    7(fvec4) Load 80
+              82:    6(float) CompositeExtract 81 0
+              83:    6(float) CompositeExtract 81 1
+              84:    6(float) CompositeExtract 81 2
+              85:   14(fvec3) CompositeConstruct 82 83 84
+              86:    7(fvec4) MatrixTimesVector 79 85
+                              Store 75(r11) 86
+              88:     30(ptr) AccessChain 23 29
+              89:   14(fvec3) Load 88
+              90:     51(ptr) AccessChain 23 50
+              91:          13 Load 90
+              92:    6(float) CompositeExtract 91 0 0
+              93:    6(float) CompositeExtract 91 0 1
+              94:    6(float) CompositeExtract 91 0 2
+              95:    6(float) CompositeExtract 91 1 0
+              96:    6(float) CompositeExtract 91 1 1
+              97:    6(float) CompositeExtract 91 1 2
+              98:    6(float) CompositeExtract 91 2 0
+              99:    6(float) CompositeExtract 91 2 1
+             100:    6(float) CompositeExtract 91 2 2
+             101:    6(float) CompositeExtract 91 3 0
+             102:    6(float) CompositeExtract 91 3 1
+             103:    6(float) CompositeExtract 91 3 2
+             104:   14(fvec3) CompositeConstruct 92 93 94
+             105:   14(fvec3) CompositeConstruct 95 96 97
+             106:   14(fvec3) CompositeConstruct 98 99 100
+             107:   14(fvec3) CompositeConstruct 101 102 103
+             108:          15 CompositeConstruct 104 105 106 107
+             109:    7(fvec4) VectorTimesMatrix 89 108
+                              Store 87(r20) 109
+             111:     39(ptr) AccessChain 23 38
+             112:    7(fvec4) Load 111
+             113:    6(float) CompositeExtract 112 0
+             114:    6(float) CompositeExtract 112 1
+             115:    6(float) CompositeExtract 112 2
+             116:   14(fvec3) CompositeConstruct 113 114 115
+             119:    118(ptr) AccessChain 23 117
+             120:          15 Load 119
+             121:    7(fvec4) VectorTimesMatrix 116 120
+                              Store 110(r21) 121
+             127:    126(ptr) AccessChain 23 125
+             128:          17 Load 127
+             131:    130(ptr) AccessChain 23 129
+             132:          18 Load 131
+             133:    6(float) CompositeExtract 132 0 0
+             134:    6(float) CompositeExtract 132 0 1
+             135:    6(float) CompositeExtract 132 0 2
+             136:    6(float) CompositeExtract 132 1 0
+             137:    6(float) CompositeExtract 132 1 1
+             138:    6(float) CompositeExtract 132 1 2
+             139:   14(fvec3) CompositeConstruct 133 134 135
+             140:   14(fvec3) CompositeConstruct 136 137 138
+             141:         122 CompositeConstruct 139 140
+             142:         122 MatrixTimesMatrix 128 141
+                              Store 124(r30) 142
+             145:    130(ptr) AccessChain 23 129
+             146:          18 Load 145
+             147:    126(ptr) AccessChain 23 125
+             148:          17 Load 147
+             150:    6(float) CompositeExtract 148 0 0
+             151:    6(float) CompositeExtract 148 0 1
+             152:    6(float) CompositeExtract 148 1 0
+             153:    6(float) CompositeExtract 148 1 1
+             154:    6(float) CompositeExtract 148 2 0
+             155:    6(float) CompositeExtract 148 2 1
+             156:   19(fvec2) CompositeConstruct 150 151
+             157:   19(fvec2) CompositeConstruct 152 153
+             158:   19(fvec2) CompositeConstruct 154 155
+             159:         149 CompositeConstruct 156 157 158
+             160:          16 MatrixTimesMatrix 146 159
+                              Store 144(r31) 160
+             165:    164(ptr) AccessChain 23 163
+             166:          20 Load 165
+             167:    6(float) CompositeExtract 166 0 0
+             168:    6(float) CompositeExtract 166 0 1
+             169:    6(float) CompositeExtract 166 1 0
+             170:    6(float) CompositeExtract 166 1 1
+             171:    6(float) CompositeExtract 166 2 0
+             172:    6(float) CompositeExtract 166 2 1
+             173:   19(fvec2) CompositeConstruct 167 168
+             174:   19(fvec2) CompositeConstruct 169 170
+             175:   19(fvec2) CompositeConstruct 171 172
+             176:         149 CompositeConstruct 173 174 175
+             177:    126(ptr) AccessChain 23 125
+             178:          17 Load 177
+             179:         149 MatrixTimesMatrix 176 178
+                              Store 162(r32) 179
+             182:    126(ptr) AccessChain 23 125
+             183:          17 Load 182
+             184:    6(float) CompositeExtract 183 0 0
+             185:    6(float) CompositeExtract 183 0 1
+             186:    6(float) CompositeExtract 183 0 2
+             187:    6(float) CompositeExtract 183 1 0
+             188:    6(float) CompositeExtract 183 1 1
+             189:    6(float) CompositeExtract 183 1 2
+             190:   14(fvec3) CompositeConstruct 184 185 186
+             191:   14(fvec3) CompositeConstruct 187 188 189
+             192:         122 CompositeConstruct 190 191
+             193:    164(ptr) AccessChain 23 163
+             194:          20 Load 193
+             195:          15 MatrixTimesMatrix 192 194
+                              Store 181(r33) 195
+             196:    7(fvec4) Load 49(r10)
+             197:    7(fvec4) Load 75(r11)
+             198:    7(fvec4) FAdd 196 197
+             199:    7(fvec4) Load 87(r20)
+             200:    7(fvec4) FAdd 198 199
+             201:    7(fvec4) Load 110(r21)
+             202:    7(fvec4) FAdd 200 201
+             203:    6(float) Load 12(r00)
+             204:    7(fvec4) CompositeConstruct 203 203 203 203
+             205:    7(fvec4) FAdd 202 204
+             206:    6(float) Load 37(r01)
+             207:    7(fvec4) CompositeConstruct 206 206 206 206
+             208:    7(fvec4) FAdd 205 207
+             211:     11(ptr) AccessChain 124(r30) 50 210
+             212:    6(float) Load 211
+             213:    7(fvec4) CompositeConstruct 212 212 212 212
+             214:    7(fvec4) FAdd 208 213
+             215:     48(ptr) AccessChain 144(r31) 50
+             216:    7(fvec4) Load 215
+             217:    7(fvec4) FAdd 214 216
+             218:     11(ptr) AccessChain 162(r32) 50 210
+             219:    6(float) Load 218
+             220:    7(fvec4) CompositeConstruct 219 219 219 219
+             221:    7(fvec4) FAdd 217 220
+             222:          15 Load 181(r33)
+             223:          16 Transpose 222
+             224:    7(fvec4) CompositeExtract 223 0
+             225:    7(fvec4) FAdd 221 224
+                              ReturnValue 225
+                              FunctionEnd

+ 173 - 0
3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out

@@ -0,0 +1,173 @@
+hlsl.store.rwbyteaddressbuffer.type.comp
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 42
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 37
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vu3;"
+                              Name 10  "dispatchThreadID"
+                              Name 23  "byteAddrTemp"
+                              Name 28  "buffer"
+                              MemberName 28(buffer) 0  "@data"
+                              Name 30  "buffer"
+                              Name 35  "dispatchThreadID"
+                              Name 37  "dispatchThreadID"
+                              Name 39  "param"
+                              Decorate 27 ArrayStride 4
+                              MemberDecorate 28(buffer) 0 Offset 0
+                              Decorate 28(buffer) BufferBlock
+                              Decorate 30(buffer) DescriptorSet 0
+                              Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:      6(int) Constant 0
+              14:             TypePointer Function 6(int)
+              17:             TypeBool
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              25:     21(int) Constant 2
+              27:             TypeRuntimeArray 6(int)
+      28(buffer):             TypeStruct 27
+              29:             TypePointer Uniform 28(buffer)
+      30(buffer):     29(ptr) Variable Uniform
+              32:      6(int) Constant 2
+              33:             TypePointer Uniform 6(int)
+              36:             TypePointer Input 7(ivec3)
+37(dispatchThreadID):     36(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+35(dispatchThreadID):      8(ptr) Variable Function
+       39(param):      8(ptr) Variable Function
+              38:    7(ivec3) Load 37(dispatchThreadID)
+                              Store 35(dispatchThreadID) 38
+              40:    7(ivec3) Load 35(dispatchThreadID)
+                              Store 39(param) 40
+              41:           2 FunctionCall 11(@main(vu3;) 39(param)
+                              Return
+                              FunctionEnd
+  11(@main(vu3;):           2 Function None 9
+10(dispatchThreadID):      8(ptr) FunctionParameter
+              12:             Label
+23(byteAddrTemp):     22(ptr) Variable Function
+              15:     14(ptr) AccessChain 10(dispatchThreadID) 13
+              16:      6(int) Load 15
+              18:    17(bool) IEqual 16 13
+                              SelectionMerge 20 None
+                              BranchConditional 18 19 20
+              19:               Label
+              26:     21(int)   ShiftRightArithmetic 24 25
+                                Store 23(byteAddrTemp) 26
+              31:     21(int)   Load 23(byteAddrTemp)
+              34:     33(ptr)   AccessChain 30(buffer) 24 31
+                                Store 34 32
+                                Branch 20
+              20:             Label
+                              Return
+                              FunctionEnd

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 440 - 430
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out


+ 32 - 0
3rdparty/glslang/Test/hlsl.cbuffer-identifier.vert

@@ -0,0 +1,32 @@
+
+cbuffer ConstantBuffer : register( b0 )
+{
+    matrix World;
+    matrix View;
+    matrix Projection;
+};
+
+struct VS_INPUT
+{
+    float4 Pos : POSITION;
+    float3 Norm : NORMAL;
+};
+
+struct PS_INPUT
+{
+    float4 Pos : SV_POSITION;
+    float3 Norm : TEXCOORD0;
+};
+
+PS_INPUT main( VS_INPUT input )
+{
+    int ConstantBuffer = 42;  // test ConstantBuffer as an identifier
+
+    PS_INPUT output = (PS_INPUT)0;
+    output.Pos = mul( input.Pos, World );
+    output.Pos = mul( output.Pos, View );
+    output.Pos = mul( output.Pos, Projection );
+    output.Norm = mul( input.Norm, World );  // Work when output.Norm = mul( input.Norm, (float3x3)World );
+
+    return output;
+}

+ 4 - 1
3rdparty/glslang/Test/hlsl.flattenOpaqueInit.vert

@@ -17,7 +17,10 @@ FxaaTex fillOpaque()
 float4 main() : SV_TARGET0
 {
     FxaaTex tex1 = { g_tInputTexture_sampler, g_tInputTexture };
+    float4 res = lookUp(tex1);
     FxaaTex tex2 = fillOpaque();
+    res += lookUp(tex2);
     FxaaTex tex3 = tex1;
-    return lookUp(tex3);
+    res += lookUp(tex3);
+    return res;
 }

+ 38 - 0
3rdparty/glslang/Test/hlsl.mul-truncate.frag

@@ -0,0 +1,38 @@
+
+// Test v*v, v*m, m*v, and m*m argument clamping.
+
+cbuffer Matrix
+{
+    float4x4  m44;
+    float4x3  m43;
+    float3x4  m34;
+    float3x3  m33;
+    float2x4  m24;
+    float4x2  m42;
+    float4    v4;
+    float3    v3;
+    float2    v2;
+}
+
+float4 main() : SV_Target0
+{
+    // v*v:
+    float  r00 = mul(v2, v3);  // float = float2*float3; // clamp to float2 dot product
+    float  r01 = mul(v4, v2);  // float = float4*float2; // clamp to float2 dot product
+
+    // v*m
+    float4 r10 = mul(v3, m44); // float4 = float3 * float4x4;  // clamp mat to float3x4;
+    float4 r11 = mul(v4, m34); // truncate vector to vec3
+
+    // m*v
+    float4 r20 = mul(m44, v3); // float4 = float4x4 * float3;  // clamp mat to float4x3;
+    float4 r21 = mul(m43, v4); // truncate vector to vec3
+
+    // m*m
+    float2x3 r30 = mul(m24, m33);  // float2x3 = float2x4 * float3x3;
+    float3x4 r31 = mul(m33, m24);  // float3x4 = float3x3 * float2x4;
+    float3x2 r32 = mul(m33, m42);  // float3x2 = float3x3 * float4x2;
+    float4x3 r33 = mul(m42, m33);  // float4x3 = float4x2 * float3x3;
+
+    return r10 + r11 + r20 + r21 + r00 + r01 + r30[0].x + r31[0] + r32[0].x + transpose(r33)[0];
+}

+ 8 - 0
3rdparty/glslang/Test/hlsl.store.rwbyteaddressbuffer.type.comp

@@ -0,0 +1,8 @@
+RWByteAddressBuffer buffer;
+
+[numthreads(64, 1, 1)]
+void main( uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+    if(dispatchThreadID.x == 0)
+        buffer.Store(0, 2);
+}

+ 2 - 0
3rdparty/glslang/glslang/Include/Types.h

@@ -1152,6 +1152,7 @@ public:
                                 sampler.clear();
                                 qualifier.clear();
                                 qualifier.storage = q;
+                                assert(!(isMatrix() && vectorSize != 0));  // prevent vectorSize != 0 on matrices
                             }
     // for explicit precision qualifier
     TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0,
@@ -1164,6 +1165,7 @@ public:
                                 qualifier.storage = q;
                                 qualifier.precision = p;
                                 assert(p >= EpqNone && p <= EpqHigh);
+                                assert(!(isMatrix() && vectorSize != 0));  // prevent vectorSize != 0 on matrices
                             }
     // for turning a TPublicType into a TType, using a shallow copy
     explicit TType(const TPublicType& p) :

+ 3 - 0
3rdparty/glslang/gtests/Hlsl.FromFile.cpp

@@ -108,6 +108,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.calculatelod.dx10.frag", "main"},
         {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.cbuffer-identifier.vert", "main"},
         {"hlsl.charLit.vert", "main"},
         {"hlsl.clip.frag", "main"},
         {"hlsl.clipdistance-1.frag", "main"},
@@ -238,6 +239,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.matrixSwizzle.vert", "ShaderFunction"},
         {"hlsl.memberFunCall.frag", "main"},
         {"hlsl.mintypes.frag", "main"},
+        {"hlsl.mul-truncate.frag", "main"},
         {"hlsl.multiEntry.vert", "RealEntrypoint"},
         {"hlsl.multiReturn.frag", "main"},
         {"hlsl.matrixindex.frag", "main"},
@@ -300,6 +302,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.shapeConvRet.frag", "main"},
         {"hlsl.snorm.uav.comp", "main"},
         {"hlsl.staticMemberFunction.frag", "main"},
+        {"hlsl.store.rwbyteaddressbuffer.type.comp", "main"},
         {"hlsl.stringtoken.frag", "main"},
         {"hlsl.string.frag", "main"},
         {"hlsl.struct.split-1.vert", "main"},

+ 14 - 4
3rdparty/glslang/hlsl/hlslGrammar.cpp

@@ -2029,10 +2029,18 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
 
     // Now known to be one of CBUFFER, TBUFFER, CLASS, or STRUCT
 
-    // IDENTIFIER
+
+    // IDENTIFIER.  It might also be a keyword which can double as an identifier.
+    // For example:  'cbuffer ConstantBuffer' or 'struct ConstantBuffer' is legal.
+    // 'cbuffer int' is also legal, and 'struct int' appears rejected only because
+    // it attempts to redefine the 'int' type.
+    const char* idString = getTypeString(peek());
     TString structName = "";
-    if (peekTokenClass(EHTokIdentifier)) {
-        structName = *token.string;
+    if (peekTokenClass(EHTokIdentifier) || idString != nullptr) {
+        if (idString != nullptr)
+            structName = *idString;
+        else
+            structName = *token.string;
         advanceToken();
     }
 
@@ -2618,6 +2626,8 @@ bool HlslGrammar::acceptFunctionBody(TFunctionDeclarator& declarator, TIntermNod
 //
 bool HlslGrammar::acceptParenExpression(TIntermTyped*& expression)
 {
+    expression = nullptr;
+
     // LEFT_PAREN
     if (! acceptTokenClass(EHTokLeftParen))
         expected("(");
@@ -3666,7 +3676,6 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement, const TAttri
         }
 
         // LEFT_PAREN condition RIGHT_PAREN
-        TIntermTyped* condition;
         if (! acceptParenExpression(condition))
             return false;
         condition = parseContext.convertConditionalExpression(loc, condition);
@@ -4056,6 +4065,7 @@ const char* HlslGrammar::getTypeString(EHlslTokenClass tokenClass) const
     case EHTokMin10float: return "min10float";
     case EHTokMin16int:   return "min16int";
     case EHTokMin12int:   return "min12int";
+    case EHTokConstantBuffer: return "ConstantBuffer";
     default:
         return nullptr;
     }

+ 88 - 1
3rdparty/glslang/hlsl/hlslParseHelper.cpp

@@ -3238,7 +3238,7 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
 
             // Index into the array to find the item being loaded.
             // Byte address buffers index in bytes (only multiples of 4 permitted... not so much a byte address
-            // buffer then, but that's what it calls itself.
+            // buffer then, but that's what it calls itself).
 
             int size = 0;
 
@@ -3274,6 +3274,9 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
                                                                                         : EOpIndexIndirect;
 
                 TIntermTyped* lValue = intermediate.addIndex(idxOp, argArray, offsetIdx, loc);
+                const TType derefType(argArray->getType(), 0);
+                lValue->setType(derefType);
+
                 TIntermTyped* rValue = (size == 1) ? argValue :
                     intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc);
                     
@@ -5008,6 +5011,12 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
         bool builtIn = false;
         int thisDepth = 0;
 
+        // For mat mul, the situation is unusual: we have to compare vector sizes to mat row or col sizes,
+        // and clamp the opposite arg.  Since that's complex, we farm it off to a separate method.
+        // It doesn't naturally fall out of processing an argument at a time in isolation.
+        if (function->getName() == "mul")
+            addGenMulArgumentConversion(loc, *function, arguments);
+
         TIntermAggregate* aggregate = arguments ? arguments->getAsAggregate() : nullptr;
 
         // TODO: this needs improvement: there's no way at present to look up a signature in
@@ -5169,6 +5178,83 @@ void HlslParseContext::pushFrontArguments(TIntermTyped* front, TIntermTyped*& ar
         arguments = intermediate.growAggregate(front, arguments);
 }
 
+//
+// HLSL allows mismatched dimensions on vec*mat, mat*vec, vec*vec, and mat*mat.  This is a
+// situation not well suited to resolution in intrinsic selection, but we can do so here, since we
+// can look at both arguments insert explicit shape changes if required.
+//
+void HlslParseContext::addGenMulArgumentConversion(const TSourceLoc& loc, TFunction& call, TIntermTyped*& args)
+{
+    TIntermAggregate* argAggregate = args ? args->getAsAggregate() : nullptr;
+
+    if (argAggregate == nullptr || argAggregate->getSequence().size() != 2) {
+        // It really ought to have two arguments.
+        error(loc, "expected: mul arguments", "", "");
+        return;
+    }
+
+    TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
+    TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
+
+    if (arg0->isVector() && arg1->isVector()) {
+        // For:
+        //    vec * vec: it's handled during intrinsic selection, so while we could do it here,
+        //               we can also ignore it, which is easier.
+    } else if (arg0->isVector() && arg1->isMatrix()) {
+        // vec * mat: we clamp the vec if the mat col is smaller, else clamp the mat col.
+        if (arg0->getVectorSize() < arg1->getMatrixCols()) {
+            // vec is smaller, so truncate larger mat dimension
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  0, arg0->getVectorSize(), arg1->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        } else if (arg0->getVectorSize() > arg1->getMatrixCols()) {
+            // vec is larger, so truncate vec to mat size
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  arg1->getMatrixCols());
+            arg0 = addConstructor(loc, arg0, truncType);
+        }
+    } else if (arg0->isMatrix() && arg1->isVector()) {
+        // mat * vec: we clamp the vec if the mat col is smaller, else clamp the mat col.
+        if (arg1->getVectorSize() < arg0->getMatrixRows()) {
+            // vec is smaller, so truncate larger mat dimension
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  0, arg0->getMatrixCols(), arg1->getVectorSize());
+            arg0 = addConstructor(loc, arg0, truncType);
+        } else if (arg1->getVectorSize() > arg0->getMatrixRows()) {
+            // vec is larger, so truncate vec to mat size
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  arg0->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        }
+    } else if (arg0->isMatrix() && arg1->isMatrix()) {
+        // mat * mat: we clamp the smaller inner dimension to match the other matrix size.
+        // Remember, HLSL Mrc = GLSL/SPIRV Mcr.
+        if (arg0->getMatrixRows() > arg1->getMatrixCols()) {
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  0, arg0->getMatrixCols(), arg1->getMatrixCols());
+            arg0 = addConstructor(loc, arg0, truncType);
+        } else if (arg0->getMatrixRows() < arg1->getMatrixCols()) {
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  0, arg0->getMatrixRows(), arg1->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        }
+    } else {
+        // It's something with scalars: we'll just leave it alone.  Function selection will handle it
+        // downstream.
+    }
+
+    // Warn if we altered one of the arguments
+    if (arg0 != argAggregate->getSequence()[0] || arg1 != argAggregate->getSequence()[1])
+        warn(loc, "mul() matrix size mismatch", "", "");
+
+    // Put arguments back.  (They might be unchanged, in which case this is harmless).
+    argAggregate->getSequence()[0] = arg0;
+    argAggregate->getSequence()[1] = arg1;
+
+    call[0].type = &arg0->getWritableType();
+    call[1].type = &arg1->getWritableType();
+}
+
 //
 // Add any needed implicit conversions for function-call arguments to input parameters.
 //
@@ -7015,6 +7101,7 @@ void HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQuali
     }
 }
 
+
 //
 // Look up a function name in the symbol table, and make sure it is a function.
 //

+ 1 - 0
3rdparty/glslang/hlsl/hlslParseHelper.h

@@ -141,6 +141,7 @@ public:
     void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
 
     const TFunction* findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, int& thisDepth, TIntermTyped*& args);
+    void addGenMulArgumentConversion(const TSourceLoc& loc, TFunction& call, TIntermTyped*& args);
     void declareTypedef(const TSourceLoc&, const TString& identifier, const TType&);
     void declareStruct(const TSourceLoc&, TString& structName, TType&);
     TSymbol* lookupUserType(const TString&, TType&);

+ 1 - 1
3rdparty/glslang/known_good.json

@@ -5,7 +5,7 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "ac04b2faeabc15811e8c542a5d7a36dbdba243b8"
+      "commit" : "188cd3780d76256d6bfcbdb216b6368e9b070628"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä