Jelajahi Sumber

Updated glslang.

Branimir Karadžić 9 tahun lalu
induk
melakukan
cff54fa7ec
100 mengubah file dengan 19009 tambahan dan 15324 penghapusan
  1. 75 17
      3rdparty/glslang/SPIRV/GlslangToSpv.cpp
  2. 1 1
      3rdparty/glslang/Test/baseResults/badChars.frag.out
  3. 72 58
      3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
  4. 232 178
      3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
  5. 215 165
      3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
  6. 98 85
      3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
  7. 183 79
      3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out
  8. 80 67
      3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
  9. 53 19
      3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out
  10. 83 31
      3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out
  11. 134 80
      3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out
  12. 170 138
      3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
  13. 249 226
      3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
  14. 48 36
      3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
  15. 92 60
      3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out
  16. 150 137
      3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
  17. 195 165
      3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
  18. 70 57
      3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out
  19. 16 9
      3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
  20. 48 14
      3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
  21. 37 23
      3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
  22. 81 48
      3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out
  23. 93 60
      3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out
  24. 184 225
      3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out
  25. 241 129
      3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out
  26. 61 48
      3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
  27. 121 109
      3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out
  28. 4 5
      3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
  29. 235 210
      3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out
  30. 216 193
      3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
  31. 235 212
      3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
  32. 198 195
      3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
  33. 206 183
      3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
  34. 177 154
      3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
  35. 395 372
      3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
  36. 413 390
      3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
  37. 555 532
      3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
  38. 537 514
      3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
  39. 909 886
      3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
  40. 93 90
      3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out
  41. 427 404
      3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
  42. 48 36
      3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
  43. 359 0
      3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out
  44. 357 0
      3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out
  45. 186 0
      3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out
  46. 66 53
      3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out
  47. 186 189
      3rdparty/glslang/Test/baseResults/hlsl.if.frag.out
  48. 217 186
      3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
  49. 177 164
      3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out
  50. 179 120
      3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out
  51. 48 35
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out
  52. 382 278
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
  53. 85 72
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
  54. 258 97
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out
  55. 185 75
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
  56. 38 24
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out
  57. 485 478
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
  58. 129 60
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out
  59. 150 63
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out
  60. 80 42
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out
  61. 235 148
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out
  62. 104 91
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
  63. 451 438
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
  64. 160 147
      3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
  65. 223 200
      3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
  66. 283 260
      3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
  67. 303 280
      3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
  68. 266 263
      3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
  69. 170 147
      3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
  70. 174 151
      3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
  71. 325 302
      3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
  72. 298 275
      3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
  73. 114 101
      3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
  74. 231 208
      3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
  75. 244 221
      3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
  76. 116 103
      3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
  77. 182 169
      3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
  78. 132 119
      3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
  79. 127 114
      3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
  80. 202 189
      3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
  81. 346 333
      3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
  82. 174 141
      3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
  83. 158 145
      3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
  84. 87 37
      3rdparty/glslang/Test/baseResults/hlsl.max.frag.out
  85. 140 127
      3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
  86. 77 47
      3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
  87. 60 46
      3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
  88. 96 83
      3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out
  89. 42 10
      3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out
  90. 567 535
      3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out
  91. 394 381
      3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
  92. 204 198
      3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out
  93. 232 191
      3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
  94. 99 76
      3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out
  95. 207 121
      3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out
  96. 169 83
      3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out
  97. 57 44
      3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out
  98. 70 57
      3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
  99. 132 119
      3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
  100. 61 48
      3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out

+ 75 - 17
3rdparty/glslang/SPIRV/GlslangToSpv.cpp

@@ -1748,42 +1748,98 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
     }
 }
 
+// This path handles both if-then-else and ?:
+// The if-then-else has a node type of void, while
+// ?: has either a void or a non-void node type
+//
+// Leaving the result, when not void:
+// GLSL only has r-values as the result of a :?, but
+// if we have an l-value, that can be more efficient if it will
+// become the base of a complex r-value expression, because the
+// next layer copies r-values into memory to use the access-chain mechanism
 bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
 {
-    // This path handles both if-then-else and ?:
-    // The if-then-else has a node type of void, while
-    // ?: has a non-void node type
-    spv::Id result = 0;
-    if (node->getBasicType() != glslang::EbtVoid) {
-        // don't handle this as just on-the-fly temporaries, because there will be two names
-        // and better to leave SSA to later passes
-        result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+    // See if it simple and safe to generate OpSelect instead of using control flow.
+    // Crucially, side effects must be avoided, and there are performance trade-offs.
+    // Return true if good idea (and safe) for OpSelect, false otherwise.
+    const auto selectPolicy = [&]() -> bool {
+        if (node->getBasicType() == glslang::EbtVoid)
+            return false;
+
+        if (node->getTrueBlock()  == nullptr ||
+            node->getFalseBlock() == nullptr)
+            return false;
+
+        assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
+               node->getType() == node->getFalseBlock()->getAsTyped()->getType());
+
+        // return true if a single operand to ? : is okay for OpSelect
+        const auto operandOkay = [](glslang::TIntermTyped* node) {
+            return node->getAsSymbolNode() || node->getType().getQualifier().isConstant();
+        };
+
+        return operandOkay(node->getTrueBlock() ->getAsTyped()) &&
+               operandOkay(node->getFalseBlock()->getAsTyped());
+    };
+
+    // Emit OpSelect for this selection.
+    const auto handleAsOpSelect = [&]() {
+        node->getCondition()->traverse(this);
+        spv::Id condition = accessChainLoad(node->getCondition()->getType());
+        node->getTrueBlock()->traverse(this);
+        spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
+        node->getFalseBlock()->traverse(this);
+        spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
+
+        spv::Id select = builder.createTriOp(spv::OpSelect, convertGlslangToSpvType(node->getType()), condition, trueValue, falseValue);
+        builder.clearAccessChain();
+        builder.setAccessChainRValue(select);
+    };
+
+    // Try for OpSelect
+
+    if (selectPolicy()) {
+        SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
+        if (node->getType().getQualifier().isSpecConstant())
+            spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
+
+        handleAsOpSelect();
+        return false;
     }
 
+    // Instead, emit control flow...
+
+    // Don't handle results as temporaries, because there will be two names
+    // and better to leave SSA to later passes.
+    spv::Id result = (node->getBasicType() == glslang::EbtVoid)
+                        ? spv::NoResult
+                        : builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+
     // emit the condition before doing anything with selection
     node->getCondition()->traverse(this);
 
     // make an "if" based on the value created by the condition
     spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), builder);
 
-    if (node->getTrueBlock()) {
-        // emit the "then" statement
+    // emit the "then" statement
+    if (node->getTrueBlock() != nullptr) {
         node->getTrueBlock()->traverse(this);
-        if (result)
-            builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
+        if (result != spv::NoResult)
+             builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
     }
 
-    if (node->getFalseBlock()) {
+    if (node->getFalseBlock() != nullptr) {
         ifBuilder.makeBeginElse();
         // emit the "else" statement
         node->getFalseBlock()->traverse(this);
-        if (result)
+        if (result != spv::NoResult)
             builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
     }
 
+    // finish off the control flow
     ifBuilder.makeEndIf();
 
-    if (result) {
+    if (result != spv::NoResult) {
         // GLSL only has r-values as the result of a :?, but
         // if we have an l-value, that can be more efficient if it will
         // become the base of a complex r-value expression, because the
@@ -2248,8 +2304,10 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
             addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
             addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
             // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes
-            if (type.getQualifier().storage == glslang::EvqVaryingIn || type.getQualifier().storage == glslang::EvqVaryingOut) {
-                if (type.getBasicType() == glslang::EbtBlock) {
+            if (type.getQualifier().storage == glslang::EvqVaryingIn ||
+                type.getQualifier().storage == glslang::EvqVaryingOut) {
+                if (type.getBasicType() == glslang::EbtBlock ||
+                    glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
                     addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
                     addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
                 }

+ 1 - 1
3rdparty/glslang/Test/baseResults/badChars.frag.out

@@ -4,7 +4,7 @@ ERROR: 0:1: '#if' : unexpected tokens following directive
 ERROR: 0:3: '#error' : A <bad token> B  
 ERROR: 0:4: 'preprocessor evaluation' : bad expression 
 ERROR: 0:4: '#if' : unexpected tokens following directive 
-ERROR: 0:6: 'ÿ' : unexpected token 
+ERROR: 0:6: '' : unexpected token 
 ERROR: 0:7: '' :  syntax error
 ERROR: 7 compilation errors.  No code generated.
 

+ 72 - 58
3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out

@@ -2,7 +2,7 @@ hlsl.amend.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: f1( (temp void)
+0:5  Function Definition: @f1( (temp void)
 0:5    Function Parameters: 
 0:?     Sequence
 0:6      vector-scale (temp 4-component vector of float)
@@ -14,6 +14,10 @@ gl_FragCoord origin is upper left
 0:6          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
 0:6          Constant:
 0:6            1 (const uint)
+0:5  Function Definition: f1( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @f1( (temp void)
 0:12  Function Definition: f2( (temp void)
 0:12    Function Parameters: 
 0:?     Sequence
@@ -67,7 +71,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: f1( (temp void)
+0:5  Function Definition: @f1( (temp void)
 0:5    Function Parameters: 
 0:?     Sequence
 0:6      vector-scale (temp 4-component vector of float)
@@ -79,6 +83,10 @@ gl_FragCoord origin is upper left
 0:6          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
 0:6          Constant:
 0:6            1 (const uint)
+0:5  Function Definition: f1( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @f1( (temp void)
 0:12  Function Definition: f2( (temp void)
 0:12    Function Parameters: 
 0:?     Sequence
@@ -127,7 +135,7 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 47
+// Id's are bound by 50
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -135,73 +143,79 @@ gl_FragCoord origin is upper left
                               EntryPoint Fragment 4  "f1"
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "f1"
-                              Name 6  "f2("
-                              Name 8  "f3("
-                              Name 10  "f4("
-                              Name 16  "$Global"
-                              MemberName 16($Global) 0  "a"
-                              MemberName 16($Global) 1  "b"
-                              MemberName 16($Global) 2  "c"
-                              MemberName 16($Global) 3  "d"
-                              MemberName 16($Global) 4  "e"
-                              Name 18  ""
-                              MemberDecorate 16($Global) 0 Offset 0
-                              MemberDecorate 16($Global) 1 Offset 16
-                              MemberDecorate 16($Global) 2 Offset 32
-                              MemberDecorate 16($Global) 3 Offset 44
-                              MemberDecorate 16($Global) 4 Offset 48
-                              Decorate 16($Global) Block
-                              Decorate 18 DescriptorSet 0
+                              Name 6  "@f1("
+                              Name 8  "f2("
+                              Name 10  "f3("
+                              Name 12  "f4("
+                              Name 18  "$Global"
+                              MemberName 18($Global) 0  "a"
+                              MemberName 18($Global) 1  "b"
+                              MemberName 18($Global) 2  "c"
+                              MemberName 18($Global) 3  "d"
+                              MemberName 18($Global) 4  "e"
+                              Name 20  ""
+                              MemberDecorate 18($Global) 0 Offset 0
+                              MemberDecorate 18($Global) 1 Offset 16
+                              MemberDecorate 18($Global) 2 Offset 32
+                              MemberDecorate 18($Global) 3 Offset 44
+                              MemberDecorate 18($Global) 4 Offset 48
+                              Decorate 18($Global) Block
+                              Decorate 20 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
-              12:             TypeFloat 32
-              13:             TypeVector 12(float) 4
-              14:             TypeVector 12(float) 3
-              15:             TypeInt 32 1
-     16($Global):             TypeStruct 13(fvec4) 12(float) 14(fvec3) 15(int) 15(int)
-              17:             TypePointer Uniform 16($Global)
-              18:     17(ptr) Variable Uniform
-              19:     15(int) Constant 0
-              20:             TypePointer Uniform 13(fvec4)
-              23:     15(int) Constant 1
-              24:             TypePointer Uniform 12(float)
-              28:             TypeInt 32 0
-              29:     28(int) Constant 0
-              35:     15(int) Constant 2
-              39:     15(int) Constant 3
-              40:             TypePointer Uniform 15(int)
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 4
+              16:             TypeVector 14(float) 3
+              17:             TypeInt 32 1
+     18($Global):             TypeStruct 15(fvec4) 14(float) 16(fvec3) 17(int) 17(int)
+              19:             TypePointer Uniform 18($Global)
+              20:     19(ptr) Variable Uniform
+              21:     17(int) Constant 0
+              22:             TypePointer Uniform 15(fvec4)
+              25:     17(int) Constant 1
+              26:             TypePointer Uniform 14(float)
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              38:     17(int) Constant 2
+              42:     17(int) Constant 3
+              43:             TypePointer Uniform 17(int)
            4(f1):           2 Function None 3
                5:             Label
-              21:     20(ptr) AccessChain 18 19
-              22:   13(fvec4) Load 21
-              25:     24(ptr) AccessChain 18 23
-              26:   12(float) Load 25
-              27:   13(fvec4) VectorTimesScalar 22 26
+              30:           2 FunctionCall 6(@f1()
                               Return
                               FunctionEnd
-          6(f2():           2 Function None 3
+         6(@f1():           2 Function None 3
                7:             Label
-              30:     24(ptr) AccessChain 18 19 29
-              31:   12(float) Load 30
-              32:     24(ptr) AccessChain 18 23
-              33:   12(float) Load 32
-              34:   12(float) FAdd 31 33
-              36:     24(ptr) AccessChain 18 35 29
-              37:   12(float) Load 36
-              38:   12(float) FAdd 34 37
+              23:     22(ptr) AccessChain 20 21
+              24:   15(fvec4) Load 23
+              27:     26(ptr) AccessChain 20 25
+              28:   14(float) Load 27
+              29:   15(fvec4) VectorTimesScalar 24 28
                               Return
                               FunctionEnd
-          8(f3():           2 Function None 3
+          8(f2():           2 Function None 3
                9:             Label
+              33:     26(ptr) AccessChain 20 21 32
+              34:   14(float) Load 33
+              35:     26(ptr) AccessChain 20 25
+              36:   14(float) Load 35
+              37:   14(float) FAdd 34 36
+              39:     26(ptr) AccessChain 20 38 32
+              40:   14(float) Load 39
+              41:   14(float) FAdd 37 40
                               Return
                               FunctionEnd
-         10(f4():           2 Function None 3
+         10(f3():           2 Function None 3
               11:             Label
-              41:     40(ptr) AccessChain 18 39
-              42:     15(int) Load 41
-              43:   12(float) ConvertSToF 42
-              44:     20(ptr) AccessChain 18 19
-              45:   13(fvec4) Load 44
-              46:   13(fvec4) VectorTimesScalar 45 43
+                              Return
+                              FunctionEnd
+         12(f4():           2 Function None 3
+              13:             Label
+              44:     43(ptr) AccessChain 20 42
+              45:     17(int) Load 44
+              46:   14(float) ConvertSToF 45
+              47:     22(ptr) AccessChain 20 21
+              48:   15(fvec4) Load 47
+              49:   15(fvec4) VectorTimesScalar 48 46
                               Return
                               FunctionEnd

+ 232 - 178
3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out

@@ -39,7 +39,7 @@ gl_FragCoord origin is upper left
 0:26        3 (const int)
 0:26        4 (const int)
 0:26        5 (const int)
-0:31  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:31  Function Definition: @main(struct-PS_OUTPUT-vf41; (temp void)
 0:31    Function Parameters: 
 0:31      'ps_output' (out structure{temp 4-component vector of float color})
 0:?     Sequence
@@ -91,7 +91,10 @@ gl_FragCoord origin is upper left
 0:35            Constant:
 0:35              2 (const uint)
 0:37      move second child to first child (temp 4-component vector of float)
-0:?         'color' (layout(location=0 ) out 4-component vector of float)
+0:37        color: direct index for structure (temp 4-component vector of float)
+0:37          'ps_output' (out structure{temp 4-component vector of float color})
+0:37          Constant:
+0:37            0 (const int)
 0:37        add (temp 4-component vector of float)
 0:37          Function Call: TestFn1( (temp 4-component vector of float)
 0:37          Function Call: TestFn2(t11[3];p1[3]; (temp 4-component vector of float)
@@ -137,8 +140,19 @@ gl_FragCoord origin is upper left
 0:37                      2 (const int)
 0:?                   'g_samp[2]' (uniform sampler)
 0:37              'aggShadow' (temp 3-element array of sampler)
+0:31  Function Definition: main( (temp void)
+0:31    Function Parameters: 
+0:?     Sequence
+0:31      Function Call: @main(struct-PS_OUTPUT-vf41; (temp void)
+0:?         'ps_output' (temp structure{temp 4-component vector of float color})
+0:31      Sequence
+0:31        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:31          color: direct index for structure (temp 4-component vector of float)
+0:?             'ps_output' (temp structure{temp 4-component vector of float color})
+0:31            Constant:
+0:31              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tex[0]' (uniform texture1D)
 0:?     'g_tex[1]' (uniform texture1D)
 0:?     'g_tex[2]' (uniform texture1D)
@@ -153,6 +167,7 @@ gl_FragCoord origin is upper left
 0:?     'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
 0:?     'not_flattened_a' (global 5-element array of int)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -198,7 +213,7 @@ gl_FragCoord origin is upper left
 0:26        3 (const int)
 0:26        4 (const int)
 0:26        5 (const int)
-0:31  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:31  Function Definition: @main(struct-PS_OUTPUT-vf41; (temp void)
 0:31    Function Parameters: 
 0:31      'ps_output' (out structure{temp 4-component vector of float color})
 0:?     Sequence
@@ -250,7 +265,10 @@ gl_FragCoord origin is upper left
 0:35            Constant:
 0:35              2 (const uint)
 0:37      move second child to first child (temp 4-component vector of float)
-0:?         'color' (layout(location=0 ) out 4-component vector of float)
+0:37        color: direct index for structure (temp 4-component vector of float)
+0:37          'ps_output' (out structure{temp 4-component vector of float color})
+0:37          Constant:
+0:37            0 (const int)
 0:37        add (temp 4-component vector of float)
 0:37          Function Call: TestFn1( (temp 4-component vector of float)
 0:37          Function Call: TestFn2(t11[3];p1[3]; (temp 4-component vector of float)
@@ -296,8 +314,19 @@ gl_FragCoord origin is upper left
 0:37                      2 (const int)
 0:?                   'g_samp[2]' (uniform sampler)
 0:37              'aggShadow' (temp 3-element array of sampler)
+0:31  Function Definition: main( (temp void)
+0:31    Function Parameters: 
+0:?     Sequence
+0:31      Function Call: @main(struct-PS_OUTPUT-vf41; (temp void)
+0:?         'ps_output' (temp structure{temp 4-component vector of float color})
+0:31      Sequence
+0:31        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:31          color: direct index for structure (temp 4-component vector of float)
+0:?             'ps_output' (temp structure{temp 4-component vector of float color})
+0:31            Constant:
+0:31              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tex[0]' (uniform texture1D)
 0:?     'g_tex[1]' (uniform texture1D)
 0:?     'g_tex[2]' (uniform texture1D)
@@ -312,77 +341,84 @@ gl_FragCoord origin is upper left
 0:?     'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
 0:?     'not_flattened_a' (global 5-element array of int)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 123
+// Id's are bound by 137
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 99
+                              EntryPoint Fragment 4  "main" 128
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "TestFn1("
                               Name 22  "TestFn2(t11[3];p1[3];"
                               Name 20  "l_tex"
                               Name 21  "l_samp"
-                              Name 28  "not_flattened_a"
-                              Name 36  "g_tex[1]"
-                              Name 39  "g_samp[1]"
-                              Name 55  "local_sampler_array"
-                              Name 57  "g_samp[0]"
-                              Name 62  "g_samp[2]"
-                              Name 65  "local_texture_array"
-                              Name 66  "g_tex[0]"
-                              Name 71  "g_tex[2]"
-                              Name 77  "local_float_array"
-                              Name 83  "$Global"
-                              MemberName 83($Global) 0  "g_mats"
-                              MemberName 83($Global) 1  "g_mats_explicit"
-                              MemberName 83($Global) 2  "g_floats"
-                              Name 85  ""
-                              Name 99  "color"
-                              Name 101  "aggShadow"
-                              Name 108  "aggShadow"
-                              Name 117  "g_tex_explicit[0]"
-                              Name 118  "g_tex_explicit[1]"
-                              Name 119  "g_tex_explicit[2]"
-                              Name 120  "g_samp_explicit[0]"
-                              Name 121  "g_samp_explicit[1]"
-                              Name 122  "g_samp_explicit[2]"
-                              Decorate 36(g_tex[1]) DescriptorSet 0
-                              Decorate 39(g_samp[1]) DescriptorSet 0
-                              Decorate 57(g_samp[0]) DescriptorSet 0
-                              Decorate 62(g_samp[2]) DescriptorSet 0
-                              Decorate 66(g_tex[0]) DescriptorSet 0
-                              Decorate 71(g_tex[2]) DescriptorSet 0
-                              Decorate 80 ArrayStride 48
-                              Decorate 81 ArrayStride 48
-                              Decorate 82 ArrayStride 16
-                              MemberDecorate 83($Global) 0 RowMajor
-                              MemberDecorate 83($Global) 0 Offset 0
-                              MemberDecorate 83($Global) 0 MatrixStride 16
-                              MemberDecorate 83($Global) 1 RowMajor
-                              MemberDecorate 83($Global) 1 Offset 192
-                              MemberDecorate 83($Global) 1 MatrixStride 16
-                              MemberDecorate 83($Global) 2 Offset 384
-                              Decorate 83($Global) Block
-                              Decorate 85 DescriptorSet 0
-                              Decorate 99(color) Location 0
-                              Decorate 117(g_tex_explicit[0]) DescriptorSet 0
-                              Decorate 117(g_tex_explicit[0]) Binding 1
-                              Decorate 118(g_tex_explicit[1]) DescriptorSet 0
-                              Decorate 118(g_tex_explicit[1]) Binding 2
-                              Decorate 119(g_tex_explicit[2]) DescriptorSet 0
-                              Decorate 119(g_tex_explicit[2]) Binding 3
-                              Decorate 120(g_samp_explicit[0]) DescriptorSet 0
-                              Decorate 120(g_samp_explicit[0]) Binding 5
-                              Decorate 121(g_samp_explicit[1]) DescriptorSet 0
-                              Decorate 121(g_samp_explicit[1]) Binding 6
-                              Decorate 122(g_samp_explicit[2]) DescriptorSet 0
-                              Decorate 122(g_samp_explicit[2]) Binding 7
+                              Name 24  "PS_OUTPUT"
+                              MemberName 24(PS_OUTPUT) 0  "color"
+                              Name 28  "@main(struct-PS_OUTPUT-vf41;"
+                              Name 27  "ps_output"
+                              Name 34  "not_flattened_a"
+                              Name 42  "g_tex[1]"
+                              Name 45  "g_samp[1]"
+                              Name 61  "local_sampler_array"
+                              Name 63  "g_samp[0]"
+                              Name 68  "g_samp[2]"
+                              Name 71  "local_texture_array"
+                              Name 72  "g_tex[0]"
+                              Name 77  "g_tex[2]"
+                              Name 83  "local_float_array"
+                              Name 89  "$Global"
+                              MemberName 89($Global) 0  "g_mats"
+                              MemberName 89($Global) 1  "g_mats_explicit"
+                              MemberName 89($Global) 2  "g_floats"
+                              Name 91  ""
+                              Name 105  "aggShadow"
+                              Name 112  "aggShadow"
+                              Name 123  "ps_output"
+                              Name 124  "param"
+                              Name 128  "color"
+                              Name 131  "g_tex_explicit[0]"
+                              Name 132  "g_tex_explicit[1]"
+                              Name 133  "g_tex_explicit[2]"
+                              Name 134  "g_samp_explicit[0]"
+                              Name 135  "g_samp_explicit[1]"
+                              Name 136  "g_samp_explicit[2]"
+                              Decorate 42(g_tex[1]) DescriptorSet 0
+                              Decorate 45(g_samp[1]) DescriptorSet 0
+                              Decorate 63(g_samp[0]) DescriptorSet 0
+                              Decorate 68(g_samp[2]) DescriptorSet 0
+                              Decorate 72(g_tex[0]) DescriptorSet 0
+                              Decorate 77(g_tex[2]) DescriptorSet 0
+                              Decorate 86 ArrayStride 48
+                              Decorate 87 ArrayStride 48
+                              Decorate 88 ArrayStride 16
+                              MemberDecorate 89($Global) 0 RowMajor
+                              MemberDecorate 89($Global) 0 Offset 0
+                              MemberDecorate 89($Global) 0 MatrixStride 16
+                              MemberDecorate 89($Global) 1 RowMajor
+                              MemberDecorate 89($Global) 1 Offset 192
+                              MemberDecorate 89($Global) 1 MatrixStride 16
+                              MemberDecorate 89($Global) 2 Offset 384
+                              Decorate 89($Global) Block
+                              Decorate 91 DescriptorSet 0
+                              Decorate 128(color) Location 0
+                              Decorate 131(g_tex_explicit[0]) DescriptorSet 0
+                              Decorate 131(g_tex_explicit[0]) Binding 1
+                              Decorate 132(g_tex_explicit[1]) DescriptorSet 0
+                              Decorate 132(g_tex_explicit[1]) Binding 2
+                              Decorate 133(g_tex_explicit[2]) DescriptorSet 0
+                              Decorate 133(g_tex_explicit[2]) Binding 3
+                              Decorate 134(g_samp_explicit[0]) DescriptorSet 0
+                              Decorate 134(g_samp_explicit[0]) Binding 5
+                              Decorate 135(g_samp_explicit[1]) DescriptorSet 0
+                              Decorate 135(g_samp_explicit[1]) Binding 6
+                              Decorate 136(g_samp_explicit[2]) DescriptorSet 0
+                              Decorate 136(g_samp_explicit[2]) Binding 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -397,130 +433,148 @@ gl_FragCoord origin is upper left
               17:             TypeArray 16 13
               18:             TypePointer UniformConstant 17
               19:             TypeFunction 7(fvec4) 15(ptr) 18(ptr)
-              24:             TypeInt 32 1
-              25:     12(int) Constant 5
-              26:             TypeArray 24(int) 25
-              27:             TypePointer Private 26
-28(not_flattened_a):     27(ptr) Variable Private
-              29:     24(int) Constant 1
-              30:     24(int) Constant 2
-              31:     24(int) Constant 3
-              32:     24(int) Constant 4
-              33:     24(int) Constant 5
-              34:          26 ConstantComposite 29 30 31 32 33
-              35:             TypePointer UniformConstant 11
-    36(g_tex[1]):     35(ptr) Variable UniformConstant
-              38:             TypePointer UniformConstant 16
-   39(g_samp[1]):     38(ptr) Variable UniformConstant
-              41:             TypeSampledImage 11
-              43:    6(float) Constant 1045220557
-55(local_sampler_array):     18(ptr) Variable UniformConstant
-              56:     24(int) Constant 0
-   57(g_samp[0]):     38(ptr) Variable UniformConstant
-   62(g_samp[2]):     38(ptr) Variable UniformConstant
-65(local_texture_array):     15(ptr) Variable UniformConstant
-    66(g_tex[0]):     35(ptr) Variable UniformConstant
-    71(g_tex[2]):     35(ptr) Variable UniformConstant
-              74:     12(int) Constant 4
-              75:             TypeArray 6(float) 74
-              76:             TypePointer Function 75
-              78:             TypeVector 6(float) 3
-              79:             TypeMatrix 78(fvec3) 3
-              80:             TypeArray 79 74
-              81:             TypeArray 79 74
-              82:             TypeArray 6(float) 74
-     83($Global):             TypeStruct 80 81 82
-              84:             TypePointer Uniform 83($Global)
-              85:     84(ptr) Variable Uniform
-              86:             TypePointer Uniform 82
-              90:             TypePointer Function 6(float)
-              98:             TypePointer Output 7(fvec4)
-       99(color):     98(ptr) Variable Output
-  101(aggShadow):     15(ptr) Variable UniformConstant
-  108(aggShadow):     18(ptr) Variable UniformConstant
-117(g_tex_explicit[0]):     35(ptr) Variable UniformConstant
-118(g_tex_explicit[1]):     35(ptr) Variable UniformConstant
-119(g_tex_explicit[2]):     35(ptr) Variable UniformConstant
-120(g_samp_explicit[0]):     38(ptr) Variable UniformConstant
-121(g_samp_explicit[1]):     38(ptr) Variable UniformConstant
-122(g_samp_explicit[2]):     38(ptr) Variable UniformConstant
+   24(PS_OUTPUT):             TypeStruct 7(fvec4)
+              25:             TypePointer Function 24(PS_OUTPUT)
+              26:             TypeFunction 2 25(ptr)
+              30:             TypeInt 32 1
+              31:     12(int) Constant 5
+              32:             TypeArray 30(int) 31
+              33:             TypePointer Private 32
+34(not_flattened_a):     33(ptr) Variable Private
+              35:     30(int) Constant 1
+              36:     30(int) Constant 2
+              37:     30(int) Constant 3
+              38:     30(int) Constant 4
+              39:     30(int) Constant 5
+              40:          32 ConstantComposite 35 36 37 38 39
+              41:             TypePointer UniformConstant 11
+    42(g_tex[1]):     41(ptr) Variable UniformConstant
+              44:             TypePointer UniformConstant 16
+   45(g_samp[1]):     44(ptr) Variable UniformConstant
+              47:             TypeSampledImage 11
+              49:    6(float) Constant 1045220557
+61(local_sampler_array):     18(ptr) Variable UniformConstant
+              62:     30(int) Constant 0
+   63(g_samp[0]):     44(ptr) Variable UniformConstant
+   68(g_samp[2]):     44(ptr) Variable UniformConstant
+71(local_texture_array):     15(ptr) Variable UniformConstant
+    72(g_tex[0]):     41(ptr) Variable UniformConstant
+    77(g_tex[2]):     41(ptr) Variable UniformConstant
+              80:     12(int) Constant 4
+              81:             TypeArray 6(float) 80
+              82:             TypePointer Function 81
+              84:             TypeVector 6(float) 3
+              85:             TypeMatrix 84(fvec3) 3
+              86:             TypeArray 85 80
+              87:             TypeArray 85 80
+              88:             TypeArray 6(float) 80
+     89($Global):             TypeStruct 86 87 88
+              90:             TypePointer Uniform 89($Global)
+              91:     90(ptr) Variable Uniform
+              92:             TypePointer Uniform 88
+              96:             TypePointer Function 6(float)
+  105(aggShadow):     15(ptr) Variable UniformConstant
+  112(aggShadow):     18(ptr) Variable UniformConstant
+             121:             TypePointer Function 7(fvec4)
+             127:             TypePointer Output 7(fvec4)
+      128(color):    127(ptr) Variable Output
+131(g_tex_explicit[0]):     41(ptr) Variable UniformConstant
+132(g_tex_explicit[1]):     41(ptr) Variable UniformConstant
+133(g_tex_explicit[2]):     41(ptr) Variable UniformConstant
+134(g_samp_explicit[0]):     44(ptr) Variable UniformConstant
+135(g_samp_explicit[1]):     44(ptr) Variable UniformConstant
+136(g_samp_explicit[2]):     44(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-77(local_float_array):     76(ptr) Variable Function
-                              Store 28(not_flattened_a) 34
-              58:          16 Load 57(g_samp[0])
-              59:     38(ptr) AccessChain 55(local_sampler_array) 56
-                              Store 59 58
-              60:          16 Load 39(g_samp[1])
-              61:     38(ptr) AccessChain 55(local_sampler_array) 29
-                              Store 61 60
-              63:          16 Load 62(g_samp[2])
-              64:     38(ptr) AccessChain 55(local_sampler_array) 30
-                              Store 64 63
-              67:          11 Load 66(g_tex[0])
-              68:     35(ptr) AccessChain 65(local_texture_array) 56
-                              Store 68 67
-              69:          11 Load 36(g_tex[1])
-              70:     35(ptr) AccessChain 65(local_texture_array) 29
-                              Store 70 69
-              72:          11 Load 71(g_tex[2])
-              73:     35(ptr) AccessChain 65(local_texture_array) 30
-                              Store 73 72
-              87:     86(ptr) AccessChain 85 30
-              88:          82 Load 87
-              89:    6(float) CompositeExtract 88 0
-              91:     90(ptr) AccessChain 77(local_float_array) 56
-                              Store 91 89
-              92:    6(float) CompositeExtract 88 1
-              93:     90(ptr) AccessChain 77(local_float_array) 29
-                              Store 93 92
-              94:    6(float) CompositeExtract 88 2
-              95:     90(ptr) AccessChain 77(local_float_array) 30
-                              Store 95 94
-              96:    6(float) CompositeExtract 88 3
-              97:     90(ptr) AccessChain 77(local_float_array) 31
-                              Store 97 96
-             100:    7(fvec4) FunctionCall 9(TestFn1()
-             102:          11 Load 66(g_tex[0])
-             103:     35(ptr) AccessChain 101(aggShadow) 56
-                              Store 103 102
-             104:          11 Load 36(g_tex[1])
-             105:     35(ptr) AccessChain 101(aggShadow) 29
-                              Store 105 104
-             106:          11 Load 71(g_tex[2])
-             107:     35(ptr) AccessChain 101(aggShadow) 30
-                              Store 107 106
-             109:          16 Load 57(g_samp[0])
-             110:     38(ptr) AccessChain 108(aggShadow) 56
-                              Store 110 109
-             111:          16 Load 39(g_samp[1])
-             112:     38(ptr) AccessChain 108(aggShadow) 29
-                              Store 112 111
-             113:          16 Load 62(g_samp[2])
-             114:     38(ptr) AccessChain 108(aggShadow) 30
-                              Store 114 113
-             115:    7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 101(aggShadow) 108(aggShadow)
-             116:    7(fvec4) FAdd 100 115
-                              Store 99(color) 116
+  123(ps_output):     25(ptr) Variable Function
+      124(param):     25(ptr) Variable Function
+                              Store 34(not_flattened_a) 40
+             125:           2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 124(param)
+             126:24(PS_OUTPUT) Load 124(param)
+                              Store 123(ps_output) 126
+             129:    121(ptr) AccessChain 123(ps_output) 62
+             130:    7(fvec4) Load 129
+                              Store 128(color) 130
                               Return
                               FunctionEnd
      9(TestFn1():    7(fvec4) Function None 8
               10:             Label
-              37:          11 Load 36(g_tex[1])
-              40:          16 Load 39(g_samp[1])
-              42:          41 SampledImage 37 40
-              44:    7(fvec4) ImageSampleImplicitLod 42 43
-                              ReturnValue 44
+              43:          11 Load 42(g_tex[1])
+              46:          16 Load 45(g_samp[1])
+              48:          47 SampledImage 43 46
+              50:    7(fvec4) ImageSampleImplicitLod 48 49
+                              ReturnValue 50
                               FunctionEnd
 22(TestFn2(t11[3];p1[3];):    7(fvec4) Function None 19
        20(l_tex):     15(ptr) FunctionParameter
       21(l_samp):     18(ptr) FunctionParameter
               23:             Label
-              47:     35(ptr) AccessChain 20(l_tex) 30
-              48:          11 Load 47
-              49:     38(ptr) AccessChain 21(l_samp) 30
-              50:          16 Load 49
-              51:          41 SampledImage 48 50
-              52:    7(fvec4) ImageSampleImplicitLod 51 43
-                              ReturnValue 52
+              53:     41(ptr) AccessChain 20(l_tex) 36
+              54:          11 Load 53
+              55:     44(ptr) AccessChain 21(l_samp) 36
+              56:          16 Load 55
+              57:          47 SampledImage 54 56
+              58:    7(fvec4) ImageSampleImplicitLod 57 49
+                              ReturnValue 58
+                              FunctionEnd
+28(@main(struct-PS_OUTPUT-vf41;):           2 Function None 26
+   27(ps_output):     25(ptr) FunctionParameter
+              29:             Label
+83(local_float_array):     82(ptr) Variable Function
+              64:          16 Load 63(g_samp[0])
+              65:     44(ptr) AccessChain 61(local_sampler_array) 62
+                              Store 65 64
+              66:          16 Load 45(g_samp[1])
+              67:     44(ptr) AccessChain 61(local_sampler_array) 35
+                              Store 67 66
+              69:          16 Load 68(g_samp[2])
+              70:     44(ptr) AccessChain 61(local_sampler_array) 36
+                              Store 70 69
+              73:          11 Load 72(g_tex[0])
+              74:     41(ptr) AccessChain 71(local_texture_array) 62
+                              Store 74 73
+              75:          11 Load 42(g_tex[1])
+              76:     41(ptr) AccessChain 71(local_texture_array) 35
+                              Store 76 75
+              78:          11 Load 77(g_tex[2])
+              79:     41(ptr) AccessChain 71(local_texture_array) 36
+                              Store 79 78
+              93:     92(ptr) AccessChain 91 36
+              94:          88 Load 93
+              95:    6(float) CompositeExtract 94 0
+              97:     96(ptr) AccessChain 83(local_float_array) 62
+                              Store 97 95
+              98:    6(float) CompositeExtract 94 1
+              99:     96(ptr) AccessChain 83(local_float_array) 35
+                              Store 99 98
+             100:    6(float) CompositeExtract 94 2
+             101:     96(ptr) AccessChain 83(local_float_array) 36
+                              Store 101 100
+             102:    6(float) CompositeExtract 94 3
+             103:     96(ptr) AccessChain 83(local_float_array) 37
+                              Store 103 102
+             104:    7(fvec4) FunctionCall 9(TestFn1()
+             106:          11 Load 72(g_tex[0])
+             107:     41(ptr) AccessChain 105(aggShadow) 62
+                              Store 107 106
+             108:          11 Load 42(g_tex[1])
+             109:     41(ptr) AccessChain 105(aggShadow) 35
+                              Store 109 108
+             110:          11 Load 77(g_tex[2])
+             111:     41(ptr) AccessChain 105(aggShadow) 36
+                              Store 111 110
+             113:          16 Load 63(g_samp[0])
+             114:     44(ptr) AccessChain 112(aggShadow) 62
+                              Store 114 113
+             115:          16 Load 45(g_samp[1])
+             116:     44(ptr) AccessChain 112(aggShadow) 35
+                              Store 116 115
+             117:          16 Load 68(g_samp[2])
+             118:     44(ptr) AccessChain 112(aggShadow) 36
+                              Store 118 117
+             119:    7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 105(aggShadow) 112(aggShadow)
+             120:    7(fvec4) FAdd 104 119
+             122:    121(ptr) AccessChain 27(ps_output) 62
+                              Store 122 120
+                              Return
                               FunctionEnd

+ 215 - 165
3rdparty/glslang/Test/baseResults/hlsl.array.frag.out

@@ -2,59 +2,70 @@ hlsl.array.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:8  Function Definition: @PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'i' (layout(location=0 ) in int)
-0:8      'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:8      'i' (in int)
+0:8      'input' (in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              add (temp 4-component vector of float)
 0:10                add (temp 4-component vector of float)
 0:10                  add (temp 4-component vector of float)
-0:10                    add (temp 4-component vector of float)
-0:10                      direct index (layout(offset=0 ) temp 4-component vector of float)
-0:10                        a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
-0:10                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
-0:10                          Constant:
-0:10                            0 (const uint)
+0:10                    direct index (layout(offset=0 ) temp 4-component vector of float)
+0:10                      a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
+0:10                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 0:10                        Constant:
-0:10                          1 (const int)
-0:10                      indirect index (layout(offset=0 ) temp 4-component vector of float)
-0:10                        a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
-0:10                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
-0:10                          Constant:
-0:10                            0 (const uint)
-0:10                        'i' (layout(location=0 ) in int)
-0:10                    direct index (layout(location=1 ) temp 4-component vector of float)
-0:10                      'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:10                          0 (const uint)
 0:10                      Constant:
-0:10                        2 (const int)
-0:10                  indirect index (layout(location=1 ) temp 4-component vector of float)
-0:10                    'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
-0:10                    'i' (layout(location=0 ) in int)
-0:10                direct index (temp 4-component vector of float)
-0:10                  'b' (temp 10-element array of 4-component vector of float)
-0:10                  Constant:
-0:10                    5 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'b' (temp 10-element array of 4-component vector of float)
-0:10                'i' (layout(location=0 ) in int)
-0:10            indirect index (temp 4-component vector of float)
-0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
-0:10                indirect index (layout(offset=64 ) temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  s: direct index for structure (layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m})
-0:10                    'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                        1 (const int)
+0:10                    indirect index (layout(offset=0 ) temp 4-component vector of float)
+0:10                      a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
+0:10                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                        Constant:
+0:10                          0 (const uint)
+0:10                      'i' (in int)
+0:10                  direct index (temp 4-component vector of float)
+0:10                    'input' (in 3-element array of 4-component vector of float)
 0:10                    Constant:
-0:10                      1 (const uint)
-0:10                  'i' (layout(location=0 ) in int)
+0:10                      2 (const int)
+0:10                indirect index (temp 4-component vector of float)
+0:10                  'input' (in 3-element array of 4-component vector of float)
+0:10                  'i' (in int)
+0:10              direct index (temp 4-component vector of float)
+0:10                'b' (temp 10-element array of 4-component vector of float)
 0:10                Constant:
-0:10                  0 (const int)
-0:10              'i' (layout(location=0 ) in int)
-0:10        Branch: Return
+0:10                  5 (const int)
+0:10            indirect index (temp 4-component vector of float)
+0:10              'b' (temp 10-element array of 4-component vector of float)
+0:10              'i' (in int)
+0:10          indirect index (temp 4-component vector of float)
+0:10            m: direct index for structure (temp 7-element array of 4-component vector of float)
+0:10              indirect index (layout(offset=64 ) temp structure{temp 7-element array of 4-component vector of float m})
+0:10                s: direct index for structure (layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:10                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                  Constant:
+0:10                    1 (const uint)
+0:10                'i' (in int)
+0:10              Constant:
+0:10                0 (const int)
+0:10            'i' (in int)
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp int)
+0:?         'i' (temp int)
+0:?         'i' (layout(location=0 ) in int)
+0:8      move second child to first child (temp 3-element array of 4-component vector of float)
+0:?         'input' (temp 3-element array of 4-component vector of float)
+0:?         'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8        Function Call: @PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:?           'i' (temp int)
+0:?           'input' (temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in int)
@@ -68,59 +79,70 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:8  Function Definition: @PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'i' (layout(location=0 ) in int)
-0:8      'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:8      'i' (in int)
+0:8      'input' (in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              add (temp 4-component vector of float)
 0:10                add (temp 4-component vector of float)
 0:10                  add (temp 4-component vector of float)
-0:10                    add (temp 4-component vector of float)
-0:10                      direct index (layout(offset=0 ) temp 4-component vector of float)
-0:10                        a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
-0:10                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
-0:10                          Constant:
-0:10                            0 (const uint)
+0:10                    direct index (layout(offset=0 ) temp 4-component vector of float)
+0:10                      a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
+0:10                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 0:10                        Constant:
-0:10                          1 (const int)
-0:10                      indirect index (layout(offset=0 ) temp 4-component vector of float)
-0:10                        a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
-0:10                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
-0:10                          Constant:
-0:10                            0 (const uint)
-0:10                        'i' (layout(location=0 ) in int)
-0:10                    direct index (layout(location=1 ) temp 4-component vector of float)
-0:10                      'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:10                          0 (const uint)
 0:10                      Constant:
-0:10                        2 (const int)
-0:10                  indirect index (layout(location=1 ) temp 4-component vector of float)
-0:10                    'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
-0:10                    'i' (layout(location=0 ) in int)
-0:10                direct index (temp 4-component vector of float)
-0:10                  'b' (temp 10-element array of 4-component vector of float)
-0:10                  Constant:
-0:10                    5 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'b' (temp 10-element array of 4-component vector of float)
-0:10                'i' (layout(location=0 ) in int)
-0:10            indirect index (temp 4-component vector of float)
-0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
-0:10                indirect index (layout(offset=64 ) temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  s: direct index for structure (layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m})
-0:10                    'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                        1 (const int)
+0:10                    indirect index (layout(offset=0 ) temp 4-component vector of float)
+0:10                      a: direct index for structure (layout(offset=0 ) uniform 4-element array of 4-component vector of float)
+0:10                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                        Constant:
+0:10                          0 (const uint)
+0:10                      'i' (in int)
+0:10                  direct index (temp 4-component vector of float)
+0:10                    'input' (in 3-element array of 4-component vector of float)
 0:10                    Constant:
-0:10                      1 (const uint)
-0:10                  'i' (layout(location=0 ) in int)
+0:10                      2 (const int)
+0:10                indirect index (temp 4-component vector of float)
+0:10                  'input' (in 3-element array of 4-component vector of float)
+0:10                  'i' (in int)
+0:10              direct index (temp 4-component vector of float)
+0:10                'b' (temp 10-element array of 4-component vector of float)
 0:10                Constant:
-0:10                  0 (const int)
-0:10              'i' (layout(location=0 ) in int)
-0:10        Branch: Return
+0:10                  5 (const int)
+0:10            indirect index (temp 4-component vector of float)
+0:10              'b' (temp 10-element array of 4-component vector of float)
+0:10              'i' (in int)
+0:10          indirect index (temp 4-component vector of float)
+0:10            m: direct index for structure (temp 7-element array of 4-component vector of float)
+0:10              indirect index (layout(offset=64 ) temp structure{temp 7-element array of 4-component vector of float m})
+0:10                s: direct index for structure (layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:10                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
+0:10                  Constant:
+0:10                    1 (const uint)
+0:10                'i' (in int)
+0:10              Constant:
+0:10                0 (const int)
+0:10            'i' (in int)
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp int)
+0:?         'i' (temp int)
+0:?         'i' (layout(location=0 ) in int)
+0:8      move second child to first child (temp 3-element array of 4-component vector of float)
+0:?         'input' (temp 3-element array of 4-component vector of float)
+0:?         'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8        Function Call: @PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:?           'i' (temp int)
+0:?           'input' (temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in int)
@@ -129,97 +151,125 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 65
+// Id's are bound by 81
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 28 36
+                              EntryPoint Fragment 4  "PixelShaderFunction" 68 72 75
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "@entryPointOutput"
-                              Name 15  ""
-                              MemberName 15 0  "m"
-                              Name 18  "$Global"
-                              MemberName 18($Global) 0  "a"
-                              MemberName 18($Global) 1  "s"
-                              Name 20  ""
-                              Name 28  "i"
-                              Name 36  "input"
-                              Name 49  "b"
-                              Decorate 9(@entryPointOutput) Location 0
-                              Decorate 12 ArrayStride 16
-                              Decorate 14 ArrayStride 16
-                              MemberDecorate 15 0 Offset 0
-                              Decorate 17 ArrayStride 112
-                              MemberDecorate 18($Global) 0 Offset 0
-                              MemberDecorate 18($Global) 1 Offset 64
-                              Decorate 18($Global) Block
-                              Decorate 20 DescriptorSet 0
-                              Decorate 28(i) Location 0
-                              Decorate 36(input) Location 1
+                              Name 17  "@PixelShaderFunction(i1;vf4[3];"
+                              Name 15  "i"
+                              Name 16  "input"
+                              Name 23  ""
+                              MemberName 23 0  "m"
+                              Name 26  "$Global"
+                              MemberName 26($Global) 0  "a"
+                              MemberName 26($Global) 1  "s"
+                              Name 28  ""
+                              Name 50  "b"
+                              Name 66  "i"
+                              Name 68  "i"
+                              Name 70  "input"
+                              Name 72  "input"
+                              Name 75  "@entryPointOutput"
+                              Name 76  "param"
+                              Name 78  "param"
+                              Decorate 20 ArrayStride 16
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23 0 Offset 0
+                              Decorate 25 ArrayStride 112
+                              MemberDecorate 26($Global) 0 Offset 0
+                              MemberDecorate 26($Global) 1 Offset 64
+                              Decorate 26($Global) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 68(i) Location 0
+                              Decorate 72(input) Location 1
+                              Decorate 75(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
               10:             TypeInt 32 0
-              11:     10(int) Constant 4
-              12:             TypeArray 7(fvec4) 11
-              13:     10(int) Constant 7
-              14:             TypeArray 7(fvec4) 13
-              15:             TypeStruct 14
-              16:     10(int) Constant 11
-              17:             TypeArray 15(struct) 16
-     18($Global):             TypeStruct 12 17
-              19:             TypePointer Uniform 18($Global)
-              20:     19(ptr) Variable Uniform
-              21:             TypeInt 32 1
-              22:     21(int) Constant 0
-              23:     21(int) Constant 1
-              24:             TypePointer Uniform 7(fvec4)
-              27:             TypePointer Input 21(int)
-           28(i):     27(ptr) Variable Input
-              33:     10(int) Constant 3
-              34:             TypeArray 7(fvec4) 33
-              35:             TypePointer Input 34
-       36(input):     35(ptr) Variable Input
-              37:     21(int) Constant 2
-              38:             TypePointer Input 7(fvec4)
-              46:     10(int) Constant 10
-              47:             TypeArray 7(fvec4) 46
-              48:             TypePointer Function 47
-              50:     21(int) Constant 5
-              51:             TypePointer Function 7(fvec4)
+              11:     10(int) Constant 3
+              12:             TypeArray 9(fvec4) 11
+              13:             TypePointer Function 12
+              14:             TypeFunction 9(fvec4) 7(ptr) 13(ptr)
+              19:     10(int) Constant 4
+              20:             TypeArray 9(fvec4) 19
+              21:     10(int) Constant 7
+              22:             TypeArray 9(fvec4) 21
+              23:             TypeStruct 22
+              24:     10(int) Constant 11
+              25:             TypeArray 23(struct) 24
+     26($Global):             TypeStruct 20 25
+              27:             TypePointer Uniform 26($Global)
+              28:     27(ptr) Variable Uniform
+              29:      6(int) Constant 0
+              30:      6(int) Constant 1
+              31:             TypePointer Uniform 9(fvec4)
+              38:      6(int) Constant 2
+              39:             TypePointer Function 9(fvec4)
+              47:     10(int) Constant 10
+              48:             TypeArray 9(fvec4) 47
+              49:             TypePointer Function 48
+              51:      6(int) Constant 5
+              67:             TypePointer Input 6(int)
+           68(i):     67(ptr) Variable Input
+              71:             TypePointer Input 12
+       72(input):     71(ptr) Variable Input
+              74:             TypePointer Output 9(fvec4)
+75(@entryPointOutput):     74(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           49(b):     48(ptr) Variable Function
-              25:     24(ptr) AccessChain 20 22 23
-              26:    7(fvec4) Load 25
-              29:     21(int) Load 28(i)
-              30:     24(ptr) AccessChain 20 22 29
-              31:    7(fvec4) Load 30
-              32:    7(fvec4) FAdd 26 31
-              39:     38(ptr) AccessChain 36(input) 37
-              40:    7(fvec4) Load 39
-              41:    7(fvec4) FAdd 32 40
-              42:     21(int) Load 28(i)
-              43:     38(ptr) AccessChain 36(input) 42
-              44:    7(fvec4) Load 43
-              45:    7(fvec4) FAdd 41 44
-              52:     51(ptr) AccessChain 49(b) 50
-              53:    7(fvec4) Load 52
-              54:    7(fvec4) FAdd 45 53
-              55:     21(int) Load 28(i)
-              56:     51(ptr) AccessChain 49(b) 55
-              57:    7(fvec4) Load 56
-              58:    7(fvec4) FAdd 54 57
-              59:     21(int) Load 28(i)
-              60:     21(int) Load 28(i)
-              61:     24(ptr) AccessChain 20 23 59 22 60
-              62:    7(fvec4) Load 61
-              63:    7(fvec4) FAdd 58 62
-                              Store 9(@entryPointOutput) 63
+           66(i):      7(ptr) Variable Function
+       70(input):     13(ptr) Variable Function
+       76(param):      7(ptr) Variable Function
+       78(param):     13(ptr) Variable Function
+              69:      6(int) Load 68(i)
+                              Store 66(i) 69
+              73:          12 Load 72(input)
+                              Store 70(input) 73
+              77:      6(int) Load 66(i)
+                              Store 76(param) 77
+              79:          12 Load 70(input)
+                              Store 78(param) 79
+              80:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 76(param) 78(param)
+                              Store 75(@entryPointOutput) 80
                               Return
                               FunctionEnd
+17(@PixelShaderFunction(i1;vf4[3];):    9(fvec4) Function None 14
+           15(i):      7(ptr) FunctionParameter
+       16(input):     13(ptr) FunctionParameter
+              18:             Label
+           50(b):     49(ptr) Variable Function
+              32:     31(ptr) AccessChain 28 29 30
+              33:    9(fvec4) Load 32
+              34:      6(int) Load 15(i)
+              35:     31(ptr) AccessChain 28 29 34
+              36:    9(fvec4) Load 35
+              37:    9(fvec4) FAdd 33 36
+              40:     39(ptr) AccessChain 16(input) 38
+              41:    9(fvec4) Load 40
+              42:    9(fvec4) FAdd 37 41
+              43:      6(int) Load 15(i)
+              44:     39(ptr) AccessChain 16(input) 43
+              45:    9(fvec4) Load 44
+              46:    9(fvec4) FAdd 42 45
+              52:     39(ptr) AccessChain 50(b) 51
+              53:    9(fvec4) Load 52
+              54:    9(fvec4) FAdd 46 53
+              55:      6(int) Load 15(i)
+              56:     39(ptr) AccessChain 50(b) 55
+              57:    9(fvec4) Load 56
+              58:    9(fvec4) FAdd 54 57
+              59:      6(int) Load 15(i)
+              60:      6(int) Load 15(i)
+              61:     31(ptr) AccessChain 28 30 59 29 60
+              62:    9(fvec4) Load 61
+              63:    9(fvec4) FAdd 58 62
+                              ReturnValue 63
+                              FunctionEnd

+ 98 - 85
3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out

@@ -2,7 +2,7 @@ hlsl.array.multidim.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:14      move second child to first child (temp 4-component vector of float)
@@ -48,15 +48,18 @@ gl_FragCoord origin is upper left
 0:18              1 (const int)
 0:18          Constant:
 0:18            2 (const int)
-0:19      Sequence
-0:19        Sequence
-0:19          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:19            Color: direct index for structure (temp 4-component vector of float)
-0:19              'psout' (temp structure{temp 4-component vector of float Color})
-0:19              Constant:
-0:19                0 (const int)
-0:19        Branch: Return
+0:19      Branch: Return with expression
+0:19        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
@@ -68,7 +71,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:14      move second child to first child (temp 4-component vector of float)
@@ -114,97 +117,107 @@ gl_FragCoord origin is upper left
 0:18              1 (const int)
 0:18          Constant:
 0:18            2 (const int)
-0:19      Sequence
-0:19        Sequence
-0:19          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:19            Color: direct index for structure (temp 4-component vector of float)
-0:19              'psout' (temp structure{temp 4-component vector of float Color})
-0:19              Constant:
-0:19                0 (const int)
-0:19        Branch: Return
+0:19      Branch: Return with expression
+0:19        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 52
+// Id's are bound by 57
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 48
+                              EntryPoint Fragment 4  "main" 54
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 14  "float4_array_1"
-                              Name 23  "$Global"
-                              MemberName 23($Global) 0  "float_array"
-                              Name 25  ""
-                              Name 36  "float4_array_2"
-                              Name 41  "PS_OUTPUT"
-                              MemberName 41(PS_OUTPUT) 0  "Color"
-                              Name 43  "psout"
-                              Name 48  "Color"
-                              Decorate 18 ArrayStride 16
-                              Decorate 20 ArrayStride 48
-                              Decorate 22 ArrayStride 192
-                              MemberDecorate 23($Global) 0 Offset 0
-                              Decorate 23($Global) Block
-                              Decorate 25 DescriptorSet 0
-                              Decorate 48(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 18  "float4_array_1"
+                              Name 27  "$Global"
+                              MemberName 27($Global) 0  "float_array"
+                              Name 29  ""
+                              Name 40  "float4_array_2"
+                              Name 46  "psout"
+                              Name 54  "Color"
+                              Decorate 22 ArrayStride 16
+                              Decorate 24 ArrayStride 48
+                              Decorate 26 ArrayStride 192
+                              MemberDecorate 27($Global) 0 Offset 0
+                              Decorate 27($Global) Block
+                              Decorate 29 DescriptorSet 0
+                              Decorate 54(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypeInt 32 0
-               9:      8(int) Constant 3
-              10:             TypeArray 7(fvec4) 9
-              11:      8(int) Constant 2
-              12:             TypeArray 10 11
-              13:             TypePointer Function 12
-              15:             TypeInt 32 1
-              16:     15(int) Constant 1
-              17:     15(int) Constant 2
-              18:             TypeArray 6(float) 9
-              19:      8(int) Constant 4
-              20:             TypeArray 18 19
-              21:      8(int) Constant 5
-              22:             TypeArray 20 21
-     23($Global):             TypeStruct 22
-              24:             TypePointer Uniform 23($Global)
-              25:     24(ptr) Variable Uniform
-              26:     15(int) Constant 0
-              27:     15(int) Constant 3
-              28:             TypePointer Uniform 6(float)
-              32:             TypePointer Function 7(fvec4)
-              34:             TypeArray 10 21
-              35:             TypePointer Function 34
-              37:             TypePointer Function 10
-   41(PS_OUTPUT):             TypeStruct 7(fvec4)
-              42:             TypePointer Function 41(PS_OUTPUT)
-              47:             TypePointer Output 7(fvec4)
-       48(Color):     47(ptr) Variable Output
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 0
+              13:     12(int) Constant 3
+              14:             TypeArray 7(fvec4) 13
+              15:     12(int) Constant 2
+              16:             TypeArray 14 15
+              17:             TypePointer Function 16
+              19:             TypeInt 32 1
+              20:     19(int) Constant 1
+              21:     19(int) Constant 2
+              22:             TypeArray 6(float) 13
+              23:     12(int) Constant 4
+              24:             TypeArray 22 23
+              25:     12(int) Constant 5
+              26:             TypeArray 24 25
+     27($Global):             TypeStruct 26
+              28:             TypePointer Uniform 27($Global)
+              29:     28(ptr) Variable Uniform
+              30:     19(int) Constant 0
+              31:     19(int) Constant 3
+              32:             TypePointer Uniform 6(float)
+              36:             TypePointer Function 7(fvec4)
+              38:             TypeArray 14 25
+              39:             TypePointer Function 38
+              41:             TypePointer Function 14
+              45:             TypePointer Function 8(PS_OUTPUT)
+              53:             TypePointer Output 7(fvec4)
+       54(Color):     53(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-14(float4_array_1):     13(ptr) Variable Function
-36(float4_array_2):     35(ptr) Variable Function
-       43(psout):     42(ptr) Variable Function
-              29:     28(ptr) AccessChain 25 26 17 27 16
-              30:    6(float) Load 29
-              31:    7(fvec4) CompositeConstruct 30 30 30 30
-              33:     32(ptr) AccessChain 14(float4_array_1) 16 17
-                              Store 33 31
-              38:     37(ptr) AccessChain 14(float4_array_1) 26
-              39:          10 Load 38
-              40:     37(ptr) AccessChain 36(float4_array_2) 16
-                              Store 40 39
-              44:     32(ptr) AccessChain 14(float4_array_1) 16 17
-              45:    7(fvec4) Load 44
-              46:     32(ptr) AccessChain 43(psout) 26
-                              Store 46 45
-              49:     32(ptr) AccessChain 43(psout) 26
-              50:    7(fvec4) Load 49
-                              Store 48(Color) 50
+              55:8(PS_OUTPUT) FunctionCall 10(@main()
+              56:    7(fvec4) CompositeExtract 55 0
+                              Store 54(Color) 56
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+18(float4_array_1):     17(ptr) Variable Function
+40(float4_array_2):     39(ptr) Variable Function
+       46(psout):     45(ptr) Variable Function
+              33:     32(ptr) AccessChain 29 30 21 31 20
+              34:    6(float) Load 33
+              35:    7(fvec4) CompositeConstruct 34 34 34 34
+              37:     36(ptr) AccessChain 18(float4_array_1) 20 21
+                              Store 37 35
+              42:     41(ptr) AccessChain 18(float4_array_1) 30
+              43:          14 Load 42
+              44:     41(ptr) AccessChain 40(float4_array_2) 20
+                              Store 44 43
+              47:     36(ptr) AccessChain 18(float4_array_1) 20 21
+              48:    7(fvec4) Load 47
+              49:     36(ptr) AccessChain 46(psout) 30
+                              Store 49 48
+              50:8(PS_OUTPUT) Load 46(psout)
+                              ReturnValue 50
+                              FunctionEnd

+ 183 - 79
3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out

@@ -2,36 +2,59 @@ hlsl.assoc.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:8  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'a1' (layout(location=0 ) in 4-component vector of float)
-0:8      'a2' (layout(location=1 ) in 4-component vector of float)
-0:8      'a3' (layout(location=2 ) in 4-component vector of float)
-0:8      'a4' (layout(location=3 ) in 4-component vector of float)
-0:8      'a5' (layout(location=4 ) in 4-component vector of float)
+0:8      'a1' (in 4-component vector of float)
+0:8      'a2' (in 4-component vector of float)
+0:8      'a3' (in 4-component vector of float)
+0:8      'a4' (in 4-component vector of float)
+0:8      'a5' (in 4-component vector of float)
 0:?     Sequence
 0:9      move second child to first child (temp 4-component vector of float)
-0:9        'a1' (layout(location=0 ) in 4-component vector of float)
+0:9        'a1' (in 4-component vector of float)
 0:9        move second child to first child (temp 4-component vector of float)
-0:9          'a2' (layout(location=1 ) in 4-component vector of float)
+0:9          'a2' (in 4-component vector of float)
 0:9          move second child to first child (temp 4-component vector of float)
-0:9            'a3' (layout(location=2 ) in 4-component vector of float)
+0:9            'a3' (in 4-component vector of float)
 0:9            move second child to first child (temp 4-component vector of float)
-0:9              'a4' (layout(location=3 ) in 4-component vector of float)
-0:9              'a5' (layout(location=4 ) in 4-component vector of float)
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:9              'a4' (in 4-component vector of float)
+0:9              'a5' (in 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              add (temp 4-component vector of float)
-0:10                add (temp 4-component vector of float)
-0:10                  'a1' (layout(location=0 ) in 4-component vector of float)
-0:10                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:10                'a3' (layout(location=2 ) in 4-component vector of float)
-0:10              'a4' (layout(location=3 ) in 4-component vector of float)
-0:10            'a5' (layout(location=4 ) in 4-component vector of float)
-0:10        Branch: Return
+0:10                'a1' (in 4-component vector of float)
+0:10                'a2' (in 4-component vector of float)
+0:10              'a3' (in 4-component vector of float)
+0:10            'a4' (in 4-component vector of float)
+0:10          'a5' (in 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a1' (temp 4-component vector of float)
+0:?         'a1' (layout(location=0 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a2' (temp 4-component vector of float)
+0:?         'a2' (layout(location=1 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a3' (temp 4-component vector of float)
+0:?         'a3' (layout(location=2 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a4' (temp 4-component vector of float)
+0:?         'a4' (layout(location=3 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a5' (temp 4-component vector of float)
+0:?         'a5' (layout(location=4 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:?           'a1' (temp 4-component vector of float)
+0:?           'a2' (temp 4-component vector of float)
+0:?           'a3' (temp 4-component vector of float)
+0:?           'a4' (temp 4-component vector of float)
+0:?           'a5' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'a1' (layout(location=0 ) in 4-component vector of float)
@@ -47,36 +70,59 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:8  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'a1' (layout(location=0 ) in 4-component vector of float)
-0:8      'a2' (layout(location=1 ) in 4-component vector of float)
-0:8      'a3' (layout(location=2 ) in 4-component vector of float)
-0:8      'a4' (layout(location=3 ) in 4-component vector of float)
-0:8      'a5' (layout(location=4 ) in 4-component vector of float)
+0:8      'a1' (in 4-component vector of float)
+0:8      'a2' (in 4-component vector of float)
+0:8      'a3' (in 4-component vector of float)
+0:8      'a4' (in 4-component vector of float)
+0:8      'a5' (in 4-component vector of float)
 0:?     Sequence
 0:9      move second child to first child (temp 4-component vector of float)
-0:9        'a1' (layout(location=0 ) in 4-component vector of float)
+0:9        'a1' (in 4-component vector of float)
 0:9        move second child to first child (temp 4-component vector of float)
-0:9          'a2' (layout(location=1 ) in 4-component vector of float)
+0:9          'a2' (in 4-component vector of float)
 0:9          move second child to first child (temp 4-component vector of float)
-0:9            'a3' (layout(location=2 ) in 4-component vector of float)
+0:9            'a3' (in 4-component vector of float)
 0:9            move second child to first child (temp 4-component vector of float)
-0:9              'a4' (layout(location=3 ) in 4-component vector of float)
-0:9              'a5' (layout(location=4 ) in 4-component vector of float)
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:9              'a4' (in 4-component vector of float)
+0:9              'a5' (in 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              add (temp 4-component vector of float)
-0:10                add (temp 4-component vector of float)
-0:10                  'a1' (layout(location=0 ) in 4-component vector of float)
-0:10                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:10                'a3' (layout(location=2 ) in 4-component vector of float)
-0:10              'a4' (layout(location=3 ) in 4-component vector of float)
-0:10            'a5' (layout(location=4 ) in 4-component vector of float)
-0:10        Branch: Return
+0:10                'a1' (in 4-component vector of float)
+0:10                'a2' (in 4-component vector of float)
+0:10              'a3' (in 4-component vector of float)
+0:10            'a4' (in 4-component vector of float)
+0:10          'a5' (in 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a1' (temp 4-component vector of float)
+0:?         'a1' (layout(location=0 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a2' (temp 4-component vector of float)
+0:?         'a2' (layout(location=1 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a3' (temp 4-component vector of float)
+0:?         'a3' (layout(location=2 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a4' (temp 4-component vector of float)
+0:?         'a4' (layout(location=3 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'a5' (temp 4-component vector of float)
+0:?         'a5' (layout(location=4 ) in 4-component vector of float)
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:?           'a1' (temp 4-component vector of float)
+0:?           'a2' (temp 4-component vector of float)
+0:?           'a3' (temp 4-component vector of float)
+0:?           'a4' (temp 4-component vector of float)
+0:?           'a5' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'a1' (layout(location=0 ) in 4-component vector of float)
@@ -87,54 +133,112 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 27
+// Id's are bound by 58
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 10 11 12 13 16
+                              EntryPoint Fragment 4  "PixelShaderFunction" 31 34 37 40 43 46
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "a1"
-                              Name 10  "a2"
-                              Name 11  "a3"
-                              Name 12  "a4"
-                              Name 13  "a5"
-                              Name 16  "@entryPointOutput"
-                              Decorate 9(a1) Location 0
-                              Decorate 10(a2) Location 1
-                              Decorate 11(a3) Location 2
-                              Decorate 12(a4) Location 3
-                              Decorate 13(a5) Location 4
-                              Decorate 16(@entryPointOutput) Location 0
+                              Name 15  "@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;"
+                              Name 10  "a1"
+                              Name 11  "a2"
+                              Name 12  "a3"
+                              Name 13  "a4"
+                              Name 14  "a5"
+                              Name 29  "a1"
+                              Name 31  "a1"
+                              Name 33  "a2"
+                              Name 34  "a2"
+                              Name 36  "a3"
+                              Name 37  "a3"
+                              Name 39  "a4"
+                              Name 40  "a4"
+                              Name 42  "a5"
+                              Name 43  "a5"
+                              Name 46  "@entryPointOutput"
+                              Name 47  "param"
+                              Name 49  "param"
+                              Name 51  "param"
+                              Name 53  "param"
+                              Name 55  "param"
+                              Decorate 31(a1) Location 0
+                              Decorate 34(a2) Location 1
+                              Decorate 37(a3) Location 2
+                              Decorate 40(a4) Location 3
+                              Decorate 43(a5) Location 4
+                              Decorate 46(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Input 7(fvec4)
-           9(a1):      8(ptr) Variable Input
-          10(a2):      8(ptr) Variable Input
-          11(a3):      8(ptr) Variable Input
-          12(a4):      8(ptr) Variable Input
-          13(a5):      8(ptr) Variable Input
-              15:             TypePointer Output 7(fvec4)
-16(@entryPointOutput):     15(ptr) Variable Output
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr) 8(ptr) 8(ptr) 8(ptr) 8(ptr)
+              30:             TypePointer Input 7(fvec4)
+          31(a1):     30(ptr) Variable Input
+          34(a2):     30(ptr) Variable Input
+          37(a3):     30(ptr) Variable Input
+          40(a4):     30(ptr) Variable Input
+          43(a5):     30(ptr) Variable Input
+              45:             TypePointer Output 7(fvec4)
+46(@entryPointOutput):     45(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              14:    7(fvec4) Load 13(a5)
-                              Store 12(a4) 14
-                              Store 11(a3) 14
-                              Store 10(a2) 14
-                              Store 9(a1) 14
-              17:    7(fvec4) Load 9(a1)
-              18:    7(fvec4) Load 10(a2)
-              19:    7(fvec4) FAdd 17 18
-              20:    7(fvec4) Load 11(a3)
-              21:    7(fvec4) FAdd 19 20
-              22:    7(fvec4) Load 12(a4)
-              23:    7(fvec4) FAdd 21 22
-              24:    7(fvec4) Load 13(a5)
-              25:    7(fvec4) FAdd 23 24
-                              Store 16(@entryPointOutput) 25
+          29(a1):      8(ptr) Variable Function
+          33(a2):      8(ptr) Variable Function
+          36(a3):      8(ptr) Variable Function
+          39(a4):      8(ptr) Variable Function
+          42(a5):      8(ptr) Variable Function
+       47(param):      8(ptr) Variable Function
+       49(param):      8(ptr) Variable Function
+       51(param):      8(ptr) Variable Function
+       53(param):      8(ptr) Variable Function
+       55(param):      8(ptr) Variable Function
+              32:    7(fvec4) Load 31(a1)
+                              Store 29(a1) 32
+              35:    7(fvec4) Load 34(a2)
+                              Store 33(a2) 35
+              38:    7(fvec4) Load 37(a3)
+                              Store 36(a3) 38
+              41:    7(fvec4) Load 40(a4)
+                              Store 39(a4) 41
+              44:    7(fvec4) Load 43(a5)
+                              Store 42(a5) 44
+              48:    7(fvec4) Load 29(a1)
+                              Store 47(param) 48
+              50:    7(fvec4) Load 33(a2)
+                              Store 49(param) 50
+              52:    7(fvec4) Load 36(a3)
+                              Store 51(param) 52
+              54:    7(fvec4) Load 39(a4)
+                              Store 53(param) 54
+              56:    7(fvec4) Load 42(a5)
+                              Store 55(param) 56
+              57:    7(fvec4) FunctionCall 15(@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;) 47(param) 49(param) 51(param) 53(param) 55(param)
+                              Store 46(@entryPointOutput) 57
                               Return
                               FunctionEnd
+15(@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;):    7(fvec4) Function None 9
+          10(a1):      8(ptr) FunctionParameter
+          11(a2):      8(ptr) FunctionParameter
+          12(a3):      8(ptr) FunctionParameter
+          13(a4):      8(ptr) FunctionParameter
+          14(a5):      8(ptr) FunctionParameter
+              16:             Label
+              17:    7(fvec4) Load 14(a5)
+                              Store 13(a4) 17
+                              Store 12(a3) 17
+                              Store 11(a2) 17
+                              Store 10(a1) 17
+              18:    7(fvec4) Load 10(a1)
+              19:    7(fvec4) Load 11(a2)
+              20:    7(fvec4) FAdd 18 19
+              21:    7(fvec4) Load 12(a3)
+              22:    7(fvec4) FAdd 20 21
+              23:    7(fvec4) Load 13(a4)
+              24:    7(fvec4) FAdd 22 23
+              25:    7(fvec4) Load 14(a5)
+              26:    7(fvec4) FAdd 24 25
+                              ReturnValue 26
+                              FunctionEnd

+ 80 - 67
3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out

@@ -2,7 +2,7 @@ hlsl.attribute.expression.comp
 Shader version: 450
 local_size = (4, 6, 8)
 0:? Sequence
-0:9  Function Definition: main( (temp 4-component vector of float)
+0:9  Function Definition: @main( (temp 4-component vector of float)
 0:9    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
@@ -22,15 +22,18 @@ local_size = (4, 6, 8)
 0:11          Loop Terminal Expression
 0:11          Pre-Increment (temp int)
 0:11            'x' (temp int)
-0:14      Sequence
-0:14        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:14        Branch: Return
+0:14      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:9        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
@@ -42,7 +45,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (4, 6, 8)
 0:? Sequence
-0:9  Function Definition: main( (temp 4-component vector of float)
+0:9  Function Definition: @main( (temp 4-component vector of float)
 0:9    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
@@ -62,77 +65,87 @@ local_size = (4, 6, 8)
 0:11          Loop Terminal Expression
 0:11          Pre-Increment (temp int)
 0:11            'x' (temp int)
-0:14      Sequence
-0:14        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:14        Branch: Return
+0:14      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:9        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 34
+// Id's are bound by 39
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 30
+                              EntryPoint GLCompute 4  "main" 37
                               ExecutionMode 4 LocalSize 4 6 8
                               Name 4  "main"
-                              Name 8  "x"
-                              Name 16  "$Global"
-                              MemberName 16($Global) 0  "bound"
-                              Name 18  ""
-                              Name 30  "@entryPointOutput"
-                              MemberDecorate 16($Global) 0 Offset 0
-                              Decorate 16($Global) Block
-                              Decorate 18 DescriptorSet 0
-                              Decorate 30(@entryPointOutput) Location 0
+                              Name 9  "@main("
+                              Name 13  "x"
+                              Name 21  "$Global"
+                              MemberName 21($Global) 0  "bound"
+                              Name 23  ""
+                              Name 37  "@entryPointOutput"
+                              MemberDecorate 21($Global) 0 Offset 0
+                              Decorate 21($Global) Block
+                              Decorate 23 DescriptorSet 0
+                              Decorate 37(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:      6(int) Constant 0
-     16($Global):             TypeStruct 6(int)
-              17:             TypePointer Uniform 16($Global)
-              18:     17(ptr) Variable Uniform
-              19:             TypePointer Uniform 6(int)
-              22:             TypeBool
-              25:      6(int) Constant 1
-              27:             TypeFloat 32
-              28:             TypeVector 27(float) 4
-              29:             TypePointer Output 28(fvec4)
-30(@entryPointOutput):     29(ptr) Variable Output
-              31:   27(float) Constant 0
-              32:   28(fvec4) ConstantComposite 31 31 31 31
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeInt 32 1
+              12:             TypePointer Function 11(int)
+              14:     11(int) Constant 0
+     21($Global):             TypeStruct 11(int)
+              22:             TypePointer Uniform 21($Global)
+              23:     22(ptr) Variable Uniform
+              24:             TypePointer Uniform 11(int)
+              27:             TypeBool
+              30:     11(int) Constant 1
+              32:    6(float) Constant 0
+              33:    7(fvec4) ConstantComposite 32 32 32 32
+              36:             TypePointer Output 7(fvec4)
+37(@entryPointOutput):     36(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-            8(x):      7(ptr) Variable Function
-                              Store 8(x) 9
-                              Branch 10
-              10:             Label
-                              LoopMerge 12 13 None
-                              Branch 14
-              14:             Label
-              15:      6(int) Load 8(x)
-              20:     19(ptr) AccessChain 18 9
-              21:      6(int) Load 20
-              23:    22(bool) SLessThan 15 21
-                              BranchConditional 23 11 12
-              11:               Label
-                                Branch 13
-              13:               Label
-              24:      6(int)   Load 8(x)
-              26:      6(int)   IAdd 24 25
-                                Store 8(x) 26
-                                Branch 10
-              12:             Label
-                              Store 30(@entryPointOutput) 32
+              38:    7(fvec4) FunctionCall 9(@main()
+                              Store 37(@entryPointOutput) 38
                               Return
                               FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+           13(x):     12(ptr) Variable Function
+                              Store 13(x) 14
+                              Branch 15
+              15:             Label
+                              LoopMerge 17 18 None
+                              Branch 19
+              19:             Label
+              20:     11(int) Load 13(x)
+              25:     24(ptr) AccessChain 23 14
+              26:     11(int) Load 25
+              28:    27(bool) SLessThan 20 26
+                              BranchConditional 28 16 17
+              16:               Label
+                                Branch 18
+              18:               Label
+              29:     11(int)   Load 13(x)
+              31:     11(int)   IAdd 29 30
+                                Store 13(x) 31
+                                Branch 15
+              17:             Label
+                              ReturnValue 33
+                              FunctionEnd

+ 53 - 19
3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out

@@ -2,15 +2,23 @@ hlsl.attribute.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp void)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp void)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:11      Test condition and select (temp void)
 0:11        Condition
 0:11        Constant:
 0:11          0 (const int)
 0:11        true case is null
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      Function Call: @PixelShaderFunction(vf4; (temp void)
+0:?         'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
@@ -21,44 +29,70 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp void)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp void)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:11      Test condition and select (temp void)
 0:11        Condition
 0:11        Constant:
 0:11          0 (const int)
 0:11        true case is null
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      Function Call: @PixelShaderFunction(vf4; (temp void)
+0:?         'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 14
+// Id's are bound by 24
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 13
+                              EntryPoint Fragment 4  "PixelShaderFunction" 19
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 13  "input"
-                              Decorate 13(input) Location 0
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 17  "input"
+                              Name 19  "input"
+                              Name 21  "param"
+                              Decorate 19(input) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:      6(int) Constant 0
-              10:             TypeFloat 32
-              11:             TypeVector 10(float) 4
-              12:             TypePointer Input 11(fvec4)
-       13(input):     12(ptr) Variable Input
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              18:             TypePointer Input 7(fvec4)
+       19(input):     18(ptr) Variable Input
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              SelectionMerge 9 None
-                              BranchConditional 7 8 9
-               8:               Label
-                                Branch 9
-               9:             Label
+       17(input):      8(ptr) Variable Function
+       21(param):      8(ptr) Variable Function
+              20:    7(fvec4) Load 19(input)
+                              Store 17(input) 20
+              22:    7(fvec4) Load 17(input)
+                              Store 21(param) 22
+              23:           2 FunctionCall 11(@PixelShaderFunction(vf4;) 21(param)
+                              Return
+                              FunctionEnd
+11(@PixelShaderFunction(vf4;):           2 Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+                              SelectionMerge 16 None
+                              BranchConditional 14 15 16
+              15:               Label
+                                Branch 16
+              16:             Label
                               Return
                               FunctionEnd

+ 83 - 31
3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out

@@ -2,18 +2,30 @@ hlsl.basic.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:4  Function Definition: main(i1;i1; (temp void)
+0:4  Function Definition: @main(i1;i1; (temp void)
 0:4    Function Parameters: 
-0:4      'dti' (in int GlobalInvocationID)
-0:4      'gti' (in int LocalInvocationID)
+0:4      'dti' (in int)
+0:4      'gti' (in int)
 0:?     Sequence
 0:5      subtract (temp int)
-0:5        'dti' (in int GlobalInvocationID)
-0:5        'gti' (in int LocalInvocationID)
+0:5        'dti' (in int)
+0:5        'gti' (in int)
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child (temp int)
+0:?         'dti' (temp int)
+0:?         'dti' (in int GlobalInvocationID)
+0:4      move second child to first child (temp int)
+0:?         'gti' (temp int)
+0:?         'gti' (in int LocalInvocationID)
+0:4      Function Call: @main(i1;i1; (temp void)
+0:?         'dti' (temp int)
+0:?         'gti' (temp int)
 0:?   Linker Objects
+0:?     'a' (shared 100-element array of 4-component vector of float)
 0:?     'dti' (in int GlobalInvocationID)
 0:?     'gti' (in int LocalInvocationID)
-0:?     'a' (shared 100-element array of 4-component vector of float)
 
 
 Linked compute stage:
@@ -22,51 +34,91 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:4  Function Definition: main(i1;i1; (temp void)
+0:4  Function Definition: @main(i1;i1; (temp void)
 0:4    Function Parameters: 
-0:4      'dti' (in int GlobalInvocationID)
-0:4      'gti' (in int LocalInvocationID)
+0:4      'dti' (in int)
+0:4      'gti' (in int)
 0:?     Sequence
 0:5      subtract (temp int)
-0:5        'dti' (in int GlobalInvocationID)
-0:5        'gti' (in int LocalInvocationID)
+0:5        'dti' (in int)
+0:5        'gti' (in int)
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child (temp int)
+0:?         'dti' (temp int)
+0:?         'dti' (in int GlobalInvocationID)
+0:4      move second child to first child (temp int)
+0:?         'gti' (temp int)
+0:?         'gti' (in int LocalInvocationID)
+0:4      Function Call: @main(i1;i1; (temp void)
+0:?         'dti' (temp int)
+0:?         'gti' (temp int)
 0:?   Linker Objects
+0:?     'a' (shared 100-element array of 4-component vector of float)
 0:?     'dti' (in int GlobalInvocationID)
 0:?     'gti' (in int LocalInvocationID)
-0:?     'a' (shared 100-element array of 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 20
+// Id's are bound by 35
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 8 10
+                              EntryPoint GLCompute 4  "main" 18 21
                               ExecutionMode 4 LocalSize 1 1 1
                               Name 4  "main"
-                              Name 8  "dti"
+                              Name 11  "@main(i1;i1;"
+                              Name 9  "dti"
                               Name 10  "gti"
-                              Name 19  "a"
-                              Decorate 8(dti) BuiltIn GlobalInvocationId
-                              Decorate 10(gti) BuiltIn LocalInvocationId
+                              Name 16  "dti"
+                              Name 18  "dti"
+                              Name 20  "gti"
+                              Name 21  "gti"
+                              Name 23  "param"
+                              Name 25  "param"
+                              Name 34  "a"
+                              Decorate 18(dti) BuiltIn GlobalInvocationId
+                              Decorate 21(gti) BuiltIn LocalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
-               7:             TypePointer Input 6(int)
-          8(dti):      7(ptr) Variable Input
-         10(gti):      7(ptr) Variable Input
-              13:             TypeFloat 32
-              14:             TypeVector 13(float) 4
-              15:             TypeInt 32 0
-              16:     15(int) Constant 100
-              17:             TypeArray 14(fvec4) 16
-              18:             TypePointer Workgroup 17
-           19(a):     18(ptr) Variable Workgroup
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 2 7(ptr) 7(ptr)
+              17:             TypePointer Input 6(int)
+         18(dti):     17(ptr) Variable Input
+         21(gti):     17(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 4
+              30:             TypeInt 32 0
+              31:     30(int) Constant 100
+              32:             TypeArray 29(fvec4) 31
+              33:             TypePointer Workgroup 32
+           34(a):     33(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
-               9:      6(int) Load 8(dti)
-              11:      6(int) Load 10(gti)
-              12:      6(int) ISub 9 11
+         16(dti):      7(ptr) Variable Function
+         20(gti):      7(ptr) Variable Function
+       23(param):      7(ptr) Variable Function
+       25(param):      7(ptr) Variable Function
+              19:      6(int) Load 18(dti)
+                              Store 16(dti) 19
+              22:      6(int) Load 21(gti)
+                              Store 20(gti) 22
+              24:      6(int) Load 16(dti)
+                              Store 23(param) 24
+              26:      6(int) Load 20(gti)
+                              Store 25(param) 26
+              27:           2 FunctionCall 11(@main(i1;i1;) 23(param) 25(param)
+                              Return
+                              FunctionEnd
+11(@main(i1;i1;):           2 Function None 8
+          9(dti):      7(ptr) FunctionParameter
+         10(gti):      7(ptr) FunctionParameter
+              12:             Label
+              13:      6(int) Load 9(dti)
+              14:      6(int) Load 10(gti)
+              15:      6(int) ISub 13 14
                               Return
                               FunctionEnd

+ 134 - 80
3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out

@@ -5,11 +5,11 @@ max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
 0:? Sequence
-0:16  Function Definition: main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:16  Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 0:16    Function Parameters: 
-0:16      'VertexID' (layout(location=0 ) in 3-element array of uint)
-0:16      'test' (layout(location=3 ) in 3-element array of uint)
-0:16      'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:16      'VertexID' (in 3-element array of uint)
+0:16      'test' (in 3-element array of uint)
+0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
 0:?     Sequence
 0:19      move second child to first child (temp float)
 0:19        myfloat: direct index for structure (temp float)
@@ -19,16 +19,16 @@ output primitive = line_strip
 0:19        Convert uint to float (temp float)
 0:19          add (temp uint)
 0:19            add (temp uint)
-0:19              direct index (layout(location=3 ) temp uint)
-0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19              direct index (temp uint)
+0:19                'test' (in 3-element array of uint)
 0:19                Constant:
 0:19                  0 (const int)
-0:19              direct index (layout(location=3 ) temp uint)
-0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19              direct index (temp uint)
+0:19                'test' (in 3-element array of uint)
 0:19                Constant:
 0:19                  1 (const int)
-0:19            direct index (layout(location=3 ) temp uint)
-0:19              'test' (layout(location=3 ) in 3-element array of uint)
+0:19            direct index (temp uint)
+0:19              'test' (in 3-element array of uint)
 0:19              Constant:
 0:19                2 (const int)
 0:20      move second child to first child (temp int)
@@ -37,25 +37,37 @@ output primitive = line_strip
 0:20          Constant:
 0:20            1 (const int)
 0:20        Convert uint to int (temp int)
-0:20          direct index (layout(location=0 ) temp uint)
-0:20            'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:20          direct index (temp uint)
+0:20            'VertexID' (in 3-element array of uint)
 0:20            Constant:
 0:20              0 (const int)
 0:22      Sequence
 0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
-0:22          'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
 0:22          'Vert' (temp structure{temp float myfloat, temp int something})
 0:22        EmitVertex (temp void)
 0:23      Sequence
 0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
-0:23          'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
 0:23          'Vert' (temp structure{temp float myfloat, temp int something})
 0:23        EmitVertex (temp void)
 0:24      EndPrimitive (temp void)
+0:16  Function Definition: main( (temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child (temp 3-element array of uint)
+0:?         'VertexID' (temp 3-element array of uint)
+0:?         'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:16      move second child to first child (temp 3-element array of uint)
+0:?         'test' (temp 3-element array of uint)
+0:?         'test' (layout(location=3 ) in 3-element array of uint)
+0:16      Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:?         'VertexID' (temp 3-element array of uint)
+0:?         'test' (temp 3-element array of uint)
+0:?         'OutputStream' (temp structure{temp float myfloat, temp int something})
 0:?   Linker Objects
 0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
 0:?     'test' (layout(location=3 ) in 3-element array of uint)
-0:?     'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
 
 
 Linked geometry stage:
@@ -67,11 +79,11 @@ max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
 0:? Sequence
-0:16  Function Definition: main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:16  Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 0:16    Function Parameters: 
-0:16      'VertexID' (layout(location=0 ) in 3-element array of uint)
-0:16      'test' (layout(location=3 ) in 3-element array of uint)
-0:16      'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:16      'VertexID' (in 3-element array of uint)
+0:16      'test' (in 3-element array of uint)
+0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
 0:?     Sequence
 0:19      move second child to first child (temp float)
 0:19        myfloat: direct index for structure (temp float)
@@ -81,16 +93,16 @@ output primitive = line_strip
 0:19        Convert uint to float (temp float)
 0:19          add (temp uint)
 0:19            add (temp uint)
-0:19              direct index (layout(location=3 ) temp uint)
-0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19              direct index (temp uint)
+0:19                'test' (in 3-element array of uint)
 0:19                Constant:
 0:19                  0 (const int)
-0:19              direct index (layout(location=3 ) temp uint)
-0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19              direct index (temp uint)
+0:19                'test' (in 3-element array of uint)
 0:19                Constant:
 0:19                  1 (const int)
-0:19            direct index (layout(location=3 ) temp uint)
-0:19              'test' (layout(location=3 ) in 3-element array of uint)
+0:19            direct index (temp uint)
+0:19              'test' (in 3-element array of uint)
 0:19              Constant:
 0:19                2 (const int)
 0:20      move second child to first child (temp int)
@@ -99,93 +111,135 @@ output primitive = line_strip
 0:20          Constant:
 0:20            1 (const int)
 0:20        Convert uint to int (temp int)
-0:20          direct index (layout(location=0 ) temp uint)
-0:20            'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:20          direct index (temp uint)
+0:20            'VertexID' (in 3-element array of uint)
 0:20            Constant:
 0:20              0 (const int)
 0:22      Sequence
 0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
-0:22          'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
 0:22          'Vert' (temp structure{temp float myfloat, temp int something})
 0:22        EmitVertex (temp void)
 0:23      Sequence
 0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
-0:23          'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
+0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
 0:23          'Vert' (temp structure{temp float myfloat, temp int something})
 0:23        EmitVertex (temp void)
 0:24      EndPrimitive (temp void)
+0:16  Function Definition: main( (temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child (temp 3-element array of uint)
+0:?         'VertexID' (temp 3-element array of uint)
+0:?         'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:16      move second child to first child (temp 3-element array of uint)
+0:?         'test' (temp 3-element array of uint)
+0:?         'test' (layout(location=3 ) in 3-element array of uint)
+0:16      Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:?         'VertexID' (temp 3-element array of uint)
+0:?         'test' (temp 3-element array of uint)
+0:?         'OutputStream' (temp structure{temp float myfloat, temp int something})
 0:?   Linker Objects
 0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
 0:?     'test' (layout(location=3 ) in 3-element array of uint)
-0:?     'OutputStream' (layout(location=0 ) out structure{temp float myfloat, temp int something})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 41
+// Id's are bound by 57
 
                               Capability Geometry
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 4  "main" 16 31 38
+                              EntryPoint Geometry 4  "main" 45 48
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 Invocations 1
                               ExecutionMode 4 OutputLineStrip
                               ExecutionMode 4 OutputVertices 4
                               Name 4  "main"
-                              Name 8  "PSInput"
-                              MemberName 8(PSInput) 0  "myfloat"
-                              MemberName 8(PSInput) 1  "something"
-                              Name 10  "Vert"
+                              Name 12  "PSInput"
+                              MemberName 12(PSInput) 0  "myfloat"
+                              MemberName 12(PSInput) 1  "something"
+                              Name 18  "@main(u1[3];u1[3];struct-PSInput-f1-i11;"
+                              Name 15  "VertexID"
                               Name 16  "test"
-                              Name 31  "VertexID"
-                              Name 38  "OutputStream"
-                              Decorate 16(test) Location 3
-                              Decorate 31(VertexID) Location 0
-                              Decorate 38(OutputStream) Location 0
+                              Name 17  "OutputStream"
+                              Name 20  "Vert"
+                              Name 43  "VertexID"
+                              Name 45  "VertexID"
+                              Name 47  "test"
+                              Name 48  "test"
+                              Name 50  "OutputStream"
+                              Name 51  "param"
+                              Name 53  "param"
+                              Name 55  "param"
+                              Decorate 45(VertexID) Location 0
+                              Decorate 48(test) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypeInt 32 1
-      8(PSInput):             TypeStruct 6(float) 7(int)
-               9:             TypePointer Function 8(PSInput)
-              11:      7(int) Constant 0
-              12:             TypeInt 32 0
-              13:     12(int) Constant 3
-              14:             TypeArray 12(int) 13
-              15:             TypePointer Input 14
-        16(test):     15(ptr) Variable Input
-              17:             TypePointer Input 12(int)
-              20:      7(int) Constant 1
-              24:      7(int) Constant 2
-              29:             TypePointer Function 6(float)
-    31(VertexID):     15(ptr) Variable Input
-              35:             TypePointer Function 7(int)
-              37:             TypePointer Output 8(PSInput)
-38(OutputStream):     37(ptr) Variable Output
+               6:             TypeInt 32 0
+               7:      6(int) Constant 3
+               8:             TypeArray 6(int) 7
+               9:             TypePointer Function 8
+              10:             TypeFloat 32
+              11:             TypeInt 32 1
+     12(PSInput):             TypeStruct 10(float) 11(int)
+              13:             TypePointer Function 12(PSInput)
+              14:             TypeFunction 2 9(ptr) 9(ptr) 13(ptr)
+              21:     11(int) Constant 0
+              22:             TypePointer Function 6(int)
+              25:     11(int) Constant 1
+              29:     11(int) Constant 2
+              34:             TypePointer Function 10(float)
+              39:             TypePointer Function 11(int)
+              44:             TypePointer Input 8
+    45(VertexID):     44(ptr) Variable Input
+        48(test):     44(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-        10(Vert):      9(ptr) Variable Function
-              18:     17(ptr) AccessChain 16(test) 11
-              19:     12(int) Load 18
-              21:     17(ptr) AccessChain 16(test) 20
-              22:     12(int) Load 21
-              23:     12(int) IAdd 19 22
-              25:     17(ptr) AccessChain 16(test) 24
-              26:     12(int) Load 25
-              27:     12(int) IAdd 23 26
-              28:    6(float) ConvertUToF 27
-              30:     29(ptr) AccessChain 10(Vert) 11
-                              Store 30 28
-              32:     17(ptr) AccessChain 31(VertexID) 11
-              33:     12(int) Load 32
-              34:      7(int) Bitcast 33
-              36:     35(ptr) AccessChain 10(Vert) 20
-                              Store 36 34
-              39:  8(PSInput) Load 10(Vert)
-                              Store 38(OutputStream) 39
+    43(VertexID):      9(ptr) Variable Function
+        47(test):      9(ptr) Variable Function
+50(OutputStream):     13(ptr) Variable Function
+       51(param):      9(ptr) Variable Function
+       53(param):      9(ptr) Variable Function
+       55(param):     13(ptr) Variable Function
+              46:           8 Load 45(VertexID)
+                              Store 43(VertexID) 46
+              49:           8 Load 48(test)
+                              Store 47(test) 49
+              52:           8 Load 43(VertexID)
+                              Store 51(param) 52
+              54:           8 Load 47(test)
+                              Store 53(param) 54
+              56:           2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 51(param) 53(param) 55(param)
+                              Return
+                              FunctionEnd
+18(@main(u1[3];u1[3];struct-PSInput-f1-i11;):           2 Function None 14
+    15(VertexID):      9(ptr) FunctionParameter
+        16(test):      9(ptr) FunctionParameter
+17(OutputStream):     13(ptr) FunctionParameter
+              19:             Label
+        20(Vert):     13(ptr) Variable Function
+              23:     22(ptr) AccessChain 16(test) 21
+              24:      6(int) Load 23
+              26:     22(ptr) AccessChain 16(test) 25
+              27:      6(int) Load 26
+              28:      6(int) IAdd 24 27
+              30:     22(ptr) AccessChain 16(test) 29
+              31:      6(int) Load 30
+              32:      6(int) IAdd 28 31
+              33:   10(float) ConvertUToF 32
+              35:     34(ptr) AccessChain 20(Vert) 21
+                              Store 35 33
+              36:     22(ptr) AccessChain 15(VertexID) 21
+              37:      6(int) Load 36
+              38:     11(int) Bitcast 37
+              40:     39(ptr) AccessChain 20(Vert) 25
+                              Store 40 38
+              41: 12(PSInput) Load 20(Vert)
+                              Store 17(OutputStream) 41
                               EmitVertex
-              40:  8(PSInput) Load 10(Vert)
-                              Store 38(OutputStream) 40
+              42: 12(PSInput) Load 20(Vert)
+                              Store 17(OutputStream) 42
                               EmitVertex
                               EndPrimitive
                               Return

+ 170 - 138
3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out

@@ -2,42 +2,49 @@ hlsl.buffer.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:30  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:30  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:30    Function Parameters: 
-0:30      'input' (layout(location=0 ) in 4-component vector of float)
+0:30      'input' (in 4-component vector of float)
 0:?     Sequence
-0:31      Sequence
-0:31        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:31      Branch: Return with expression
+0:31        add (temp 4-component vector of float)
 0:31          add (temp 4-component vector of float)
 0:31            add (temp 4-component vector of float)
 0:31              add (temp 4-component vector of float)
-0:31                add (temp 4-component vector of float)
-0:31                  'input' (layout(location=0 ) in 4-component vector of float)
-0:31                  v1: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
-0:31                    'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
-0:31                    Constant:
-0:31                      0 (const uint)
-0:31                v2: direct index for structure (layout(row_major std430 ) buffer 4-component vector of float)
-0:31                  'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
+0:31                'input' (in 4-component vector of float)
+0:31                v1: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
+0:31                  'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:31                  Constant:
 0:31                    0 (const uint)
-0:31              v3: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
-0:31                'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
+0:31              v2: direct index for structure (layout(row_major std430 ) buffer 4-component vector of float)
+0:31                'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:31                Constant:
 0:31                  0 (const uint)
-0:31            v4: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
-0:31              'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:31            v3: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
+0:31              'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:31              Constant:
 0:31                0 (const uint)
-0:31        Branch: Return
+0:31          v4: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:31            'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:31            Constant:
+0:31              0 (const uint)
+0:30  Function Definition: PixelShaderFunction( (temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:30      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:30        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:?     'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 
 Linked fragment stage:
@@ -46,154 +53,179 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:30  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:30  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:30    Function Parameters: 
-0:30      'input' (layout(location=0 ) in 4-component vector of float)
+0:30      'input' (in 4-component vector of float)
 0:?     Sequence
-0:31      Sequence
-0:31        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:31      Branch: Return with expression
+0:31        add (temp 4-component vector of float)
 0:31          add (temp 4-component vector of float)
 0:31            add (temp 4-component vector of float)
 0:31              add (temp 4-component vector of float)
-0:31                add (temp 4-component vector of float)
-0:31                  'input' (layout(location=0 ) in 4-component vector of float)
-0:31                  v1: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
-0:31                    'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
-0:31                    Constant:
-0:31                      0 (const uint)
-0:31                v2: direct index for structure (layout(row_major std430 ) buffer 4-component vector of float)
-0:31                  'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
+0:31                'input' (in 4-component vector of float)
+0:31                v1: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
+0:31                  'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:31                  Constant:
 0:31                    0 (const uint)
-0:31              v3: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
-0:31                'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
+0:31              v2: direct index for structure (layout(row_major std430 ) buffer 4-component vector of float)
+0:31                'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:31                Constant:
 0:31                  0 (const uint)
-0:31            v4: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
-0:31              'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:31            v3: direct index for structure (layout(row_major std140 ) uniform 4-component vector of float)
+0:31              'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:31              Constant:
 0:31                0 (const uint)
-0:31        Branch: Return
+0:31          v4: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:31            'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:31            Constant:
+0:31              0 (const uint)
+0:30  Function Definition: PixelShaderFunction( (temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:30      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:30        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:?     'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 42
+// Id's are bound by 53
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 11
+                              EntryPoint Fragment 4  "PixelShaderFunction" 46 49
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "@entryPointOutput"
-                              Name 11  "input"
-                              Name 13  ""
-                              MemberName 13 0  "v1"
-                              Name 15  ""
-                              Name 22  ""
-                              MemberName 22 0  "v2"
-                              Name 24  ""
-                              Name 28  "cbufName"
-                              MemberName 28(cbufName) 0  "v3"
-                              MemberName 28(cbufName) 1  "i3"
-                              Name 30  ""
-                              Name 35  "tbufName"
-                              MemberName 35(tbufName) 0  "v4"
-                              MemberName 35(tbufName) 1  "i4"
-                              MemberName 35(tbufName) 2  "f1"
-                              MemberName 35(tbufName) 3  "f3"
-                              MemberName 35(tbufName) 4  "f4"
-                              MemberName 35(tbufName) 5  "f5"
-                              MemberName 35(tbufName) 6  "f6"
-                              MemberName 35(tbufName) 7  "f7"
-                              MemberName 35(tbufName) 8  "m1"
-                              MemberName 35(tbufName) 9  "m2"
-                              MemberName 35(tbufName) 10  "m3"
-                              MemberName 35(tbufName) 11  "m4"
-                              Name 37  ""
-                              Decorate 9(@entryPointOutput) Location 0
-                              Decorate 11(input) Location 0
-                              MemberDecorate 13 0 Offset 0
-                              Decorate 13 Block
-                              Decorate 15 DescriptorSet 0
-                              MemberDecorate 22 0 Offset 0
-                              Decorate 22 BufferBlock
-                              Decorate 24 DescriptorSet 0
-                              MemberDecorate 28(cbufName) 0 Offset 0
-                              MemberDecorate 28(cbufName) 1 Offset 20
-                              Decorate 28(cbufName) Block
-                              Decorate 30 DescriptorSet 10
-                              Decorate 30 Binding 2
-                              MemberDecorate 35(tbufName) 0 Offset 16
-                              MemberDecorate 35(tbufName) 1 Offset 48
-                              MemberDecorate 35(tbufName) 2 Offset 60
-                              MemberDecorate 35(tbufName) 3 Offset 64
-                              MemberDecorate 35(tbufName) 4 Offset 68
-                              MemberDecorate 35(tbufName) 5 Offset 72
-                              MemberDecorate 35(tbufName) 6 Offset 76
-                              MemberDecorate 35(tbufName) 7 Offset 80
-                              MemberDecorate 35(tbufName) 8 RowMajor
-                              MemberDecorate 35(tbufName) 8 Offset 96
-                              MemberDecorate 35(tbufName) 8 MatrixStride 16
-                              MemberDecorate 35(tbufName) 9 ColMajor
-                              MemberDecorate 35(tbufName) 9 Offset 160
-                              MemberDecorate 35(tbufName) 9 MatrixStride 16
-                              MemberDecorate 35(tbufName) 10 RowMajor
-                              MemberDecorate 35(tbufName) 10 Offset 208
-                              MemberDecorate 35(tbufName) 10 MatrixStride 16
-                              MemberDecorate 35(tbufName) 11 RowMajor
-                              MemberDecorate 35(tbufName) 11 Offset 272
-                              MemberDecorate 35(tbufName) 11 MatrixStride 16
-                              Decorate 35(tbufName) BufferBlock
-                              Decorate 37 DescriptorSet 0
-                              Decorate 37 Binding 8
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 14  ""
+                              MemberName 14 0  "v1"
+                              Name 16  ""
+                              Name 23  ""
+                              MemberName 23 0  "v2"
+                              Name 25  ""
+                              Name 29  "cbufName"
+                              MemberName 29(cbufName) 0  "v3"
+                              MemberName 29(cbufName) 1  "i3"
+                              Name 31  ""
+                              Name 36  "tbufName"
+                              MemberName 36(tbufName) 0  "v4"
+                              MemberName 36(tbufName) 1  "i4"
+                              MemberName 36(tbufName) 2  "f1"
+                              MemberName 36(tbufName) 3  "f3"
+                              MemberName 36(tbufName) 4  "f4"
+                              MemberName 36(tbufName) 5  "f5"
+                              MemberName 36(tbufName) 6  "f6"
+                              MemberName 36(tbufName) 7  "f7"
+                              MemberName 36(tbufName) 8  "m1"
+                              MemberName 36(tbufName) 9  "m2"
+                              MemberName 36(tbufName) 10  "m3"
+                              MemberName 36(tbufName) 11  "m4"
+                              Name 38  ""
+                              Name 44  "input"
+                              Name 46  "input"
+                              Name 49  "@entryPointOutput"
+                              Name 50  "param"
+                              MemberDecorate 14 0 Offset 0
+                              Decorate 14 Block
+                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 23 0 Offset 0
+                              Decorate 23 BufferBlock
+                              Decorate 25 DescriptorSet 0
+                              MemberDecorate 29(cbufName) 0 Offset 0
+                              MemberDecorate 29(cbufName) 1 Offset 20
+                              Decorate 29(cbufName) Block
+                              Decorate 31 DescriptorSet 10
+                              Decorate 31 Binding 2
+                              MemberDecorate 36(tbufName) 0 Offset 16
+                              MemberDecorate 36(tbufName) 1 Offset 48
+                              MemberDecorate 36(tbufName) 2 Offset 60
+                              MemberDecorate 36(tbufName) 3 Offset 64
+                              MemberDecorate 36(tbufName) 4 Offset 68
+                              MemberDecorate 36(tbufName) 5 Offset 72
+                              MemberDecorate 36(tbufName) 6 Offset 76
+                              MemberDecorate 36(tbufName) 7 Offset 80
+                              MemberDecorate 36(tbufName) 8 RowMajor
+                              MemberDecorate 36(tbufName) 8 Offset 96
+                              MemberDecorate 36(tbufName) 8 MatrixStride 16
+                              MemberDecorate 36(tbufName) 9 ColMajor
+                              MemberDecorate 36(tbufName) 9 Offset 160
+                              MemberDecorate 36(tbufName) 9 MatrixStride 16
+                              MemberDecorate 36(tbufName) 10 RowMajor
+                              MemberDecorate 36(tbufName) 10 Offset 208
+                              MemberDecorate 36(tbufName) 10 MatrixStride 16
+                              MemberDecorate 36(tbufName) 11 RowMajor
+                              MemberDecorate 36(tbufName) 11 Offset 272
+                              MemberDecorate 36(tbufName) 11 MatrixStride 16
+                              Decorate 36(tbufName) BufferBlock
+                              Decorate 38 DescriptorSet 0
+                              Decorate 38 Binding 8
+                              Decorate 46(input) Location 0
+                              Decorate 49(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:             TypePointer Input 7(fvec4)
-       11(input):     10(ptr) Variable Input
-              13:             TypeStruct 7(fvec4)
-              14:             TypePointer Uniform 13(struct)
-              15:     14(ptr) Variable Uniform
-              16:             TypeInt 32 1
-              17:     16(int) Constant 0
-              18:             TypePointer Uniform 7(fvec4)
-              22:             TypeStruct 7(fvec4)
-              23:             TypePointer Uniform 22(struct)
-              24:     23(ptr) Variable Uniform
-    28(cbufName):             TypeStruct 7(fvec4) 16(int)
-              29:             TypePointer Uniform 28(cbufName)
-              30:     29(ptr) Variable Uniform
-              34:             TypeMatrix 7(fvec4) 3
-    35(tbufName):             TypeStruct 7(fvec4) 16(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 34 34 34 34
-              36:             TypePointer Uniform 35(tbufName)
-              37:     36(ptr) Variable Uniform
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              14:             TypeStruct 7(fvec4)
+              15:             TypePointer Uniform 14(struct)
+              16:     15(ptr) Variable Uniform
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:             TypePointer Uniform 7(fvec4)
+              23:             TypeStruct 7(fvec4)
+              24:             TypePointer Uniform 23(struct)
+              25:     24(ptr) Variable Uniform
+    29(cbufName):             TypeStruct 7(fvec4) 17(int)
+              30:             TypePointer Uniform 29(cbufName)
+              31:     30(ptr) Variable Uniform
+              35:             TypeMatrix 7(fvec4) 3
+    36(tbufName):             TypeStruct 7(fvec4) 17(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 35 35 35 35
+              37:             TypePointer Uniform 36(tbufName)
+              38:     37(ptr) Variable Uniform
+              45:             TypePointer Input 7(fvec4)
+       46(input):     45(ptr) Variable Input
+              48:             TypePointer Output 7(fvec4)
+49(@entryPointOutput):     48(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              12:    7(fvec4) Load 11(input)
-              19:     18(ptr) AccessChain 15 17
-              20:    7(fvec4) Load 19
-              21:    7(fvec4) FAdd 12 20
-              25:     18(ptr) AccessChain 24 17
-              26:    7(fvec4) Load 25
-              27:    7(fvec4) FAdd 21 26
-              31:     18(ptr) AccessChain 30 17
-              32:    7(fvec4) Load 31
-              33:    7(fvec4) FAdd 27 32
-              38:     18(ptr) AccessChain 37 17
-              39:    7(fvec4) Load 38
-              40:    7(fvec4) FAdd 33 39
-                              Store 9(@entryPointOutput) 40
+       44(input):      8(ptr) Variable Function
+       50(param):      8(ptr) Variable Function
+              47:    7(fvec4) Load 46(input)
+                              Store 44(input) 47
+              51:    7(fvec4) Load 44(input)
+                              Store 50(param) 51
+              52:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 50(param)
+                              Store 49(@entryPointOutput) 52
                               Return
                               FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+              13:    7(fvec4) Load 10(input)
+              20:     19(ptr) AccessChain 16 18
+              21:    7(fvec4) Load 20
+              22:    7(fvec4) FAdd 13 21
+              26:     19(ptr) AccessChain 25 18
+              27:    7(fvec4) Load 26
+              28:    7(fvec4) FAdd 22 27
+              32:     19(ptr) AccessChain 31 18
+              33:    7(fvec4) Load 32
+              34:    7(fvec4) FAdd 28 33
+              39:     19(ptr) AccessChain 38 18
+              40:    7(fvec4) Load 39
+              41:    7(fvec4) FAdd 34 40
+                              ReturnValue 41
+                              FunctionEnd

+ 249 - 226
3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.calculatelod.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -139,24 +139,28 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -168,6 +172,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -176,7 +182,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -313,24 +319,28 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -342,10 +352,12 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 141
+// Id's are bound by 148
 
                               Capability Shader
                               Capability Sampled1D
@@ -353,201 +365,212 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 132 136
+                              EntryPoint Fragment 4  "main" 140 144
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "txval10"
-                              Name 11  "g_tTex1df4a"
-                              Name 15  "g_sSamp"
-                              Name 25  "txval11"
-                              Name 28  "g_tTex1di4a"
-                              Name 36  "txval12"
-                              Name 40  "g_tTex1du4a"
-                              Name 48  "txval20"
-                              Name 51  "g_tTex2df4a"
-                              Name 59  "txval21"
-                              Name 62  "g_tTex2di4a"
-                              Name 71  "txval22"
-                              Name 74  "g_tTex2du4a"
-                              Name 84  "txval40"
-                              Name 87  "g_tTexcdf4a"
-                              Name 96  "txval41"
-                              Name 99  "g_tTexcdi4a"
-                              Name 107  "txval42"
-                              Name 110  "g_tTexcdu4a"
-                              Name 122  "PS_OUTPUT"
-                              MemberName 122(PS_OUTPUT) 0  "Color"
-                              MemberName 122(PS_OUTPUT) 1  "Depth"
-                              Name 124  "psout"
-                              Name 132  "Color"
-                              Name 136  "Depth"
-                              Name 140  "g_tTex1df4"
-                              Decorate 11(g_tTex1df4a) DescriptorSet 0
-                              Decorate 11(g_tTex1df4a) Binding 1
-                              Decorate 15(g_sSamp) DescriptorSet 0
-                              Decorate 15(g_sSamp) Binding 0
-                              Decorate 28(g_tTex1di4a) DescriptorSet 0
-                              Decorate 40(g_tTex1du4a) DescriptorSet 0
-                              Decorate 51(g_tTex2df4a) DescriptorSet 0
-                              Decorate 62(g_tTex2di4a) DescriptorSet 0
-                              Decorate 74(g_tTex2du4a) DescriptorSet 0
-                              Decorate 87(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 99(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 110(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 132(Color) Location 0
-                              Decorate 136(Depth) BuiltIn FragDepth
-                              Decorate 140(g_tTex1df4) DescriptorSet 0
-                              Decorate 140(g_tTex1df4) Binding 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval10"
+                              Name 16  "g_tTex1df4a"
+                              Name 20  "g_sSamp"
+                              Name 30  "txval11"
+                              Name 33  "g_tTex1di4a"
+                              Name 41  "txval12"
+                              Name 45  "g_tTex1du4a"
+                              Name 53  "txval20"
+                              Name 56  "g_tTex2df4a"
+                              Name 64  "txval21"
+                              Name 67  "g_tTex2di4a"
+                              Name 76  "txval22"
+                              Name 79  "g_tTex2du4a"
+                              Name 89  "txval40"
+                              Name 92  "g_tTexcdf4a"
+                              Name 101  "txval41"
+                              Name 104  "g_tTexcdi4a"
+                              Name 112  "txval42"
+                              Name 115  "g_tTexcdu4a"
+                              Name 127  "psout"
+                              Name 137  "flattenTemp"
+                              Name 140  "Color"
+                              Name 144  "Depth"
+                              Name 147  "g_tTex1df4"
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) Binding 1
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 33(g_tTex1di4a) DescriptorSet 0
+                              Decorate 45(g_tTex1du4a) DescriptorSet 0
+                              Decorate 56(g_tTex2df4a) DescriptorSet 0
+                              Decorate 67(g_tTex2di4a) DescriptorSet 0
+                              Decorate 79(g_tTex2du4a) DescriptorSet 0
+                              Decorate 92(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 104(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 140(Color) Location 0
+                              Decorate 144(Depth) BuiltIn FragDepth
+                              Decorate 147(g_tTex1df4) DescriptorSet 0
+                              Decorate 147(g_tTex1df4) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               9:             TypeImage 6(float) 1D array sampled format:Unknown
-              10:             TypePointer UniformConstant 9
- 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
-              13:             TypeSampler
-              14:             TypePointer UniformConstant 13
-     15(g_sSamp):     14(ptr) Variable UniformConstant
-              17:             TypeSampledImage 9
-              19:    6(float) Constant 1036831949
-              20:             TypeVector 6(float) 2
-              22:             TypeInt 32 1
-              23:     22(int) Constant 0
-              26:             TypeImage 22(int) 1D array sampled format:Unknown
-              27:             TypePointer UniformConstant 26
- 28(g_tTex1di4a):     27(ptr) Variable UniformConstant
-              31:             TypeSampledImage 26
-              33:    6(float) Constant 1045220557
-              37:             TypeInt 32 0
-              38:             TypeImage 37(int) 1D array sampled format:Unknown
-              39:             TypePointer UniformConstant 38
- 40(g_tTex1du4a):     39(ptr) Variable UniformConstant
-              43:             TypeSampledImage 38
-              45:    6(float) Constant 1050253722
-              49:             TypeImage 6(float) 2D array sampled format:Unknown
-              50:             TypePointer UniformConstant 49
- 51(g_tTex2df4a):     50(ptr) Variable UniformConstant
-              54:             TypeSampledImage 49
-              56:   20(fvec2) ConstantComposite 19 33
-              60:             TypeImage 22(int) 2D array sampled format:Unknown
-              61:             TypePointer UniformConstant 60
- 62(g_tTex2di4a):     61(ptr) Variable UniformConstant
-              65:             TypeSampledImage 60
-              67:    6(float) Constant 1053609165
-              68:   20(fvec2) ConstantComposite 45 67
-              72:             TypeImage 37(int) 2D array sampled format:Unknown
-              73:             TypePointer UniformConstant 72
- 74(g_tTex2du4a):     73(ptr) Variable UniformConstant
-              77:             TypeSampledImage 72
-              79:    6(float) Constant 1056964608
-              80:    6(float) Constant 1058642330
-              81:   20(fvec2) ConstantComposite 79 80
-              85:             TypeImage 6(float) Cube array sampled format:Unknown
-              86:             TypePointer UniformConstant 85
- 87(g_tTexcdf4a):     86(ptr) Variable UniformConstant
-              90:             TypeSampledImage 85
-              92:             TypeVector 6(float) 3
-              93:   92(fvec3) ConstantComposite 19 33 45
-              97:             TypeImage 22(int) Cube array sampled format:Unknown
-              98:             TypePointer UniformConstant 97
- 99(g_tTexcdi4a):     98(ptr) Variable UniformConstant
-             102:             TypeSampledImage 97
-             104:   92(fvec3) ConstantComposite 67 79 80
-             108:             TypeImage 37(int) Cube array sampled format:Unknown
-             109:             TypePointer UniformConstant 108
-110(g_tTexcdu4a):    109(ptr) Variable UniformConstant
-             113:             TypeSampledImage 108
-             115:    6(float) Constant 1060320051
-             116:    6(float) Constant 1061997773
-             117:    6(float) Constant 1063675494
-             118:   92(fvec3) ConstantComposite 115 116 117
-             121:             TypeVector 6(float) 4
-  122(PS_OUTPUT):             TypeStruct 121(fvec4) 6(float)
-             123:             TypePointer Function 122(PS_OUTPUT)
-             125:    6(float) Constant 1065353216
-             126:  121(fvec4) ConstantComposite 125 125 125 125
-             127:             TypePointer Function 121(fvec4)
-             129:     22(int) Constant 1
-             131:             TypePointer Output 121(fvec4)
-      132(Color):    131(ptr) Variable Output
-             135:             TypePointer Output 6(float)
-      136(Depth):    135(ptr) Variable Output
- 140(g_tTex1df4):     10(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 6(float)
+              14:             TypeImage 6(float) 1D array sampled format:Unknown
+              15:             TypePointer UniformConstant 14
+ 16(g_tTex1df4a):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:    6(float) Constant 1036831949
+              25:             TypeVector 6(float) 2
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              31:             TypeImage 27(int) 1D array sampled format:Unknown
+              32:             TypePointer UniformConstant 31
+ 33(g_tTex1di4a):     32(ptr) Variable UniformConstant
+              36:             TypeSampledImage 31
+              38:    6(float) Constant 1045220557
+              42:             TypeInt 32 0
+              43:             TypeImage 42(int) 1D array sampled format:Unknown
+              44:             TypePointer UniformConstant 43
+ 45(g_tTex1du4a):     44(ptr) Variable UniformConstant
+              48:             TypeSampledImage 43
+              50:    6(float) Constant 1050253722
+              54:             TypeImage 6(float) 2D array sampled format:Unknown
+              55:             TypePointer UniformConstant 54
+ 56(g_tTex2df4a):     55(ptr) Variable UniformConstant
+              59:             TypeSampledImage 54
+              61:   25(fvec2) ConstantComposite 24 38
+              65:             TypeImage 27(int) 2D array sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+ 67(g_tTex2di4a):     66(ptr) Variable UniformConstant
+              70:             TypeSampledImage 65
+              72:    6(float) Constant 1053609165
+              73:   25(fvec2) ConstantComposite 50 72
+              77:             TypeImage 42(int) 2D array sampled format:Unknown
+              78:             TypePointer UniformConstant 77
+ 79(g_tTex2du4a):     78(ptr) Variable UniformConstant
+              82:             TypeSampledImage 77
+              84:    6(float) Constant 1056964608
+              85:    6(float) Constant 1058642330
+              86:   25(fvec2) ConstantComposite 84 85
+              90:             TypeImage 6(float) Cube array sampled format:Unknown
+              91:             TypePointer UniformConstant 90
+ 92(g_tTexcdf4a):     91(ptr) Variable UniformConstant
+              95:             TypeSampledImage 90
+              97:             TypeVector 6(float) 3
+              98:   97(fvec3) ConstantComposite 24 38 50
+             102:             TypeImage 27(int) Cube array sampled format:Unknown
+             103:             TypePointer UniformConstant 102
+104(g_tTexcdi4a):    103(ptr) Variable UniformConstant
+             107:             TypeSampledImage 102
+             109:   97(fvec3) ConstantComposite 72 84 85
+             113:             TypeImage 42(int) Cube array sampled format:Unknown
+             114:             TypePointer UniformConstant 113
+115(g_tTexcdu4a):    114(ptr) Variable UniformConstant
+             118:             TypeSampledImage 113
+             120:    6(float) Constant 1060320051
+             121:    6(float) Constant 1061997773
+             122:    6(float) Constant 1063675494
+             123:   97(fvec3) ConstantComposite 120 121 122
+             126:             TypePointer Function 8(PS_OUTPUT)
+             128:    6(float) Constant 1065353216
+             129:    7(fvec4) ConstantComposite 128 128 128 128
+             130:             TypePointer Function 7(fvec4)
+             132:     27(int) Constant 1
+             139:             TypePointer Output 7(fvec4)
+      140(Color):    139(ptr) Variable Output
+             143:             TypePointer Output 6(float)
+      144(Depth):    143(ptr) Variable Output
+ 147(g_tTex1df4):     15(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      8(txval10):      7(ptr) Variable Function
-     25(txval11):      7(ptr) Variable Function
-     36(txval12):      7(ptr) Variable Function
-     48(txval20):      7(ptr) Variable Function
-     59(txval21):      7(ptr) Variable Function
-     71(txval22):      7(ptr) Variable Function
-     84(txval40):      7(ptr) Variable Function
-     96(txval41):      7(ptr) Variable Function
-    107(txval42):      7(ptr) Variable Function
-      124(psout):    123(ptr) Variable Function
-              12:           9 Load 11(g_tTex1df4a)
-              16:          13 Load 15(g_sSamp)
-              18:          17 SampledImage 12 16
-              21:   20(fvec2) ImageQueryLod 18 19
-              24:    6(float) CompositeExtract 21 0
-                              Store 8(txval10) 24
-              29:          26 Load 28(g_tTex1di4a)
-              30:          13 Load 15(g_sSamp)
-              32:          31 SampledImage 29 30
-              34:   20(fvec2) ImageQueryLod 32 33
-              35:    6(float) CompositeExtract 34 0
-                              Store 25(txval11) 35
-              41:          38 Load 40(g_tTex1du4a)
-              42:          13 Load 15(g_sSamp)
-              44:          43 SampledImage 41 42
-              46:   20(fvec2) ImageQueryLod 44 45
-              47:    6(float) CompositeExtract 46 0
-                              Store 36(txval12) 47
-              52:          49 Load 51(g_tTex2df4a)
-              53:          13 Load 15(g_sSamp)
-              55:          54 SampledImage 52 53
-              57:   20(fvec2) ImageQueryLod 55 56
-              58:    6(float) CompositeExtract 57 0
-                              Store 48(txval20) 58
-              63:          60 Load 62(g_tTex2di4a)
-              64:          13 Load 15(g_sSamp)
-              66:          65 SampledImage 63 64
-              69:   20(fvec2) ImageQueryLod 66 68
-              70:    6(float) CompositeExtract 69 0
-                              Store 59(txval21) 70
-              75:          72 Load 74(g_tTex2du4a)
-              76:          13 Load 15(g_sSamp)
-              78:          77 SampledImage 75 76
-              82:   20(fvec2) ImageQueryLod 78 81
-              83:    6(float) CompositeExtract 82 0
-                              Store 71(txval22) 83
-              88:          85 Load 87(g_tTexcdf4a)
-              89:          13 Load 15(g_sSamp)
-              91:          90 SampledImage 88 89
-              94:   20(fvec2) ImageQueryLod 91 93
-              95:    6(float) CompositeExtract 94 0
-                              Store 84(txval40) 95
-             100:          97 Load 99(g_tTexcdi4a)
-             101:          13 Load 15(g_sSamp)
-             103:         102 SampledImage 100 101
-             105:   20(fvec2) ImageQueryLod 103 104
-             106:    6(float) CompositeExtract 105 0
-                              Store 96(txval41) 106
-             111:         108 Load 110(g_tTexcdu4a)
-             112:          13 Load 15(g_sSamp)
-             114:         113 SampledImage 111 112
-             119:   20(fvec2) ImageQueryLod 114 118
-             120:    6(float) CompositeExtract 119 0
-                              Store 107(txval42) 120
-             128:    127(ptr) AccessChain 124(psout) 23
-                              Store 128 126
-             130:      7(ptr) AccessChain 124(psout) 129
-                              Store 130 125
-             133:    127(ptr) AccessChain 124(psout) 23
-             134:  121(fvec4) Load 133
-                              Store 132(Color) 134
-             137:      7(ptr) AccessChain 124(psout) 129
-             138:    6(float) Load 137
-                              Store 136(Depth) 138
+137(flattenTemp):    126(ptr) Variable Function
+             138:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 137(flattenTemp) 138
+             141:    130(ptr) AccessChain 137(flattenTemp) 28
+             142:    7(fvec4) Load 141
+                              Store 140(Color) 142
+             145:     12(ptr) AccessChain 137(flattenTemp) 132
+             146:    6(float) Load 145
+                              Store 144(Depth) 146
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval10):     12(ptr) Variable Function
+     30(txval11):     12(ptr) Variable Function
+     41(txval12):     12(ptr) Variable Function
+     53(txval20):     12(ptr) Variable Function
+     64(txval21):     12(ptr) Variable Function
+     76(txval22):     12(ptr) Variable Function
+     89(txval40):     12(ptr) Variable Function
+    101(txval41):     12(ptr) Variable Function
+    112(txval42):     12(ptr) Variable Function
+      127(psout):    126(ptr) Variable Function
+              17:          14 Load 16(g_tTex1df4a)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              26:   25(fvec2) ImageQueryLod 23 24
+              29:    6(float) CompositeExtract 26 0
+                              Store 13(txval10) 29
+              34:          31 Load 33(g_tTex1di4a)
+              35:          18 Load 20(g_sSamp)
+              37:          36 SampledImage 34 35
+              39:   25(fvec2) ImageQueryLod 37 38
+              40:    6(float) CompositeExtract 39 0
+                              Store 30(txval11) 40
+              46:          43 Load 45(g_tTex1du4a)
+              47:          18 Load 20(g_sSamp)
+              49:          48 SampledImage 46 47
+              51:   25(fvec2) ImageQueryLod 49 50
+              52:    6(float) CompositeExtract 51 0
+                              Store 41(txval12) 52
+              57:          54 Load 56(g_tTex2df4a)
+              58:          18 Load 20(g_sSamp)
+              60:          59 SampledImage 57 58
+              62:   25(fvec2) ImageQueryLod 60 61
+              63:    6(float) CompositeExtract 62 0
+                              Store 53(txval20) 63
+              68:          65 Load 67(g_tTex2di4a)
+              69:          18 Load 20(g_sSamp)
+              71:          70 SampledImage 68 69
+              74:   25(fvec2) ImageQueryLod 71 73
+              75:    6(float) CompositeExtract 74 0
+                              Store 64(txval21) 75
+              80:          77 Load 79(g_tTex2du4a)
+              81:          18 Load 20(g_sSamp)
+              83:          82 SampledImage 80 81
+              87:   25(fvec2) ImageQueryLod 83 86
+              88:    6(float) CompositeExtract 87 0
+                              Store 76(txval22) 88
+              93:          90 Load 92(g_tTexcdf4a)
+              94:          18 Load 20(g_sSamp)
+              96:          95 SampledImage 93 94
+              99:   25(fvec2) ImageQueryLod 96 98
+             100:    6(float) CompositeExtract 99 0
+                              Store 89(txval40) 100
+             105:         102 Load 104(g_tTexcdi4a)
+             106:          18 Load 20(g_sSamp)
+             108:         107 SampledImage 105 106
+             110:   25(fvec2) ImageQueryLod 108 109
+             111:    6(float) CompositeExtract 110 0
+                              Store 101(txval41) 111
+             116:         113 Load 115(g_tTexcdu4a)
+             117:          18 Load 20(g_sSamp)
+             119:         118 SampledImage 116 117
+             124:   25(fvec2) ImageQueryLod 119 123
+             125:    6(float) CompositeExtract 124 0
+                              Store 112(txval42) 125
+             131:    130(ptr) AccessChain 127(psout) 28
+                              Store 131 129
+             133:     12(ptr) AccessChain 127(psout) 132
+                              Store 133 128
+             134:8(PS_OUTPUT) Load 127(psout)
+                              ReturnValue 134
+                              FunctionEnd

+ 48 - 36
3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out

@@ -14,7 +14,7 @@ ERROR: 9 compilation errors.  No code generated.
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -151,24 +151,28 @@ ERROR: node is still EOpNull!
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -180,6 +184,8 @@ ERROR: node is still EOpNull!
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -188,7 +194,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -325,24 +331,28 @@ ERROR: node is still EOpNull!
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -354,5 +364,7 @@ ERROR: node is still EOpNull!
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 SPIR-V is not generated for failed compile or link

+ 92 - 60
3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out

@@ -2,26 +2,33 @@ hlsl.cast.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:3      Branch: Return with expression
+0:3        add (temp 4-component vector of float)
 0:3          add (temp 4-component vector of float)
-0:3            add (temp 4-component vector of float)
-0:3              Construct vec4 (temp 4-component vector of float)
-0:3                'input' (layout(location=0 ) in 4-component vector of float)
-0:3              Convert int to float (temp 4-component vector of float)
-0:3                Convert float to int (temp 4-component vector of int)
-0:3                  'input' (layout(location=0 ) in 4-component vector of float)
-0:3            Constant:
-0:3              1.198000
-0:3              1.198000
-0:3              1.198000
-0:3              1.198000
-0:3        Branch: Return
+0:3            Construct vec4 (temp 4-component vector of float)
+0:3              'input' (in 4-component vector of float)
+0:3            Convert int to float (temp 4-component vector of float)
+0:3              Convert float to int (temp 4-component vector of int)
+0:3                'input' (in 4-component vector of float)
+0:3          Constant:
+0:3            1.198000
+0:3            1.198000
+0:3            1.198000
+0:3            1.198000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -33,69 +40,94 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:3      Branch: Return with expression
+0:3        add (temp 4-component vector of float)
 0:3          add (temp 4-component vector of float)
-0:3            add (temp 4-component vector of float)
-0:3              Construct vec4 (temp 4-component vector of float)
-0:3                'input' (layout(location=0 ) in 4-component vector of float)
-0:3              Convert int to float (temp 4-component vector of float)
-0:3                Convert float to int (temp 4-component vector of int)
-0:3                  'input' (layout(location=0 ) in 4-component vector of float)
-0:3            Constant:
-0:3              1.198000
-0:3              1.198000
-0:3              1.198000
-0:3              1.198000
-0:3        Branch: Return
+0:3            Construct vec4 (temp 4-component vector of float)
+0:3              'input' (in 4-component vector of float)
+0:3            Convert int to float (temp 4-component vector of float)
+0:3              Convert float to int (temp 4-component vector of int)
+0:3                'input' (in 4-component vector of float)
+0:3          Constant:
+0:3            1.198000
+0:3            1.198000
+0:3            1.198000
+0:3            1.198000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 28
+// Id's are bound by 39
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 11
+                              EntryPoint Fragment 4  "PixelShaderFunction" 32 35
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "@entryPointOutput"
-                              Name 11  "input"
-                              Decorate 9(@entryPointOutput) Location 0
-                              Decorate 11(input) Location 0
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 30  "input"
+                              Name 32  "input"
+                              Name 35  "@entryPointOutput"
+                              Name 36  "param"
+                              Decorate 32(input) Location 0
+                              Decorate 35(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:             TypePointer Input 7(fvec4)
-       11(input):     10(ptr) Variable Input
-              19:             TypeInt 32 1
-              20:             TypeVector 19(int) 4
-              24:    6(float) Constant 1067014160
-              25:    7(fvec4) ConstantComposite 24 24 24 24
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              20:             TypeInt 32 1
+              21:             TypeVector 20(int) 4
+              25:    6(float) Constant 1067014160
+              26:    7(fvec4) ConstantComposite 25 25 25 25
+              31:             TypePointer Input 7(fvec4)
+       32(input):     31(ptr) Variable Input
+              34:             TypePointer Output 7(fvec4)
+35(@entryPointOutput):     34(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              12:    7(fvec4) Load 11(input)
-              13:    6(float) CompositeExtract 12 0
-              14:    6(float) CompositeExtract 12 1
-              15:    6(float) CompositeExtract 12 2
-              16:    6(float) CompositeExtract 12 3
-              17:    7(fvec4) CompositeConstruct 13 14 15 16
-              18:    7(fvec4) Load 11(input)
-              21:   20(ivec4) ConvertFToS 18
-              22:    7(fvec4) ConvertSToF 21
-              23:    7(fvec4) FAdd 17 22
-              26:    7(fvec4) FAdd 23 25
-                              Store 9(@entryPointOutput) 26
+       30(input):      8(ptr) Variable Function
+       36(param):      8(ptr) Variable Function
+              33:    7(fvec4) Load 32(input)
+                              Store 30(input) 33
+              37:    7(fvec4) Load 30(input)
+                              Store 36(param) 37
+              38:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 36(param)
+                              Store 35(@entryPointOutput) 38
                               Return
                               FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+              13:    7(fvec4) Load 10(input)
+              14:    6(float) CompositeExtract 13 0
+              15:    6(float) CompositeExtract 13 1
+              16:    6(float) CompositeExtract 13 2
+              17:    6(float) CompositeExtract 13 3
+              18:    7(fvec4) CompositeConstruct 14 15 16 17
+              19:    7(fvec4) Load 10(input)
+              22:   21(ivec4) ConvertFToS 19
+              23:    7(fvec4) ConvertSToF 22
+              24:    7(fvec4) FAdd 18 23
+              27:    7(fvec4) FAdd 24 26
+                              ReturnValue 27
+                              FunctionEnd

+ 150 - 137
3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out

@@ -99,7 +99,7 @@ gl_FragCoord origin is upper left
 0:21            Construct vec4 (in 4-component vector of float)
 0:21              'v01' (temp float)
 0:21            'a' (in 4-component vector of float)
-0:30  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:30  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:30    Function Parameters: 
 0:?     Sequence
 0:32      move second child to first child (temp 4-component vector of float)
@@ -112,18 +112,21 @@ gl_FragCoord origin is upper left
 0:32          0.000000
 0:32          0.000000
 0:32          0.000000
-0:33      Sequence
-0:33        Sequence
-0:33          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:33            Color: direct index for structure (temp 4-component vector of float)
-0:33              'psout' (temp structure{temp 4-component vector of float Color})
-0:33              Constant:
-0:33                0 (const int)
-0:33        Branch: Return
+0:33      Branch: Return with expression
+0:33        'psout' (temp structure{temp 4-component vector of float Color})
+0:30  Function Definition: main( (temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:30          Color: direct index for structure (temp 4-component vector of float)
+0:30            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:30            Constant:
+0:30              0 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -229,7 +232,7 @@ gl_FragCoord origin is upper left
 0:21            Construct vec4 (in 4-component vector of float)
 0:21              'v01' (temp float)
 0:21            'a' (in 4-component vector of float)
-0:30  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:30  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:30    Function Parameters: 
 0:?     Sequence
 0:32      move second child to first child (temp 4-component vector of float)
@@ -242,161 +245,171 @@ gl_FragCoord origin is upper left
 0:32          0.000000
 0:32          0.000000
 0:32          0.000000
-0:33      Sequence
-0:33        Sequence
-0:33          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:33            Color: direct index for structure (temp 4-component vector of float)
-0:33              'psout' (temp structure{temp 4-component vector of float Color})
-0:33              Constant:
-0:33                0 (const int)
-0:33        Branch: Return
+0:33      Branch: Return with expression
+0:33        'psout' (temp structure{temp 4-component vector of float Color})
+0:30  Function Definition: main( (temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:30          Color: direct index for structure (temp 4-component vector of float)
+0:30            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:30            Constant:
+0:30              0 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 91
+// Id's are bound by 96
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 84
+                              EntryPoint Fragment 4  "main" 90
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 11  "Bug1(vf4;"
                               Name 10  "a"
-                              Name 13  "v04"
-                              Name 17  "v01"
-                              Name 21  "r00"
-                              Name 25  "r01"
-                              Name 29  "r02"
-                              Name 33  "r03"
-                              Name 37  "r10"
-                              Name 42  "r11"
-                              Name 47  "r12"
-                              Name 52  "r13"
-                              Name 57  "r20"
-                              Name 62  "r21"
-                              Name 67  "r22"
-                              Name 72  "r23"
-                              Name 77  "PS_OUTPUT"
-                              MemberName 77(PS_OUTPUT) 0  "Color"
-                              Name 79  "psout"
-                              Name 84  "Color"
-                              Name 88  "$Global"
-                              MemberName 88($Global) 0  "uf4"
-                              Name 90  ""
-                              Decorate 84(Color) Location 0
-                              MemberDecorate 88($Global) 0 Offset 0
-                              Decorate 88($Global) Block
-                              Decorate 90 DescriptorSet 0
+                              Name 13  "PS_OUTPUT"
+                              MemberName 13(PS_OUTPUT) 0  "Color"
+                              Name 15  "@main("
+                              Name 17  "v04"
+                              Name 21  "v01"
+                              Name 25  "r00"
+                              Name 29  "r01"
+                              Name 33  "r02"
+                              Name 37  "r03"
+                              Name 41  "r10"
+                              Name 46  "r11"
+                              Name 51  "r12"
+                              Name 56  "r13"
+                              Name 61  "r20"
+                              Name 66  "r21"
+                              Name 71  "r22"
+                              Name 76  "r23"
+                              Name 82  "psout"
+                              Name 90  "Color"
+                              Name 93  "$Global"
+                              MemberName 93($Global) 0  "uf4"
+                              Name 95  ""
+                              Decorate 90(Color) Location 0
+                              MemberDecorate 93($Global) 0 Offset 0
+                              Decorate 93($Global) Block
+                              Decorate 95 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 2 8(ptr)
-              14:    6(float) Constant 0
-              15:    7(fvec4) ConstantComposite 14 14 14 14
-              16:             TypePointer Function 6(float)
-              18:             TypeBool
-              19:             TypeVector 18(bool) 4
-              20:             TypePointer Function 19(bvec4)
-   77(PS_OUTPUT):             TypeStruct 7(fvec4)
-              78:             TypePointer Function 77(PS_OUTPUT)
-              80:             TypeInt 32 1
-              81:     80(int) Constant 0
-              83:             TypePointer Output 7(fvec4)
-       84(Color):     83(ptr) Variable Output
-     88($Global):             TypeStruct 7(fvec4)
-              89:             TypePointer Uniform 88($Global)
-              90:     89(ptr) Variable Uniform
+   13(PS_OUTPUT):             TypeStruct 7(fvec4)
+              14:             TypeFunction 13(PS_OUTPUT)
+              18:    6(float) Constant 0
+              19:    7(fvec4) ConstantComposite 18 18 18 18
+              20:             TypePointer Function 6(float)
+              22:             TypeBool
+              23:             TypeVector 22(bool) 4
+              24:             TypePointer Function 23(bvec4)
+              81:             TypePointer Function 13(PS_OUTPUT)
+              83:             TypeInt 32 1
+              84:     83(int) Constant 0
+              89:             TypePointer Output 7(fvec4)
+       90(Color):     89(ptr) Variable Output
+     93($Global):             TypeStruct 7(fvec4)
+              94:             TypePointer Uniform 93($Global)
+              95:     94(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-       79(psout):     78(ptr) Variable Function
-              82:      8(ptr) AccessChain 79(psout) 81
-                              Store 82 15
-              85:      8(ptr) AccessChain 79(psout) 81
-              86:    7(fvec4) Load 85
-                              Store 84(Color) 86
+              91:13(PS_OUTPUT) FunctionCall 15(@main()
+              92:    7(fvec4) CompositeExtract 91 0
+                              Store 90(Color) 92
                               Return
                               FunctionEnd
    11(Bug1(vf4;):           2 Function None 9
            10(a):      8(ptr) FunctionParameter
               12:             Label
-         13(v04):      8(ptr) Variable Function
-         17(v01):     16(ptr) Variable Function
-         21(r00):     20(ptr) Variable Function
-         25(r01):     20(ptr) Variable Function
-         29(r02):     20(ptr) Variable Function
-         33(r03):     20(ptr) Variable Function
-         37(r10):     20(ptr) Variable Function
-         42(r11):     20(ptr) Variable Function
-         47(r12):     20(ptr) Variable Function
-         52(r13):     20(ptr) Variable Function
-         57(r20):     20(ptr) Variable Function
-         62(r21):     20(ptr) Variable Function
-         67(r22):     20(ptr) Variable Function
-         72(r23):     20(ptr) Variable Function
-                              Store 13(v04) 15
-                              Store 17(v01) 14
-              22:    7(fvec4) Load 10(a)
-              23:    7(fvec4) Load 13(v04)
-              24:   19(bvec4) FOrdEqual 22 23
-                              Store 21(r00) 24
+         17(v04):      8(ptr) Variable Function
+         21(v01):     20(ptr) Variable Function
+         25(r00):     24(ptr) Variable Function
+         29(r01):     24(ptr) Variable Function
+         33(r02):     24(ptr) Variable Function
+         37(r03):     24(ptr) Variable Function
+         41(r10):     24(ptr) Variable Function
+         46(r11):     24(ptr) Variable Function
+         51(r12):     24(ptr) Variable Function
+         56(r13):     24(ptr) Variable Function
+         61(r20):     24(ptr) Variable Function
+         66(r21):     24(ptr) Variable Function
+         71(r22):     24(ptr) Variable Function
+         76(r23):     24(ptr) Variable Function
+                              Store 17(v04) 19
+                              Store 21(v01) 18
               26:    7(fvec4) Load 10(a)
-              27:    7(fvec4) Load 13(v04)
-              28:   19(bvec4) FOrdNotEqual 26 27
-                              Store 25(r01) 28
+              27:    7(fvec4) Load 17(v04)
+              28:   23(bvec4) FOrdEqual 26 27
+                              Store 25(r00) 28
               30:    7(fvec4) Load 10(a)
-              31:    7(fvec4) Load 13(v04)
-              32:   19(bvec4) FOrdLessThan 30 31
-                              Store 29(r02) 32
+              31:    7(fvec4) Load 17(v04)
+              32:   23(bvec4) FOrdNotEqual 30 31
+                              Store 29(r01) 32
               34:    7(fvec4) Load 10(a)
-              35:    7(fvec4) Load 13(v04)
-              36:   19(bvec4) FOrdGreaterThan 34 35
-                              Store 33(r03) 36
+              35:    7(fvec4) Load 17(v04)
+              36:   23(bvec4) FOrdLessThan 34 35
+                              Store 33(r02) 36
               38:    7(fvec4) Load 10(a)
-              39:    6(float) Load 17(v01)
-              40:    7(fvec4) CompositeConstruct 39 39 39 39
-              41:   19(bvec4) FOrdEqual 38 40
-                              Store 37(r10) 41
-              43:    7(fvec4) Load 10(a)
-              44:    6(float) Load 17(v01)
-              45:    7(fvec4) CompositeConstruct 44 44 44 44
-              46:   19(bvec4) FOrdNotEqual 43 45
-                              Store 42(r11) 46
-              48:    7(fvec4) Load 10(a)
-              49:    6(float) Load 17(v01)
-              50:    7(fvec4) CompositeConstruct 49 49 49 49
-              51:   19(bvec4) FOrdLessThan 48 50
-                              Store 47(r12) 51
-              53:    7(fvec4) Load 10(a)
-              54:    6(float) Load 17(v01)
-              55:    7(fvec4) CompositeConstruct 54 54 54 54
-              56:   19(bvec4) FOrdGreaterThan 53 55
-                              Store 52(r13) 56
-              58:    6(float) Load 17(v01)
+              39:    7(fvec4) Load 17(v04)
+              40:   23(bvec4) FOrdGreaterThan 38 39
+                              Store 37(r03) 40
+              42:    7(fvec4) Load 10(a)
+              43:    6(float) Load 21(v01)
+              44:    7(fvec4) CompositeConstruct 43 43 43 43
+              45:   23(bvec4) FOrdEqual 42 44
+                              Store 41(r10) 45
+              47:    7(fvec4) Load 10(a)
+              48:    6(float) Load 21(v01)
+              49:    7(fvec4) CompositeConstruct 48 48 48 48
+              50:   23(bvec4) FOrdNotEqual 47 49
+                              Store 46(r11) 50
+              52:    7(fvec4) Load 10(a)
+              53:    6(float) Load 21(v01)
+              54:    7(fvec4) CompositeConstruct 53 53 53 53
+              55:   23(bvec4) FOrdLessThan 52 54
+                              Store 51(r12) 55
+              57:    7(fvec4) Load 10(a)
+              58:    6(float) Load 21(v01)
               59:    7(fvec4) CompositeConstruct 58 58 58 58
-              60:    7(fvec4) Load 10(a)
-              61:   19(bvec4) FOrdEqual 59 60
-                              Store 57(r20) 61
-              63:    6(float) Load 17(v01)
-              64:    7(fvec4) CompositeConstruct 63 63 63 63
-              65:    7(fvec4) Load 10(a)
-              66:   19(bvec4) FOrdNotEqual 64 65
-                              Store 62(r21) 66
-              68:    6(float) Load 17(v01)
-              69:    7(fvec4) CompositeConstruct 68 68 68 68
-              70:    7(fvec4) Load 10(a)
-              71:   19(bvec4) FOrdLessThan 69 70
-                              Store 67(r22) 71
-              73:    6(float) Load 17(v01)
-              74:    7(fvec4) CompositeConstruct 73 73 73 73
-              75:    7(fvec4) Load 10(a)
-              76:   19(bvec4) FOrdGreaterThan 74 75
-                              Store 72(r23) 76
+              60:   23(bvec4) FOrdGreaterThan 57 59
+                              Store 56(r13) 60
+              62:    6(float) Load 21(v01)
+              63:    7(fvec4) CompositeConstruct 62 62 62 62
+              64:    7(fvec4) Load 10(a)
+              65:   23(bvec4) FOrdEqual 63 64
+                              Store 61(r20) 65
+              67:    6(float) Load 21(v01)
+              68:    7(fvec4) CompositeConstruct 67 67 67 67
+              69:    7(fvec4) Load 10(a)
+              70:   23(bvec4) FOrdNotEqual 68 69
+                              Store 66(r21) 70
+              72:    6(float) Load 21(v01)
+              73:    7(fvec4) CompositeConstruct 72 72 72 72
+              74:    7(fvec4) Load 10(a)
+              75:   23(bvec4) FOrdLessThan 73 74
+                              Store 71(r22) 75
+              77:    6(float) Load 21(v01)
+              78:    7(fvec4) CompositeConstruct 77 77 77 77
+              79:    7(fvec4) Load 10(a)
+              80:   23(bvec4) FOrdGreaterThan 78 79
+                              Store 76(r23) 80
                               Return
                               FunctionEnd
+      15(@main():13(PS_OUTPUT) Function None 14
+              16:             Label
+       82(psout):     81(ptr) Variable Function
+              85:      8(ptr) AccessChain 82(psout) 84
+                              Store 85 19
+              86:13(PS_OUTPUT) Load 82(psout)
+                              ReturnValue 86
+                              FunctionEnd

+ 195 - 165
3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out

@@ -2,9 +2,9 @@ hlsl.conditional.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Sequence
 0:3        move second child to first child (temp int)
@@ -35,19 +35,19 @@ gl_FragCoord origin is upper left
 0:7                vector-scale (temp 4-component vector of float)
 0:7                  Convert int to float (temp float)
 0:7                    'a' (temp int)
-0:7                  'input' (layout(location=0 ) in 4-component vector of float)
+0:7                  'input' (in 4-component vector of float)
 0:8                vector-scale (temp 4-component vector of float)
 0:8                  Convert int to float (temp float)
 0:8                    'b' (temp int)
-0:8                  'input' (layout(location=0 ) in 4-component vector of float)
+0:8                  'input' (in 4-component vector of float)
 0:9              vector-scale (temp 4-component vector of float)
 0:9                Convert int to float (temp float)
 0:9                  'c' (temp int)
-0:9                'input' (layout(location=0 ) in 4-component vector of float)
+0:9                'input' (in 4-component vector of float)
 0:10            vector-scale (temp 4-component vector of float)
 0:10              Convert int to float (temp float)
 0:10                'd' (temp int)
-0:10              'input' (layout(location=0 ) in 4-component vector of float)
+0:10              'input' (in 4-component vector of float)
 0:12      Comma (temp int)
 0:12        move second child to first child (temp int)
 0:12          'e' (temp int)
@@ -85,29 +85,36 @@ gl_FragCoord origin is upper left
 0:14              Constant:
 0:14                0 (const int)
 0:14            direct index (temp float)
-0:14              'input' (layout(location=0 ) in 4-component vector of float)
+0:14              'input' (in 4-component vector of float)
 0:14              Constant:
 0:14                1 (const int)
 0:14          true case
 0:14          vector-scale (temp 4-component vector of float)
 0:14            Convert int to float (temp float)
 0:14              'c' (temp int)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
 0:14          false case
 0:14          vector-scale (temp 4-component vector of float)
 0:14            Convert int to float (temp float)
 0:14              'd' (temp int)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:15          add (temp 4-component vector of float)
-0:15            vector-scale (temp 4-component vector of float)
-0:15              Convert int to float (temp float)
-0:15                'e' (temp int)
-0:15              'ret' (temp 4-component vector of float)
-0:15            'f' (temp 4-component vector of float)
-0:15        Branch: Return
+0:14            'input' (in 4-component vector of float)
+0:15      Branch: Return with expression
+0:15        add (temp 4-component vector of float)
+0:15          vector-scale (temp 4-component vector of float)
+0:15            Convert int to float (temp float)
+0:15              'e' (temp int)
+0:15            'ret' (temp 4-component vector of float)
+0:15          'f' (temp 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -119,9 +126,9 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Sequence
 0:3        move second child to first child (temp int)
@@ -152,19 +159,19 @@ gl_FragCoord origin is upper left
 0:7                vector-scale (temp 4-component vector of float)
 0:7                  Convert int to float (temp float)
 0:7                    'a' (temp int)
-0:7                  'input' (layout(location=0 ) in 4-component vector of float)
+0:7                  'input' (in 4-component vector of float)
 0:8                vector-scale (temp 4-component vector of float)
 0:8                  Convert int to float (temp float)
 0:8                    'b' (temp int)
-0:8                  'input' (layout(location=0 ) in 4-component vector of float)
+0:8                  'input' (in 4-component vector of float)
 0:9              vector-scale (temp 4-component vector of float)
 0:9                Convert int to float (temp float)
 0:9                  'c' (temp int)
-0:9                'input' (layout(location=0 ) in 4-component vector of float)
+0:9                'input' (in 4-component vector of float)
 0:10            vector-scale (temp 4-component vector of float)
 0:10              Convert int to float (temp float)
 0:10                'd' (temp int)
-0:10              'input' (layout(location=0 ) in 4-component vector of float)
+0:10              'input' (in 4-component vector of float)
 0:12      Comma (temp int)
 0:12        move second child to first child (temp int)
 0:12          'e' (temp int)
@@ -202,171 +209,194 @@ gl_FragCoord origin is upper left
 0:14              Constant:
 0:14                0 (const int)
 0:14            direct index (temp float)
-0:14              'input' (layout(location=0 ) in 4-component vector of float)
+0:14              'input' (in 4-component vector of float)
 0:14              Constant:
 0:14                1 (const int)
 0:14          true case
 0:14          vector-scale (temp 4-component vector of float)
 0:14            Convert int to float (temp float)
 0:14              'c' (temp int)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
 0:14          false case
 0:14          vector-scale (temp 4-component vector of float)
 0:14            Convert int to float (temp float)
 0:14              'd' (temp int)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:15          add (temp 4-component vector of float)
-0:15            vector-scale (temp 4-component vector of float)
-0:15              Convert int to float (temp float)
-0:15                'e' (temp int)
-0:15              'ret' (temp 4-component vector of float)
-0:15            'f' (temp 4-component vector of float)
-0:15        Branch: Return
+0:14            'input' (in 4-component vector of float)
+0:15      Branch: Return with expression
+0:15        add (temp 4-component vector of float)
+0:15          vector-scale (temp 4-component vector of float)
+0:15            Convert int to float (temp float)
+0:15              'e' (temp int)
+0:15            'ret' (temp 4-component vector of float)
+0:15          'f' (temp 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 91
+// Id's are bound by 100
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 22 83
+                              EntryPoint Fragment 4  "PixelShaderFunction" 93 96
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 8  "a"
-                              Name 10  "b"
-                              Name 12  "c"
-                              Name 14  "d"
-                              Name 18  "ret"
-                              Name 22  "input"
-                              Name 40  "e"
-                              Name 57  "f"
-                              Name 83  "@entryPointOutput"
-                              Decorate 22(input) Location 0
-                              Decorate 83(@entryPointOutput) Location 0
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 15  "a"
+                              Name 17  "b"
+                              Name 19  "c"
+                              Name 21  "d"
+                              Name 22  "ret"
+                              Name 42  "e"
+                              Name 59  "f"
+                              Name 91  "input"
+                              Name 93  "input"
+                              Name 96  "@entryPointOutput"
+                              Name 97  "param"
+                              Decorate 93(input) Location 0
+                              Decorate 96(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:      6(int) Constant 5
-              11:      6(int) Constant 6
-              13:      6(int) Constant 7
-              15:             TypeFloat 32
-              16:             TypeVector 15(float) 4
-              17:             TypePointer Function 16(fvec4)
-              21:             TypePointer Input 16(fvec4)
-       22(input):     21(ptr) Variable Input
-              47:      6(int) Constant 10
-              55:      6(int) Constant 11
-              59:             TypeInt 32 0
-              60:     59(int) Constant 0
-              61:             TypePointer Function 15(float)
-              64:     59(int) Constant 1
-              65:             TypePointer Input 15(float)
-              68:             TypeBool
-              82:             TypePointer Output 16(fvec4)
-83(@entryPointOutput):     82(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypeInt 32 1
+              14:             TypePointer Function 13(int)
+              16:     13(int) Constant 5
+              18:     13(int) Constant 6
+              20:     13(int) Constant 7
+              49:     13(int) Constant 10
+              57:     13(int) Constant 11
+              61:             TypeInt 32 0
+              62:     61(int) Constant 0
+              63:             TypePointer Function 6(float)
+              66:     61(int) Constant 1
+              69:             TypeBool
+              92:             TypePointer Input 7(fvec4)
+       93(input):     92(ptr) Variable Input
+              95:             TypePointer Output 7(fvec4)
+96(@entryPointOutput):     95(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-            8(a):      7(ptr) Variable Function
-           10(b):      7(ptr) Variable Function
-           12(c):      7(ptr) Variable Function
-           14(d):      7(ptr) Variable Function
-         18(ret):     17(ptr) Variable Function
-           40(e):      7(ptr) Variable Function
-              41:      7(ptr) Variable Function
-              49:      7(ptr) Variable Function
-           57(f):     17(ptr) Variable Function
-              58:     17(ptr) Variable Function
-                              Store 8(a) 9
-                              Store 10(b) 11
-                              Store 12(c) 13
-                              Store 14(d) 13
-              19:      6(int) Load 8(a)
-              20:   15(float) ConvertSToF 19
-              23:   16(fvec4) Load 22(input)
-              24:   16(fvec4) VectorTimesScalar 23 20
-              25:      6(int) Load 10(b)
-              26:   15(float) ConvertSToF 25
-              27:   16(fvec4) Load 22(input)
-              28:   16(fvec4) VectorTimesScalar 27 26
-              29:   16(fvec4) FAdd 24 28
-              30:      6(int) Load 12(c)
-              31:   15(float) ConvertSToF 30
-              32:   16(fvec4) Load 22(input)
-              33:   16(fvec4) VectorTimesScalar 32 31
-              34:   16(fvec4) FAdd 29 33
-              35:      6(int) Load 14(d)
-              36:   15(float) ConvertSToF 35
-              37:   16(fvec4) Load 22(input)
-              38:   16(fvec4) VectorTimesScalar 37 36
-              39:   16(fvec4) FAdd 34 38
-                              Store 18(ret) 39
-              42:      6(int) Load 10(b)
-                              SelectionMerge 44 None
-                              BranchConditional 42 43 46
-              43:               Label
-              45:      6(int)   Load 14(d)
-                                Store 12(c) 45
-                                Store 41 45
-                                Branch 44
-              46:               Label
-                                Store 41 47
-                                Branch 44
-              44:             Label
-              48:      6(int) Load 41
-                              Store 8(a) 48
-                              Store 40(e) 48
-              50:      6(int) Load 8(a)
-                              SelectionMerge 52 None
-                              BranchConditional 50 51 54
-              51:               Label
-              53:      6(int)   Load 12(c)
-                                Store 14(d) 53
-                                Store 49 53
-                                Branch 52
-              54:               Label
-                                Store 49 55
-                                Branch 52
-              52:             Label
-              56:      6(int) Load 49
-                              Store 10(b) 56
-              62:     61(ptr) AccessChain 18(ret) 60
-              63:   15(float) Load 62
-              66:     65(ptr) AccessChain 22(input) 64
-              67:   15(float) Load 66
-              69:    68(bool) FOrdLessThan 63 67
-                              SelectionMerge 71 None
-                              BranchConditional 69 70 76
-              70:               Label
-              72:      6(int)   Load 12(c)
-              73:   15(float)   ConvertSToF 72
-              74:   16(fvec4)   Load 22(input)
-              75:   16(fvec4)   VectorTimesScalar 74 73
-                                Store 58 75
-                                Branch 71
-              76:               Label
-              77:      6(int)   Load 14(d)
-              78:   15(float)   ConvertSToF 77
-              79:   16(fvec4)   Load 22(input)
-              80:   16(fvec4)   VectorTimesScalar 79 78
-                                Store 58 80
-                                Branch 71
-              71:             Label
-              81:   16(fvec4) Load 58
-                              Store 57(f) 81
-              84:      6(int) Load 40(e)
-              85:   15(float) ConvertSToF 84
-              86:   16(fvec4) Load 18(ret)
-              87:   16(fvec4) VectorTimesScalar 86 85
-              88:   16(fvec4) Load 57(f)
-              89:   16(fvec4) FAdd 87 88
-                              Store 83(@entryPointOutput) 89
+       91(input):      8(ptr) Variable Function
+       97(param):      8(ptr) Variable Function
+              94:    7(fvec4) Load 93(input)
+                              Store 91(input) 94
+              98:    7(fvec4) Load 91(input)
+                              Store 97(param) 98
+              99:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 97(param)
+                              Store 96(@entryPointOutput) 99
                               Return
                               FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+           15(a):     14(ptr) Variable Function
+           17(b):     14(ptr) Variable Function
+           19(c):     14(ptr) Variable Function
+           21(d):     14(ptr) Variable Function
+         22(ret):      8(ptr) Variable Function
+           42(e):     14(ptr) Variable Function
+              43:     14(ptr) Variable Function
+              51:     14(ptr) Variable Function
+           59(f):      8(ptr) Variable Function
+              60:      8(ptr) Variable Function
+                              Store 15(a) 16
+                              Store 17(b) 18
+                              Store 19(c) 20
+                              Store 21(d) 20
+              23:     13(int) Load 15(a)
+              24:    6(float) ConvertSToF 23
+              25:    7(fvec4) Load 10(input)
+              26:    7(fvec4) VectorTimesScalar 25 24
+              27:     13(int) Load 17(b)
+              28:    6(float) ConvertSToF 27
+              29:    7(fvec4) Load 10(input)
+              30:    7(fvec4) VectorTimesScalar 29 28
+              31:    7(fvec4) FAdd 26 30
+              32:     13(int) Load 19(c)
+              33:    6(float) ConvertSToF 32
+              34:    7(fvec4) Load 10(input)
+              35:    7(fvec4) VectorTimesScalar 34 33
+              36:    7(fvec4) FAdd 31 35
+              37:     13(int) Load 21(d)
+              38:    6(float) ConvertSToF 37
+              39:    7(fvec4) Load 10(input)
+              40:    7(fvec4) VectorTimesScalar 39 38
+              41:    7(fvec4) FAdd 36 40
+                              Store 22(ret) 41
+              44:     13(int) Load 17(b)
+                              SelectionMerge 46 None
+                              BranchConditional 44 45 48
+              45:               Label
+              47:     13(int)   Load 21(d)
+                                Store 19(c) 47
+                                Store 43 47
+                                Branch 46
+              48:               Label
+                                Store 43 49
+                                Branch 46
+              46:             Label
+              50:     13(int) Load 43
+                              Store 15(a) 50
+                              Store 42(e) 50
+              52:     13(int) Load 15(a)
+                              SelectionMerge 54 None
+                              BranchConditional 52 53 56
+              53:               Label
+              55:     13(int)   Load 19(c)
+                                Store 21(d) 55
+                                Store 51 55
+                                Branch 54
+              56:               Label
+                                Store 51 57
+                                Branch 54
+              54:             Label
+              58:     13(int) Load 51
+                              Store 17(b) 58
+              64:     63(ptr) AccessChain 22(ret) 62
+              65:    6(float) Load 64
+              67:     63(ptr) AccessChain 10(input) 66
+              68:    6(float) Load 67
+              70:    69(bool) FOrdLessThan 65 68
+                              SelectionMerge 72 None
+                              BranchConditional 70 71 77
+              71:               Label
+              73:     13(int)   Load 19(c)
+              74:    6(float)   ConvertSToF 73
+              75:    7(fvec4)   Load 10(input)
+              76:    7(fvec4)   VectorTimesScalar 75 74
+                                Store 60 76
+                                Branch 72
+              77:               Label
+              78:     13(int)   Load 21(d)
+              79:    6(float)   ConvertSToF 78
+              80:    7(fvec4)   Load 10(input)
+              81:    7(fvec4)   VectorTimesScalar 80 79
+                                Store 60 81
+                                Branch 72
+              72:             Label
+              82:    7(fvec4) Load 60
+                              Store 59(f) 82
+              83:     13(int) Load 42(e)
+              84:    6(float) ConvertSToF 83
+              85:    7(fvec4) Load 22(ret)
+              86:    7(fvec4) VectorTimesScalar 85 84
+              87:    7(fvec4) Load 59(f)
+              88:    7(fvec4) FAdd 86 87
+                              ReturnValue 88
+                              FunctionEnd

+ 70 - 57
3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out

@@ -2,7 +2,7 @@ hlsl.constructexpr.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:4  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:4    Function Parameters: 
 0:?     Sequence
 0:6      Constant:
@@ -34,15 +34,18 @@ gl_FragCoord origin is upper left
 0:15          1.000000
 0:15          1.000000
 0:15          1.000000
-0:16      Sequence
-0:16        Sequence
-0:16          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:16            color: direct index for structure (temp 4-component vector of float)
-0:16              'ps_output' (temp structure{temp 4-component vector of float color})
-0:16              Constant:
-0:16                0 (const int)
-0:16        Branch: Return
+0:16      Branch: Return with expression
+0:16        'ps_output' (temp structure{temp 4-component vector of float color})
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:4          color: direct index for structure (temp 4-component vector of float)
+0:4            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:4            Constant:
+0:4              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -53,7 +56,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:4  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:4    Function Parameters: 
 0:?     Sequence
 0:6      Constant:
@@ -85,66 +88,76 @@ gl_FragCoord origin is upper left
 0:15          1.000000
 0:15          1.000000
 0:15          1.000000
-0:16      Sequence
-0:16        Sequence
-0:16          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:16            color: direct index for structure (temp 4-component vector of float)
-0:16              'ps_output' (temp structure{temp 4-component vector of float color})
-0:16              Constant:
-0:16                0 (const int)
-0:16        Branch: Return
+0:16      Branch: Return with expression
+0:16        'ps_output' (temp structure{temp 4-component vector of float color})
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:4          color: direct index for structure (temp 4-component vector of float)
+0:4            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:4            Constant:
+0:4              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 35
+// Id's are bound by 40
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 31
+                              EntryPoint Fragment 4  "main" 37
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 22  "PS_OUTPUT"
-                              MemberName 22(PS_OUTPUT) 0  "color"
-                              Name 24  "ps_output"
-                              Name 31  "color"
-                              Decorate 31(color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 10  "@main("
+                              Name 27  "ps_output"
+                              Name 37  "color"
+                              Decorate 37(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:      6(int) Constant 3
-               8:      6(int) Constant 4
-               9:      6(int) Constant 5
-              10:      6(int) Constant 6
-              11:      6(int) Constant 7
-              12:      6(int) Constant 8
-              13:             TypeFloat 32
-              14:             TypeVector 13(float) 2
-              15:   13(float) Constant 1091567616
-              16:   13(float) Constant 1092616192
-              17:   14(fvec2) ConstantComposite 15 16
-              18:   13(float) Constant 1093664768
-              19:   13(float) Constant 1094713344
-              20:   14(fvec2) ConstantComposite 18 19
-              21:             TypeVector 13(float) 4
-   22(PS_OUTPUT):             TypeStruct 21(fvec4)
-              23:             TypePointer Function 22(PS_OUTPUT)
-              25:      6(int) Constant 0
-              26:   13(float) Constant 1065353216
-              27:   21(fvec4) ConstantComposite 26 26 26 26
-              28:             TypePointer Function 21(fvec4)
-              30:             TypePointer Output 21(fvec4)
-       31(color):     30(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 1
+              13:     12(int) Constant 3
+              14:     12(int) Constant 4
+              15:     12(int) Constant 5
+              16:     12(int) Constant 6
+              17:     12(int) Constant 7
+              18:     12(int) Constant 8
+              19:             TypeVector 6(float) 2
+              20:    6(float) Constant 1091567616
+              21:    6(float) Constant 1092616192
+              22:   19(fvec2) ConstantComposite 20 21
+              23:    6(float) Constant 1093664768
+              24:    6(float) Constant 1094713344
+              25:   19(fvec2) ConstantComposite 23 24
+              26:             TypePointer Function 8(PS_OUTPUT)
+              28:     12(int) Constant 0
+              29:    6(float) Constant 1065353216
+              30:    7(fvec4) ConstantComposite 29 29 29 29
+              31:             TypePointer Function 7(fvec4)
+              36:             TypePointer Output 7(fvec4)
+       37(color):     36(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-   24(ps_output):     23(ptr) Variable Function
-              29:     28(ptr) AccessChain 24(ps_output) 25
-                              Store 29 27
-              32:     28(ptr) AccessChain 24(ps_output) 25
-              33:   21(fvec4) Load 32
-                              Store 31(color) 33
+              38:8(PS_OUTPUT) FunctionCall 10(@main()
+              39:    7(fvec4) CompositeExtract 38 0
+                              Store 37(color) 39
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+   27(ps_output):     26(ptr) Variable Function
+              32:     31(ptr) AccessChain 27(ps_output) 28
+                              Store 32 30
+              33:8(PS_OUTPUT) Load 27(ps_output)
+                              ReturnValue 33
+                              FunctionEnd

+ 16 - 9
3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out

@@ -1,25 +1,32 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 13
+// Id's are bound by 18
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 9
+                              EntryPoint Vertex 4  "main" 16
                               Name 4  "main"
-                              Name 9  "@entryPointOutput"
-                              Decorate 9(@entryPointOutput) Location 0
+                              Name 9  "@main("
+                              Name 16  "@entryPointOutput"
+                              Decorate 16(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:    6(float) Constant 0
-              11:    7(fvec4) ConstantComposite 10 10 10 10
+               8:             TypeFunction 7(fvec4)
+              11:    6(float) Constant 0
+              12:    7(fvec4) ConstantComposite 11 11 11 11
+              15:             TypePointer Output 7(fvec4)
+16(@entryPointOutput):     15(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-                              Store 9(@entryPointOutput) 11
+              17:    7(fvec4) FunctionCall 9(@main()
+                              Store 16(@entryPointOutput) 17
                               Return
                               FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+                              ReturnValue 12
+                              FunctionEnd

+ 48 - 14
3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out

@@ -3,14 +3,22 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_greater
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1; (temp void)
+0:2  Function Definition: @PixelShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
-0:2      'depth' (out float FragDepth)
+0:2      'depth' (out float)
 0:?     Sequence
 0:3      move second child to first child (temp float)
-0:3        'depth' (out float FragDepth)
+0:3        'depth' (out float)
 0:3        Constant:
 0:3          0.200000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @PixelShaderFunction(f1; (temp void)
+0:?         'depth' (temp float)
+0:2      move second child to first child (temp float)
+0:?         'depth' (out float FragDepth)
+0:?         'depth' (temp float)
 0:?   Linker Objects
 0:?     'depth' (out float FragDepth)
 
@@ -22,38 +30,64 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_greater
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1; (temp void)
+0:2  Function Definition: @PixelShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
-0:2      'depth' (out float FragDepth)
+0:2      'depth' (out float)
 0:?     Sequence
 0:3      move second child to first child (temp float)
-0:3        'depth' (out float FragDepth)
+0:3        'depth' (out float)
 0:3        Constant:
 0:3          0.200000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @PixelShaderFunction(f1; (temp void)
+0:?         'depth' (temp float)
+0:2      move second child to first child (temp float)
+0:?         'depth' (out float FragDepth)
+0:?         'depth' (temp float)
 0:?   Linker Objects
 0:?     'depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 10
+// Id's are bound by 20
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 8
+                              EntryPoint Fragment 4  "PixelShaderFunction" 18
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthGreater
                               Name 4  "PixelShaderFunction"
-                              Name 8  "depth"
-                              Decorate 8(depth) BuiltIn FragDepth
+                              Name 10  "@PixelShaderFunction(f1;"
+                              Name 9  "depth"
+                              Name 13  "depth"
+                              Name 14  "param"
+                              Name 18  "depth"
+                              Decorate 18(depth) BuiltIn FragDepth
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Output 6(float)
-        8(depth):      7(ptr) Variable Output
-               9:    6(float) Constant 1045220557
+               7:             TypePointer Function 6(float)
+               8:             TypeFunction 2 7(ptr)
+              12:    6(float) Constant 1045220557
+              17:             TypePointer Output 6(float)
+       18(depth):     17(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              Store 8(depth) 9
+       13(depth):      7(ptr) Variable Function
+       14(param):      7(ptr) Variable Function
+              15:           2 FunctionCall 10(@PixelShaderFunction(f1;) 14(param)
+              16:    6(float) Load 14(param)
+                              Store 13(depth) 16
+              19:    6(float) Load 13(depth)
+                              Store 18(depth) 19
+                              Return
+                              FunctionEnd
+10(@PixelShaderFunction(f1;):           2 Function None 8
+        9(depth):      7(ptr) FunctionParameter
+              11:             Label
+                              Store 9(depth) 12
                               Return
                               FunctionEnd

+ 37 - 23
3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out

@@ -3,17 +3,20 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_less
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction( (temp float FragDepth)
+0:2  Function Definition: @PixelShaderFunction( (temp float)
 0:2    Function Parameters: 
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp float)
-0:?           '@entryPointOutput' (out float unknown built-in variable)
-0:3          Constant:
-0:3            0.200000
-0:3        Branch: Return
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          0.200000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         '@entryPointOutput' (out float FragDepth)
+0:2        Function Call: @PixelShaderFunction( (temp float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (out float unknown built-in variable)
+0:?     '@entryPointOutput' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -23,38 +26,49 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_less
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction( (temp float FragDepth)
+0:2  Function Definition: @PixelShaderFunction( (temp float)
 0:2    Function Parameters: 
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp float)
-0:?           '@entryPointOutput' (out float unknown built-in variable)
-0:3          Constant:
-0:3            0.200000
-0:3        Branch: Return
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          0.200000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         '@entryPointOutput' (out float FragDepth)
+0:2        Function Call: @PixelShaderFunction( (temp float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (out float unknown built-in variable)
+0:?     '@entryPointOutput' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 11
+// Id's are bound by 16
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 8
+                              EntryPoint Fragment 4  "PixelShaderFunction" 14
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthLess
                               Name 4  "PixelShaderFunction"
-                              Name 8  "@entryPointOutput"
+                              Name 8  "@PixelShaderFunction("
+                              Name 14  "@entryPointOutput"
+                              Decorate 14(@entryPointOutput) BuiltIn FragDepth
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Output 6(float)
-8(@entryPointOutput):      7(ptr) Variable Output
-               9:    6(float) Constant 1045220557
+               7:             TypeFunction 6(float)
+              10:    6(float) Constant 1045220557
+              13:             TypePointer Output 6(float)
+14(@entryPointOutput):     13(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              Store 8(@entryPointOutput) 9
+              15:    6(float) FunctionCall 8(@PixelShaderFunction()
+                              Store 14(@entryPointOutput) 15
                               Return
                               FunctionEnd
+8(@PixelShaderFunction():    6(float) Function None 7
+               9:             Label
+                              ReturnValue 10
+                              FunctionEnd

+ 81 - 48
3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out

@@ -14,19 +14,19 @@ gl_FragCoord origin is upper left
 0:3            1.000000
 0:3        true case
 0:4        Branch: Kill
-0:8  Function Definition: PixelShaderFunction(vf4; (temp void)
+0:8  Function Definition: @PixelShaderFunction(vf4; (temp void)
 0:8    Function Parameters: 
-0:8      'input' (layout(location=0 ) in 4-component vector of float)
+0:8      'input' (in 4-component vector of float)
 0:?     Sequence
 0:9      Function Call: foo(f1; (temp void)
 0:9        direct index (temp float)
-0:9          'input' (layout(location=0 ) in 4-component vector of float)
+0:9          'input' (in 4-component vector of float)
 0:9          Constant:
 0:9            2 (const int)
 0:10      Test condition and select (temp void)
 0:10        Condition
 0:10        direct index (temp float)
-0:10          'input' (layout(location=0 ) in 4-component vector of float)
+0:10          'input' (in 4-component vector of float)
 0:10          Constant:
 0:10            0 (const int)
 0:10        true case
@@ -35,10 +35,18 @@ gl_FragCoord origin is upper left
 0:12        move second child to first child (temp float)
 0:12          'f' (temp float)
 0:12          direct index (temp float)
-0:12            'input' (layout(location=0 ) in 4-component vector of float)
+0:12            'input' (in 4-component vector of float)
 0:12            Constant:
 0:12              0 (const int)
 0:13      Branch: Kill
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:8      Function Call: @PixelShaderFunction(vf4; (temp void)
+0:?         'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
@@ -61,19 +69,19 @@ gl_FragCoord origin is upper left
 0:3            1.000000
 0:3        true case
 0:4        Branch: Kill
-0:8  Function Definition: PixelShaderFunction(vf4; (temp void)
+0:8  Function Definition: @PixelShaderFunction(vf4; (temp void)
 0:8    Function Parameters: 
-0:8      'input' (layout(location=0 ) in 4-component vector of float)
+0:8      'input' (in 4-component vector of float)
 0:?     Sequence
 0:9      Function Call: foo(f1; (temp void)
 0:9        direct index (temp float)
-0:9          'input' (layout(location=0 ) in 4-component vector of float)
+0:9          'input' (in 4-component vector of float)
 0:9          Constant:
 0:9            2 (const int)
 0:10      Test condition and select (temp void)
 0:10        Condition
 0:10        direct index (temp float)
-0:10          'input' (layout(location=0 ) in 4-component vector of float)
+0:10          'input' (in 4-component vector of float)
 0:10          Constant:
 0:10            0 (const int)
 0:10        true case
@@ -82,72 +90,97 @@ gl_FragCoord origin is upper left
 0:12        move second child to first child (temp float)
 0:12          'f' (temp float)
 0:12          direct index (temp float)
-0:12            'input' (layout(location=0 ) in 4-component vector of float)
+0:12            'input' (in 4-component vector of float)
 0:12            Constant:
 0:12              0 (const int)
 0:13      Branch: Kill
+0:8  Function Definition: PixelShaderFunction( (temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:8      Function Call: @PixelShaderFunction(vf4; (temp void)
+0:?         'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 39
+// Id's are bound by 48
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 21
+                              EntryPoint Fragment 4  "PixelShaderFunction" 43
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 10  "foo(f1;"
                               Name 9  "f"
-                              Name 21  "input"
-                              Name 22  "param"
-                              Name 35  "f"
-                              Decorate 21(input) Location 0
+                              Name 16  "@PixelShaderFunction(vf4;"
+                              Name 15  "input"
+                              Name 25  "param"
+                              Name 37  "f"
+                              Name 41  "input"
+                              Name 43  "input"
+                              Name 45  "param"
+                              Decorate 43(input) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
                8:             TypeFunction 2 7(ptr)
-              13:    6(float) Constant 1065353216
-              14:             TypeBool
-              19:             TypeVector 6(float) 4
-              20:             TypePointer Input 19(fvec4)
-       21(input):     20(ptr) Variable Input
-              23:             TypeInt 32 0
-              24:     23(int) Constant 2
-              25:             TypePointer Input 6(float)
-              29:     23(int) Constant 0
+              12:             TypeVector 6(float) 4
+              13:             TypePointer Function 12(fvec4)
+              14:             TypeFunction 2 13(ptr)
+              19:    6(float) Constant 1065353216
+              20:             TypeBool
+              26:             TypeInt 32 0
+              27:     26(int) Constant 2
+              31:     26(int) Constant 0
+              42:             TypePointer Input 12(fvec4)
+       43(input):     42(ptr) Variable Input
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       22(param):      7(ptr) Variable Function
-           35(f):      7(ptr) Variable Function
-              26:     25(ptr) AccessChain 21(input) 24
-              27:    6(float) Load 26
-                              Store 22(param) 27
-              28:           2 FunctionCall 10(foo(f1;) 22(param)
-              30:     25(ptr) AccessChain 21(input) 29
-              31:    6(float) Load 30
-                              SelectionMerge 33 None
-                              BranchConditional 31 32 33
-              32:               Label
-                                Kill
-              33:             Label
-              36:     25(ptr) AccessChain 21(input) 29
-              37:    6(float) Load 36
-                              Store 35(f) 37
-                              Kill
+       41(input):     13(ptr) Variable Function
+       45(param):     13(ptr) Variable Function
+              44:   12(fvec4) Load 43(input)
+                              Store 41(input) 44
+              46:   12(fvec4) Load 41(input)
+                              Store 45(param) 46
+              47:           2 FunctionCall 16(@PixelShaderFunction(vf4;) 45(param)
+                              Return
                               FunctionEnd
      10(foo(f1;):           2 Function None 8
             9(f):      7(ptr) FunctionParameter
               11:             Label
-              12:    6(float) Load 9(f)
-              15:    14(bool) FOrdLessThan 12 13
-                              SelectionMerge 17 None
-                              BranchConditional 15 16 17
-              16:               Label
+              18:    6(float) Load 9(f)
+              21:    20(bool) FOrdLessThan 18 19
+                              SelectionMerge 23 None
+                              BranchConditional 21 22 23
+              22:               Label
                                 Kill
-              17:             Label
+              23:             Label
                               Return
                               FunctionEnd
+16(@PixelShaderFunction(vf4;):           2 Function None 14
+       15(input):     13(ptr) FunctionParameter
+              17:             Label
+       25(param):      7(ptr) Variable Function
+           37(f):      7(ptr) Variable Function
+              28:      7(ptr) AccessChain 15(input) 27
+              29:    6(float) Load 28
+                              Store 25(param) 29
+              30:           2 FunctionCall 10(foo(f1;) 25(param)
+              32:      7(ptr) AccessChain 15(input) 31
+              33:    6(float) Load 32
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 35
+              34:               Label
+                                Kill
+              35:             Label
+              38:      7(ptr) AccessChain 15(input) 31
+              39:    6(float) Load 38
+                              Store 37(f) 39
+                              Kill
+                              FunctionEnd

+ 93 - 60
3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out

@@ -2,9 +2,9 @@ hlsl.doLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Loop with condition not tested first
 0:3        Loop Condition
@@ -20,14 +20,21 @@ gl_FragCoord origin is upper left
 0:5        Loop Condition
 0:5        all (temp bool)
 0:5          Equal (temp 4-component vector of bool)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5            'input' (in 4-component vector of float)
+0:5            'input' (in 4-component vector of float)
 0:5        Loop Body
-0:5        Sequence
-0:5          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5          Branch: Return
+0:5        Branch: Return with expression
+0:5          'input' (in 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -39,9 +46,9 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Loop with condition not tested first
 0:3        Loop Condition
@@ -57,77 +64,103 @@ gl_FragCoord origin is upper left
 0:5        Loop Condition
 0:5        all (temp bool)
 0:5          Equal (temp 4-component vector of bool)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5            'input' (in 4-component vector of float)
+0:5            'input' (in 4-component vector of float)
 0:5        Loop Body
-0:5        Sequence
-0:5          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5          Branch: Return
+0:5        Branch: Return with expression
+0:5          'input' (in 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 33
+// Id's are bound by 44
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 23 25
+                              EntryPoint Fragment 4  "PixelShaderFunction" 37 40
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 23  "@entryPointOutput"
-                              Name 25  "input"
-                              Decorate 23(@entryPointOutput) Location 0
-                              Decorate 25(input) Location 0
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 35  "input"
+                              Name 37  "input"
+                              Name 40  "@entryPointOutput"
+                              Name 41  "param"
+                              Decorate 37(input) Location 0
+                              Decorate 40(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-              10:             TypeBool
-              11:    10(bool) ConstantFalse
-              20:             TypeFloat 32
-              21:             TypeVector 20(float) 4
-              22:             TypePointer Output 21(fvec4)
-23(@entryPointOutput):     22(ptr) Variable Output
-              24:             TypePointer Input 21(fvec4)
-       25(input):     24(ptr) Variable Input
-              30:             TypeVector 10(bool) 4
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              17:             TypeBool
+              18:    17(bool) ConstantFalse
+              31:             TypeVector 17(bool) 4
+              36:             TypePointer Input 7(fvec4)
+       37(input):     36(ptr) Variable Input
+              39:             TypePointer Output 7(fvec4)
+40(@entryPointOutput):     39(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              Branch 6
-               6:             Label
-                              LoopMerge 8 9 None
-                              Branch 7
-               7:             Label
-                              Branch 9
-               9:             Label
-                              BranchConditional 11 6 8
-               8:             Label
-                              Branch 12
+       35(input):      8(ptr) Variable Function
+       41(param):      8(ptr) Variable Function
+              38:    7(fvec4) Load 37(input)
+                              Store 35(input) 38
+              42:    7(fvec4) Load 35(input)
+                              Store 41(param) 42
+              43:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 41(param)
+                              Store 40(@entryPointOutput) 43
+                              Return
+                              FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
               12:             Label
-                              LoopMerge 14 15 None
                               Branch 13
               13:             Label
-                              Branch 15
-              15:             Label
-                              BranchConditional 11 12 14
+                              LoopMerge 15 16 None
+                              Branch 14
               14:             Label
                               Branch 16
               16:             Label
-                              LoopMerge 18 19 None
-                              Branch 17
-              17:             Label
-              26:   21(fvec4) Load 25(input)
-                              Store 23(@entryPointOutput) 26
-                              Return
+                              BranchConditional 18 13 15
+              15:             Label
+                              Branch 19
               19:             Label
-              28:   21(fvec4) Load 25(input)
-              29:   21(fvec4) Load 25(input)
-              31:   30(bvec4) FOrdEqual 28 29
-              32:    10(bool) All 31
-                              BranchConditional 32 16 18
-              18:             Label
-                              Return
+                              LoopMerge 21 22 None
+                              Branch 20
+              20:             Label
+                              Branch 22
+              22:             Label
+                              BranchConditional 18 19 21
+              21:             Label
+                              Branch 23
+              23:             Label
+                              LoopMerge 25 26 None
+                              Branch 24
+              24:             Label
+              27:    7(fvec4) Load 10(input)
+                              ReturnValue 27
+              26:             Label
+              29:    7(fvec4) Load 10(input)
+              30:    7(fvec4) Load 10(input)
+              32:   31(bvec4) FOrdEqual 29 30
+              33:    17(bool) All 32
+                              BranchConditional 33 23 25
+              25:             Label
+              34:    7(fvec4) Undef
+                              ReturnValue 34
                               FunctionEnd

+ 184 - 225
3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out

@@ -4,53 +4,31 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:8    Function Parameters: 
-0:8      'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:8      'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?     Sequence
 0:9      Branch: Return with expression
 0:9        add (temp float)
 0:9          direct index (temp float)
 0:9            v: direct index for structure (temp 2-component vector of float)
-0:9              'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:9              'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:9              Constant:
 0:9                0 (const int)
 0:9            Constant:
 0:9              1 (const int)
 0:9          direct index (temp float)
 0:9            fragCoord: direct index for structure (temp 4-component vector of float)
-0:9              'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:9              'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:9              Constant:
 0:9                1 (const int)
 0:9            Constant:
 0:9              0 (const int)
-0:13  Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
+0:13  Function Definition: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
 0:13    Function Parameters: 
-0:13      'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
+0:13      'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?     Sequence
-0:15      Sequence
-0:15        move second child to first child (temp 2-component vector of float)
-0:15          v: direct index for structure (temp 2-component vector of float)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              0 (const int)
-0:15          v: direct index for structure (temp 2-component vector of float)
-0:15            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              0 (const int)
-0:15        move second child to first child (temp 4-component vector of float)
-0:15          fragCoord: direct index for structure (temp 4-component vector of float)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              1 (const int)
-0:?           'i_fragCoord' (in 4-component vector of float FragCoord)
-0:15        move second child to first child (temp 2-component vector of int)
-0:15          i2: direct index for structure (temp 2-component vector of int)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              2 (const int)
-0:15          i2: direct index for structure (temp 2-component vector of int)
-0:15            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              1 (const int)
+0:15      move second child to first child (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:15        'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:15        'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:16      Sequence
 0:16        move second child to first child (temp float)
 0:16          'ret1' (temp float)
@@ -60,45 +38,48 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child (temp float)
 0:17          'ret2' (temp float)
 0:17          Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
-0:17            Comma (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17              Sequence
-0:17                move second child to first child (temp 2-component vector of float)
-0:17                  v: direct index for structure (temp 2-component vector of float)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      0 (const int)
-0:17                  v: direct index for structure (temp 2-component vector of float)
-0:17                    'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      0 (const int)
-0:17                move second child to first child (temp 4-component vector of float)
-0:17                  fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      1 (const int)
-0:?                   'i_fragCoord' (in 4-component vector of float FragCoord)
-0:17                move second child to first child (temp 2-component vector of int)
-0:17                  i2: direct index for structure (temp 2-component vector of int)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      2 (const int)
-0:17                  i2: direct index for structure (temp 2-component vector of int)
-0:17                    'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      1 (const int)
-0:17              'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:19      Sequence
-0:19        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:17            'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:19      Branch: Return with expression
+0:19        vector-scale (temp 4-component vector of float)
 0:19          vector-scale (temp 4-component vector of float)
-0:19            vector-scale (temp 4-component vector of float)
-0:19              fragCoord: direct index for structure (temp 4-component vector of float)
-0:19                'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:19                Constant:
-0:19                  1 (const int)
-0:19              'ret1' (temp float)
-0:19            'ret2' (temp float)
-0:19        Branch: Return
+0:19            fragCoord: direct index for structure (temp 4-component vector of float)
+0:19              'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:19              Constant:
+0:19                1 (const int)
+0:19            'ret1' (temp float)
+0:19          'ret2' (temp float)
+0:13  Function Definition: PixelShaderFunction( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              0 (const int)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:13            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 4-component vector of float)
+0:13          fragCoord: direct index for structure (temp 4-component vector of float)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              1 (const int)
+0:?           'i_fragCoord' (in 4-component vector of float FragCoord)
+0:13        move second child to first child (temp 2-component vector of int)
+0:13          i2: direct index for structure (temp 2-component vector of int)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              2 (const int)
+0:13          i2: direct index for structure (temp 2-component vector of int)
+0:13            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              1 (const int)
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:13        Function Call: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
+0:?           'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
@@ -113,53 +94,31 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:8    Function Parameters: 
-0:8      'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:8      'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?     Sequence
 0:9      Branch: Return with expression
 0:9        add (temp float)
 0:9          direct index (temp float)
 0:9            v: direct index for structure (temp 2-component vector of float)
-0:9              'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:9              'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:9              Constant:
 0:9                0 (const int)
 0:9            Constant:
 0:9              1 (const int)
 0:9          direct index (temp float)
 0:9            fragCoord: direct index for structure (temp 4-component vector of float)
-0:9              'p' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:9              'p' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:9              Constant:
 0:9                1 (const int)
 0:9            Constant:
 0:9              0 (const int)
-0:13  Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
+0:13  Function Definition: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
 0:13    Function Parameters: 
-0:13      'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
+0:13      'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?     Sequence
-0:15      Sequence
-0:15        move second child to first child (temp 2-component vector of float)
-0:15          v: direct index for structure (temp 2-component vector of float)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              0 (const int)
-0:15          v: direct index for structure (temp 2-component vector of float)
-0:15            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              0 (const int)
-0:15        move second child to first child (temp 4-component vector of float)
-0:15          fragCoord: direct index for structure (temp 4-component vector of float)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              1 (const int)
-0:?           'i_fragCoord' (in 4-component vector of float FragCoord)
-0:15        move second child to first child (temp 2-component vector of int)
-0:15          i2: direct index for structure (temp 2-component vector of int)
-0:15            'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              2 (const int)
-0:15          i2: direct index for structure (temp 2-component vector of int)
-0:15            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:15            Constant:
-0:15              1 (const int)
+0:15      move second child to first child (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:15        'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:15        'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:16      Sequence
 0:16        move second child to first child (temp float)
 0:16          'ret1' (temp float)
@@ -169,45 +128,48 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child (temp float)
 0:17          'ret2' (temp float)
 0:17          Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
-0:17            Comma (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17              Sequence
-0:17                move second child to first child (temp 2-component vector of float)
-0:17                  v: direct index for structure (temp 2-component vector of float)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      0 (const int)
-0:17                  v: direct index for structure (temp 2-component vector of float)
-0:17                    'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      0 (const int)
-0:17                move second child to first child (temp 4-component vector of float)
-0:17                  fragCoord: direct index for structure (temp 4-component vector of float FragCoord)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      1 (const int)
-0:?                   'i_fragCoord' (in 4-component vector of float FragCoord)
-0:17                move second child to first child (temp 2-component vector of int)
-0:17                  i2: direct index for structure (temp 2-component vector of int)
-0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      2 (const int)
-0:17                  i2: direct index for structure (temp 2-component vector of int)
-0:17                    'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
-0:17                    Constant:
-0:17                      1 (const int)
-0:17              'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float FragCoord fragCoord, temp 2-component vector of int i2})
-0:19      Sequence
-0:19        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:17            'i' (in structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:19      Branch: Return with expression
+0:19        vector-scale (temp 4-component vector of float)
 0:19          vector-scale (temp 4-component vector of float)
-0:19            vector-scale (temp 4-component vector of float)
-0:19              fragCoord: direct index for structure (temp 4-component vector of float)
-0:19                'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:19                Constant:
-0:19                  1 (const int)
-0:19              'ret1' (temp float)
-0:19            'ret2' (temp float)
-0:19        Branch: Return
+0:19            fragCoord: direct index for structure (temp 4-component vector of float)
+0:19              'local' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:19              Constant:
+0:19                1 (const int)
+0:19            'ret1' (temp float)
+0:19          'ret2' (temp float)
+0:13  Function Definition: PixelShaderFunction( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              0 (const int)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:13            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 4-component vector of float)
+0:13          fragCoord: direct index for structure (temp 4-component vector of float)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              1 (const int)
+0:?           'i_fragCoord' (in 4-component vector of float FragCoord)
+0:13        move second child to first child (temp 2-component vector of int)
+0:13          i2: direct index for structure (temp 2-component vector of int)
+0:?             'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              2 (const int)
+0:13          i2: direct index for structure (temp 2-component vector of int)
+0:13            'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
+0:13            Constant:
+0:13              1 (const int)
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:13        Function Call: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (temp 4-component vector of float)
+0:?           'i' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in structure{temp 2-component vector of float v, temp 2-component vector of int i2})
@@ -215,12 +177,12 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 78
+// Id's are bound by 77
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 33 40 70
+                              EntryPoint Fragment 4  "PixelShaderFunction" 56 63 73
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 11  "InParam"
@@ -229,26 +191,24 @@ gl_FragCoord origin is upper left
                               MemberName 11(InParam) 2  "i2"
                               Name 15  "fun(struct-InParam-vf2-vf4-vi21;"
                               Name 14  "p"
-                              Name 30  "local"
-                              Name 31  "InParam"
-                              MemberName 31(InParam) 0  "v"
-                              MemberName 31(InParam) 1  "i2"
-                              Name 33  "i"
-                              Name 40  "i_fragCoord"
-                              Name 50  "ret1"
-                              Name 51  "param"
-                              Name 54  "ret2"
-                              Name 55  "InParam"
-                              MemberName 55(InParam) 0  "v"
-                              MemberName 55(InParam) 1  "fragCoord"
-                              MemberName 55(InParam) 2  "i2"
-                              Name 57  "aggShadow"
-                              Name 66  "param"
-                              Name 70  "@entryPointOutput"
-                              Decorate 33(i) Location 0
-                              Decorate 40(i_fragCoord) BuiltIn FragCoord
-                              MemberDecorate 55(InParam) 1 BuiltIn FragCoord
-                              Decorate 70(@entryPointOutput) Location 0
+                              Name 19  "@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;"
+                              Name 18  "i"
+                              Name 34  "local"
+                              Name 36  "ret1"
+                              Name 37  "param"
+                              Name 40  "ret2"
+                              Name 41  "param"
+                              Name 53  "i"
+                              Name 54  "InParam"
+                              MemberName 54(InParam) 0  "v"
+                              MemberName 54(InParam) 1  "i2"
+                              Name 56  "i"
+                              Name 63  "i_fragCoord"
+                              Name 73  "@entryPointOutput"
+                              Name 74  "param"
+                              Decorate 56(i) Location 0
+                              Decorate 63(i_fragCoord) BuiltIn FragCoord
+                              Decorate 73(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -259,81 +219,80 @@ gl_FragCoord origin is upper left
      11(InParam):             TypeStruct 7(fvec2) 8(fvec4) 10(ivec2)
               12:             TypePointer Function 11(InParam)
               13:             TypeFunction 6(float) 12(ptr)
-              17:      9(int) Constant 0
-              18:             TypeInt 32 0
-              19:     18(int) Constant 1
-              20:             TypePointer Function 6(float)
-              23:      9(int) Constant 1
-              24:     18(int) Constant 0
-     31(InParam):             TypeStruct 7(fvec2) 10(ivec2)
-              32:             TypePointer Input 31(InParam)
-           33(i):     32(ptr) Variable Input
-              34:             TypePointer Input 7(fvec2)
-              37:             TypePointer Function 7(fvec2)
-              39:             TypePointer Input 8(fvec4)
- 40(i_fragCoord):     39(ptr) Variable Input
-              42:             TypePointer Function 8(fvec4)
-              44:      9(int) Constant 2
-              45:             TypePointer Input 10(ivec2)
-              48:             TypePointer Function 10(ivec2)
-     55(InParam):             TypeStruct 7(fvec2) 8(fvec4) 10(ivec2)
-              56:             TypePointer Function 55(InParam)
-              69:             TypePointer Output 8(fvec4)
-70(@entryPointOutput):     69(ptr) Variable Output
+              17:             TypeFunction 8(fvec4) 12(ptr)
+              21:      9(int) Constant 0
+              22:             TypeInt 32 0
+              23:     22(int) Constant 1
+              24:             TypePointer Function 6(float)
+              27:      9(int) Constant 1
+              28:     22(int) Constant 0
+              44:             TypePointer Function 8(fvec4)
+     54(InParam):             TypeStruct 7(fvec2) 10(ivec2)
+              55:             TypePointer Input 54(InParam)
+           56(i):     55(ptr) Variable Input
+              57:             TypePointer Input 7(fvec2)
+              60:             TypePointer Function 7(fvec2)
+              62:             TypePointer Input 8(fvec4)
+ 63(i_fragCoord):     62(ptr) Variable Input
+              66:      9(int) Constant 2
+              67:             TypePointer Input 10(ivec2)
+              70:             TypePointer Function 10(ivec2)
+              72:             TypePointer Output 8(fvec4)
+73(@entryPointOutput):     72(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       30(local):     12(ptr) Variable Function
-        50(ret1):     20(ptr) Variable Function
-       51(param):     12(ptr) Variable Function
-        54(ret2):     20(ptr) Variable Function
-   57(aggShadow):     56(ptr) Variable Function
-       66(param):     56(ptr) Variable Function
-              35:     34(ptr) AccessChain 33(i) 17
-              36:    7(fvec2) Load 35
-              38:     37(ptr) AccessChain 30(local) 17
-                              Store 38 36
-              41:    8(fvec4) Load 40(i_fragCoord)
-              43:     42(ptr) AccessChain 30(local) 23
-                              Store 43 41
-              46:     45(ptr) AccessChain 33(i) 23
-              47:   10(ivec2) Load 46
-              49:     48(ptr) AccessChain 30(local) 44
-                              Store 49 47
-              52: 11(InParam) Load 30(local)
-                              Store 51(param) 52
-              53:    6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 51(param)
-                              Store 50(ret1) 53
-              58:     34(ptr) AccessChain 33(i) 17
+           53(i):     12(ptr) Variable Function
+       74(param):     12(ptr) Variable Function
+              58:     57(ptr) AccessChain 56(i) 21
               59:    7(fvec2) Load 58
-              60:     37(ptr) AccessChain 57(aggShadow) 17
-                              Store 60 59
-              61:    8(fvec4) Load 40(i_fragCoord)
-              62:     42(ptr) AccessChain 57(aggShadow) 23
-                              Store 62 61
-              63:     45(ptr) AccessChain 33(i) 23
-              64:   10(ivec2) Load 63
-              65:     48(ptr) AccessChain 57(aggShadow) 44
+              61:     60(ptr) AccessChain 53(i) 21
+                              Store 61 59
+              64:    8(fvec4) Load 63(i_fragCoord)
+              65:     44(ptr) AccessChain 53(i) 27
                               Store 65 64
-              67: 55(InParam) Load 57(aggShadow)
-                              Store 66(param) 67
-              68:    6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 66(param)
-                              Store 54(ret2) 68
-              71:     42(ptr) AccessChain 30(local) 23
-              72:    8(fvec4) Load 71
-              73:    6(float) Load 50(ret1)
-              74:    8(fvec4) VectorTimesScalar 72 73
-              75:    6(float) Load 54(ret2)
-              76:    8(fvec4) VectorTimesScalar 74 75
-                              Store 70(@entryPointOutput) 76
+              68:     67(ptr) AccessChain 56(i) 27
+              69:   10(ivec2) Load 68
+              71:     70(ptr) AccessChain 53(i) 66
+                              Store 71 69
+              75: 11(InParam) Load 53(i)
+                              Store 74(param) 75
+              76:    8(fvec4) FunctionCall 19(@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;) 74(param)
+                              Store 73(@entryPointOutput) 76
                               Return
                               FunctionEnd
 15(fun(struct-InParam-vf2-vf4-vi21;):    6(float) Function None 13
            14(p):     12(ptr) FunctionParameter
               16:             Label
-              21:     20(ptr) AccessChain 14(p) 17 19
-              22:    6(float) Load 21
-              25:     20(ptr) AccessChain 14(p) 23 24
+              25:     24(ptr) AccessChain 14(p) 21 23
               26:    6(float) Load 25
-              27:    6(float) FAdd 22 26
-                              ReturnValue 27
+              29:     24(ptr) AccessChain 14(p) 27 28
+              30:    6(float) Load 29
+              31:    6(float) FAdd 26 30
+                              ReturnValue 31
+                              FunctionEnd
+19(@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;):    8(fvec4) Function None 17
+           18(i):     12(ptr) FunctionParameter
+              20:             Label
+       34(local):     12(ptr) Variable Function
+        36(ret1):     24(ptr) Variable Function
+       37(param):     12(ptr) Variable Function
+        40(ret2):     24(ptr) Variable Function
+       41(param):     12(ptr) Variable Function
+              35: 11(InParam) Load 18(i)
+                              Store 34(local) 35
+              38: 11(InParam) Load 34(local)
+                              Store 37(param) 38
+              39:    6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 37(param)
+                              Store 36(ret1) 39
+              42: 11(InParam) Load 18(i)
+                              Store 41(param) 42
+              43:    6(float) FunctionCall 15(fun(struct-InParam-vf2-vf4-vi21;) 41(param)
+                              Store 40(ret2) 43
+              45:     44(ptr) AccessChain 34(local) 27
+              46:    8(fvec4) Load 45
+              47:    6(float) Load 36(ret1)
+              48:    8(fvec4) VectorTimesScalar 46 47
+              49:    6(float) Load 40(ret2)
+              50:    8(fvec4) VectorTimesScalar 48 49
+                              ReturnValue 50
                               FunctionEnd

+ 241 - 129
3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out

@@ -22,23 +22,29 @@ gl_FragCoord origin is upper left
 0:9        Constant:
 0:9          7 (const int)
 0:9          7 (const int)
-0:13  Function Definition: PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
+0:13  Function Definition: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
 0:13    Function Parameters: 
-0:13      'input' (layout(location=0 ) in 4-component vector of float)
-0:13      'out1' (layout(location=1 ) out 4-component vector of float)
+0:13      'input' (in 4-component vector of float)
+0:13      'out1' (out 4-component vector of float)
 0:13      'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:13      'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:?     Sequence
 0:14      move second child to first child (temp 4-component vector of float)
-0:14        'out1' (layout(location=1 ) out 4-component vector of float)
-0:14        'input' (layout(location=0 ) in 4-component vector of float)
+0:14        'out1' (out 4-component vector of float)
+0:14        'input' (in 4-component vector of float)
 0:15      move second child to first child (temp 2-component vector of float)
-0:?         'v' (layout(location=2 ) out 2-component vector of float)
+0:15        v: direct index for structure (temp 2-component vector of float)
+0:15          'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:15          Constant:
+0:15            0 (const int)
 0:15        Constant:
 0:15          2.000000
 0:15          2.000000
 0:16      move second child to first child (temp 2-component vector of int)
-0:?         'i' (layout(location=3 ) out 2-component vector of int)
+0:16        i: direct index for structure (temp 2-component vector of int)
+0:16          'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:16          Constant:
+0:16            1 (const int)
 0:16        Constant:
 0:16          3 (const int)
 0:16          3 (const int)
@@ -58,27 +64,52 @@ gl_FragCoord origin is upper left
 0:19        Constant:
 0:19          13 (const int)
 0:19          13 (const int)
-0:20      Comma (temp void)
-0:20        Function Call: fun(struct-OutParam-vf2-vi21; (temp void)
-0:20          'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20        Sequence
-0:20          move second child to first child (temp 2-component vector of float)
-0:?             'v' (layout(location=4 ) out 2-component vector of float)
-0:20            v: direct index for structure (temp 2-component vector of float)
-0:20              'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child (temp 2-component vector of int)
-0:?             'i' (layout(location=5 ) out 2-component vector of int)
-0:20            i: direct index for structure (temp 2-component vector of int)
-0:20              'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20              Constant:
-0:20                1 (const int)
-0:22      Sequence
-0:22        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:22          'out1' (layout(location=1 ) out 4-component vector of float)
-0:22        Branch: Return
+0:20      Function Call: fun(struct-OutParam-vf2-vi21; (temp void)
+0:20        'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:22      Branch: Return with expression
+0:22        'out1' (out 4-component vector of float)
+0:13  Function Definition: PixelShaderFunction( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:13        Function Call: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
+0:?           'out1' (temp 4-component vector of float)
+0:?           'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:?           'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         'out1' (layout(location=1 ) out 4-component vector of float)
+0:?         'out1' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:?           'v' (layout(location=2 ) out 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 2-component vector of int)
+0:?           'i' (layout(location=3 ) out 2-component vector of int)
+0:13          i: direct index for structure (temp 2-component vector of int)
+0:?             'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              1 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:?           'v' (layout(location=4 ) out 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 2-component vector of int)
+0:?           'i' (layout(location=5 ) out 2-component vector of int)
+0:13          i: direct index for structure (temp 2-component vector of int)
+0:?             'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              1 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -115,23 +146,29 @@ gl_FragCoord origin is upper left
 0:9        Constant:
 0:9          7 (const int)
 0:9          7 (const int)
-0:13  Function Definition: PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
+0:13  Function Definition: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
 0:13    Function Parameters: 
-0:13      'input' (layout(location=0 ) in 4-component vector of float)
-0:13      'out1' (layout(location=1 ) out 4-component vector of float)
+0:13      'input' (in 4-component vector of float)
+0:13      'out1' (out 4-component vector of float)
 0:13      'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:13      'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:?     Sequence
 0:14      move second child to first child (temp 4-component vector of float)
-0:14        'out1' (layout(location=1 ) out 4-component vector of float)
-0:14        'input' (layout(location=0 ) in 4-component vector of float)
+0:14        'out1' (out 4-component vector of float)
+0:14        'input' (in 4-component vector of float)
 0:15      move second child to first child (temp 2-component vector of float)
-0:?         'v' (layout(location=2 ) out 2-component vector of float)
+0:15        v: direct index for structure (temp 2-component vector of float)
+0:15          'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:15          Constant:
+0:15            0 (const int)
 0:15        Constant:
 0:15          2.000000
 0:15          2.000000
 0:16      move second child to first child (temp 2-component vector of int)
-0:?         'i' (layout(location=3 ) out 2-component vector of int)
+0:16        i: direct index for structure (temp 2-component vector of int)
+0:16          'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:16          Constant:
+0:16            1 (const int)
 0:16        Constant:
 0:16          3 (const int)
 0:16          3 (const int)
@@ -151,27 +188,52 @@ gl_FragCoord origin is upper left
 0:19        Constant:
 0:19          13 (const int)
 0:19          13 (const int)
-0:20      Comma (temp void)
-0:20        Function Call: fun(struct-OutParam-vf2-vi21; (temp void)
-0:20          'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20        Sequence
-0:20          move second child to first child (temp 2-component vector of float)
-0:?             'v' (layout(location=4 ) out 2-component vector of float)
-0:20            v: direct index for structure (temp 2-component vector of float)
-0:20              'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child (temp 2-component vector of int)
-0:?             'i' (layout(location=5 ) out 2-component vector of int)
-0:20            i: direct index for structure (temp 2-component vector of int)
-0:20              'tempArg' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:20              Constant:
-0:20                1 (const int)
-0:22      Sequence
-0:22        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:22          'out1' (layout(location=1 ) out 4-component vector of float)
-0:22        Branch: Return
+0:20      Function Call: fun(struct-OutParam-vf2-vi21; (temp void)
+0:20        'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:22      Branch: Return with expression
+0:22        'out1' (out 4-component vector of float)
+0:13  Function Definition: PixelShaderFunction( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:13        Function Call: @PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
+0:?           'out1' (temp 4-component vector of float)
+0:?           'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:?           'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13      move second child to first child (temp 4-component vector of float)
+0:?         'out1' (layout(location=1 ) out 4-component vector of float)
+0:?         'out1' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:?           'v' (layout(location=2 ) out 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 2-component vector of int)
+0:?           'i' (layout(location=3 ) out 2-component vector of int)
+0:13          i: direct index for structure (temp 2-component vector of int)
+0:?             'out2' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              1 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of float)
+0:?           'v' (layout(location=4 ) out 2-component vector of float)
+0:13          v: direct index for structure (temp 2-component vector of float)
+0:?             'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp 2-component vector of int)
+0:?           'i' (layout(location=5 ) out 2-component vector of int)
+0:13          i: direct index for structure (temp 2-component vector of int)
+0:?             'out3' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:13            Constant:
+0:13              1 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -183,12 +245,12 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 60
+// Id's are bound by 89
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 28 30 33 37 51 54 57
+                              EntryPoint Fragment 4  "PixelShaderFunction" 57 60 73 76 80 83 86
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 10  "OutParam"
@@ -196,23 +258,35 @@ gl_FragCoord origin is upper left
                               MemberName 10(OutParam) 1  "i"
                               Name 14  "fun(struct-OutParam-vf2-vi21;"
                               Name 13  "op"
-                              Name 28  "out1"
-                              Name 30  "input"
-                              Name 33  "v"
-                              Name 37  "i"
-                              Name 40  "local"
-                              Name 47  "tempArg"
-                              Name 48  "param"
-                              Name 51  "v"
-                              Name 54  "i"
-                              Name 57  "@entryPointOutput"
-                              Decorate 28(out1) Location 1
-                              Decorate 30(input) Location 0
-                              Decorate 33(v) Location 2
-                              Decorate 37(i) Location 3
-                              Decorate 51(v) Location 4
-                              Decorate 54(i) Location 5
-                              Decorate 57(@entryPointOutput) Location 0
+                              Name 23  "@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;"
+                              Name 19  "input"
+                              Name 20  "out1"
+                              Name 21  "out2"
+                              Name 22  "out3"
+                              Name 42  "local"
+                              Name 49  "param"
+                              Name 55  "input"
+                              Name 57  "input"
+                              Name 60  "@entryPointOutput"
+                              Name 61  "out1"
+                              Name 62  "out2"
+                              Name 63  "out3"
+                              Name 64  "param"
+                              Name 66  "param"
+                              Name 67  "param"
+                              Name 68  "param"
+                              Name 73  "out1"
+                              Name 76  "v"
+                              Name 80  "i"
+                              Name 83  "v"
+                              Name 86  "i"
+                              Decorate 57(input) Location 0
+                              Decorate 60(@entryPointOutput) Location 0
+                              Decorate 73(out1) Location 1
+                              Decorate 76(v) Location 2
+                              Decorate 80(i) Location 3
+                              Decorate 83(v) Location 4
+                              Decorate 86(i) Location 5
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -222,66 +296,104 @@ gl_FragCoord origin is upper left
     10(OutParam):             TypeStruct 7(fvec2) 9(ivec2)
               11:             TypePointer Function 10(OutParam)
               12:             TypeFunction 2 11(ptr)
-              16:      8(int) Constant 0
-              17:    6(float) Constant 1053609165
-              18:    7(fvec2) ConstantComposite 17 17
-              19:             TypePointer Function 7(fvec2)
-              21:      8(int) Constant 1
-              22:      8(int) Constant 7
-              23:    9(ivec2) ConstantComposite 22 22
-              24:             TypePointer Function 9(ivec2)
-              26:             TypeVector 6(float) 4
-              27:             TypePointer Output 26(fvec4)
-        28(out1):     27(ptr) Variable Output
-              29:             TypePointer Input 26(fvec4)
-       30(input):     29(ptr) Variable Input
-              32:             TypePointer Output 7(fvec2)
-           33(v):     32(ptr) Variable Output
-              34:    6(float) Constant 1073741824
-              35:    7(fvec2) ConstantComposite 34 34
-              36:             TypePointer Output 9(ivec2)
-           37(i):     36(ptr) Variable Output
-              38:      8(int) Constant 3
-              39:    9(ivec2) ConstantComposite 38 38
-              41:    6(float) Constant 1094713344
-              42:    7(fvec2) ConstantComposite 41 41
-              44:      8(int) Constant 13
-              45:    9(ivec2) ConstantComposite 44 44
-           51(v):     32(ptr) Variable Output
-           54(i):     36(ptr) Variable Output
-57(@entryPointOutput):     27(ptr) Variable Output
+              16:             TypeVector 6(float) 4
+              17:             TypePointer Function 16(fvec4)
+              18:             TypeFunction 16(fvec4) 17(ptr) 17(ptr) 11(ptr) 11(ptr)
+              25:      8(int) Constant 0
+              26:    6(float) Constant 1053609165
+              27:    7(fvec2) ConstantComposite 26 26
+              28:             TypePointer Function 7(fvec2)
+              30:      8(int) Constant 1
+              31:      8(int) Constant 7
+              32:    9(ivec2) ConstantComposite 31 31
+              33:             TypePointer Function 9(ivec2)
+              36:    6(float) Constant 1073741824
+              37:    7(fvec2) ConstantComposite 36 36
+              39:      8(int) Constant 3
+              40:    9(ivec2) ConstantComposite 39 39
+              43:    6(float) Constant 1094713344
+              44:    7(fvec2) ConstantComposite 43 43
+              46:      8(int) Constant 13
+              47:    9(ivec2) ConstantComposite 46 46
+              56:             TypePointer Input 16(fvec4)
+       57(input):     56(ptr) Variable Input
+              59:             TypePointer Output 16(fvec4)
+60(@entryPointOutput):     59(ptr) Variable Output
+        73(out1):     59(ptr) Variable Output
+              75:             TypePointer Output 7(fvec2)
+           76(v):     75(ptr) Variable Output
+              79:             TypePointer Output 9(ivec2)
+           80(i):     79(ptr) Variable Output
+           83(v):     75(ptr) Variable Output
+           86(i):     79(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       40(local):     11(ptr) Variable Function
-     47(tempArg):     11(ptr) Variable Function
-       48(param):     11(ptr) Variable Function
-              31:   26(fvec4) Load 30(input)
-                              Store 28(out1) 31
-                              Store 33(v) 35
-                              Store 37(i) 39
-              43:     19(ptr) AccessChain 40(local) 16
-                              Store 43 42
-              46:     24(ptr) AccessChain 40(local) 21
-                              Store 46 45
-              49:           2 FunctionCall 14(fun(struct-OutParam-vf2-vi21;) 48(param)
-              50:10(OutParam) Load 48(param)
-                              Store 47(tempArg) 50
-              52:     19(ptr) AccessChain 47(tempArg) 16
-              53:    7(fvec2) Load 52
-                              Store 51(v) 53
-              55:     24(ptr) AccessChain 47(tempArg) 21
-              56:    9(ivec2) Load 55
-                              Store 54(i) 56
-              58:   26(fvec4) Load 28(out1)
-                              Store 57(@entryPointOutput) 58
+       55(input):     17(ptr) Variable Function
+        61(out1):     17(ptr) Variable Function
+        62(out2):     11(ptr) Variable Function
+        63(out3):     11(ptr) Variable Function
+       64(param):     17(ptr) Variable Function
+       66(param):     17(ptr) Variable Function
+       67(param):     11(ptr) Variable Function
+       68(param):     11(ptr) Variable Function
+              58:   16(fvec4) Load 57(input)
+                              Store 55(input) 58
+              65:   16(fvec4) Load 55(input)
+                              Store 64(param) 65
+              69:   16(fvec4) FunctionCall 23(@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;) 64(param) 66(param) 67(param) 68(param)
+              70:   16(fvec4) Load 66(param)
+                              Store 61(out1) 70
+              71:10(OutParam) Load 67(param)
+                              Store 62(out2) 71
+              72:10(OutParam) Load 68(param)
+                              Store 63(out3) 72
+                              Store 60(@entryPointOutput) 69
+              74:   16(fvec4) Load 61(out1)
+                              Store 73(out1) 74
+              77:     28(ptr) AccessChain 62(out2) 25
+              78:    7(fvec2) Load 77
+                              Store 76(v) 78
+              81:     33(ptr) AccessChain 62(out2) 30
+              82:    9(ivec2) Load 81
+                              Store 80(i) 82
+              84:     28(ptr) AccessChain 63(out3) 25
+              85:    7(fvec2) Load 84
+                              Store 83(v) 85
+              87:     33(ptr) AccessChain 63(out3) 30
+              88:    9(ivec2) Load 87
+                              Store 86(i) 88
                               Return
                               FunctionEnd
 14(fun(struct-OutParam-vf2-vi21;):           2 Function None 12
           13(op):     11(ptr) FunctionParameter
               15:             Label
-              20:     19(ptr) AccessChain 13(op) 16
-                              Store 20 18
-              25:     24(ptr) AccessChain 13(op) 21
-                              Store 25 23
+              29:     28(ptr) AccessChain 13(op) 25
+                              Store 29 27
+              34:     33(ptr) AccessChain 13(op) 30
+                              Store 34 32
                               Return
                               FunctionEnd
+23(@PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21;):   16(fvec4) Function None 18
+       19(input):     17(ptr) FunctionParameter
+        20(out1):     17(ptr) FunctionParameter
+        21(out2):     11(ptr) FunctionParameter
+        22(out3):     11(ptr) FunctionParameter
+              24:             Label
+       42(local):     11(ptr) Variable Function
+       49(param):     11(ptr) Variable Function
+              35:   16(fvec4) Load 19(input)
+                              Store 20(out1) 35
+              38:     28(ptr) AccessChain 21(out2) 25
+                              Store 38 37
+              41:     33(ptr) AccessChain 21(out2) 30
+                              Store 41 40
+              45:     28(ptr) AccessChain 42(local) 25
+                              Store 45 44
+              48:     33(ptr) AccessChain 42(local) 30
+                              Store 48 47
+              50:           2 FunctionCall 14(fun(struct-OutParam-vf2-vi21;) 49(param)
+              51:10(OutParam) Load 49(param)
+                              Store 22(out3) 51
+              52:   16(fvec4) Load 20(out1)
+                              ReturnValue 52
+                              FunctionEnd

+ 61 - 48
3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out

@@ -4,7 +4,7 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:7  Function Definition: not_the_entry_point( (temp void)
 0:7    Function Parameters: 
-0:11  Function Definition: main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11  Function Definition: @main_in_spv( (temp structure{temp 4-component vector of float Color})
 0:11    Function Parameters: 
 0:?     Sequence
 0:13      move second child to first child (temp 4-component vector of float)
@@ -17,15 +17,18 @@ gl_FragCoord origin is upper left
 0:13          0.000000
 0:13          0.000000
 0:13          0.000000
-0:14      Sequence
-0:14        Sequence
-0:14          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:14            Color: direct index for structure (temp 4-component vector of float)
-0:14              'psout' (temp structure{temp 4-component vector of float Color})
-0:14              Constant:
-0:14                0 (const int)
-0:14        Branch: Return
+0:14      Branch: Return with expression
+0:14        'psout' (temp structure{temp 4-component vector of float Color})
+0:11  Function Definition: main_in_spv( (temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:11          Color: direct index for structure (temp 4-component vector of float)
+0:11            Function Call: @main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11            Constant:
+0:11              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int also_not_the_entry_point})
@@ -39,7 +42,7 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:7  Function Definition: not_the_entry_point( (temp void)
 0:7    Function Parameters: 
-0:11  Function Definition: main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11  Function Definition: @main_in_spv( (temp structure{temp 4-component vector of float Color})
 0:11    Function Parameters: 
 0:?     Sequence
 0:13      move second child to first child (temp 4-component vector of float)
@@ -52,68 +55,78 @@ gl_FragCoord origin is upper left
 0:13          0.000000
 0:13          0.000000
 0:13          0.000000
-0:14      Sequence
-0:14        Sequence
-0:14          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:14            Color: direct index for structure (temp 4-component vector of float)
-0:14              'psout' (temp structure{temp 4-component vector of float Color})
-0:14              Constant:
-0:14                0 (const int)
-0:14        Branch: Return
+0:14      Branch: Return with expression
+0:14        'psout' (temp structure{temp 4-component vector of float Color})
+0:11  Function Definition: main_in_spv( (temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:11          Color: direct index for structure (temp 4-component vector of float)
+0:11            Function Call: @main_in_spv( (temp structure{temp 4-component vector of float Color})
+0:11            Constant:
+0:11              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int also_not_the_entry_point})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 27
+// Id's are bound by 32
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main_in_spv" 20
+                              EntryPoint Fragment 4  "main_in_spv" 26
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main_in_spv"
                               Name 6  "not_the_entry_point("
                               Name 10  "PS_OUTPUT"
                               MemberName 10(PS_OUTPUT) 0  "Color"
-                              Name 12  "psout"
-                              Name 20  "Color"
-                              Name 24  "$Global"
-                              MemberName 24($Global) 0  "also_not_the_entry_point"
-                              Name 26  ""
-                              Decorate 20(Color) Location 0
-                              MemberDecorate 24($Global) 0 Offset 0
-                              Decorate 24($Global) Block
-                              Decorate 26 DescriptorSet 0
+                              Name 12  "@main_in_spv("
+                              Name 15  "psout"
+                              Name 26  "Color"
+                              Name 29  "$Global"
+                              MemberName 29($Global) 0  "also_not_the_entry_point"
+                              Name 31  ""
+                              Decorate 26(Color) Location 0
+                              MemberDecorate 29($Global) 0 Offset 0
+                              Decorate 29($Global) Block
+                              Decorate 31 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
                9:             TypeVector 8(float) 4
    10(PS_OUTPUT):             TypeStruct 9(fvec4)
-              11:             TypePointer Function 10(PS_OUTPUT)
-              13:             TypeInt 32 1
-              14:     13(int) Constant 0
-              15:    8(float) Constant 0
-              16:    9(fvec4) ConstantComposite 15 15 15 15
-              17:             TypePointer Function 9(fvec4)
-              19:             TypePointer Output 9(fvec4)
-       20(Color):     19(ptr) Variable Output
-     24($Global):             TypeStruct 13(int)
-              25:             TypePointer Uniform 24($Global)
-              26:     25(ptr) Variable Uniform
+              11:             TypeFunction 10(PS_OUTPUT)
+              14:             TypePointer Function 10(PS_OUTPUT)
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:    8(float) Constant 0
+              19:    9(fvec4) ConstantComposite 18 18 18 18
+              20:             TypePointer Function 9(fvec4)
+              25:             TypePointer Output 9(fvec4)
+       26(Color):     25(ptr) Variable Output
+     29($Global):             TypeStruct 16(int)
+              30:             TypePointer Uniform 29($Global)
+              31:     30(ptr) Variable Uniform
   4(main_in_spv):           2 Function None 3
                5:             Label
-       12(psout):     11(ptr) Variable Function
-              18:     17(ptr) AccessChain 12(psout) 14
-                              Store 18 16
-              21:     17(ptr) AccessChain 12(psout) 14
-              22:    9(fvec4) Load 21
-                              Store 20(Color) 22
+              27:10(PS_OUTPUT) FunctionCall 12(@main_in_spv()
+              28:    9(fvec4) CompositeExtract 27 0
+                              Store 26(Color) 28
                               Return
                               FunctionEnd
 6(not_the_entry_point():           2 Function None 3
                7:             Label
                               Return
                               FunctionEnd
+12(@main_in_spv():10(PS_OUTPUT) Function None 11
+              13:             Label
+       15(psout):     14(ptr) Variable Function
+              21:     20(ptr) AccessChain 15(psout) 17
+                              Store 21 19
+              22:10(PS_OUTPUT) Load 15(psout)
+                              ReturnValue 22
+                              FunctionEnd

+ 121 - 109
3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out

@@ -14,39 +14,42 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:16  Function Definition: main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16  Function Definition: @main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
 0:16    Function Parameters: 
 0:?     Sequence
-0:17      Sequence
-0:17        Sequence
-0:17          move second child to first child (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17            Function Call: Func1( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:17            color: direct index for structure (temp 4-component vector of float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                0 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member1' (layout(location=1 ) out float)
-0:17            other_struct_member1: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                1 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member2' (layout(location=2 ) out float)
-0:17            other_struct_member2: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                2 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member3' (layout(location=3 ) out float)
-0:17            other_struct_member3: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                3 (const int)
-0:17        Branch: Return
+0:17      Branch: Return with expression
+0:17        Function Call: Func1( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16  Function Definition: main( (temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16          'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16          Function Call: @main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:16          color: direct index for structure (temp 4-component vector of float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              0 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member1' (layout(location=1 ) out float)
+0:16          other_struct_member1: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              1 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member2' (layout(location=2 ) out float)
+0:16          other_struct_member2: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              2 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member3' (layout(location=3 ) out float)
+0:16          other_struct_member3: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              3 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'other_struct_member1' (layout(location=1 ) out float)
@@ -72,39 +75,42 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:16  Function Definition: main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16  Function Definition: @main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16    Function Parameters: 
+0:?     Sequence
+0:17      Branch: Return with expression
+0:17        Function Call: Func1( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16  Function Definition: main( (temp void)
 0:16    Function Parameters: 
 0:?     Sequence
-0:17      Sequence
-0:17        Sequence
-0:17          move second child to first child (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17            Function Call: Func1( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:17            color: direct index for structure (temp 4-component vector of float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                0 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member1' (layout(location=1 ) out float)
-0:17            other_struct_member1: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                1 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member2' (layout(location=2 ) out float)
-0:17            other_struct_member2: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                2 (const int)
-0:17          move second child to first child (temp float)
-0:?             'other_struct_member3' (layout(location=3 ) out float)
-0:17            other_struct_member3: direct index for structure (temp float)
-0:17              'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
-0:17              Constant:
-0:17                3 (const int)
-0:17        Branch: Return
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16          'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16          Function Call: @main( (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:16          color: direct index for structure (temp 4-component vector of float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              0 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member1' (layout(location=1 ) out float)
+0:16          other_struct_member1: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              1 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member2' (layout(location=2 ) out float)
+0:16          other_struct_member2: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              2 (const int)
+0:16        move second child to first child (temp float)
+0:?           'other_struct_member3' (layout(location=3 ) out float)
+0:16          other_struct_member3: direct index for structure (temp float)
+0:16            'flattenTemp' (temp structure{temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
+0:16            Constant:
+0:16              3 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'other_struct_member1' (layout(location=1 ) out float)
@@ -113,12 +119,12 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 45
+// Id's are bound by 49
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 24 31 36 40
+                              EntryPoint Fragment 4  "main" 29 36 41 45
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
@@ -127,61 +133,67 @@ gl_FragCoord origin is upper left
                               MemberName 8(PS_OUTPUT) 2  "other_struct_member2"
                               MemberName 8(PS_OUTPUT) 3  "other_struct_member3"
                               Name 10  "Func1("
-                              Name 21  "flattenTemp"
-                              Name 24  "color"
-                              Name 31  "other_struct_member1"
-                              Name 36  "other_struct_member2"
-                              Name 40  "other_struct_member3"
-                              Decorate 24(color) Location 0
-                              Decorate 31(other_struct_member1) Location 1
-                              Decorate 36(other_struct_member2) Location 2
-                              Decorate 40(other_struct_member3) Location 3
+                              Name 12  "@main("
+                              Name 26  "flattenTemp"
+                              Name 29  "color"
+                              Name 36  "other_struct_member1"
+                              Name 41  "other_struct_member2"
+                              Name 45  "other_struct_member3"
+                              Decorate 29(color) Location 0
+                              Decorate 36(other_struct_member1) Location 1
+                              Decorate 41(other_struct_member2) Location 2
+                              Decorate 45(other_struct_member3) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float) 6(float) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
-              12:    6(float) Constant 1065353216
-              13:    7(fvec4) ConstantComposite 12 12 12 12
-              14:    6(float) Constant 1073741824
-              15:    6(float) Constant 1077936128
-              16:    6(float) Constant 1082130432
-              17:8(PS_OUTPUT) ConstantComposite 13 14 15 16
-              20:             TypePointer Function 8(PS_OUTPUT)
-              23:             TypePointer Output 7(fvec4)
-       24(color):     23(ptr) Variable Output
-              25:             TypeInt 32 1
-              26:     25(int) Constant 0
-              27:             TypePointer Function 7(fvec4)
-              30:             TypePointer Output 6(float)
-31(other_struct_member1):     30(ptr) Variable Output
-              32:     25(int) Constant 1
-              33:             TypePointer Function 6(float)
-36(other_struct_member2):     30(ptr) Variable Output
-              37:     25(int) Constant 2
-40(other_struct_member3):     30(ptr) Variable Output
-              41:     25(int) Constant 3
+              14:    6(float) Constant 1065353216
+              15:    7(fvec4) ConstantComposite 14 14 14 14
+              16:    6(float) Constant 1073741824
+              17:    6(float) Constant 1077936128
+              18:    6(float) Constant 1082130432
+              19:8(PS_OUTPUT) ConstantComposite 15 16 17 18
+              25:             TypePointer Function 8(PS_OUTPUT)
+              28:             TypePointer Output 7(fvec4)
+       29(color):     28(ptr) Variable Output
+              30:             TypeInt 32 1
+              31:     30(int) Constant 0
+              32:             TypePointer Function 7(fvec4)
+              35:             TypePointer Output 6(float)
+36(other_struct_member1):     35(ptr) Variable Output
+              37:     30(int) Constant 1
+              38:             TypePointer Function 6(float)
+41(other_struct_member2):     35(ptr) Variable Output
+              42:     30(int) Constant 2
+45(other_struct_member3):     35(ptr) Variable Output
+              46:     30(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
- 21(flattenTemp):     20(ptr) Variable Function
-              22:8(PS_OUTPUT) FunctionCall 10(Func1()
-                              Store 21(flattenTemp) 22
-              28:     27(ptr) AccessChain 21(flattenTemp) 26
-              29:    7(fvec4) Load 28
-                              Store 24(color) 29
-              34:     33(ptr) AccessChain 21(flattenTemp) 32
-              35:    6(float) Load 34
-                              Store 31(other_struct_member1) 35
-              38:     33(ptr) AccessChain 21(flattenTemp) 37
-              39:    6(float) Load 38
-                              Store 36(other_struct_member2) 39
-              42:     33(ptr) AccessChain 21(flattenTemp) 41
-              43:    6(float) Load 42
-                              Store 40(other_struct_member3) 43
+ 26(flattenTemp):     25(ptr) Variable Function
+              27:8(PS_OUTPUT) FunctionCall 12(@main()
+                              Store 26(flattenTemp) 27
+              33:     32(ptr) AccessChain 26(flattenTemp) 31
+              34:    7(fvec4) Load 33
+                              Store 29(color) 34
+              39:     38(ptr) AccessChain 26(flattenTemp) 37
+              40:    6(float) Load 39
+                              Store 36(other_struct_member1) 40
+              43:     38(ptr) AccessChain 26(flattenTemp) 42
+              44:    6(float) Load 43
+                              Store 41(other_struct_member2) 44
+              47:     38(ptr) AccessChain 26(flattenTemp) 46
+              48:    6(float) Load 47
+                              Store 45(other_struct_member3) 48
                               Return
                               FunctionEnd
       10(Func1():8(PS_OUTPUT) Function None 9
               11:             Label
-                              ReturnValue 17
+                              ReturnValue 19
+                              FunctionEnd
+      12(@main():8(PS_OUTPUT) Function None 9
+              13:             Label
+              22:8(PS_OUTPUT) FunctionCall 10(Func1()
+                              ReturnValue 22
                               FunctionEnd

+ 4 - 5
3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out

@@ -13,11 +13,11 @@ gl_FragCoord origin is upper left
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
 0:10          AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
-0:10            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:10            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 0:10            Constant:
 0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 
 
 Linked fragment stage:
@@ -35,11 +35,11 @@ gl_FragCoord origin is upper left
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
 0:10          AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
-0:10            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:10            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 0:10            Constant:
 0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -62,7 +62,6 @@ gl_FragCoord origin is upper left
                               Name 17  ""
                               MemberDecorate 15($Global) 0 Offset 0
                               MemberDecorate 15($Global) 1 Offset 16
-                              MemberDecorate 15($Global) 1 BuiltIn FrontFacing
                               MemberDecorate 15($Global) 2 Offset 20
                               MemberDecorate 15($Global) 3 Offset 32
                               MemberDecorate 15($Global) 4 Offset 48

+ 235 - 210
3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out

@@ -2,9 +2,9 @@ hlsl.forLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:?       Sequence
 0:3        Loop with condition tested first
@@ -12,7 +12,7 @@ gl_FragCoord origin is upper left
 0:3          No loop body
 0:4      Sequence
 0:4        Pre-Increment (temp 4-component vector of float)
-0:4          'input' (layout(location=0 ) in 4-component vector of float)
+0:4          'input' (in 4-component vector of float)
 0:4        Loop with condition tested first
 0:4          No loop condition
 0:4          No loop body
@@ -21,44 +21,38 @@ gl_FragCoord origin is upper left
 0:5          Loop Condition
 0:5          any (temp bool)
 0:5            NotEqual (temp 4-component vector of bool)
-0:5              'input' (layout(location=0 ) in 4-component vector of float)
-0:5              'input' (layout(location=0 ) in 4-component vector of float)
+0:5              'input' (in 4-component vector of float)
+0:5              'input' (in 4-component vector of float)
 0:5          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
 0:6          any (temp bool)
 0:6            NotEqual (temp 4-component vector of bool)
-0:6              'input' (layout(location=0 ) in 4-component vector of float)
-0:6              'input' (layout(location=0 ) in 4-component vector of float)
+0:6              'input' (in 4-component vector of float)
+0:6              'input' (in 4-component vector of float)
 0:6          Loop Body
 0:?           Sequence
-0:6            Sequence
-0:6              move second child to first child (temp 4-component vector of float)
-0:?                 '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:6                Negate value (temp 4-component vector of float)
-0:6                  'input' (layout(location=0 ) in 4-component vector of float)
-0:6              Branch: Return
+0:6            Branch: Return with expression
+0:6              Negate value (temp 4-component vector of float)
+0:6                'input' (in 4-component vector of float)
 0:7      Sequence
 0:7        Pre-Decrement (temp 4-component vector of float)
-0:7          'input' (layout(location=0 ) in 4-component vector of float)
+0:7          'input' (in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
 0:7          any (temp bool)
 0:7            NotEqual (temp 4-component vector of bool)
-0:7              'input' (layout(location=0 ) in 4-component vector of float)
-0:7              'input' (layout(location=0 ) in 4-component vector of float)
+0:7              'input' (in 4-component vector of float)
+0:7              'input' (in 4-component vector of float)
 0:7          Loop Body
 0:?           Sequence
-0:7            Sequence
-0:7              move second child to first child (temp 4-component vector of float)
-0:?                 '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:7                Negate value (temp 4-component vector of float)
-0:7                  'input' (layout(location=0 ) in 4-component vector of float)
-0:7              Branch: Return
+0:7            Branch: Return with expression
+0:7              Negate value (temp 4-component vector of float)
+0:7                'input' (in 4-component vector of float)
 0:7          Loop Terminal Expression
 0:7          add second child into first child (temp 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
+0:7            'input' (in 4-component vector of float)
 0:7            Constant:
 0:7              2.000000
 0:?       Sequence
@@ -69,7 +63,7 @@ gl_FragCoord origin is upper left
 0:8            Condition
 0:8            Compare Greater Than (temp bool)
 0:8              direct index (temp float)
-0:8                'input' (layout(location=0 ) in 4-component vector of float)
+0:8                'input' (in 4-component vector of float)
 0:8                Constant:
 0:8                  0 (const int)
 0:8              Constant:
@@ -84,7 +78,7 @@ gl_FragCoord origin is upper left
 0:9            Condition
 0:9            Compare Greater Than (temp bool)
 0:9              direct index (temp float)
-0:9                'input' (layout(location=0 ) in 4-component vector of float)
+0:9                'input' (in 4-component vector of float)
 0:9                Constant:
 0:9                  0 (const int)
 0:9              Constant:
@@ -116,6 +110,16 @@ gl_FragCoord origin is upper left
 0:11            'ii' (temp int)
 0:12      Pre-Decrement (temp float)
 0:12        'ii' (temp float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -127,9 +131,9 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:?       Sequence
 0:3        Loop with condition tested first
@@ -137,7 +141,7 @@ gl_FragCoord origin is upper left
 0:3          No loop body
 0:4      Sequence
 0:4        Pre-Increment (temp 4-component vector of float)
-0:4          'input' (layout(location=0 ) in 4-component vector of float)
+0:4          'input' (in 4-component vector of float)
 0:4        Loop with condition tested first
 0:4          No loop condition
 0:4          No loop body
@@ -146,44 +150,38 @@ gl_FragCoord origin is upper left
 0:5          Loop Condition
 0:5          any (temp bool)
 0:5            NotEqual (temp 4-component vector of bool)
-0:5              'input' (layout(location=0 ) in 4-component vector of float)
-0:5              'input' (layout(location=0 ) in 4-component vector of float)
+0:5              'input' (in 4-component vector of float)
+0:5              'input' (in 4-component vector of float)
 0:5          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
 0:6          any (temp bool)
 0:6            NotEqual (temp 4-component vector of bool)
-0:6              'input' (layout(location=0 ) in 4-component vector of float)
-0:6              'input' (layout(location=0 ) in 4-component vector of float)
+0:6              'input' (in 4-component vector of float)
+0:6              'input' (in 4-component vector of float)
 0:6          Loop Body
 0:?           Sequence
-0:6            Sequence
-0:6              move second child to first child (temp 4-component vector of float)
-0:?                 '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:6                Negate value (temp 4-component vector of float)
-0:6                  'input' (layout(location=0 ) in 4-component vector of float)
-0:6              Branch: Return
+0:6            Branch: Return with expression
+0:6              Negate value (temp 4-component vector of float)
+0:6                'input' (in 4-component vector of float)
 0:7      Sequence
 0:7        Pre-Decrement (temp 4-component vector of float)
-0:7          'input' (layout(location=0 ) in 4-component vector of float)
+0:7          'input' (in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
 0:7          any (temp bool)
 0:7            NotEqual (temp 4-component vector of bool)
-0:7              'input' (layout(location=0 ) in 4-component vector of float)
-0:7              'input' (layout(location=0 ) in 4-component vector of float)
+0:7              'input' (in 4-component vector of float)
+0:7              'input' (in 4-component vector of float)
 0:7          Loop Body
 0:?           Sequence
-0:7            Sequence
-0:7              move second child to first child (temp 4-component vector of float)
-0:?                 '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:7                Negate value (temp 4-component vector of float)
-0:7                  'input' (layout(location=0 ) in 4-component vector of float)
-0:7              Branch: Return
+0:7            Branch: Return with expression
+0:7              Negate value (temp 4-component vector of float)
+0:7                'input' (in 4-component vector of float)
 0:7          Loop Terminal Expression
 0:7          add second child into first child (temp 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
+0:7            'input' (in 4-component vector of float)
 0:7            Constant:
 0:7              2.000000
 0:?       Sequence
@@ -194,7 +192,7 @@ gl_FragCoord origin is upper left
 0:8            Condition
 0:8            Compare Greater Than (temp bool)
 0:8              direct index (temp float)
-0:8                'input' (layout(location=0 ) in 4-component vector of float)
+0:8                'input' (in 4-component vector of float)
 0:8                Constant:
 0:8                  0 (const int)
 0:8              Constant:
@@ -209,7 +207,7 @@ gl_FragCoord origin is upper left
 0:9            Condition
 0:9            Compare Greater Than (temp bool)
 0:9              direct index (temp float)
-0:9                'input' (layout(location=0 ) in 4-component vector of float)
+0:9                'input' (in 4-component vector of float)
 0:9                Constant:
 0:9                  0 (const int)
 0:9              Constant:
@@ -241,193 +239,220 @@ gl_FragCoord origin is upper left
 0:11            'ii' (temp int)
 0:12      Pre-Decrement (temp float)
 0:12        'ii' (temp float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 114
+// Id's are bound by 124
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 13 43
+                              EntryPoint Fragment 4  "PixelShaderFunction" 117 120
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 13  "input"
-                              Name 43  "@entryPointOutput"
-                              Name 91  "ii"
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 92  "ii"
                               Name 111  "ii"
-                              Decorate 13(input) Location 0
-                              Decorate 43(@entryPointOutput) Location 0
+                              Name 115  "input"
+                              Name 117  "input"
+                              Name 120  "@entryPointOutput"
+                              Name 121  "param"
+                              Decorate 117(input) Location 0
+                              Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-              10:             TypeFloat 32
-              11:             TypeVector 10(float) 4
-              12:             TypePointer Input 11(fvec4)
-       13(input):     12(ptr) Variable Input
-              15:   10(float) Constant 1065353216
-              29:             TypeBool
-              30:             TypeVector 29(bool) 4
-              42:             TypePointer Output 11(fvec4)
-43(@entryPointOutput):     42(ptr) Variable Output
-              62:   10(float) Constant 1073741824
-              70:             TypeInt 32 0
-              71:     70(int) Constant 0
-              72:             TypePointer Input 10(float)
-              89:             TypeInt 32 1
-              90:             TypePointer Function 89(int)
-              92:     89(int) Constant 4294967295
-              99:     89(int) Constant 3
-             102:     89(int) Constant 2
-             108:     89(int) Constant 1
-             110:             TypePointer Function 10(float)
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              18:    6(float) Constant 1065353216
+              32:             TypeBool
+              33:             TypeVector 32(bool) 4
+              63:    6(float) Constant 1073741824
+              71:             TypeInt 32 0
+              72:     71(int) Constant 0
+              73:             TypePointer Function 6(float)
+              90:             TypeInt 32 1
+              91:             TypePointer Function 90(int)
+              93:     90(int) Constant 4294967295
+             100:     90(int) Constant 3
+             103:     90(int) Constant 2
+             109:     90(int) Constant 1
+             116:             TypePointer Input 7(fvec4)
+      117(input):    116(ptr) Variable Input
+             119:             TypePointer Output 7(fvec4)
+120(@entryPointOutput):    119(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          91(ii):     90(ptr) Variable Function
-         111(ii):    110(ptr) Variable Function
-                              Branch 6
-               6:             Label
-                              LoopMerge 8 9 None
-                              Branch 7
-               7:             Label
-                              Branch 9
-               9:             Label
-                              Branch 6
-               8:             Label
-              14:   11(fvec4) Load 13(input)
-              16:   11(fvec4) CompositeConstruct 15 15 15 15
-              17:   11(fvec4) FAdd 14 16
-                              Store 13(input) 17
-                              Branch 18
-              18:             Label
-                              LoopMerge 20 21 None
-                              Branch 19
-              19:             Label
+      115(input):      8(ptr) Variable Function
+      121(param):      8(ptr) Variable Function
+             118:    7(fvec4) Load 117(input)
+                              Store 115(input) 118
+             122:    7(fvec4) Load 115(input)
+                              Store 121(param) 122
+             123:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 121(param)
+                              Store 120(@entryPointOutput) 123
+                              Return
+                              FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+          92(ii):     91(ptr) Variable Function
+         111(ii):     73(ptr) Variable Function
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 14
+              14:             Label
+                              Branch 16
+              16:             Label
+                              Branch 13
+              15:             Label
+              17:    7(fvec4) Load 10(input)
+              19:    7(fvec4) CompositeConstruct 18 18 18 18
+              20:    7(fvec4) FAdd 17 19
+                              Store 10(input) 20
                               Branch 21
               21:             Label
-                              Branch 18
-              20:             Label
+                              LoopMerge 23 24 None
                               Branch 22
               22:             Label
-                              LoopMerge 24 25 None
-                              Branch 26
-              26:             Label
-              27:   11(fvec4) Load 13(input)
-              28:   11(fvec4) Load 13(input)
-              31:   30(bvec4) FOrdNotEqual 27 28
-              32:    29(bool) Any 31
-                              BranchConditional 32 23 24
-              23:               Label
-                                Branch 25
-              25:               Label
-                                Branch 22
+                              Branch 24
               24:             Label
-                              Branch 33
-              33:             Label
-                              LoopMerge 35 36 None
-                              Branch 37
-              37:             Label
-              38:   11(fvec4) Load 13(input)
-              39:   11(fvec4) Load 13(input)
-              40:   30(bvec4) FOrdNotEqual 38 39
-              41:    29(bool) Any 40
-                              BranchConditional 41 34 35
-              34:               Label
-              44:   11(fvec4)   Load 13(input)
-              45:   11(fvec4)   FNegate 44
-                                Store 43(@entryPointOutput) 45
-                                Return
-              36:               Label
-                                Branch 33
-              35:             Label
-              47:   11(fvec4) Load 13(input)
-              48:   11(fvec4) CompositeConstruct 15 15 15 15
-              49:   11(fvec4) FSub 47 48
-                              Store 13(input) 49
-                              Branch 50
-              50:             Label
-                              LoopMerge 52 53 None
-                              Branch 54
-              54:             Label
-              55:   11(fvec4) Load 13(input)
-              56:   11(fvec4) Load 13(input)
-              57:   30(bvec4) FOrdNotEqual 55 56
-              58:    29(bool) Any 57
-                              BranchConditional 58 51 52
-              51:               Label
-              59:   11(fvec4)   Load 13(input)
-              60:   11(fvec4)   FNegate 59
-                                Store 43(@entryPointOutput) 60
-                                Return
-              53:               Label
-              63:   11(fvec4)   Load 13(input)
-              64:   11(fvec4)   CompositeConstruct 62 62 62 62
-              65:   11(fvec4)   FAdd 63 64
-                                Store 13(input) 65
-                                Branch 50
-              52:             Label
-                              Branch 66
-              66:             Label
-                              LoopMerge 68 69 None
+                              Branch 21
+              23:             Label
+                              Branch 25
+              25:             Label
+                              LoopMerge 27 28 None
+                              Branch 29
+              29:             Label
+              30:    7(fvec4) Load 10(input)
+              31:    7(fvec4) Load 10(input)
+              34:   33(bvec4) FOrdNotEqual 30 31
+              35:    32(bool) Any 34
+                              BranchConditional 35 26 27
+              26:               Label
+                                Branch 28
+              28:               Label
+                                Branch 25
+              27:             Label
+                              Branch 36
+              36:             Label
+                              LoopMerge 38 39 None
+                              Branch 40
+              40:             Label
+              41:    7(fvec4) Load 10(input)
+              42:    7(fvec4) Load 10(input)
+              43:   33(bvec4) FOrdNotEqual 41 42
+              44:    32(bool) Any 43
+                              BranchConditional 44 37 38
+              37:               Label
+              45:    7(fvec4)   Load 10(input)
+              46:    7(fvec4)   FNegate 45
+                                ReturnValue 46
+              39:               Label
+                                Branch 36
+              38:             Label
+              48:    7(fvec4) Load 10(input)
+              49:    7(fvec4) CompositeConstruct 18 18 18 18
+              50:    7(fvec4) FSub 48 49
+                              Store 10(input) 50
+                              Branch 51
+              51:             Label
+                              LoopMerge 53 54 None
+                              Branch 55
+              55:             Label
+              56:    7(fvec4) Load 10(input)
+              57:    7(fvec4) Load 10(input)
+              58:   33(bvec4) FOrdNotEqual 56 57
+              59:    32(bool) Any 58
+                              BranchConditional 59 52 53
+              52:               Label
+              60:    7(fvec4)   Load 10(input)
+              61:    7(fvec4)   FNegate 60
+                                ReturnValue 61
+              54:               Label
+              64:    7(fvec4)   Load 10(input)
+              65:    7(fvec4)   CompositeConstruct 63 63 63 63
+              66:    7(fvec4)   FAdd 64 65
+                                Store 10(input) 66
+                                Branch 51
+              53:             Label
                               Branch 67
               67:             Label
-              73:     72(ptr) AccessChain 13(input) 71
-              74:   10(float) Load 73
-              75:    29(bool) FOrdGreaterThan 74 62
-                              SelectionMerge 77 None
-                              BranchConditional 75 76 77
-              76:               Label
-                                Branch 68
-              77:             Label
-                              Branch 69
-              69:             Label
-                              Branch 66
+                              LoopMerge 69 70 None
+                              Branch 68
               68:             Label
-                              Branch 79
-              79:             Label
-                              LoopMerge 81 82 None
+              74:     73(ptr) AccessChain 10(input) 72
+              75:    6(float) Load 74
+              76:    32(bool) FOrdGreaterThan 75 63
+                              SelectionMerge 78 None
+                              BranchConditional 76 77 78
+              77:               Label
+                                Branch 69
+              78:             Label
+                              Branch 70
+              70:             Label
+                              Branch 67
+              69:             Label
                               Branch 80
               80:             Label
-              83:     72(ptr) AccessChain 13(input) 71
-              84:   10(float) Load 83
-              85:    29(bool) FOrdGreaterThan 84 62
-                              SelectionMerge 87 None
-                              BranchConditional 85 86 87
-              86:               Label
-                                Branch 82
-              87:             Label
-                              Branch 82
-              82:             Label
-                              Branch 79
+                              LoopMerge 82 83 None
+                              Branch 81
               81:             Label
-                              Store 91(ii) 92
-                              Branch 93
-              93:             Label
-                              LoopMerge 95 96 None
-                              Branch 97
-              97:             Label
-              98:     89(int) Load 91(ii)
-             100:    29(bool) SLessThan 98 99
-                              BranchConditional 100 94 95
-              94:               Label
-             101:     89(int)   Load 91(ii)
-             103:    29(bool)   IEqual 101 102
-                                SelectionMerge 105 None
-                                BranchConditional 103 104 105
-             104:                 Label
-                                  Branch 96
-             105:               Label
-                                Branch 96
-              96:               Label
-             107:     89(int)   Load 91(ii)
-             109:     89(int)   IAdd 107 108
-                                Store 91(ii) 109
-                                Branch 93
-              95:             Label
-             112:   10(float) Load 111(ii)
-             113:   10(float) FSub 112 15
+              84:     73(ptr) AccessChain 10(input) 72
+              85:    6(float) Load 84
+              86:    32(bool) FOrdGreaterThan 85 63
+                              SelectionMerge 88 None
+                              BranchConditional 86 87 88
+              87:               Label
+                                Branch 83
+              88:             Label
+                              Branch 83
+              83:             Label
+                              Branch 80
+              82:             Label
+                              Store 92(ii) 93
+                              Branch 94
+              94:             Label
+                              LoopMerge 96 97 None
+                              Branch 98
+              98:             Label
+              99:     90(int) Load 92(ii)
+             101:    32(bool) SLessThan 99 100
+                              BranchConditional 101 95 96
+              95:               Label
+             102:     90(int)   Load 92(ii)
+             104:    32(bool)   IEqual 102 103
+                                SelectionMerge 106 None
+                                BranchConditional 104 105 106
+             105:                 Label
+                                  Branch 97
+             106:               Label
+                                Branch 97
+              97:               Label
+             108:     90(int)   Load 92(ii)
+             110:     90(int)   IAdd 108 109
+                                Store 92(ii) 110
+                                Branch 94
+              96:             Label
+             112:    6(float) Load 111(ii)
+             113:    6(float) FSub 112 18
                               Store 111(ii) 113
-                              Return
+             114:    7(fvec4) Undef
+                              ReturnValue 114
                               FunctionEnd

+ 216 - 193
3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gather.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:29      Sequence
@@ -91,24 +91,28 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:42      Sequence
-0:42        Sequence
-0:42          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:42            Color: direct index for structure (temp 4-component vector of float)
-0:42              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:42              Constant:
-0:42                0 (const int)
-0:42          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:42            Depth: direct index for structure (temp float)
-0:42              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:42              Constant:
-0:42                1 (const int)
-0:42        Branch: Return
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -120,6 +124,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -128,7 +134,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:29      Sequence
@@ -217,24 +223,28 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:42      Sequence
-0:42        Sequence
-0:42          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:42            Color: direct index for structure (temp 4-component vector of float)
-0:42              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:42              Constant:
-0:42                0 (const int)
-0:42          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:42            Depth: direct index for structure (temp float)
-0:42              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:42              Constant:
-0:42                1 (const int)
-0:42        Branch: Return
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -246,181 +256,194 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 117
+// Id's are bound by 124
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 99 103
+                              EntryPoint Fragment 4  "main" 107 111
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval20"
-                              Name 12  "g_tTex2df4a"
-                              Name 16  "g_sSamp"
-                              Name 30  "txval21"
-                              Name 33  "g_tTex2di4a"
-                              Name 45  "txval22"
-                              Name 48  "g_tTex2du4a"
-                              Name 57  "txval40"
-                              Name 60  "g_tTexcdf4a"
-                              Name 67  "txval41"
-                              Name 70  "g_tTexcdi4a"
-                              Name 77  "txval42"
-                              Name 80  "g_tTexcdu4a"
-                              Name 90  "PS_OUTPUT"
-                              MemberName 90(PS_OUTPUT) 0  "Color"
-                              MemberName 90(PS_OUTPUT) 1  "Depth"
-                              Name 92  "psout"
-                              Name 99  "Color"
-                              Name 103  "Depth"
-                              Name 109  "g_tTex1df4a"
-                              Name 110  "g_tTex1df4"
-                              Name 113  "g_tTex1di4a"
-                              Name 116  "g_tTex1du4a"
-                              Decorate 12(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              Decorate 33(g_tTex2di4a) DescriptorSet 0
-                              Decorate 48(g_tTex2du4a) DescriptorSet 0
-                              Decorate 60(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 70(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 80(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 99(Color) Location 0
-                              Decorate 103(Depth) BuiltIn FragDepth
-                              Decorate 109(g_tTex1df4a) DescriptorSet 0
-                              Decorate 109(g_tTex1df4a) Binding 1
-                              Decorate 110(g_tTex1df4) DescriptorSet 0
-                              Decorate 110(g_tTex1df4) Binding 0
-                              Decorate 113(g_tTex1di4a) DescriptorSet 0
-                              Decorate 116(g_tTex1du4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval20"
+                              Name 16  "g_tTex2df4a"
+                              Name 20  "g_sSamp"
+                              Name 34  "txval21"
+                              Name 37  "g_tTex2di4a"
+                              Name 49  "txval22"
+                              Name 52  "g_tTex2du4a"
+                              Name 61  "txval40"
+                              Name 64  "g_tTexcdf4a"
+                              Name 71  "txval41"
+                              Name 74  "g_tTexcdi4a"
+                              Name 81  "txval42"
+                              Name 84  "g_tTexcdu4a"
+                              Name 95  "psout"
+                              Name 104  "flattenTemp"
+                              Name 107  "Color"
+                              Name 111  "Depth"
+                              Name 116  "g_tTex1df4a"
+                              Name 117  "g_tTex1df4"
+                              Name 120  "g_tTex1di4a"
+                              Name 123  "g_tTex1du4a"
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 37(g_tTex2di4a) DescriptorSet 0
+                              Decorate 52(g_tTex2du4a) DescriptorSet 0
+                              Decorate 64(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 84(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 107(Color) Location 0
+                              Decorate 111(Depth) BuiltIn FragDepth
+                              Decorate 116(g_tTex1df4a) DescriptorSet 0
+                              Decorate 116(g_tTex1df4a) Binding 1
+                              Decorate 117(g_tTex1df4) DescriptorSet 0
+                              Decorate 117(g_tTex1df4) Binding 0
+                              Decorate 120(g_tTex1di4a) DescriptorSet 0
+                              Decorate 123(g_tTex1du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D array sampled format:Unknown
-              11:             TypePointer UniformConstant 10
- 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D array sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 3
-              21:    6(float) Constant 1036831949
-              22:    6(float) Constant 1045220557
-              23:    6(float) Constant 1050253722
-              24:   20(fvec3) ConstantComposite 21 22 23
-              25:             TypeInt 32 1
-              26:     25(int) Constant 0
-              28:             TypeVector 25(int) 4
-              29:             TypePointer Function 28(ivec4)
-              31:             TypeImage 25(int) 2D array sampled format:Unknown
-              32:             TypePointer UniformConstant 31
- 33(g_tTex2di4a):     32(ptr) Variable UniformConstant
-              36:             TypeSampledImage 31
-              38:    6(float) Constant 1053609165
-              39:    6(float) Constant 1056964608
-              40:   20(fvec3) ConstantComposite 23 38 39
-              42:             TypeInt 32 0
-              43:             TypeVector 42(int) 4
-              44:             TypePointer Function 43(ivec4)
-              46:             TypeImage 42(int) 2D array sampled format:Unknown
-              47:             TypePointer UniformConstant 46
- 48(g_tTex2du4a):     47(ptr) Variable UniformConstant
-              51:             TypeSampledImage 46
-              53:    6(float) Constant 1058642330
-              54:    6(float) Constant 1060320051
-              55:   20(fvec3) ConstantComposite 39 53 54
-              58:             TypeImage 6(float) Cube array sampled format:Unknown
-              59:             TypePointer UniformConstant 58
- 60(g_tTexcdf4a):     59(ptr) Variable UniformConstant
-              63:             TypeSampledImage 58
-              65:    7(fvec4) ConstantComposite 21 22 23 38
-              68:             TypeImage 25(int) Cube array sampled format:Unknown
-              69:             TypePointer UniformConstant 68
- 70(g_tTexcdi4a):     69(ptr) Variable UniformConstant
-              73:             TypeSampledImage 68
-              75:    7(fvec4) ConstantComposite 38 39 53 54
-              78:             TypeImage 42(int) Cube array sampled format:Unknown
-              79:             TypePointer UniformConstant 78
- 80(g_tTexcdu4a):     79(ptr) Variable UniformConstant
-              83:             TypeSampledImage 78
-              85:    6(float) Constant 1061997773
-              86:    6(float) Constant 1063675494
-              87:    6(float) Constant 1065353216
-              88:    7(fvec4) ConstantComposite 54 85 86 87
-   90(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              91:             TypePointer Function 90(PS_OUTPUT)
-              93:    7(fvec4) ConstantComposite 87 87 87 87
-              95:     25(int) Constant 1
-              96:             TypePointer Function 6(float)
-              98:             TypePointer Output 7(fvec4)
-       99(Color):     98(ptr) Variable Output
-             102:             TypePointer Output 6(float)
-      103(Depth):    102(ptr) Variable Output
-             107:             TypeImage 6(float) 1D array sampled format:Unknown
-             108:             TypePointer UniformConstant 107
-109(g_tTex1df4a):    108(ptr) Variable UniformConstant
- 110(g_tTex1df4):    108(ptr) Variable UniformConstant
-             111:             TypeImage 25(int) 1D array sampled format:Unknown
-             112:             TypePointer UniformConstant 111
-113(g_tTex1di4a):    112(ptr) Variable UniformConstant
-             114:             TypeImage 42(int) 1D array sampled format:Unknown
+ 16(g_tTex2df4a):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 3
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:    6(float) Constant 1050253722
+              28:   24(fvec3) ConstantComposite 25 26 27
+              29:             TypeInt 32 1
+              30:     29(int) Constant 0
+              32:             TypeVector 29(int) 4
+              33:             TypePointer Function 32(ivec4)
+              35:             TypeImage 29(int) 2D array sampled format:Unknown
+              36:             TypePointer UniformConstant 35
+ 37(g_tTex2di4a):     36(ptr) Variable UniformConstant
+              40:             TypeSampledImage 35
+              42:    6(float) Constant 1053609165
+              43:    6(float) Constant 1056964608
+              44:   24(fvec3) ConstantComposite 27 42 43
+              46:             TypeInt 32 0
+              47:             TypeVector 46(int) 4
+              48:             TypePointer Function 47(ivec4)
+              50:             TypeImage 46(int) 2D array sampled format:Unknown
+              51:             TypePointer UniformConstant 50
+ 52(g_tTex2du4a):     51(ptr) Variable UniformConstant
+              55:             TypeSampledImage 50
+              57:    6(float) Constant 1058642330
+              58:    6(float) Constant 1060320051
+              59:   24(fvec3) ConstantComposite 43 57 58
+              62:             TypeImage 6(float) Cube array sampled format:Unknown
+              63:             TypePointer UniformConstant 62
+ 64(g_tTexcdf4a):     63(ptr) Variable UniformConstant
+              67:             TypeSampledImage 62
+              69:    7(fvec4) ConstantComposite 25 26 27 42
+              72:             TypeImage 29(int) Cube array sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+ 74(g_tTexcdi4a):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              79:    7(fvec4) ConstantComposite 42 43 57 58
+              82:             TypeImage 46(int) Cube array sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+ 84(g_tTexcdu4a):     83(ptr) Variable UniformConstant
+              87:             TypeSampledImage 82
+              89:    6(float) Constant 1061997773
+              90:    6(float) Constant 1063675494
+              91:    6(float) Constant 1065353216
+              92:    7(fvec4) ConstantComposite 58 89 90 91
+              94:             TypePointer Function 8(PS_OUTPUT)
+              96:    7(fvec4) ConstantComposite 91 91 91 91
+              98:     29(int) Constant 1
+              99:             TypePointer Function 6(float)
+             106:             TypePointer Output 7(fvec4)
+      107(Color):    106(ptr) Variable Output
+             110:             TypePointer Output 6(float)
+      111(Depth):    110(ptr) Variable Output
+             114:             TypeImage 6(float) 1D array sampled format:Unknown
              115:             TypePointer UniformConstant 114
-116(g_tTex1du4a):    115(ptr) Variable UniformConstant
+116(g_tTex1df4a):    115(ptr) Variable UniformConstant
+ 117(g_tTex1df4):    115(ptr) Variable UniformConstant
+             118:             TypeImage 29(int) 1D array sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+120(g_tTex1di4a):    119(ptr) Variable UniformConstant
+             121:             TypeImage 46(int) 1D array sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+123(g_tTex1du4a):    122(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval20):      8(ptr) Variable Function
-     30(txval21):     29(ptr) Variable Function
-     45(txval22):     44(ptr) Variable Function
-     57(txval40):      8(ptr) Variable Function
-     67(txval41):     29(ptr) Variable Function
-     77(txval42):     44(ptr) Variable Function
-       92(psout):     91(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4a)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              27:    7(fvec4) ImageGather 19 24 26
-                              Store 9(txval20) 27
-              34:          31 Load 33(g_tTex2di4a)
-              35:          14 Load 16(g_sSamp)
-              37:          36 SampledImage 34 35
-              41:   28(ivec4) ImageGather 37 40 26
-                              Store 30(txval21) 41
-              49:          46 Load 48(g_tTex2du4a)
-              50:          14 Load 16(g_sSamp)
-              52:          51 SampledImage 49 50
-              56:   43(ivec4) ImageGather 52 55 26
-                              Store 45(txval22) 56
-              61:          58 Load 60(g_tTexcdf4a)
-              62:          14 Load 16(g_sSamp)
-              64:          63 SampledImage 61 62
-              66:    7(fvec4) ImageGather 64 65 26
-                              Store 57(txval40) 66
-              71:          68 Load 70(g_tTexcdi4a)
-              72:          14 Load 16(g_sSamp)
-              74:          73 SampledImage 71 72
-              76:   28(ivec4) ImageGather 74 75 26
-                              Store 67(txval41) 76
-              81:          78 Load 80(g_tTexcdu4a)
-              82:          14 Load 16(g_sSamp)
-              84:          83 SampledImage 81 82
-              89:   43(ivec4) ImageGather 84 88 26
-                              Store 77(txval42) 89
-              94:      8(ptr) AccessChain 92(psout) 26
-                              Store 94 93
-              97:     96(ptr) AccessChain 92(psout) 95
-                              Store 97 87
-             100:      8(ptr) AccessChain 92(psout) 26
-             101:    7(fvec4) Load 100
-                              Store 99(Color) 101
-             104:     96(ptr) AccessChain 92(psout) 95
-             105:    6(float) Load 104
-                              Store 103(Depth) 105
+104(flattenTemp):     94(ptr) Variable Function
+             105:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 104(flattenTemp) 105
+             108:     12(ptr) AccessChain 104(flattenTemp) 30
+             109:    7(fvec4) Load 108
+                              Store 107(Color) 109
+             112:     99(ptr) AccessChain 104(flattenTemp) 98
+             113:    6(float) Load 112
+                              Store 111(Depth) 113
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval20):     12(ptr) Variable Function
+     34(txval21):     33(ptr) Variable Function
+     49(txval22):     48(ptr) Variable Function
+     61(txval40):     12(ptr) Variable Function
+     71(txval41):     33(ptr) Variable Function
+     81(txval42):     48(ptr) Variable Function
+       95(psout):     94(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4a)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              31:    7(fvec4) ImageGather 23 28 30
+                              Store 13(txval20) 31
+              38:          35 Load 37(g_tTex2di4a)
+              39:          18 Load 20(g_sSamp)
+              41:          40 SampledImage 38 39
+              45:   32(ivec4) ImageGather 41 44 30
+                              Store 34(txval21) 45
+              53:          50 Load 52(g_tTex2du4a)
+              54:          18 Load 20(g_sSamp)
+              56:          55 SampledImage 53 54
+              60:   47(ivec4) ImageGather 56 59 30
+                              Store 49(txval22) 60
+              65:          62 Load 64(g_tTexcdf4a)
+              66:          18 Load 20(g_sSamp)
+              68:          67 SampledImage 65 66
+              70:    7(fvec4) ImageGather 68 69 30
+                              Store 61(txval40) 70
+              75:          72 Load 74(g_tTexcdi4a)
+              76:          18 Load 20(g_sSamp)
+              78:          77 SampledImage 75 76
+              80:   32(ivec4) ImageGather 78 79 30
+                              Store 71(txval41) 80
+              85:          82 Load 84(g_tTexcdu4a)
+              86:          18 Load 20(g_sSamp)
+              88:          87 SampledImage 85 86
+              93:   47(ivec4) ImageGather 88 92 30
+                              Store 81(txval42) 93
+              97:     12(ptr) AccessChain 95(psout) 30
+                              Store 97 96
+             100:     99(ptr) AccessChain 95(psout) 98
+                              Store 100 91
+             101:8(PS_OUTPUT) Load 95(psout)
+                              ReturnValue 101
+                              FunctionEnd

+ 235 - 212
3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gather.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:29    Function Parameters: 
 0:?     Sequence
 0:34      Sequence
@@ -85,24 +85,28 @@ gl_FragCoord origin is upper left
 0:45            1 (const int)
 0:45        Constant:
 0:45          1.000000
-0:47      Sequence
-0:47        Sequence
-0:47          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:47            Color: direct index for structure (temp 4-component vector of float)
-0:47              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:47              Constant:
-0:47                0 (const int)
-0:47          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:47            Depth: direct index for structure (temp float)
-0:47              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:47              Constant:
-0:47                1 (const int)
-0:47        Branch: Return
+0:47      Branch: Return with expression
+0:47        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29  Function Definition: main( (temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:29      Sequence
+0:29        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:29          Color: direct index for structure (temp 4-component vector of float)
+0:29            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29            Constant:
+0:29              0 (const int)
+0:29        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:29          Depth: direct index for structure (temp float)
+0:29            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29            Constant:
+0:29              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -118,6 +122,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -126,7 +132,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:29    Function Parameters: 
 0:?     Sequence
 0:34      Sequence
@@ -209,24 +215,28 @@ gl_FragCoord origin is upper left
 0:45            1 (const int)
 0:45        Constant:
 0:45          1.000000
-0:47      Sequence
-0:47        Sequence
-0:47          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:47            Color: direct index for structure (temp 4-component vector of float)
-0:47              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:47              Constant:
-0:47                0 (const int)
-0:47          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:47            Depth: direct index for structure (temp float)
-0:47              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:47              Constant:
-0:47                1 (const int)
-0:47        Branch: Return
+0:47      Branch: Return with expression
+0:47        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29  Function Definition: main( (temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:29      Sequence
+0:29        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:29          Color: direct index for structure (temp 4-component vector of float)
+0:29            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29            Constant:
+0:29              0 (const int)
+0:29        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:29          Depth: direct index for structure (temp float)
+0:29            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:29            Constant:
+0:29              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -242,199 +252,212 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 128
+// Id's are bound by 135
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 100 104
+                              EntryPoint Fragment 4  "main" 108 112
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval20"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 29  "txval21"
-                              Name 32  "g_tTex2di4"
-                              Name 44  "txval22"
-                              Name 47  "g_tTex2du4"
-                              Name 56  "txval40"
-                              Name 59  "g_tTexcdf4"
-                              Name 67  "txval41"
-                              Name 70  "g_tTexcdi4"
-                              Name 77  "txval42"
-                              Name 80  "g_tTexcdu4"
-                              Name 90  "PS_OUTPUT"
-                              MemberName 90(PS_OUTPUT) 0  "Color"
-                              MemberName 90(PS_OUTPUT) 1  "Depth"
-                              Name 92  "psout"
-                              Name 100  "Color"
-                              Name 104  "Depth"
-                              Name 108  "g_sSamp2d"
-                              Name 111  "g_tTex1df4a"
-                              Name 112  "g_tTex1df4"
-                              Name 115  "g_tTex1di4"
-                              Name 118  "g_tTex1du4"
-                              Name 121  "g_tTex3df4"
-                              Name 124  "g_tTex3di4"
-                              Name 127  "g_tTex3du4"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              Decorate 32(g_tTex2di4) DescriptorSet 0
-                              Decorate 47(g_tTex2du4) DescriptorSet 0
-                              Decorate 59(g_tTexcdf4) DescriptorSet 0
-                              Decorate 70(g_tTexcdi4) DescriptorSet 0
-                              Decorate 80(g_tTexcdu4) DescriptorSet 0
-                              Decorate 100(Color) Location 0
-                              Decorate 104(Depth) BuiltIn FragDepth
-                              Decorate 108(g_sSamp2d) DescriptorSet 0
-                              Decorate 111(g_tTex1df4a) DescriptorSet 0
-                              Decorate 111(g_tTex1df4a) Binding 1
-                              Decorate 112(g_tTex1df4) DescriptorSet 0
-                              Decorate 112(g_tTex1df4) Binding 0
-                              Decorate 115(g_tTex1di4) DescriptorSet 0
-                              Decorate 118(g_tTex1du4) DescriptorSet 0
-                              Decorate 121(g_tTex3df4) DescriptorSet 0
-                              Decorate 124(g_tTex3di4) DescriptorSet 0
-                              Decorate 127(g_tTex3du4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval20"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 33  "txval21"
+                              Name 36  "g_tTex2di4"
+                              Name 48  "txval22"
+                              Name 51  "g_tTex2du4"
+                              Name 60  "txval40"
+                              Name 63  "g_tTexcdf4"
+                              Name 71  "txval41"
+                              Name 74  "g_tTexcdi4"
+                              Name 81  "txval42"
+                              Name 84  "g_tTexcdu4"
+                              Name 95  "psout"
+                              Name 105  "flattenTemp"
+                              Name 108  "Color"
+                              Name 112  "Depth"
+                              Name 115  "g_sSamp2d"
+                              Name 118  "g_tTex1df4a"
+                              Name 119  "g_tTex1df4"
+                              Name 122  "g_tTex1di4"
+                              Name 125  "g_tTex1du4"
+                              Name 128  "g_tTex3df4"
+                              Name 131  "g_tTex3di4"
+                              Name 134  "g_tTex3du4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 36(g_tTex2di4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              Decorate 63(g_tTexcdf4) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4) DescriptorSet 0
+                              Decorate 84(g_tTexcdu4) DescriptorSet 0
+                              Decorate 108(Color) Location 0
+                              Decorate 112(Depth) BuiltIn FragDepth
+                              Decorate 115(g_sSamp2d) DescriptorSet 0
+                              Decorate 118(g_tTex1df4a) DescriptorSet 0
+                              Decorate 118(g_tTex1df4a) Binding 1
+                              Decorate 119(g_tTex1df4) DescriptorSet 0
+                              Decorate 119(g_tTex1df4) Binding 0
+                              Decorate 122(g_tTex1di4) DescriptorSet 0
+                              Decorate 125(g_tTex1du4) DescriptorSet 0
+                              Decorate 128(g_tTex3df4) DescriptorSet 0
+                              Decorate 131(g_tTex3di4) DescriptorSet 0
+                              Decorate 134(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:    6(float) Constant 1036831949
-              22:    6(float) Constant 1045220557
-              23:   20(fvec2) ConstantComposite 21 22
-              24:             TypeInt 32 1
-              25:     24(int) Constant 0
-              27:             TypeVector 24(int) 4
-              28:             TypePointer Function 27(ivec4)
-              30:             TypeImage 24(int) 2D sampled format:Unknown
-              31:             TypePointer UniformConstant 30
-  32(g_tTex2di4):     31(ptr) Variable UniformConstant
-              35:             TypeSampledImage 30
-              37:    6(float) Constant 1050253722
-              38:    6(float) Constant 1053609165
-              39:   20(fvec2) ConstantComposite 37 38
-              41:             TypeInt 32 0
-              42:             TypeVector 41(int) 4
-              43:             TypePointer Function 42(ivec4)
-              45:             TypeImage 41(int) 2D sampled format:Unknown
-              46:             TypePointer UniformConstant 45
-  47(g_tTex2du4):     46(ptr) Variable UniformConstant
-              50:             TypeSampledImage 45
-              52:    6(float) Constant 1056964608
-              53:    6(float) Constant 1058642330
-              54:   20(fvec2) ConstantComposite 52 53
-              57:             TypeImage 6(float) Cube sampled format:Unknown
-              58:             TypePointer UniformConstant 57
-  59(g_tTexcdf4):     58(ptr) Variable UniformConstant
-              62:             TypeSampledImage 57
-              64:             TypeVector 6(float) 3
-              65:   64(fvec3) ConstantComposite 21 22 37
-              68:             TypeImage 24(int) Cube sampled format:Unknown
-              69:             TypePointer UniformConstant 68
-  70(g_tTexcdi4):     69(ptr) Variable UniformConstant
-              73:             TypeSampledImage 68
-              75:   64(fvec3) ConstantComposite 38 52 53
-              78:             TypeImage 41(int) Cube sampled format:Unknown
-              79:             TypePointer UniformConstant 78
-  80(g_tTexcdu4):     79(ptr) Variable UniformConstant
-              83:             TypeSampledImage 78
-              85:    6(float) Constant 1060320051
-              86:    6(float) Constant 1061997773
-              87:    6(float) Constant 1063675494
-              88:   64(fvec3) ConstantComposite 85 86 87
-   90(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              91:             TypePointer Function 90(PS_OUTPUT)
-              93:    6(float) Constant 1065353216
-              94:    7(fvec4) ConstantComposite 93 93 93 93
-              96:     24(int) Constant 1
-              97:             TypePointer Function 6(float)
-              99:             TypePointer Output 7(fvec4)
-      100(Color):     99(ptr) Variable Output
-             103:             TypePointer Output 6(float)
-      104(Depth):    103(ptr) Variable Output
-  108(g_sSamp2d):     15(ptr) Variable UniformConstant
-             109:             TypeImage 6(float) 1D sampled format:Unknown
-             110:             TypePointer UniformConstant 109
-111(g_tTex1df4a):    110(ptr) Variable UniformConstant
- 112(g_tTex1df4):    110(ptr) Variable UniformConstant
-             113:             TypeImage 24(int) 1D sampled format:Unknown
-             114:             TypePointer UniformConstant 113
- 115(g_tTex1di4):    114(ptr) Variable UniformConstant
-             116:             TypeImage 41(int) 1D sampled format:Unknown
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              31:             TypeVector 28(int) 4
+              32:             TypePointer Function 31(ivec4)
+              34:             TypeImage 28(int) 2D sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+  36(g_tTex2di4):     35(ptr) Variable UniformConstant
+              39:             TypeSampledImage 34
+              41:    6(float) Constant 1050253722
+              42:    6(float) Constant 1053609165
+              43:   24(fvec2) ConstantComposite 41 42
+              45:             TypeInt 32 0
+              46:             TypeVector 45(int) 4
+              47:             TypePointer Function 46(ivec4)
+              49:             TypeImage 45(int) 2D sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+  51(g_tTex2du4):     50(ptr) Variable UniformConstant
+              54:             TypeSampledImage 49
+              56:    6(float) Constant 1056964608
+              57:    6(float) Constant 1058642330
+              58:   24(fvec2) ConstantComposite 56 57
+              61:             TypeImage 6(float) Cube sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+  63(g_tTexcdf4):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              68:             TypeVector 6(float) 3
+              69:   68(fvec3) ConstantComposite 25 26 41
+              72:             TypeImage 28(int) Cube sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+  74(g_tTexcdi4):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              79:   68(fvec3) ConstantComposite 42 56 57
+              82:             TypeImage 45(int) Cube sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+  84(g_tTexcdu4):     83(ptr) Variable UniformConstant
+              87:             TypeSampledImage 82
+              89:    6(float) Constant 1060320051
+              90:    6(float) Constant 1061997773
+              91:    6(float) Constant 1063675494
+              92:   68(fvec3) ConstantComposite 89 90 91
+              94:             TypePointer Function 8(PS_OUTPUT)
+              96:    6(float) Constant 1065353216
+              97:    7(fvec4) ConstantComposite 96 96 96 96
+              99:     28(int) Constant 1
+             100:             TypePointer Function 6(float)
+             107:             TypePointer Output 7(fvec4)
+      108(Color):    107(ptr) Variable Output
+             111:             TypePointer Output 6(float)
+      112(Depth):    111(ptr) Variable Output
+  115(g_sSamp2d):     19(ptr) Variable UniformConstant
+             116:             TypeImage 6(float) 1D sampled format:Unknown
              117:             TypePointer UniformConstant 116
- 118(g_tTex1du4):    117(ptr) Variable UniformConstant
-             119:             TypeImage 6(float) 3D sampled format:Unknown
-             120:             TypePointer UniformConstant 119
- 121(g_tTex3df4):    120(ptr) Variable UniformConstant
-             122:             TypeImage 24(int) 3D sampled format:Unknown
-             123:             TypePointer UniformConstant 122
- 124(g_tTex3di4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 41(int) 3D sampled format:Unknown
-             126:             TypePointer UniformConstant 125
- 127(g_tTex3du4):    126(ptr) Variable UniformConstant
+118(g_tTex1df4a):    117(ptr) Variable UniformConstant
+ 119(g_tTex1df4):    117(ptr) Variable UniformConstant
+             120:             TypeImage 28(int) 1D sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+ 122(g_tTex1di4):    121(ptr) Variable UniformConstant
+             123:             TypeImage 45(int) 1D sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex1du4):    124(ptr) Variable UniformConstant
+             126:             TypeImage 6(float) 3D sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+ 128(g_tTex3df4):    127(ptr) Variable UniformConstant
+             129:             TypeImage 28(int) 3D sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+ 131(g_tTex3di4):    130(ptr) Variable UniformConstant
+             132:             TypeImage 45(int) 3D sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTex3du4):    133(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval20):      8(ptr) Variable Function
-     29(txval21):     28(ptr) Variable Function
-     44(txval22):     43(ptr) Variable Function
-     56(txval40):      8(ptr) Variable Function
-     67(txval41):     28(ptr) Variable Function
-     77(txval42):     43(ptr) Variable Function
-       92(psout):     91(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              26:    7(fvec4) ImageGather 19 23 25
-                              Store 9(txval20) 26
-              33:          30 Load 32(g_tTex2di4)
-              34:          14 Load 16(g_sSamp)
-              36:          35 SampledImage 33 34
-              40:   27(ivec4) ImageGather 36 39 25
-                              Store 29(txval21) 40
-              48:          45 Load 47(g_tTex2du4)
-              49:          14 Load 16(g_sSamp)
-              51:          50 SampledImage 48 49
-              55:   42(ivec4) ImageGather 51 54 25
-                              Store 44(txval22) 55
-              60:          57 Load 59(g_tTexcdf4)
-              61:          14 Load 16(g_sSamp)
-              63:          62 SampledImage 60 61
-              66:    7(fvec4) ImageGather 63 65 25
-                              Store 56(txval40) 66
-              71:          68 Load 70(g_tTexcdi4)
-              72:          14 Load 16(g_sSamp)
-              74:          73 SampledImage 71 72
-              76:   27(ivec4) ImageGather 74 75 25
-                              Store 67(txval41) 76
-              81:          78 Load 80(g_tTexcdu4)
-              82:          14 Load 16(g_sSamp)
-              84:          83 SampledImage 81 82
-              89:   42(ivec4) ImageGather 84 88 25
-                              Store 77(txval42) 89
-              95:      8(ptr) AccessChain 92(psout) 25
-                              Store 95 94
-              98:     97(ptr) AccessChain 92(psout) 96
-                              Store 98 93
-             101:      8(ptr) AccessChain 92(psout) 25
-             102:    7(fvec4) Load 101
-                              Store 100(Color) 102
-             105:     97(ptr) AccessChain 92(psout) 96
-             106:    6(float) Load 105
-                              Store 104(Depth) 106
+105(flattenTemp):     94(ptr) Variable Function
+             106:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 105(flattenTemp) 106
+             109:     12(ptr) AccessChain 105(flattenTemp) 29
+             110:    7(fvec4) Load 109
+                              Store 108(Color) 110
+             113:    100(ptr) AccessChain 105(flattenTemp) 99
+             114:    6(float) Load 113
+                              Store 112(Depth) 114
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval20):     12(ptr) Variable Function
+     33(txval21):     32(ptr) Variable Function
+     48(txval22):     47(ptr) Variable Function
+     60(txval40):     12(ptr) Variable Function
+     71(txval41):     32(ptr) Variable Function
+     81(txval42):     47(ptr) Variable Function
+       95(psout):     94(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              30:    7(fvec4) ImageGather 23 27 29
+                              Store 13(txval20) 30
+              37:          34 Load 36(g_tTex2di4)
+              38:          18 Load 20(g_sSamp)
+              40:          39 SampledImage 37 38
+              44:   31(ivec4) ImageGather 40 43 29
+                              Store 33(txval21) 44
+              52:          49 Load 51(g_tTex2du4)
+              53:          18 Load 20(g_sSamp)
+              55:          54 SampledImage 52 53
+              59:   46(ivec4) ImageGather 55 58 29
+                              Store 48(txval22) 59
+              64:          61 Load 63(g_tTexcdf4)
+              65:          18 Load 20(g_sSamp)
+              67:          66 SampledImage 64 65
+              70:    7(fvec4) ImageGather 67 69 29
+                              Store 60(txval40) 70
+              75:          72 Load 74(g_tTexcdi4)
+              76:          18 Load 20(g_sSamp)
+              78:          77 SampledImage 75 76
+              80:   31(ivec4) ImageGather 78 79 29
+                              Store 71(txval41) 80
+              85:          82 Load 84(g_tTexcdu4)
+              86:          18 Load 20(g_sSamp)
+              88:          87 SampledImage 85 86
+              93:   46(ivec4) ImageGather 88 92 29
+                              Store 81(txval42) 93
+              98:     12(ptr) AccessChain 95(psout) 29
+                              Store 98 97
+             101:    100(ptr) AccessChain 95(psout) 99
+                              Store 101 96
+             102:8(PS_OUTPUT) Load 95(psout)
+                              ReturnValue 102
+                              FunctionEnd

+ 198 - 195
3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out

@@ -1,7 +1,7 @@
 hlsl.gather.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -77,15 +77,18 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:45      Sequence
-0:45        Sequence
-0:45          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:45            Pos: direct index for structure (temp 4-component vector of float)
-0:45              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:45              Constant:
-0:45                0 (const int)
-0:45        Branch: Return
+0:45      Branch: Return with expression
+0:45        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:28          Pos: direct index for structure (temp 4-component vector of float)
+0:28            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:28            Constant:
+0:28              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
@@ -102,7 +105,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 
 Linked vertex stage:
@@ -110,7 +112,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -186,15 +188,18 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:45      Sequence
-0:45        Sequence
-0:45          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:45            Pos: direct index for structure (temp 4-component vector of float)
-0:45              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:45              Constant:
-0:45                0 (const int)
-0:45        Branch: Return
+0:45      Branch: Return with expression
+0:45        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:28          Pos: direct index for structure (temp 4-component vector of float)
+0:28            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:28            Constant:
+0:28              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
@@ -211,195 +216,193 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 124
+// Id's are bound by 126
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 97 123
+                              EntryPoint Vertex 4  "main" 103
                               Name 4  "main"
-                              Name 9  "txval20"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 29  "txval21"
-                              Name 32  "g_tTex2di4"
-                              Name 44  "txval22"
-                              Name 47  "g_tTex2du4"
-                              Name 56  "txval40"
-                              Name 59  "g_tTexcdf4"
-                              Name 67  "txval41"
-                              Name 70  "g_tTexcdi4"
-                              Name 77  "txval42"
-                              Name 80  "g_tTexcdu4"
-                              Name 90  "VS_OUTPUT"
-                              MemberName 90(VS_OUTPUT) 0  "Pos"
-                              Name 92  "vsout"
-                              Name 97  "Pos"
-                              Name 101  "g_sSamp2d"
-                              Name 104  "g_tTex1df4a"
-                              Name 105  "g_tTex1df4"
-                              Name 108  "g_tTex1di4"
-                              Name 111  "g_tTex1du4"
-                              Name 114  "g_tTex3df4"
-                              Name 117  "g_tTex3di4"
-                              Name 120  "g_tTex3du4"
-                              Name 121  "PerVertex_out"
-                              MemberName 121(PerVertex_out) 0  "Pos"
-                              Name 123  "PerVertex_out"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              Decorate 32(g_tTex2di4) DescriptorSet 0
-                              Decorate 47(g_tTex2du4) DescriptorSet 0
-                              Decorate 59(g_tTexcdf4) DescriptorSet 0
-                              Decorate 70(g_tTexcdi4) DescriptorSet 0
-                              Decorate 80(g_tTexcdu4) DescriptorSet 0
-                              Decorate 97(Pos) BuiltIn Position
-                              Decorate 101(g_sSamp2d) DescriptorSet 0
-                              Decorate 104(g_tTex1df4a) DescriptorSet 0
-                              Decorate 104(g_tTex1df4a) Binding 1
-                              Decorate 105(g_tTex1df4) DescriptorSet 0
-                              Decorate 105(g_tTex1df4) Binding 0
-                              Decorate 108(g_tTex1di4) DescriptorSet 0
-                              Decorate 111(g_tTex1du4) DescriptorSet 0
-                              Decorate 114(g_tTex3df4) DescriptorSet 0
-                              Decorate 117(g_tTex3di4) DescriptorSet 0
-                              Decorate 120(g_tTex3du4) DescriptorSet 0
-                              MemberDecorate 121(PerVertex_out) 0 BuiltIn Position
-                              Decorate 121(PerVertex_out) Block
+                              Name 8  "VS_OUTPUT"
+                              MemberName 8(VS_OUTPUT) 0  "Pos"
+                              Name 10  "@main("
+                              Name 13  "txval20"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 33  "txval21"
+                              Name 36  "g_tTex2di4"
+                              Name 48  "txval22"
+                              Name 51  "g_tTex2du4"
+                              Name 60  "txval40"
+                              Name 63  "g_tTexcdf4"
+                              Name 71  "txval41"
+                              Name 74  "g_tTexcdi4"
+                              Name 81  "txval42"
+                              Name 84  "g_tTexcdu4"
+                              Name 95  "vsout"
+                              Name 103  "@entryPointOutput_Pos"
+                              Name 106  "g_sSamp2d"
+                              Name 109  "g_tTex1df4a"
+                              Name 110  "g_tTex1df4"
+                              Name 113  "g_tTex1di4"
+                              Name 116  "g_tTex1du4"
+                              Name 119  "g_tTex3df4"
+                              Name 122  "g_tTex3di4"
+                              Name 125  "g_tTex3du4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 36(g_tTex2di4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              Decorate 63(g_tTexcdf4) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4) DescriptorSet 0
+                              Decorate 84(g_tTexcdu4) DescriptorSet 0
+                              Decorate 103(@entryPointOutput_Pos) BuiltIn Position
+                              Decorate 106(g_sSamp2d) DescriptorSet 0
+                              Decorate 109(g_tTex1df4a) DescriptorSet 0
+                              Decorate 109(g_tTex1df4a) Binding 1
+                              Decorate 110(g_tTex1df4) DescriptorSet 0
+                              Decorate 110(g_tTex1df4) Binding 0
+                              Decorate 113(g_tTex1di4) DescriptorSet 0
+                              Decorate 116(g_tTex1du4) DescriptorSet 0
+                              Decorate 119(g_tTex3df4) DescriptorSet 0
+                              Decorate 122(g_tTex3di4) DescriptorSet 0
+                              Decorate 125(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(VS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(VS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:    6(float) Constant 1036831949
-              22:    6(float) Constant 1045220557
-              23:   20(fvec2) ConstantComposite 21 22
-              24:             TypeInt 32 1
-              25:     24(int) Constant 0
-              27:             TypeVector 24(int) 4
-              28:             TypePointer Function 27(ivec4)
-              30:             TypeImage 24(int) 2D sampled format:Unknown
-              31:             TypePointer UniformConstant 30
-  32(g_tTex2di4):     31(ptr) Variable UniformConstant
-              35:             TypeSampledImage 30
-              37:    6(float) Constant 1050253722
-              38:    6(float) Constant 1053609165
-              39:   20(fvec2) ConstantComposite 37 38
-              41:             TypeInt 32 0
-              42:             TypeVector 41(int) 4
-              43:             TypePointer Function 42(ivec4)
-              45:             TypeImage 41(int) 2D sampled format:Unknown
-              46:             TypePointer UniformConstant 45
-  47(g_tTex2du4):     46(ptr) Variable UniformConstant
-              50:             TypeSampledImage 45
-              52:    6(float) Constant 1056964608
-              53:    6(float) Constant 1058642330
-              54:   20(fvec2) ConstantComposite 52 53
-              57:             TypeImage 6(float) Cube sampled format:Unknown
-              58:             TypePointer UniformConstant 57
-  59(g_tTexcdf4):     58(ptr) Variable UniformConstant
-              62:             TypeSampledImage 57
-              64:             TypeVector 6(float) 3
-              65:   64(fvec3) ConstantComposite 21 22 37
-              68:             TypeImage 24(int) Cube sampled format:Unknown
-              69:             TypePointer UniformConstant 68
-  70(g_tTexcdi4):     69(ptr) Variable UniformConstant
-              73:             TypeSampledImage 68
-              75:   64(fvec3) ConstantComposite 38 52 53
-              78:             TypeImage 41(int) Cube sampled format:Unknown
-              79:             TypePointer UniformConstant 78
-  80(g_tTexcdu4):     79(ptr) Variable UniformConstant
-              83:             TypeSampledImage 78
-              85:    6(float) Constant 1060320051
-              86:    6(float) Constant 1061997773
-              87:    6(float) Constant 1063675494
-              88:   64(fvec3) ConstantComposite 85 86 87
-   90(VS_OUTPUT):             TypeStruct 7(fvec4)
-              91:             TypePointer Function 90(VS_OUTPUT)
-              93:    6(float) Constant 0
-              94:    7(fvec4) ConstantComposite 93 93 93 93
-              96:             TypePointer Output 7(fvec4)
-         97(Pos):     96(ptr) Variable Output
-  101(g_sSamp2d):     15(ptr) Variable UniformConstant
-             102:             TypeImage 6(float) 1D sampled format:Unknown
-             103:             TypePointer UniformConstant 102
-104(g_tTex1df4a):    103(ptr) Variable UniformConstant
- 105(g_tTex1df4):    103(ptr) Variable UniformConstant
-             106:             TypeImage 24(int) 1D sampled format:Unknown
-             107:             TypePointer UniformConstant 106
- 108(g_tTex1di4):    107(ptr) Variable UniformConstant
-             109:             TypeImage 41(int) 1D sampled format:Unknown
-             110:             TypePointer UniformConstant 109
- 111(g_tTex1du4):    110(ptr) Variable UniformConstant
-             112:             TypeImage 6(float) 3D sampled format:Unknown
-             113:             TypePointer UniformConstant 112
- 114(g_tTex3df4):    113(ptr) Variable UniformConstant
-             115:             TypeImage 24(int) 3D sampled format:Unknown
-             116:             TypePointer UniformConstant 115
- 117(g_tTex3di4):    116(ptr) Variable UniformConstant
-             118:             TypeImage 41(int) 3D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
- 120(g_tTex3du4):    119(ptr) Variable UniformConstant
-121(PerVertex_out):             TypeStruct 7(fvec4)
-             122:             TypePointer Output 121(PerVertex_out)
-123(PerVertex_out):    122(ptr) Variable Output
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              31:             TypeVector 28(int) 4
+              32:             TypePointer Function 31(ivec4)
+              34:             TypeImage 28(int) 2D sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+  36(g_tTex2di4):     35(ptr) Variable UniformConstant
+              39:             TypeSampledImage 34
+              41:    6(float) Constant 1050253722
+              42:    6(float) Constant 1053609165
+              43:   24(fvec2) ConstantComposite 41 42
+              45:             TypeInt 32 0
+              46:             TypeVector 45(int) 4
+              47:             TypePointer Function 46(ivec4)
+              49:             TypeImage 45(int) 2D sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+  51(g_tTex2du4):     50(ptr) Variable UniformConstant
+              54:             TypeSampledImage 49
+              56:    6(float) Constant 1056964608
+              57:    6(float) Constant 1058642330
+              58:   24(fvec2) ConstantComposite 56 57
+              61:             TypeImage 6(float) Cube sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+  63(g_tTexcdf4):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              68:             TypeVector 6(float) 3
+              69:   68(fvec3) ConstantComposite 25 26 41
+              72:             TypeImage 28(int) Cube sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+  74(g_tTexcdi4):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              79:   68(fvec3) ConstantComposite 42 56 57
+              82:             TypeImage 45(int) Cube sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+  84(g_tTexcdu4):     83(ptr) Variable UniformConstant
+              87:             TypeSampledImage 82
+              89:    6(float) Constant 1060320051
+              90:    6(float) Constant 1061997773
+              91:    6(float) Constant 1063675494
+              92:   68(fvec3) ConstantComposite 89 90 91
+              94:             TypePointer Function 8(VS_OUTPUT)
+              96:    6(float) Constant 0
+              97:    7(fvec4) ConstantComposite 96 96 96 96
+             102:             TypePointer Output 7(fvec4)
+103(@entryPointOutput_Pos):    102(ptr) Variable Output
+  106(g_sSamp2d):     19(ptr) Variable UniformConstant
+             107:             TypeImage 6(float) 1D sampled format:Unknown
+             108:             TypePointer UniformConstant 107
+109(g_tTex1df4a):    108(ptr) Variable UniformConstant
+ 110(g_tTex1df4):    108(ptr) Variable UniformConstant
+             111:             TypeImage 28(int) 1D sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+ 113(g_tTex1di4):    112(ptr) Variable UniformConstant
+             114:             TypeImage 45(int) 1D sampled format:Unknown
+             115:             TypePointer UniformConstant 114
+ 116(g_tTex1du4):    115(ptr) Variable UniformConstant
+             117:             TypeImage 6(float) 3D sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTex3df4):    118(ptr) Variable UniformConstant
+             120:             TypeImage 28(int) 3D sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+ 122(g_tTex3di4):    121(ptr) Variable UniformConstant
+             123:             TypeImage 45(int) 3D sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex3du4):    124(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval20):      8(ptr) Variable Function
-     29(txval21):     28(ptr) Variable Function
-     44(txval22):     43(ptr) Variable Function
-     56(txval40):      8(ptr) Variable Function
-     67(txval41):     28(ptr) Variable Function
-     77(txval42):     43(ptr) Variable Function
-       92(vsout):     91(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              26:    7(fvec4) ImageGather 19 23 25
-                              Store 9(txval20) 26
-              33:          30 Load 32(g_tTex2di4)
-              34:          14 Load 16(g_sSamp)
-              36:          35 SampledImage 33 34
-              40:   27(ivec4) ImageGather 36 39 25
-                              Store 29(txval21) 40
-              48:          45 Load 47(g_tTex2du4)
-              49:          14 Load 16(g_sSamp)
-              51:          50 SampledImage 48 49
-              55:   42(ivec4) ImageGather 51 54 25
-                              Store 44(txval22) 55
-              60:          57 Load 59(g_tTexcdf4)
-              61:          14 Load 16(g_sSamp)
-              63:          62 SampledImage 60 61
-              66:    7(fvec4) ImageGather 63 65 25
-                              Store 56(txval40) 66
-              71:          68 Load 70(g_tTexcdi4)
-              72:          14 Load 16(g_sSamp)
-              74:          73 SampledImage 71 72
-              76:   27(ivec4) ImageGather 74 75 25
-                              Store 67(txval41) 76
-              81:          78 Load 80(g_tTexcdu4)
-              82:          14 Load 16(g_sSamp)
-              84:          83 SampledImage 81 82
-              89:   42(ivec4) ImageGather 84 88 25
-                              Store 77(txval42) 89
-              95:      8(ptr) AccessChain 92(vsout) 25
-                              Store 95 94
-              98:      8(ptr) AccessChain 92(vsout) 25
-              99:    7(fvec4) Load 98
-                              Store 97(Pos) 99
+             104:8(VS_OUTPUT) FunctionCall 10(@main()
+             105:    7(fvec4) CompositeExtract 104 0
+                              Store 103(@entryPointOutput_Pos) 105
                               Return
                               FunctionEnd
+      10(@main():8(VS_OUTPUT) Function None 9
+              11:             Label
+     13(txval20):     12(ptr) Variable Function
+     33(txval21):     32(ptr) Variable Function
+     48(txval22):     47(ptr) Variable Function
+     60(txval40):     12(ptr) Variable Function
+     71(txval41):     32(ptr) Variable Function
+     81(txval42):     47(ptr) Variable Function
+       95(vsout):     94(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              30:    7(fvec4) ImageGather 23 27 29
+                              Store 13(txval20) 30
+              37:          34 Load 36(g_tTex2di4)
+              38:          18 Load 20(g_sSamp)
+              40:          39 SampledImage 37 38
+              44:   31(ivec4) ImageGather 40 43 29
+                              Store 33(txval21) 44
+              52:          49 Load 51(g_tTex2du4)
+              53:          18 Load 20(g_sSamp)
+              55:          54 SampledImage 52 53
+              59:   46(ivec4) ImageGather 55 58 29
+                              Store 48(txval22) 59
+              64:          61 Load 63(g_tTexcdf4)
+              65:          18 Load 20(g_sSamp)
+              67:          66 SampledImage 64 65
+              70:    7(fvec4) ImageGather 67 69 29
+                              Store 60(txval40) 70
+              75:          72 Load 74(g_tTexcdi4)
+              76:          18 Load 20(g_sSamp)
+              78:          77 SampledImage 75 76
+              80:   31(ivec4) ImageGather 78 79 29
+                              Store 71(txval41) 80
+              85:          82 Load 84(g_tTexcdu4)
+              86:          18 Load 20(g_sSamp)
+              88:          87 SampledImage 85 86
+              93:   46(ivec4) ImageGather 88 92 29
+                              Store 81(txval42) 93
+              98:     12(ptr) AccessChain 95(vsout) 29
+                              Store 98 97
+              99:8(VS_OUTPUT) Load 95(vsout)
+                              ReturnValue 99
+                              FunctionEnd

+ 206 - 183
3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gather.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -61,24 +61,28 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -93,6 +97,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -101,7 +107,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -160,24 +166,28 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:43            Color: direct index for structure (temp 4-component vector of float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                0 (const int)
-0:43          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:43            Depth: direct index for structure (temp float)
-0:43              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:43              Constant:
-0:43                1 (const int)
-0:43        Branch: Return
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -192,170 +202,183 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 107
+// Id's are bound by 114
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 71 75
+                              EntryPoint Fragment 4  "main" 79 83
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval20"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 32  "txval21"
-                              Name 35  "g_tTex2di4"
-                              Name 48  "txval22"
-                              Name 51  "g_tTex2du4"
-                              Name 62  "PS_OUTPUT"
-                              MemberName 62(PS_OUTPUT) 0  "Color"
-                              MemberName 62(PS_OUTPUT) 1  "Depth"
-                              Name 64  "psout"
-                              Name 71  "Color"
-                              Name 75  "Depth"
-                              Name 81  "g_tTex1df4a"
-                              Name 82  "g_tTex1df4"
-                              Name 85  "g_tTex1di4"
-                              Name 88  "g_tTex1du4"
-                              Name 91  "g_tTex3df4"
-                              Name 94  "g_tTex3di4"
-                              Name 97  "g_tTex3du4"
-                              Name 100  "g_tTexcdf4"
-                              Name 103  "g_tTexcdi4"
-                              Name 106  "g_tTexcdu4"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              Decorate 35(g_tTex2di4) DescriptorSet 0
-                              Decorate 51(g_tTex2du4) DescriptorSet 0
-                              Decorate 71(Color) Location 0
-                              Decorate 75(Depth) BuiltIn FragDepth
-                              Decorate 81(g_tTex1df4a) DescriptorSet 0
-                              Decorate 81(g_tTex1df4a) Binding 1
-                              Decorate 82(g_tTex1df4) DescriptorSet 0
-                              Decorate 82(g_tTex1df4) Binding 0
-                              Decorate 85(g_tTex1di4) DescriptorSet 0
-                              Decorate 88(g_tTex1du4) DescriptorSet 0
-                              Decorate 91(g_tTex3df4) DescriptorSet 0
-                              Decorate 94(g_tTex3di4) DescriptorSet 0
-                              Decorate 97(g_tTex3du4) DescriptorSet 0
-                              Decorate 100(g_tTexcdf4) DescriptorSet 0
-                              Decorate 103(g_tTexcdi4) DescriptorSet 0
-                              Decorate 106(g_tTexcdu4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval20"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 36  "txval21"
+                              Name 39  "g_tTex2di4"
+                              Name 52  "txval22"
+                              Name 55  "g_tTex2du4"
+                              Name 67  "psout"
+                              Name 76  "flattenTemp"
+                              Name 79  "Color"
+                              Name 83  "Depth"
+                              Name 88  "g_tTex1df4a"
+                              Name 89  "g_tTex1df4"
+                              Name 92  "g_tTex1di4"
+                              Name 95  "g_tTex1du4"
+                              Name 98  "g_tTex3df4"
+                              Name 101  "g_tTex3di4"
+                              Name 104  "g_tTex3du4"
+                              Name 107  "g_tTexcdf4"
+                              Name 110  "g_tTexcdi4"
+                              Name 113  "g_tTexcdu4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 39(g_tTex2di4) DescriptorSet 0
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 79(Color) Location 0
+                              Decorate 83(Depth) BuiltIn FragDepth
+                              Decorate 88(g_tTex1df4a) DescriptorSet 0
+                              Decorate 88(g_tTex1df4a) Binding 1
+                              Decorate 89(g_tTex1df4) DescriptorSet 0
+                              Decorate 89(g_tTex1df4) Binding 0
+                              Decorate 92(g_tTex1di4) DescriptorSet 0
+                              Decorate 95(g_tTex1du4) DescriptorSet 0
+                              Decorate 98(g_tTex3df4) DescriptorSet 0
+                              Decorate 101(g_tTex3di4) DescriptorSet 0
+                              Decorate 104(g_tTex3du4) DescriptorSet 0
+                              Decorate 107(g_tTexcdf4) DescriptorSet 0
+                              Decorate 110(g_tTexcdi4) DescriptorSet 0
+                              Decorate 113(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:    6(float) Constant 1036831949
-              22:    6(float) Constant 1045220557
-              23:   20(fvec2) ConstantComposite 21 22
-              24:             TypeInt 32 1
-              25:             TypeVector 24(int) 2
-              26:     24(int) Constant 1
-              27:     24(int) Constant 0
-              28:   25(ivec2) ConstantComposite 26 27
-              30:             TypeVector 24(int) 4
-              31:             TypePointer Function 30(ivec4)
-              33:             TypeImage 24(int) 2D sampled format:Unknown
-              34:             TypePointer UniformConstant 33
-  35(g_tTex2di4):     34(ptr) Variable UniformConstant
-              38:             TypeSampledImage 33
-              40:    6(float) Constant 1050253722
-              41:    6(float) Constant 1053609165
-              42:   20(fvec2) ConstantComposite 40 41
-              43:   25(ivec2) ConstantComposite 26 26
-              45:             TypeInt 32 0
-              46:             TypeVector 45(int) 4
-              47:             TypePointer Function 46(ivec4)
-              49:             TypeImage 45(int) 2D sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2du4):     50(ptr) Variable UniformConstant
-              54:             TypeSampledImage 49
-              56:    6(float) Constant 1056964608
-              57:    6(float) Constant 1058642330
-              58:   20(fvec2) ConstantComposite 56 57
-              59:     24(int) Constant 4294967295
-              60:   25(ivec2) ConstantComposite 26 59
-   62(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              63:             TypePointer Function 62(PS_OUTPUT)
-              65:    6(float) Constant 1065353216
-              66:    7(fvec4) ConstantComposite 65 65 65 65
-              68:             TypePointer Function 6(float)
-              70:             TypePointer Output 7(fvec4)
-       71(Color):     70(ptr) Variable Output
-              74:             TypePointer Output 6(float)
-       75(Depth):     74(ptr) Variable Output
-              79:             TypeImage 6(float) 1D sampled format:Unknown
-              80:             TypePointer UniformConstant 79
- 81(g_tTex1df4a):     80(ptr) Variable UniformConstant
-  82(g_tTex1df4):     80(ptr) Variable UniformConstant
-              83:             TypeImage 24(int) 1D sampled format:Unknown
-              84:             TypePointer UniformConstant 83
-  85(g_tTex1di4):     84(ptr) Variable UniformConstant
-              86:             TypeImage 45(int) 1D sampled format:Unknown
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:             TypeInt 32 1
+              29:             TypeVector 28(int) 2
+              30:     28(int) Constant 1
+              31:     28(int) Constant 0
+              32:   29(ivec2) ConstantComposite 30 31
+              34:             TypeVector 28(int) 4
+              35:             TypePointer Function 34(ivec4)
+              37:             TypeImage 28(int) 2D sampled format:Unknown
+              38:             TypePointer UniformConstant 37
+  39(g_tTex2di4):     38(ptr) Variable UniformConstant
+              42:             TypeSampledImage 37
+              44:    6(float) Constant 1050253722
+              45:    6(float) Constant 1053609165
+              46:   24(fvec2) ConstantComposite 44 45
+              47:   29(ivec2) ConstantComposite 30 30
+              49:             TypeInt 32 0
+              50:             TypeVector 49(int) 4
+              51:             TypePointer Function 50(ivec4)
+              53:             TypeImage 49(int) 2D sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2du4):     54(ptr) Variable UniformConstant
+              58:             TypeSampledImage 53
+              60:    6(float) Constant 1056964608
+              61:    6(float) Constant 1058642330
+              62:   24(fvec2) ConstantComposite 60 61
+              63:     28(int) Constant 4294967295
+              64:   29(ivec2) ConstantComposite 30 63
+              66:             TypePointer Function 8(PS_OUTPUT)
+              68:    6(float) Constant 1065353216
+              69:    7(fvec4) ConstantComposite 68 68 68 68
+              71:             TypePointer Function 6(float)
+              78:             TypePointer Output 7(fvec4)
+       79(Color):     78(ptr) Variable Output
+              82:             TypePointer Output 6(float)
+       83(Depth):     82(ptr) Variable Output
+              86:             TypeImage 6(float) 1D sampled format:Unknown
               87:             TypePointer UniformConstant 86
-  88(g_tTex1du4):     87(ptr) Variable UniformConstant
-              89:             TypeImage 6(float) 3D sampled format:Unknown
-              90:             TypePointer UniformConstant 89
-  91(g_tTex3df4):     90(ptr) Variable UniformConstant
-              92:             TypeImage 24(int) 3D sampled format:Unknown
-              93:             TypePointer UniformConstant 92
-  94(g_tTex3di4):     93(ptr) Variable UniformConstant
-              95:             TypeImage 45(int) 3D sampled format:Unknown
-              96:             TypePointer UniformConstant 95
-  97(g_tTex3du4):     96(ptr) Variable UniformConstant
-              98:             TypeImage 6(float) Cube sampled format:Unknown
-              99:             TypePointer UniformConstant 98
- 100(g_tTexcdf4):     99(ptr) Variable UniformConstant
-             101:             TypeImage 24(int) Cube sampled format:Unknown
-             102:             TypePointer UniformConstant 101
- 103(g_tTexcdi4):    102(ptr) Variable UniformConstant
-             104:             TypeImage 45(int) Cube sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTexcdu4):    105(ptr) Variable UniformConstant
+ 88(g_tTex1df4a):     87(ptr) Variable UniformConstant
+  89(g_tTex1df4):     87(ptr) Variable UniformConstant
+              90:             TypeImage 28(int) 1D sampled format:Unknown
+              91:             TypePointer UniformConstant 90
+  92(g_tTex1di4):     91(ptr) Variable UniformConstant
+              93:             TypeImage 49(int) 1D sampled format:Unknown
+              94:             TypePointer UniformConstant 93
+  95(g_tTex1du4):     94(ptr) Variable UniformConstant
+              96:             TypeImage 6(float) 3D sampled format:Unknown
+              97:             TypePointer UniformConstant 96
+  98(g_tTex3df4):     97(ptr) Variable UniformConstant
+              99:             TypeImage 28(int) 3D sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+ 101(g_tTex3di4):    100(ptr) Variable UniformConstant
+             102:             TypeImage 49(int) 3D sampled format:Unknown
+             103:             TypePointer UniformConstant 102
+ 104(g_tTex3du4):    103(ptr) Variable UniformConstant
+             105:             TypeImage 6(float) Cube sampled format:Unknown
+             106:             TypePointer UniformConstant 105
+ 107(g_tTexcdf4):    106(ptr) Variable UniformConstant
+             108:             TypeImage 28(int) Cube sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+ 110(g_tTexcdi4):    109(ptr) Variable UniformConstant
+             111:             TypeImage 49(int) Cube sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+ 113(g_tTexcdu4):    112(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval20):      8(ptr) Variable Function
-     32(txval21):     31(ptr) Variable Function
-     48(txval22):     47(ptr) Variable Function
-       64(psout):     63(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              29:    7(fvec4) ImageGather 19 23 27 ConstOffset 28
-                              Store 9(txval20) 29
-              36:          33 Load 35(g_tTex2di4)
-              37:          14 Load 16(g_sSamp)
-              39:          38 SampledImage 36 37
-              44:   30(ivec4) ImageGather 39 42 27 ConstOffset 43
-                              Store 32(txval21) 44
-              52:          49 Load 51(g_tTex2du4)
-              53:          14 Load 16(g_sSamp)
-              55:          54 SampledImage 52 53
-              61:   46(ivec4) ImageGather 55 58 27 ConstOffset 60
-                              Store 48(txval22) 61
-              67:      8(ptr) AccessChain 64(psout) 27
-                              Store 67 66
-              69:     68(ptr) AccessChain 64(psout) 26
-                              Store 69 65
-              72:      8(ptr) AccessChain 64(psout) 27
-              73:    7(fvec4) Load 72
-                              Store 71(Color) 73
-              76:     68(ptr) AccessChain 64(psout) 26
-              77:    6(float) Load 76
-                              Store 75(Depth) 77
+ 76(flattenTemp):     66(ptr) Variable Function
+              77:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 76(flattenTemp) 77
+              80:     12(ptr) AccessChain 76(flattenTemp) 31
+              81:    7(fvec4) Load 80
+                              Store 79(Color) 81
+              84:     71(ptr) AccessChain 76(flattenTemp) 30
+              85:    6(float) Load 84
+                              Store 83(Depth) 85
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval20):     12(ptr) Variable Function
+     36(txval21):     35(ptr) Variable Function
+     52(txval22):     51(ptr) Variable Function
+       67(psout):     66(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              33:    7(fvec4) ImageGather 23 27 31 ConstOffset 32
+                              Store 13(txval20) 33
+              40:          37 Load 39(g_tTex2di4)
+              41:          18 Load 20(g_sSamp)
+              43:          42 SampledImage 40 41
+              48:   34(ivec4) ImageGather 43 46 31 ConstOffset 47
+                              Store 36(txval21) 48
+              56:          53 Load 55(g_tTex2du4)
+              57:          18 Load 20(g_sSamp)
+              59:          58 SampledImage 56 57
+              65:   50(ivec4) ImageGather 59 62 31 ConstOffset 64
+                              Store 52(txval22) 65
+              70:     12(ptr) AccessChain 67(psout) 31
+                              Store 70 69
+              72:     71(ptr) AccessChain 67(psout) 30
+                              Store 72 68
+              73:8(PS_OUTPUT) Load 67(psout)
+                              ReturnValue 73
+                              FunctionEnd

+ 177 - 154
3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gather.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:20    Function Parameters: 
 0:?     Sequence
 0:25      Sequence
@@ -64,24 +64,28 @@ gl_FragCoord origin is upper left
 0:33            1 (const int)
 0:33        Constant:
 0:33          1.000000
-0:35      Sequence
-0:35        Sequence
-0:35          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:35            Color: direct index for structure (temp 4-component vector of float)
-0:35              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:35              Constant:
-0:35                0 (const int)
-0:35          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:35            Depth: direct index for structure (temp float)
-0:35              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:35              Constant:
-0:35                1 (const int)
-0:35        Branch: Return
+0:35      Branch: Return with expression
+0:35        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:20          Color: direct index for structure (temp 4-component vector of float)
+0:20            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20            Constant:
+0:20              0 (const int)
+0:20        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:20          Depth: direct index for structure (temp float)
+0:20            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20            Constant:
+0:20              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -90,6 +94,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -98,7 +104,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:20    Function Parameters: 
 0:?     Sequence
 0:25      Sequence
@@ -160,24 +166,28 @@ gl_FragCoord origin is upper left
 0:33            1 (const int)
 0:33        Constant:
 0:33          1.000000
-0:35      Sequence
-0:35        Sequence
-0:35          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:35            Color: direct index for structure (temp 4-component vector of float)
-0:35              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:35              Constant:
-0:35                0 (const int)
-0:35          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:35            Depth: direct index for structure (temp float)
-0:35              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:35              Constant:
-0:35                1 (const int)
-0:35        Branch: Return
+0:35      Branch: Return with expression
+0:35        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:20          Color: direct index for structure (temp 4-component vector of float)
+0:20            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20            Constant:
+0:20              0 (const int)
+0:20        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:20          Depth: direct index for structure (temp float)
+0:20            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:20            Constant:
+0:20              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -186,141 +196,154 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 90
+// Id's are bound by 97
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 72 76
+                              EntryPoint Fragment 4  "main" 80 84
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval20"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 33  "txval21"
-                              Name 36  "g_tTex2di4"
-                              Name 48  "txval22"
-                              Name 51  "g_tTex2du4"
-                              Name 63  "PS_OUTPUT"
-                              MemberName 63(PS_OUTPUT) 0  "Color"
-                              MemberName 63(PS_OUTPUT) 1  "Depth"
-                              Name 65  "psout"
-                              Name 72  "Color"
-                              Name 76  "Depth"
-                              Name 82  "g_tTex1df4a"
-                              Name 83  "g_tTex1df4"
-                              Name 86  "g_tTex1di4"
-                              Name 89  "g_tTex1du4"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              Decorate 36(g_tTex2di4) DescriptorSet 0
-                              Decorate 51(g_tTex2du4) DescriptorSet 0
-                              Decorate 72(Color) Location 0
-                              Decorate 76(Depth) BuiltIn FragDepth
-                              Decorate 82(g_tTex1df4a) DescriptorSet 0
-                              Decorate 82(g_tTex1df4a) Binding 1
-                              Decorate 83(g_tTex1df4) DescriptorSet 0
-                              Decorate 83(g_tTex1df4) Binding 0
-                              Decorate 86(g_tTex1di4) DescriptorSet 0
-                              Decorate 89(g_tTex1du4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval20"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 37  "txval21"
+                              Name 40  "g_tTex2di4"
+                              Name 52  "txval22"
+                              Name 55  "g_tTex2du4"
+                              Name 68  "psout"
+                              Name 77  "flattenTemp"
+                              Name 80  "Color"
+                              Name 84  "Depth"
+                              Name 89  "g_tTex1df4a"
+                              Name 90  "g_tTex1df4"
+                              Name 93  "g_tTex1di4"
+                              Name 96  "g_tTex1du4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              Decorate 40(g_tTex2di4) DescriptorSet 0
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 80(Color) Location 0
+                              Decorate 84(Depth) BuiltIn FragDepth
+                              Decorate 89(g_tTex1df4a) DescriptorSet 0
+                              Decorate 89(g_tTex1df4a) Binding 1
+                              Decorate 90(g_tTex1df4) DescriptorSet 0
+                              Decorate 90(g_tTex1df4) Binding 0
+                              Decorate 93(g_tTex1di4) DescriptorSet 0
+                              Decorate 96(g_tTex1du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D array sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D array sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 3
-              21:    6(float) Constant 1036831949
-              22:    6(float) Constant 1045220557
-              23:    6(float) Constant 1050253722
-              24:   20(fvec3) ConstantComposite 21 22 23
-              25:             TypeInt 32 1
-              26:             TypeVector 25(int) 2
-              27:     25(int) Constant 1
-              28:     25(int) Constant 0
-              29:   26(ivec2) ConstantComposite 27 28
-              31:             TypeVector 25(int) 4
-              32:             TypePointer Function 31(ivec4)
-              34:             TypeImage 25(int) 2D array sampled format:Unknown
-              35:             TypePointer UniformConstant 34
-  36(g_tTex2di4):     35(ptr) Variable UniformConstant
-              39:             TypeSampledImage 34
-              41:    6(float) Constant 1053609165
-              42:   20(fvec3) ConstantComposite 23 41 41
-              43:   26(ivec2) ConstantComposite 27 27
-              45:             TypeInt 32 0
-              46:             TypeVector 45(int) 4
-              47:             TypePointer Function 46(ivec4)
-              49:             TypeImage 45(int) 2D array sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2du4):     50(ptr) Variable UniformConstant
-              54:             TypeSampledImage 49
-              56:    6(float) Constant 1056964608
-              57:    6(float) Constant 1058642330
-              58:    6(float) Constant 1060320051
-              59:   20(fvec3) ConstantComposite 56 57 58
-              60:     25(int) Constant 4294967295
-              61:   26(ivec2) ConstantComposite 27 60
-   63(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              64:             TypePointer Function 63(PS_OUTPUT)
-              66:    6(float) Constant 1065353216
-              67:    7(fvec4) ConstantComposite 66 66 66 66
-              69:             TypePointer Function 6(float)
-              71:             TypePointer Output 7(fvec4)
-       72(Color):     71(ptr) Variable Output
-              75:             TypePointer Output 6(float)
-       76(Depth):     75(ptr) Variable Output
-              80:             TypeImage 6(float) 1D array sampled format:Unknown
-              81:             TypePointer UniformConstant 80
- 82(g_tTex1df4a):     81(ptr) Variable UniformConstant
-  83(g_tTex1df4):     81(ptr) Variable UniformConstant
-              84:             TypeImage 25(int) 1D array sampled format:Unknown
-              85:             TypePointer UniformConstant 84
-  86(g_tTex1di4):     85(ptr) Variable UniformConstant
-              87:             TypeImage 45(int) 1D array sampled format:Unknown
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 3
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:    6(float) Constant 1050253722
+              28:   24(fvec3) ConstantComposite 25 26 27
+              29:             TypeInt 32 1
+              30:             TypeVector 29(int) 2
+              31:     29(int) Constant 1
+              32:     29(int) Constant 0
+              33:   30(ivec2) ConstantComposite 31 32
+              35:             TypeVector 29(int) 4
+              36:             TypePointer Function 35(ivec4)
+              38:             TypeImage 29(int) 2D array sampled format:Unknown
+              39:             TypePointer UniformConstant 38
+  40(g_tTex2di4):     39(ptr) Variable UniformConstant
+              43:             TypeSampledImage 38
+              45:    6(float) Constant 1053609165
+              46:   24(fvec3) ConstantComposite 27 45 45
+              47:   30(ivec2) ConstantComposite 31 31
+              49:             TypeInt 32 0
+              50:             TypeVector 49(int) 4
+              51:             TypePointer Function 50(ivec4)
+              53:             TypeImage 49(int) 2D array sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2du4):     54(ptr) Variable UniformConstant
+              58:             TypeSampledImage 53
+              60:    6(float) Constant 1056964608
+              61:    6(float) Constant 1058642330
+              62:    6(float) Constant 1060320051
+              63:   24(fvec3) ConstantComposite 60 61 62
+              64:     29(int) Constant 4294967295
+              65:   30(ivec2) ConstantComposite 31 64
+              67:             TypePointer Function 8(PS_OUTPUT)
+              69:    6(float) Constant 1065353216
+              70:    7(fvec4) ConstantComposite 69 69 69 69
+              72:             TypePointer Function 6(float)
+              79:             TypePointer Output 7(fvec4)
+       80(Color):     79(ptr) Variable Output
+              83:             TypePointer Output 6(float)
+       84(Depth):     83(ptr) Variable Output
+              87:             TypeImage 6(float) 1D array sampled format:Unknown
               88:             TypePointer UniformConstant 87
-  89(g_tTex1du4):     88(ptr) Variable UniformConstant
+ 89(g_tTex1df4a):     88(ptr) Variable UniformConstant
+  90(g_tTex1df4):     88(ptr) Variable UniformConstant
+              91:             TypeImage 29(int) 1D array sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+  93(g_tTex1di4):     92(ptr) Variable UniformConstant
+              94:             TypeImage 49(int) 1D array sampled format:Unknown
+              95:             TypePointer UniformConstant 94
+  96(g_tTex1du4):     95(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval20):      8(ptr) Variable Function
-     33(txval21):     32(ptr) Variable Function
-     48(txval22):     47(ptr) Variable Function
-       65(psout):     64(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              30:    7(fvec4) ImageGather 19 24 28 ConstOffset 29
-                              Store 9(txval20) 30
-              37:          34 Load 36(g_tTex2di4)
-              38:          14 Load 16(g_sSamp)
-              40:          39 SampledImage 37 38
-              44:   31(ivec4) ImageGather 40 42 28 ConstOffset 43
-                              Store 33(txval21) 44
-              52:          49 Load 51(g_tTex2du4)
-              53:          14 Load 16(g_sSamp)
-              55:          54 SampledImage 52 53
-              62:   46(ivec4) ImageGather 55 59 28 ConstOffset 61
-                              Store 48(txval22) 62
-              68:      8(ptr) AccessChain 65(psout) 28
-                              Store 68 67
-              70:     69(ptr) AccessChain 65(psout) 27
-                              Store 70 66
-              73:      8(ptr) AccessChain 65(psout) 28
-              74:    7(fvec4) Load 73
-                              Store 72(Color) 74
-              77:     69(ptr) AccessChain 65(psout) 27
-              78:    6(float) Load 77
-                              Store 76(Depth) 78
+ 77(flattenTemp):     67(ptr) Variable Function
+              78:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 77(flattenTemp) 78
+              81:     12(ptr) AccessChain 77(flattenTemp) 32
+              82:    7(fvec4) Load 81
+                              Store 80(Color) 82
+              85:     72(ptr) AccessChain 77(flattenTemp) 31
+              86:    6(float) Load 85
+                              Store 84(Depth) 86
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval20):     12(ptr) Variable Function
+     37(txval21):     36(ptr) Variable Function
+     52(txval22):     51(ptr) Variable Function
+       68(psout):     67(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              34:    7(fvec4) ImageGather 23 28 32 ConstOffset 33
+                              Store 13(txval20) 34
+              41:          38 Load 40(g_tTex2di4)
+              42:          18 Load 20(g_sSamp)
+              44:          43 SampledImage 41 42
+              48:   35(ivec4) ImageGather 44 46 32 ConstOffset 47
+                              Store 37(txval21) 48
+              56:          53 Load 55(g_tTex2du4)
+              57:          18 Load 20(g_sSamp)
+              59:          58 SampledImage 56 57
+              66:   50(ivec4) ImageGather 59 63 32 ConstOffset 65
+                              Store 52(txval22) 66
+              71:     12(ptr) AccessChain 68(psout) 32
+                              Store 71 70
+              73:     72(ptr) AccessChain 68(psout) 31
+                              Store 73 69
+              74:8(PS_OUTPUT) Load 68(psout)
+                              ReturnValue 74
+                              FunctionEnd

+ 395 - 372
3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gatherRGBA.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -334,24 +334,28 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:70      Sequence
-0:70        Sequence
-0:70          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:70            Color: direct index for structure (temp 4-component vector of float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                0 (const int)
-0:70          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:70            Depth: direct index for structure (temp float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                1 (const int)
-0:70        Branch: Return
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -363,6 +367,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 
@@ -372,7 +378,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
@@ -704,24 +710,28 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:70      Sequence
-0:70        Sequence
-0:70          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:70            Color: direct index for structure (temp 4-component vector of float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                0 (const int)
-0:70          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:70            Depth: direct index for structure (temp float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                1 (const int)
-0:70        Branch: Return
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -733,360 +743,373 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 248
+// Id's are bound by 255
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 230 234
+                              EntryPoint Fragment 4  "main" 238 242
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval00"
-                              Name 12  "g_tTex2df4a"
-                              Name 16  "g_sSamp"
-                              Name 22  "$Global"
-                              MemberName 22($Global) 0  "c1"
-                              MemberName 22($Global) 1  "c2"
-                              MemberName 22($Global) 2  "c3"
-                              MemberName 22($Global) 3  "c4"
-                              Name 24  ""
-                              Name 34  "txval01"
-                              Name 37  "g_tTex2di4a"
-                              Name 48  "txval02"
-                              Name 51  "g_tTex2du4a"
-                              Name 59  "txval10"
-                              Name 67  "txval11"
-                              Name 74  "txval12"
-                              Name 81  "txval20"
-                              Name 88  "txval21"
-                              Name 95  "txval22"
-                              Name 102  "txval30"
-                              Name 110  "txval31"
-                              Name 117  "txval32"
-                              Name 124  "txval40"
-                              Name 127  "g_tTexcdf4a"
-                              Name 136  "txval41"
-                              Name 139  "g_tTexcdi4a"
-                              Name 147  "txval42"
-                              Name 150  "g_tTexcdu4a"
-                              Name 158  "txval50"
-                              Name 165  "txval51"
-                              Name 172  "txval52"
-                              Name 179  "txval60"
-                              Name 186  "txval61"
-                              Name 193  "txval62"
-                              Name 200  "txval70"
-                              Name 207  "txval71"
-                              Name 214  "txval72"
-                              Name 221  "PS_OUTPUT"
-                              MemberName 221(PS_OUTPUT) 0  "Color"
-                              MemberName 221(PS_OUTPUT) 1  "Depth"
-                              Name 223  "psout"
-                              Name 230  "Color"
-                              Name 234  "Depth"
-                              Name 238  "g_sSamp2d"
-                              Name 241  "g_tTex1df4a"
-                              Name 244  "g_tTex1di4a"
-                              Name 247  "g_tTex1du4a"
-                              Decorate 12(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              MemberDecorate 22($Global) 0 Offset 0
-                              MemberDecorate 22($Global) 1 Offset 8
-                              MemberDecorate 22($Global) 2 Offset 16
-                              MemberDecorate 22($Global) 3 Offset 32
-                              Decorate 22($Global) Block
-                              Decorate 24 DescriptorSet 0
-                              Decorate 37(g_tTex2di4a) DescriptorSet 0
-                              Decorate 51(g_tTex2du4a) DescriptorSet 0
-                              Decorate 127(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 139(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 150(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 230(Color) Location 0
-                              Decorate 234(Depth) BuiltIn FragDepth
-                              Decorate 238(g_sSamp2d) DescriptorSet 0
-                              Decorate 241(g_tTex1df4a) DescriptorSet 0
-                              Decorate 241(g_tTex1df4a) Binding 0
-                              Decorate 244(g_tTex1di4a) DescriptorSet 0
-                              Decorate 247(g_tTex1du4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval00"
+                              Name 16  "g_tTex2df4a"
+                              Name 20  "g_sSamp"
+                              Name 26  "$Global"
+                              MemberName 26($Global) 0  "c1"
+                              MemberName 26($Global) 1  "c2"
+                              MemberName 26($Global) 2  "c3"
+                              MemberName 26($Global) 3  "c4"
+                              Name 28  ""
+                              Name 38  "txval01"
+                              Name 41  "g_tTex2di4a"
+                              Name 52  "txval02"
+                              Name 55  "g_tTex2du4a"
+                              Name 63  "txval10"
+                              Name 71  "txval11"
+                              Name 78  "txval12"
+                              Name 85  "txval20"
+                              Name 92  "txval21"
+                              Name 99  "txval22"
+                              Name 106  "txval30"
+                              Name 114  "txval31"
+                              Name 121  "txval32"
+                              Name 128  "txval40"
+                              Name 131  "g_tTexcdf4a"
+                              Name 140  "txval41"
+                              Name 143  "g_tTexcdi4a"
+                              Name 151  "txval42"
+                              Name 154  "g_tTexcdu4a"
+                              Name 162  "txval50"
+                              Name 169  "txval51"
+                              Name 176  "txval52"
+                              Name 183  "txval60"
+                              Name 190  "txval61"
+                              Name 197  "txval62"
+                              Name 204  "txval70"
+                              Name 211  "txval71"
+                              Name 218  "txval72"
+                              Name 226  "psout"
+                              Name 235  "flattenTemp"
+                              Name 238  "Color"
+                              Name 242  "Depth"
+                              Name 245  "g_sSamp2d"
+                              Name 248  "g_tTex1df4a"
+                              Name 251  "g_tTex1di4a"
+                              Name 254  "g_tTex1du4a"
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              MemberDecorate 26($Global) 0 Offset 0
+                              MemberDecorate 26($Global) 1 Offset 8
+                              MemberDecorate 26($Global) 2 Offset 16
+                              MemberDecorate 26($Global) 3 Offset 32
+                              Decorate 26($Global) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 41(g_tTex2di4a) DescriptorSet 0
+                              Decorate 55(g_tTex2du4a) DescriptorSet 0
+                              Decorate 131(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 154(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 238(Color) Location 0
+                              Decorate 242(Depth) BuiltIn FragDepth
+                              Decorate 245(g_sSamp2d) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) Binding 0
+                              Decorate 251(g_tTex1di4a) DescriptorSet 0
+                              Decorate 254(g_tTex1du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D array sampled format:Unknown
-              11:             TypePointer UniformConstant 10
- 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D array sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:             TypeVector 6(float) 3
-     22($Global):             TypeStruct 6(float) 20(fvec2) 21(fvec3) 7(fvec4)
-              23:             TypePointer Uniform 22($Global)
-              24:     23(ptr) Variable Uniform
-              25:             TypeInt 32 1
-              26:     25(int) Constant 2
-              27:             TypePointer Uniform 21(fvec3)
-              30:     25(int) Constant 0
-              32:             TypeVector 25(int) 4
-              33:             TypePointer Function 32(ivec4)
-              35:             TypeImage 25(int) 2D array sampled format:Unknown
-              36:             TypePointer UniformConstant 35
- 37(g_tTex2di4a):     36(ptr) Variable UniformConstant
-              40:             TypeSampledImage 35
-              45:             TypeInt 32 0
-              46:             TypeVector 45(int) 4
-              47:             TypePointer Function 46(ivec4)
-              49:             TypeImage 45(int) 2D array sampled format:Unknown
-              50:             TypePointer UniformConstant 49
- 51(g_tTex2du4a):     50(ptr) Variable UniformConstant
-              54:             TypeSampledImage 49
-              65:     25(int) Constant 1
-             108:     25(int) Constant 3
-             125:             TypeImage 6(float) Cube array sampled format:Unknown
-             126:             TypePointer UniformConstant 125
-127(g_tTexcdf4a):    126(ptr) Variable UniformConstant
-             130:             TypeSampledImage 125
-             132:             TypePointer Uniform 7(fvec4)
-             137:             TypeImage 25(int) Cube array sampled format:Unknown
-             138:             TypePointer UniformConstant 137
-139(g_tTexcdi4a):    138(ptr) Variable UniformConstant
-             142:             TypeSampledImage 137
-             148:             TypeImage 45(int) Cube array sampled format:Unknown
-             149:             TypePointer UniformConstant 148
-150(g_tTexcdu4a):    149(ptr) Variable UniformConstant
-             153:             TypeSampledImage 148
-  221(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             222:             TypePointer Function 221(PS_OUTPUT)
-             224:    6(float) Constant 1065353216
-             225:    7(fvec4) ConstantComposite 224 224 224 224
-             227:             TypePointer Function 6(float)
-             229:             TypePointer Output 7(fvec4)
-      230(Color):    229(ptr) Variable Output
-             233:             TypePointer Output 6(float)
-      234(Depth):    233(ptr) Variable Output
-  238(g_sSamp2d):     15(ptr) Variable UniformConstant
-             239:             TypeImage 6(float) 1D array sampled format:Unknown
-             240:             TypePointer UniformConstant 239
-241(g_tTex1df4a):    240(ptr) Variable UniformConstant
-             242:             TypeImage 25(int) 1D array sampled format:Unknown
-             243:             TypePointer UniformConstant 242
-244(g_tTex1di4a):    243(ptr) Variable UniformConstant
-             245:             TypeImage 45(int) 1D array sampled format:Unknown
-             246:             TypePointer UniformConstant 245
-247(g_tTex1du4a):    246(ptr) Variable UniformConstant
+ 16(g_tTex2df4a):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:             TypeVector 6(float) 3
+     26($Global):             TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4)
+              27:             TypePointer Uniform 26($Global)
+              28:     27(ptr) Variable Uniform
+              29:             TypeInt 32 1
+              30:     29(int) Constant 2
+              31:             TypePointer Uniform 25(fvec3)
+              34:     29(int) Constant 0
+              36:             TypeVector 29(int) 4
+              37:             TypePointer Function 36(ivec4)
+              39:             TypeImage 29(int) 2D array sampled format:Unknown
+              40:             TypePointer UniformConstant 39
+ 41(g_tTex2di4a):     40(ptr) Variable UniformConstant
+              44:             TypeSampledImage 39
+              49:             TypeInt 32 0
+              50:             TypeVector 49(int) 4
+              51:             TypePointer Function 50(ivec4)
+              53:             TypeImage 49(int) 2D array sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+ 55(g_tTex2du4a):     54(ptr) Variable UniformConstant
+              58:             TypeSampledImage 53
+              69:     29(int) Constant 1
+             112:     29(int) Constant 3
+             129:             TypeImage 6(float) Cube array sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+131(g_tTexcdf4a):    130(ptr) Variable UniformConstant
+             134:             TypeSampledImage 129
+             136:             TypePointer Uniform 7(fvec4)
+             141:             TypeImage 29(int) Cube array sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+143(g_tTexcdi4a):    142(ptr) Variable UniformConstant
+             146:             TypeSampledImage 141
+             152:             TypeImage 49(int) Cube array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTexcdu4a):    153(ptr) Variable UniformConstant
+             157:             TypeSampledImage 152
+             225:             TypePointer Function 8(PS_OUTPUT)
+             227:    6(float) Constant 1065353216
+             228:    7(fvec4) ConstantComposite 227 227 227 227
+             230:             TypePointer Function 6(float)
+             237:             TypePointer Output 7(fvec4)
+      238(Color):    237(ptr) Variable Output
+             241:             TypePointer Output 6(float)
+      242(Depth):    241(ptr) Variable Output
+  245(g_sSamp2d):     19(ptr) Variable UniformConstant
+             246:             TypeImage 6(float) 1D array sampled format:Unknown
+             247:             TypePointer UniformConstant 246
+248(g_tTex1df4a):    247(ptr) Variable UniformConstant
+             249:             TypeImage 29(int) 1D array sampled format:Unknown
+             250:             TypePointer UniformConstant 249
+251(g_tTex1di4a):    250(ptr) Variable UniformConstant
+             252:             TypeImage 49(int) 1D array sampled format:Unknown
+             253:             TypePointer UniformConstant 252
+254(g_tTex1du4a):    253(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval00):      8(ptr) Variable Function
-     34(txval01):     33(ptr) Variable Function
-     48(txval02):     47(ptr) Variable Function
-     59(txval10):      8(ptr) Variable Function
-     67(txval11):     33(ptr) Variable Function
-     74(txval12):     47(ptr) Variable Function
-     81(txval20):      8(ptr) Variable Function
-     88(txval21):     33(ptr) Variable Function
-     95(txval22):     47(ptr) Variable Function
-    102(txval30):      8(ptr) Variable Function
-    110(txval31):     33(ptr) Variable Function
-    117(txval32):     47(ptr) Variable Function
-    124(txval40):      8(ptr) Variable Function
-    136(txval41):     33(ptr) Variable Function
-    147(txval42):     47(ptr) Variable Function
-    158(txval50):      8(ptr) Variable Function
-    165(txval51):     33(ptr) Variable Function
-    172(txval52):     47(ptr) Variable Function
-    179(txval60):      8(ptr) Variable Function
-    186(txval61):     33(ptr) Variable Function
-    193(txval62):     47(ptr) Variable Function
-    200(txval70):      8(ptr) Variable Function
-    207(txval71):     33(ptr) Variable Function
-    214(txval72):     47(ptr) Variable Function
-      223(psout):    222(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4a)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              28:     27(ptr) AccessChain 24 26
-              29:   21(fvec3) Load 28
-              31:    7(fvec4) ImageGather 19 29 30
-                              Store 9(txval00) 31
-              38:          35 Load 37(g_tTex2di4a)
-              39:          14 Load 16(g_sSamp)
-              41:          40 SampledImage 38 39
-              42:     27(ptr) AccessChain 24 26
-              43:   21(fvec3) Load 42
-              44:   32(ivec4) ImageGather 41 43 30
-                              Store 34(txval01) 44
-              52:          49 Load 51(g_tTex2du4a)
-              53:          14 Load 16(g_sSamp)
-              55:          54 SampledImage 52 53
-              56:     27(ptr) AccessChain 24 26
-              57:   21(fvec3) Load 56
-              58:   46(ivec4) ImageGather 55 57 30
-                              Store 48(txval02) 58
-              60:          10 Load 12(g_tTex2df4a)
-              61:          14 Load 16(g_sSamp)
-              62:          18 SampledImage 60 61
-              63:     27(ptr) AccessChain 24 26
-              64:   21(fvec3) Load 63
-              66:    7(fvec4) ImageGather 62 64 65
-                              Store 59(txval10) 66
-              68:          35 Load 37(g_tTex2di4a)
-              69:          14 Load 16(g_sSamp)
-              70:          40 SampledImage 68 69
-              71:     27(ptr) AccessChain 24 26
-              72:   21(fvec3) Load 71
-              73:   32(ivec4) ImageGather 70 72 65
-                              Store 67(txval11) 73
-              75:          49 Load 51(g_tTex2du4a)
-              76:          14 Load 16(g_sSamp)
-              77:          54 SampledImage 75 76
-              78:     27(ptr) AccessChain 24 26
-              79:   21(fvec3) Load 78
-              80:   46(ivec4) ImageGather 77 79 65
-                              Store 74(txval12) 80
-              82:          10 Load 12(g_tTex2df4a)
-              83:          14 Load 16(g_sSamp)
-              84:          18 SampledImage 82 83
-              85:     27(ptr) AccessChain 24 26
-              86:   21(fvec3) Load 85
-              87:    7(fvec4) ImageGather 84 86 26
-                              Store 81(txval20) 87
-              89:          35 Load 37(g_tTex2di4a)
-              90:          14 Load 16(g_sSamp)
-              91:          40 SampledImage 89 90
-              92:     27(ptr) AccessChain 24 26
-              93:   21(fvec3) Load 92
-              94:   32(ivec4) ImageGather 91 93 26
-                              Store 88(txval21) 94
-              96:          49 Load 51(g_tTex2du4a)
-              97:          14 Load 16(g_sSamp)
-              98:          54 SampledImage 96 97
-              99:     27(ptr) AccessChain 24 26
-             100:   21(fvec3) Load 99
-             101:   46(ivec4) ImageGather 98 100 26
-                              Store 95(txval22) 101
-             103:          10 Load 12(g_tTex2df4a)
-             104:          14 Load 16(g_sSamp)
-             105:          18 SampledImage 103 104
-             106:     27(ptr) AccessChain 24 26
-             107:   21(fvec3) Load 106
-             109:    7(fvec4) ImageGather 105 107 108
-                              Store 102(txval30) 109
-             111:          35 Load 37(g_tTex2di4a)
-             112:          14 Load 16(g_sSamp)
-             113:          40 SampledImage 111 112
-             114:     27(ptr) AccessChain 24 26
-             115:   21(fvec3) Load 114
-             116:   32(ivec4) ImageGather 113 115 108
-                              Store 110(txval31) 116
-             118:          49 Load 51(g_tTex2du4a)
-             119:          14 Load 16(g_sSamp)
-             120:          54 SampledImage 118 119
-             121:     27(ptr) AccessChain 24 26
-             122:   21(fvec3) Load 121
-             123:   46(ivec4) ImageGather 120 122 108
-                              Store 117(txval32) 123
-             128:         125 Load 127(g_tTexcdf4a)
-             129:          14 Load 16(g_sSamp)
-             131:         130 SampledImage 128 129
-             133:    132(ptr) AccessChain 24 108
-             134:    7(fvec4) Load 133
-             135:    7(fvec4) ImageGather 131 134 30
-                              Store 124(txval40) 135
-             140:         137 Load 139(g_tTexcdi4a)
-             141:          14 Load 16(g_sSamp)
-             143:         142 SampledImage 140 141
-             144:    132(ptr) AccessChain 24 108
-             145:    7(fvec4) Load 144
-             146:   32(ivec4) ImageGather 143 145 30
-                              Store 136(txval41) 146
-             151:         148 Load 150(g_tTexcdu4a)
-             152:          14 Load 16(g_sSamp)
-             154:         153 SampledImage 151 152
-             155:    132(ptr) AccessChain 24 108
-             156:    7(fvec4) Load 155
-             157:   46(ivec4) ImageGather 154 156 30
-                              Store 147(txval42) 157
-             159:         125 Load 127(g_tTexcdf4a)
-             160:          14 Load 16(g_sSamp)
-             161:         130 SampledImage 159 160
-             162:    132(ptr) AccessChain 24 108
-             163:    7(fvec4) Load 162
-             164:    7(fvec4) ImageGather 161 163 65
-                              Store 158(txval50) 164
-             166:         137 Load 139(g_tTexcdi4a)
-             167:          14 Load 16(g_sSamp)
-             168:         142 SampledImage 166 167
-             169:    132(ptr) AccessChain 24 108
-             170:    7(fvec4) Load 169
-             171:   32(ivec4) ImageGather 168 170 65
-                              Store 165(txval51) 171
-             173:         148 Load 150(g_tTexcdu4a)
-             174:          14 Load 16(g_sSamp)
-             175:         153 SampledImage 173 174
-             176:    132(ptr) AccessChain 24 108
-             177:    7(fvec4) Load 176
-             178:   46(ivec4) ImageGather 175 177 65
-                              Store 172(txval52) 178
-             180:         125 Load 127(g_tTexcdf4a)
-             181:          14 Load 16(g_sSamp)
-             182:         130 SampledImage 180 181
-             183:    132(ptr) AccessChain 24 108
-             184:    7(fvec4) Load 183
-             185:    7(fvec4) ImageGather 182 184 26
-                              Store 179(txval60) 185
-             187:         137 Load 139(g_tTexcdi4a)
-             188:          14 Load 16(g_sSamp)
-             189:         142 SampledImage 187 188
-             190:    132(ptr) AccessChain 24 108
-             191:    7(fvec4) Load 190
-             192:   32(ivec4) ImageGather 189 191 26
-                              Store 186(txval61) 192
-             194:         148 Load 150(g_tTexcdu4a)
-             195:          14 Load 16(g_sSamp)
-             196:         153 SampledImage 194 195
-             197:    132(ptr) AccessChain 24 108
-             198:    7(fvec4) Load 197
-             199:   46(ivec4) ImageGather 196 198 26
-                              Store 193(txval62) 199
-             201:         125 Load 127(g_tTexcdf4a)
-             202:          14 Load 16(g_sSamp)
-             203:         130 SampledImage 201 202
-             204:    132(ptr) AccessChain 24 108
-             205:    7(fvec4) Load 204
-             206:    7(fvec4) ImageGather 203 205 108
-                              Store 200(txval70) 206
-             208:         137 Load 139(g_tTexcdi4a)
-             209:          14 Load 16(g_sSamp)
-             210:         142 SampledImage 208 209
-             211:    132(ptr) AccessChain 24 108
-             212:    7(fvec4) Load 211
-             213:   32(ivec4) ImageGather 210 212 108
-                              Store 207(txval71) 213
-             215:         148 Load 150(g_tTexcdu4a)
-             216:          14 Load 16(g_sSamp)
-             217:         153 SampledImage 215 216
-             218:    132(ptr) AccessChain 24 108
-             219:    7(fvec4) Load 218
-             220:   46(ivec4) ImageGather 217 219 108
-                              Store 214(txval72) 220
-             226:      8(ptr) AccessChain 223(psout) 30
-                              Store 226 225
-             228:    227(ptr) AccessChain 223(psout) 65
-                              Store 228 224
-             231:      8(ptr) AccessChain 223(psout) 30
-             232:    7(fvec4) Load 231
-                              Store 230(Color) 232
-             235:    227(ptr) AccessChain 223(psout) 65
-             236:    6(float) Load 235
-                              Store 234(Depth) 236
+235(flattenTemp):    225(ptr) Variable Function
+             236:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 235(flattenTemp) 236
+             239:     12(ptr) AccessChain 235(flattenTemp) 34
+             240:    7(fvec4) Load 239
+                              Store 238(Color) 240
+             243:    230(ptr) AccessChain 235(flattenTemp) 69
+             244:    6(float) Load 243
+                              Store 242(Depth) 244
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval00):     12(ptr) Variable Function
+     38(txval01):     37(ptr) Variable Function
+     52(txval02):     51(ptr) Variable Function
+     63(txval10):     12(ptr) Variable Function
+     71(txval11):     37(ptr) Variable Function
+     78(txval12):     51(ptr) Variable Function
+     85(txval20):     12(ptr) Variable Function
+     92(txval21):     37(ptr) Variable Function
+     99(txval22):     51(ptr) Variable Function
+    106(txval30):     12(ptr) Variable Function
+    114(txval31):     37(ptr) Variable Function
+    121(txval32):     51(ptr) Variable Function
+    128(txval40):     12(ptr) Variable Function
+    140(txval41):     37(ptr) Variable Function
+    151(txval42):     51(ptr) Variable Function
+    162(txval50):     12(ptr) Variable Function
+    169(txval51):     37(ptr) Variable Function
+    176(txval52):     51(ptr) Variable Function
+    183(txval60):     12(ptr) Variable Function
+    190(txval61):     37(ptr) Variable Function
+    197(txval62):     51(ptr) Variable Function
+    204(txval70):     12(ptr) Variable Function
+    211(txval71):     37(ptr) Variable Function
+    218(txval72):     51(ptr) Variable Function
+      226(psout):    225(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4a)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              32:     31(ptr) AccessChain 28 30
+              33:   25(fvec3) Load 32
+              35:    7(fvec4) ImageGather 23 33 34
+                              Store 13(txval00) 35
+              42:          39 Load 41(g_tTex2di4a)
+              43:          18 Load 20(g_sSamp)
+              45:          44 SampledImage 42 43
+              46:     31(ptr) AccessChain 28 30
+              47:   25(fvec3) Load 46
+              48:   36(ivec4) ImageGather 45 47 34
+                              Store 38(txval01) 48
+              56:          53 Load 55(g_tTex2du4a)
+              57:          18 Load 20(g_sSamp)
+              59:          58 SampledImage 56 57
+              60:     31(ptr) AccessChain 28 30
+              61:   25(fvec3) Load 60
+              62:   50(ivec4) ImageGather 59 61 34
+                              Store 52(txval02) 62
+              64:          14 Load 16(g_tTex2df4a)
+              65:          18 Load 20(g_sSamp)
+              66:          22 SampledImage 64 65
+              67:     31(ptr) AccessChain 28 30
+              68:   25(fvec3) Load 67
+              70:    7(fvec4) ImageGather 66 68 69
+                              Store 63(txval10) 70
+              72:          39 Load 41(g_tTex2di4a)
+              73:          18 Load 20(g_sSamp)
+              74:          44 SampledImage 72 73
+              75:     31(ptr) AccessChain 28 30
+              76:   25(fvec3) Load 75
+              77:   36(ivec4) ImageGather 74 76 69
+                              Store 71(txval11) 77
+              79:          53 Load 55(g_tTex2du4a)
+              80:          18 Load 20(g_sSamp)
+              81:          58 SampledImage 79 80
+              82:     31(ptr) AccessChain 28 30
+              83:   25(fvec3) Load 82
+              84:   50(ivec4) ImageGather 81 83 69
+                              Store 78(txval12) 84
+              86:          14 Load 16(g_tTex2df4a)
+              87:          18 Load 20(g_sSamp)
+              88:          22 SampledImage 86 87
+              89:     31(ptr) AccessChain 28 30
+              90:   25(fvec3) Load 89
+              91:    7(fvec4) ImageGather 88 90 30
+                              Store 85(txval20) 91
+              93:          39 Load 41(g_tTex2di4a)
+              94:          18 Load 20(g_sSamp)
+              95:          44 SampledImage 93 94
+              96:     31(ptr) AccessChain 28 30
+              97:   25(fvec3) Load 96
+              98:   36(ivec4) ImageGather 95 97 30
+                              Store 92(txval21) 98
+             100:          53 Load 55(g_tTex2du4a)
+             101:          18 Load 20(g_sSamp)
+             102:          58 SampledImage 100 101
+             103:     31(ptr) AccessChain 28 30
+             104:   25(fvec3) Load 103
+             105:   50(ivec4) ImageGather 102 104 30
+                              Store 99(txval22) 105
+             107:          14 Load 16(g_tTex2df4a)
+             108:          18 Load 20(g_sSamp)
+             109:          22 SampledImage 107 108
+             110:     31(ptr) AccessChain 28 30
+             111:   25(fvec3) Load 110
+             113:    7(fvec4) ImageGather 109 111 112
+                              Store 106(txval30) 113
+             115:          39 Load 41(g_tTex2di4a)
+             116:          18 Load 20(g_sSamp)
+             117:          44 SampledImage 115 116
+             118:     31(ptr) AccessChain 28 30
+             119:   25(fvec3) Load 118
+             120:   36(ivec4) ImageGather 117 119 112
+                              Store 114(txval31) 120
+             122:          53 Load 55(g_tTex2du4a)
+             123:          18 Load 20(g_sSamp)
+             124:          58 SampledImage 122 123
+             125:     31(ptr) AccessChain 28 30
+             126:   25(fvec3) Load 125
+             127:   50(ivec4) ImageGather 124 126 112
+                              Store 121(txval32) 127
+             132:         129 Load 131(g_tTexcdf4a)
+             133:          18 Load 20(g_sSamp)
+             135:         134 SampledImage 132 133
+             137:    136(ptr) AccessChain 28 112
+             138:    7(fvec4) Load 137
+             139:    7(fvec4) ImageGather 135 138 34
+                              Store 128(txval40) 139
+             144:         141 Load 143(g_tTexcdi4a)
+             145:          18 Load 20(g_sSamp)
+             147:         146 SampledImage 144 145
+             148:    136(ptr) AccessChain 28 112
+             149:    7(fvec4) Load 148
+             150:   36(ivec4) ImageGather 147 149 34
+                              Store 140(txval41) 150
+             155:         152 Load 154(g_tTexcdu4a)
+             156:          18 Load 20(g_sSamp)
+             158:         157 SampledImage 155 156
+             159:    136(ptr) AccessChain 28 112
+             160:    7(fvec4) Load 159
+             161:   50(ivec4) ImageGather 158 160 34
+                              Store 151(txval42) 161
+             163:         129 Load 131(g_tTexcdf4a)
+             164:          18 Load 20(g_sSamp)
+             165:         134 SampledImage 163 164
+             166:    136(ptr) AccessChain 28 112
+             167:    7(fvec4) Load 166
+             168:    7(fvec4) ImageGather 165 167 69
+                              Store 162(txval50) 168
+             170:         141 Load 143(g_tTexcdi4a)
+             171:          18 Load 20(g_sSamp)
+             172:         146 SampledImage 170 171
+             173:    136(ptr) AccessChain 28 112
+             174:    7(fvec4) Load 173
+             175:   36(ivec4) ImageGather 172 174 69
+                              Store 169(txval51) 175
+             177:         152 Load 154(g_tTexcdu4a)
+             178:          18 Load 20(g_sSamp)
+             179:         157 SampledImage 177 178
+             180:    136(ptr) AccessChain 28 112
+             181:    7(fvec4) Load 180
+             182:   50(ivec4) ImageGather 179 181 69
+                              Store 176(txval52) 182
+             184:         129 Load 131(g_tTexcdf4a)
+             185:          18 Load 20(g_sSamp)
+             186:         134 SampledImage 184 185
+             187:    136(ptr) AccessChain 28 112
+             188:    7(fvec4) Load 187
+             189:    7(fvec4) ImageGather 186 188 30
+                              Store 183(txval60) 189
+             191:         141 Load 143(g_tTexcdi4a)
+             192:          18 Load 20(g_sSamp)
+             193:         146 SampledImage 191 192
+             194:    136(ptr) AccessChain 28 112
+             195:    7(fvec4) Load 194
+             196:   36(ivec4) ImageGather 193 195 30
+                              Store 190(txval61) 196
+             198:         152 Load 154(g_tTexcdu4a)
+             199:          18 Load 20(g_sSamp)
+             200:         157 SampledImage 198 199
+             201:    136(ptr) AccessChain 28 112
+             202:    7(fvec4) Load 201
+             203:   50(ivec4) ImageGather 200 202 30
+                              Store 197(txval62) 203
+             205:         129 Load 131(g_tTexcdf4a)
+             206:          18 Load 20(g_sSamp)
+             207:         134 SampledImage 205 206
+             208:    136(ptr) AccessChain 28 112
+             209:    7(fvec4) Load 208
+             210:    7(fvec4) ImageGather 207 209 112
+                              Store 204(txval70) 210
+             212:         141 Load 143(g_tTexcdi4a)
+             213:          18 Load 20(g_sSamp)
+             214:         146 SampledImage 212 213
+             215:    136(ptr) AccessChain 28 112
+             216:    7(fvec4) Load 215
+             217:   36(ivec4) ImageGather 214 216 112
+                              Store 211(txval71) 217
+             219:         152 Load 154(g_tTexcdu4a)
+             220:          18 Load 20(g_sSamp)
+             221:         157 SampledImage 219 220
+             222:    136(ptr) AccessChain 28 112
+             223:    7(fvec4) Load 222
+             224:   50(ivec4) ImageGather 221 223 112
+                              Store 218(txval72) 224
+             229:     12(ptr) AccessChain 226(psout) 34
+                              Store 229 228
+             231:    230(ptr) AccessChain 226(psout) 69
+                              Store 231 227
+             232:8(PS_OUTPUT) Load 226(psout)
+                              ReturnValue 232
+                              FunctionEnd

+ 413 - 390
3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gatherRGBA.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:34    Function Parameters: 
 0:?     Sequence
 0:39      Sequence
@@ -334,24 +334,28 @@ gl_FragCoord origin is upper left
 0:74            1 (const int)
 0:74        Constant:
 0:74          1.000000
-0:76      Sequence
-0:76        Sequence
-0:76          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:76            Color: direct index for structure (temp 4-component vector of float)
-0:76              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:76              Constant:
-0:76                0 (const int)
-0:76          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:76            Depth: direct index for structure (temp float)
-0:76              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:76              Constant:
-0:76                1 (const int)
-0:76        Branch: Return
+0:76      Branch: Return with expression
+0:76        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34  Function Definition: main( (temp void)
+0:34    Function Parameters: 
+0:?     Sequence
+0:34      Sequence
+0:34        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:34          Color: direct index for structure (temp 4-component vector of float)
+0:34            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34            Constant:
+0:34              0 (const int)
+0:34        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:34          Depth: direct index for structure (temp float)
+0:34            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34            Constant:
+0:34              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -367,6 +371,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 
@@ -376,7 +382,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:34    Function Parameters: 
 0:?     Sequence
 0:39      Sequence
@@ -708,24 +714,28 @@ gl_FragCoord origin is upper left
 0:74            1 (const int)
 0:74        Constant:
 0:74          1.000000
-0:76      Sequence
-0:76        Sequence
-0:76          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:76            Color: direct index for structure (temp 4-component vector of float)
-0:76              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:76              Constant:
-0:76                0 (const int)
-0:76          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:76            Depth: direct index for structure (temp float)
-0:76              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:76              Constant:
-0:76                1 (const int)
-0:76        Branch: Return
+0:76      Branch: Return with expression
+0:76        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34  Function Definition: main( (temp void)
+0:34    Function Parameters: 
+0:?     Sequence
+0:34      Sequence
+0:34        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:34          Color: direct index for structure (temp 4-component vector of float)
+0:34            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34            Constant:
+0:34              0 (const int)
+0:34        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:34          Depth: direct index for structure (temp float)
+0:34            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34            Constant:
+0:34              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -741,378 +751,391 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 258
+// Id's are bound by 265
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 230 234
+                              EntryPoint Fragment 4  "main" 238 242
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval00"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 22  "$Global"
-                              MemberName 22($Global) 0  "c1"
-                              MemberName 22($Global) 1  "c2"
-                              MemberName 22($Global) 2  "c3"
-                              MemberName 22($Global) 3  "c4"
-                              Name 24  ""
-                              Name 34  "txval01"
-                              Name 37  "g_tTex2di4"
-                              Name 48  "txval02"
-                              Name 51  "g_tTex2du4"
-                              Name 59  "txval10"
-                              Name 66  "txval11"
-                              Name 73  "txval12"
-                              Name 80  "txval20"
-                              Name 88  "txval21"
-                              Name 95  "txval22"
-                              Name 102  "txval30"
-                              Name 110  "txval31"
-                              Name 117  "txval32"
-                              Name 124  "txval40"
-                              Name 127  "g_tTexcdf4"
-                              Name 136  "txval41"
-                              Name 139  "g_tTexcdi4"
-                              Name 147  "txval42"
-                              Name 150  "g_tTexcdu4"
-                              Name 158  "txval50"
-                              Name 165  "txval51"
-                              Name 172  "txval52"
-                              Name 179  "txval60"
-                              Name 186  "txval61"
-                              Name 193  "txval62"
-                              Name 200  "txval70"
-                              Name 207  "txval71"
-                              Name 214  "txval72"
-                              Name 221  "PS_OUTPUT"
-                              MemberName 221(PS_OUTPUT) 0  "Color"
-                              MemberName 221(PS_OUTPUT) 1  "Depth"
-                              Name 223  "psout"
-                              Name 230  "Color"
-                              Name 234  "Depth"
-                              Name 238  "g_sSamp2d"
-                              Name 241  "g_tTex1df4a"
-                              Name 242  "g_tTex1df4"
-                              Name 245  "g_tTex1di4"
-                              Name 248  "g_tTex1du4"
-                              Name 251  "g_tTex3df4"
-                              Name 254  "g_tTex3di4"
-                              Name 257  "g_tTex3du4"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              MemberDecorate 22($Global) 0 Offset 0
-                              MemberDecorate 22($Global) 1 Offset 8
-                              MemberDecorate 22($Global) 2 Offset 16
-                              MemberDecorate 22($Global) 3 Offset 32
-                              Decorate 22($Global) Block
-                              Decorate 24 DescriptorSet 0
-                              Decorate 37(g_tTex2di4) DescriptorSet 0
-                              Decorate 51(g_tTex2du4) DescriptorSet 0
-                              Decorate 127(g_tTexcdf4) DescriptorSet 0
-                              Decorate 139(g_tTexcdi4) DescriptorSet 0
-                              Decorate 150(g_tTexcdu4) DescriptorSet 0
-                              Decorate 230(Color) Location 0
-                              Decorate 234(Depth) BuiltIn FragDepth
-                              Decorate 238(g_sSamp2d) DescriptorSet 0
-                              Decorate 241(g_tTex1df4a) DescriptorSet 0
-                              Decorate 241(g_tTex1df4a) Binding 1
-                              Decorate 242(g_tTex1df4) DescriptorSet 0
-                              Decorate 242(g_tTex1df4) Binding 0
-                              Decorate 245(g_tTex1di4) DescriptorSet 0
-                              Decorate 248(g_tTex1du4) DescriptorSet 0
-                              Decorate 251(g_tTex3df4) DescriptorSet 0
-                              Decorate 254(g_tTex3di4) DescriptorSet 0
-                              Decorate 257(g_tTex3du4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval00"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 26  "$Global"
+                              MemberName 26($Global) 0  "c1"
+                              MemberName 26($Global) 1  "c2"
+                              MemberName 26($Global) 2  "c3"
+                              MemberName 26($Global) 3  "c4"
+                              Name 28  ""
+                              Name 38  "txval01"
+                              Name 41  "g_tTex2di4"
+                              Name 52  "txval02"
+                              Name 55  "g_tTex2du4"
+                              Name 63  "txval10"
+                              Name 70  "txval11"
+                              Name 77  "txval12"
+                              Name 84  "txval20"
+                              Name 92  "txval21"
+                              Name 99  "txval22"
+                              Name 106  "txval30"
+                              Name 114  "txval31"
+                              Name 121  "txval32"
+                              Name 128  "txval40"
+                              Name 131  "g_tTexcdf4"
+                              Name 140  "txval41"
+                              Name 143  "g_tTexcdi4"
+                              Name 151  "txval42"
+                              Name 154  "g_tTexcdu4"
+                              Name 162  "txval50"
+                              Name 169  "txval51"
+                              Name 176  "txval52"
+                              Name 183  "txval60"
+                              Name 190  "txval61"
+                              Name 197  "txval62"
+                              Name 204  "txval70"
+                              Name 211  "txval71"
+                              Name 218  "txval72"
+                              Name 226  "psout"
+                              Name 235  "flattenTemp"
+                              Name 238  "Color"
+                              Name 242  "Depth"
+                              Name 245  "g_sSamp2d"
+                              Name 248  "g_tTex1df4a"
+                              Name 249  "g_tTex1df4"
+                              Name 252  "g_tTex1di4"
+                              Name 255  "g_tTex1du4"
+                              Name 258  "g_tTex3df4"
+                              Name 261  "g_tTex3di4"
+                              Name 264  "g_tTex3du4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              MemberDecorate 26($Global) 0 Offset 0
+                              MemberDecorate 26($Global) 1 Offset 8
+                              MemberDecorate 26($Global) 2 Offset 16
+                              MemberDecorate 26($Global) 3 Offset 32
+                              Decorate 26($Global) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 41(g_tTex2di4) DescriptorSet 0
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 131(g_tTexcdf4) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4) DescriptorSet 0
+                              Decorate 154(g_tTexcdu4) DescriptorSet 0
+                              Decorate 238(Color) Location 0
+                              Decorate 242(Depth) BuiltIn FragDepth
+                              Decorate 245(g_sSamp2d) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) Binding 1
+                              Decorate 249(g_tTex1df4) DescriptorSet 0
+                              Decorate 249(g_tTex1df4) Binding 0
+                              Decorate 252(g_tTex1di4) DescriptorSet 0
+                              Decorate 255(g_tTex1du4) DescriptorSet 0
+                              Decorate 258(g_tTex3df4) DescriptorSet 0
+                              Decorate 261(g_tTex3di4) DescriptorSet 0
+                              Decorate 264(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:             TypeVector 6(float) 3
-     22($Global):             TypeStruct 6(float) 20(fvec2) 21(fvec3) 7(fvec4)
-              23:             TypePointer Uniform 22($Global)
-              24:     23(ptr) Variable Uniform
-              25:             TypeInt 32 1
-              26:     25(int) Constant 1
-              27:             TypePointer Uniform 20(fvec2)
-              30:     25(int) Constant 0
-              32:             TypeVector 25(int) 4
-              33:             TypePointer Function 32(ivec4)
-              35:             TypeImage 25(int) 2D sampled format:Unknown
-              36:             TypePointer UniformConstant 35
-  37(g_tTex2di4):     36(ptr) Variable UniformConstant
-              40:             TypeSampledImage 35
-              45:             TypeInt 32 0
-              46:             TypeVector 45(int) 4
-              47:             TypePointer Function 46(ivec4)
-              49:             TypeImage 45(int) 2D sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2du4):     50(ptr) Variable UniformConstant
-              54:             TypeSampledImage 49
-              86:     25(int) Constant 2
-             108:     25(int) Constant 3
-             125:             TypeImage 6(float) Cube sampled format:Unknown
-             126:             TypePointer UniformConstant 125
- 127(g_tTexcdf4):    126(ptr) Variable UniformConstant
-             130:             TypeSampledImage 125
-             132:             TypePointer Uniform 21(fvec3)
-             137:             TypeImage 25(int) Cube sampled format:Unknown
-             138:             TypePointer UniformConstant 137
- 139(g_tTexcdi4):    138(ptr) Variable UniformConstant
-             142:             TypeSampledImage 137
-             148:             TypeImage 45(int) Cube sampled format:Unknown
-             149:             TypePointer UniformConstant 148
- 150(g_tTexcdu4):    149(ptr) Variable UniformConstant
-             153:             TypeSampledImage 148
-  221(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             222:             TypePointer Function 221(PS_OUTPUT)
-             224:    6(float) Constant 1065353216
-             225:    7(fvec4) ConstantComposite 224 224 224 224
-             227:             TypePointer Function 6(float)
-             229:             TypePointer Output 7(fvec4)
-      230(Color):    229(ptr) Variable Output
-             233:             TypePointer Output 6(float)
-      234(Depth):    233(ptr) Variable Output
-  238(g_sSamp2d):     15(ptr) Variable UniformConstant
-             239:             TypeImage 6(float) 1D sampled format:Unknown
-             240:             TypePointer UniformConstant 239
-241(g_tTex1df4a):    240(ptr) Variable UniformConstant
- 242(g_tTex1df4):    240(ptr) Variable UniformConstant
-             243:             TypeImage 25(int) 1D sampled format:Unknown
-             244:             TypePointer UniformConstant 243
- 245(g_tTex1di4):    244(ptr) Variable UniformConstant
-             246:             TypeImage 45(int) 1D sampled format:Unknown
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:             TypeVector 6(float) 3
+     26($Global):             TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4)
+              27:             TypePointer Uniform 26($Global)
+              28:     27(ptr) Variable Uniform
+              29:             TypeInt 32 1
+              30:     29(int) Constant 1
+              31:             TypePointer Uniform 24(fvec2)
+              34:     29(int) Constant 0
+              36:             TypeVector 29(int) 4
+              37:             TypePointer Function 36(ivec4)
+              39:             TypeImage 29(int) 2D sampled format:Unknown
+              40:             TypePointer UniformConstant 39
+  41(g_tTex2di4):     40(ptr) Variable UniformConstant
+              44:             TypeSampledImage 39
+              49:             TypeInt 32 0
+              50:             TypeVector 49(int) 4
+              51:             TypePointer Function 50(ivec4)
+              53:             TypeImage 49(int) 2D sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2du4):     54(ptr) Variable UniformConstant
+              58:             TypeSampledImage 53
+              90:     29(int) Constant 2
+             112:     29(int) Constant 3
+             129:             TypeImage 6(float) Cube sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+ 131(g_tTexcdf4):    130(ptr) Variable UniformConstant
+             134:             TypeSampledImage 129
+             136:             TypePointer Uniform 25(fvec3)
+             141:             TypeImage 29(int) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdi4):    142(ptr) Variable UniformConstant
+             146:             TypeSampledImage 141
+             152:             TypeImage 49(int) Cube sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+ 154(g_tTexcdu4):    153(ptr) Variable UniformConstant
+             157:             TypeSampledImage 152
+             225:             TypePointer Function 8(PS_OUTPUT)
+             227:    6(float) Constant 1065353216
+             228:    7(fvec4) ConstantComposite 227 227 227 227
+             230:             TypePointer Function 6(float)
+             237:             TypePointer Output 7(fvec4)
+      238(Color):    237(ptr) Variable Output
+             241:             TypePointer Output 6(float)
+      242(Depth):    241(ptr) Variable Output
+  245(g_sSamp2d):     19(ptr) Variable UniformConstant
+             246:             TypeImage 6(float) 1D sampled format:Unknown
              247:             TypePointer UniformConstant 246
- 248(g_tTex1du4):    247(ptr) Variable UniformConstant
-             249:             TypeImage 6(float) 3D sampled format:Unknown
-             250:             TypePointer UniformConstant 249
- 251(g_tTex3df4):    250(ptr) Variable UniformConstant
-             252:             TypeImage 25(int) 3D sampled format:Unknown
-             253:             TypePointer UniformConstant 252
- 254(g_tTex3di4):    253(ptr) Variable UniformConstant
-             255:             TypeImage 45(int) 3D sampled format:Unknown
-             256:             TypePointer UniformConstant 255
- 257(g_tTex3du4):    256(ptr) Variable UniformConstant
+248(g_tTex1df4a):    247(ptr) Variable UniformConstant
+ 249(g_tTex1df4):    247(ptr) Variable UniformConstant
+             250:             TypeImage 29(int) 1D sampled format:Unknown
+             251:             TypePointer UniformConstant 250
+ 252(g_tTex1di4):    251(ptr) Variable UniformConstant
+             253:             TypeImage 49(int) 1D sampled format:Unknown
+             254:             TypePointer UniformConstant 253
+ 255(g_tTex1du4):    254(ptr) Variable UniformConstant
+             256:             TypeImage 6(float) 3D sampled format:Unknown
+             257:             TypePointer UniformConstant 256
+ 258(g_tTex3df4):    257(ptr) Variable UniformConstant
+             259:             TypeImage 29(int) 3D sampled format:Unknown
+             260:             TypePointer UniformConstant 259
+ 261(g_tTex3di4):    260(ptr) Variable UniformConstant
+             262:             TypeImage 49(int) 3D sampled format:Unknown
+             263:             TypePointer UniformConstant 262
+ 264(g_tTex3du4):    263(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      9(txval00):      8(ptr) Variable Function
-     34(txval01):     33(ptr) Variable Function
-     48(txval02):     47(ptr) Variable Function
-     59(txval10):      8(ptr) Variable Function
-     66(txval11):     33(ptr) Variable Function
-     73(txval12):     47(ptr) Variable Function
-     80(txval20):      8(ptr) Variable Function
-     88(txval21):     33(ptr) Variable Function
-     95(txval22):     47(ptr) Variable Function
-    102(txval30):      8(ptr) Variable Function
-    110(txval31):     33(ptr) Variable Function
-    117(txval32):     47(ptr) Variable Function
-    124(txval40):      8(ptr) Variable Function
-    136(txval41):     33(ptr) Variable Function
-    147(txval42):     47(ptr) Variable Function
-    158(txval50):      8(ptr) Variable Function
-    165(txval51):     33(ptr) Variable Function
-    172(txval52):     47(ptr) Variable Function
-    179(txval60):      8(ptr) Variable Function
-    186(txval61):     33(ptr) Variable Function
-    193(txval62):     47(ptr) Variable Function
-    200(txval70):      8(ptr) Variable Function
-    207(txval71):     33(ptr) Variable Function
-    214(txval72):     47(ptr) Variable Function
-      223(psout):    222(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              28:     27(ptr) AccessChain 24 26
-              29:   20(fvec2) Load 28
-              31:    7(fvec4) ImageGather 19 29 30
-                              Store 9(txval00) 31
-              38:          35 Load 37(g_tTex2di4)
-              39:          14 Load 16(g_sSamp)
-              41:          40 SampledImage 38 39
-              42:     27(ptr) AccessChain 24 26
-              43:   20(fvec2) Load 42
-              44:   32(ivec4) ImageGather 41 43 30
-                              Store 34(txval01) 44
-              52:          49 Load 51(g_tTex2du4)
-              53:          14 Load 16(g_sSamp)
-              55:          54 SampledImage 52 53
-              56:     27(ptr) AccessChain 24 26
-              57:   20(fvec2) Load 56
-              58:   46(ivec4) ImageGather 55 57 30
-                              Store 48(txval02) 58
-              60:          10 Load 12(g_tTex2df4)
-              61:          14 Load 16(g_sSamp)
-              62:          18 SampledImage 60 61
-              63:     27(ptr) AccessChain 24 26
-              64:   20(fvec2) Load 63
-              65:    7(fvec4) ImageGather 62 64 26
-                              Store 59(txval10) 65
-              67:          35 Load 37(g_tTex2di4)
-              68:          14 Load 16(g_sSamp)
-              69:          40 SampledImage 67 68
-              70:     27(ptr) AccessChain 24 26
-              71:   20(fvec2) Load 70
-              72:   32(ivec4) ImageGather 69 71 26
-                              Store 66(txval11) 72
-              74:          49 Load 51(g_tTex2du4)
-              75:          14 Load 16(g_sSamp)
-              76:          54 SampledImage 74 75
-              77:     27(ptr) AccessChain 24 26
-              78:   20(fvec2) Load 77
-              79:   46(ivec4) ImageGather 76 78 26
-                              Store 73(txval12) 79
-              81:          10 Load 12(g_tTex2df4)
-              82:          14 Load 16(g_sSamp)
-              83:          18 SampledImage 81 82
-              84:     27(ptr) AccessChain 24 26
-              85:   20(fvec2) Load 84
-              87:    7(fvec4) ImageGather 83 85 86
-                              Store 80(txval20) 87
-              89:          35 Load 37(g_tTex2di4)
-              90:          14 Load 16(g_sSamp)
-              91:          40 SampledImage 89 90
-              92:     27(ptr) AccessChain 24 26
-              93:   20(fvec2) Load 92
-              94:   32(ivec4) ImageGather 91 93 86
-                              Store 88(txval21) 94
-              96:          49 Load 51(g_tTex2du4)
-              97:          14 Load 16(g_sSamp)
-              98:          54 SampledImage 96 97
-              99:     27(ptr) AccessChain 24 26
-             100:   20(fvec2) Load 99
-             101:   46(ivec4) ImageGather 98 100 86
-                              Store 95(txval22) 101
-             103:          10 Load 12(g_tTex2df4)
-             104:          14 Load 16(g_sSamp)
-             105:          18 SampledImage 103 104
-             106:     27(ptr) AccessChain 24 26
-             107:   20(fvec2) Load 106
-             109:    7(fvec4) ImageGather 105 107 108
-                              Store 102(txval30) 109
-             111:          35 Load 37(g_tTex2di4)
-             112:          14 Load 16(g_sSamp)
-             113:          40 SampledImage 111 112
-             114:     27(ptr) AccessChain 24 26
-             115:   20(fvec2) Load 114
-             116:   32(ivec4) ImageGather 113 115 108
-                              Store 110(txval31) 116
-             118:          49 Load 51(g_tTex2du4)
-             119:          14 Load 16(g_sSamp)
-             120:          54 SampledImage 118 119
-             121:     27(ptr) AccessChain 24 26
-             122:   20(fvec2) Load 121
-             123:   46(ivec4) ImageGather 120 122 108
-                              Store 117(txval32) 123
-             128:         125 Load 127(g_tTexcdf4)
-             129:          14 Load 16(g_sSamp)
-             131:         130 SampledImage 128 129
-             133:    132(ptr) AccessChain 24 86
-             134:   21(fvec3) Load 133
-             135:    7(fvec4) ImageGather 131 134 30
-                              Store 124(txval40) 135
-             140:         137 Load 139(g_tTexcdi4)
-             141:          14 Load 16(g_sSamp)
-             143:         142 SampledImage 140 141
-             144:    132(ptr) AccessChain 24 86
-             145:   21(fvec3) Load 144
-             146:   32(ivec4) ImageGather 143 145 30
-                              Store 136(txval41) 146
-             151:         148 Load 150(g_tTexcdu4)
-             152:          14 Load 16(g_sSamp)
-             154:         153 SampledImage 151 152
-             155:    132(ptr) AccessChain 24 86
-             156:   21(fvec3) Load 155
-             157:   46(ivec4) ImageGather 154 156 30
-                              Store 147(txval42) 157
-             159:         125 Load 127(g_tTexcdf4)
-             160:          14 Load 16(g_sSamp)
-             161:         130 SampledImage 159 160
-             162:    132(ptr) AccessChain 24 86
-             163:   21(fvec3) Load 162
-             164:    7(fvec4) ImageGather 161 163 26
-                              Store 158(txval50) 164
-             166:         137 Load 139(g_tTexcdi4)
-             167:          14 Load 16(g_sSamp)
-             168:         142 SampledImage 166 167
-             169:    132(ptr) AccessChain 24 86
-             170:   21(fvec3) Load 169
-             171:   32(ivec4) ImageGather 168 170 26
-                              Store 165(txval51) 171
-             173:         148 Load 150(g_tTexcdu4)
-             174:          14 Load 16(g_sSamp)
-             175:         153 SampledImage 173 174
-             176:    132(ptr) AccessChain 24 86
-             177:   21(fvec3) Load 176
-             178:   46(ivec4) ImageGather 175 177 26
-                              Store 172(txval52) 178
-             180:         125 Load 127(g_tTexcdf4)
-             181:          14 Load 16(g_sSamp)
-             182:         130 SampledImage 180 181
-             183:    132(ptr) AccessChain 24 86
-             184:   21(fvec3) Load 183
-             185:    7(fvec4) ImageGather 182 184 86
-                              Store 179(txval60) 185
-             187:         137 Load 139(g_tTexcdi4)
-             188:          14 Load 16(g_sSamp)
-             189:         142 SampledImage 187 188
-             190:    132(ptr) AccessChain 24 86
-             191:   21(fvec3) Load 190
-             192:   32(ivec4) ImageGather 189 191 86
-                              Store 186(txval61) 192
-             194:         148 Load 150(g_tTexcdu4)
-             195:          14 Load 16(g_sSamp)
-             196:         153 SampledImage 194 195
-             197:    132(ptr) AccessChain 24 86
-             198:   21(fvec3) Load 197
-             199:   46(ivec4) ImageGather 196 198 86
-                              Store 193(txval62) 199
-             201:         125 Load 127(g_tTexcdf4)
-             202:          14 Load 16(g_sSamp)
-             203:         130 SampledImage 201 202
-             204:    132(ptr) AccessChain 24 86
-             205:   21(fvec3) Load 204
-             206:    7(fvec4) ImageGather 203 205 108
-                              Store 200(txval70) 206
-             208:         137 Load 139(g_tTexcdi4)
-             209:          14 Load 16(g_sSamp)
-             210:         142 SampledImage 208 209
-             211:    132(ptr) AccessChain 24 86
-             212:   21(fvec3) Load 211
-             213:   32(ivec4) ImageGather 210 212 108
-                              Store 207(txval71) 213
-             215:         148 Load 150(g_tTexcdu4)
-             216:          14 Load 16(g_sSamp)
-             217:         153 SampledImage 215 216
-             218:    132(ptr) AccessChain 24 86
-             219:   21(fvec3) Load 218
-             220:   46(ivec4) ImageGather 217 219 108
-                              Store 214(txval72) 220
-             226:      8(ptr) AccessChain 223(psout) 30
-                              Store 226 225
-             228:    227(ptr) AccessChain 223(psout) 26
-                              Store 228 224
-             231:      8(ptr) AccessChain 223(psout) 30
-             232:    7(fvec4) Load 231
-                              Store 230(Color) 232
-             235:    227(ptr) AccessChain 223(psout) 26
-             236:    6(float) Load 235
-                              Store 234(Depth) 236
+235(flattenTemp):    225(ptr) Variable Function
+             236:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 235(flattenTemp) 236
+             239:     12(ptr) AccessChain 235(flattenTemp) 34
+             240:    7(fvec4) Load 239
+                              Store 238(Color) 240
+             243:    230(ptr) AccessChain 235(flattenTemp) 30
+             244:    6(float) Load 243
+                              Store 242(Depth) 244
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+     13(txval00):     12(ptr) Variable Function
+     38(txval01):     37(ptr) Variable Function
+     52(txval02):     51(ptr) Variable Function
+     63(txval10):     12(ptr) Variable Function
+     70(txval11):     37(ptr) Variable Function
+     77(txval12):     51(ptr) Variable Function
+     84(txval20):     12(ptr) Variable Function
+     92(txval21):     37(ptr) Variable Function
+     99(txval22):     51(ptr) Variable Function
+    106(txval30):     12(ptr) Variable Function
+    114(txval31):     37(ptr) Variable Function
+    121(txval32):     51(ptr) Variable Function
+    128(txval40):     12(ptr) Variable Function
+    140(txval41):     37(ptr) Variable Function
+    151(txval42):     51(ptr) Variable Function
+    162(txval50):     12(ptr) Variable Function
+    169(txval51):     37(ptr) Variable Function
+    176(txval52):     51(ptr) Variable Function
+    183(txval60):     12(ptr) Variable Function
+    190(txval61):     37(ptr) Variable Function
+    197(txval62):     51(ptr) Variable Function
+    204(txval70):     12(ptr) Variable Function
+    211(txval71):     37(ptr) Variable Function
+    218(txval72):     51(ptr) Variable Function
+      226(psout):    225(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              32:     31(ptr) AccessChain 28 30
+              33:   24(fvec2) Load 32
+              35:    7(fvec4) ImageGather 23 33 34
+                              Store 13(txval00) 35
+              42:          39 Load 41(g_tTex2di4)
+              43:          18 Load 20(g_sSamp)
+              45:          44 SampledImage 42 43
+              46:     31(ptr) AccessChain 28 30
+              47:   24(fvec2) Load 46
+              48:   36(ivec4) ImageGather 45 47 34
+                              Store 38(txval01) 48
+              56:          53 Load 55(g_tTex2du4)
+              57:          18 Load 20(g_sSamp)
+              59:          58 SampledImage 56 57
+              60:     31(ptr) AccessChain 28 30
+              61:   24(fvec2) Load 60
+              62:   50(ivec4) ImageGather 59 61 34
+                              Store 52(txval02) 62
+              64:          14 Load 16(g_tTex2df4)
+              65:          18 Load 20(g_sSamp)
+              66:          22 SampledImage 64 65
+              67:     31(ptr) AccessChain 28 30
+              68:   24(fvec2) Load 67
+              69:    7(fvec4) ImageGather 66 68 30
+                              Store 63(txval10) 69
+              71:          39 Load 41(g_tTex2di4)
+              72:          18 Load 20(g_sSamp)
+              73:          44 SampledImage 71 72
+              74:     31(ptr) AccessChain 28 30
+              75:   24(fvec2) Load 74
+              76:   36(ivec4) ImageGather 73 75 30
+                              Store 70(txval11) 76
+              78:          53 Load 55(g_tTex2du4)
+              79:          18 Load 20(g_sSamp)
+              80:          58 SampledImage 78 79
+              81:     31(ptr) AccessChain 28 30
+              82:   24(fvec2) Load 81
+              83:   50(ivec4) ImageGather 80 82 30
+                              Store 77(txval12) 83
+              85:          14 Load 16(g_tTex2df4)
+              86:          18 Load 20(g_sSamp)
+              87:          22 SampledImage 85 86
+              88:     31(ptr) AccessChain 28 30
+              89:   24(fvec2) Load 88
+              91:    7(fvec4) ImageGather 87 89 90
+                              Store 84(txval20) 91
+              93:          39 Load 41(g_tTex2di4)
+              94:          18 Load 20(g_sSamp)
+              95:          44 SampledImage 93 94
+              96:     31(ptr) AccessChain 28 30
+              97:   24(fvec2) Load 96
+              98:   36(ivec4) ImageGather 95 97 90
+                              Store 92(txval21) 98
+             100:          53 Load 55(g_tTex2du4)
+             101:          18 Load 20(g_sSamp)
+             102:          58 SampledImage 100 101
+             103:     31(ptr) AccessChain 28 30
+             104:   24(fvec2) Load 103
+             105:   50(ivec4) ImageGather 102 104 90
+                              Store 99(txval22) 105
+             107:          14 Load 16(g_tTex2df4)
+             108:          18 Load 20(g_sSamp)
+             109:          22 SampledImage 107 108
+             110:     31(ptr) AccessChain 28 30
+             111:   24(fvec2) Load 110
+             113:    7(fvec4) ImageGather 109 111 112
+                              Store 106(txval30) 113
+             115:          39 Load 41(g_tTex2di4)
+             116:          18 Load 20(g_sSamp)
+             117:          44 SampledImage 115 116
+             118:     31(ptr) AccessChain 28 30
+             119:   24(fvec2) Load 118
+             120:   36(ivec4) ImageGather 117 119 112
+                              Store 114(txval31) 120
+             122:          53 Load 55(g_tTex2du4)
+             123:          18 Load 20(g_sSamp)
+             124:          58 SampledImage 122 123
+             125:     31(ptr) AccessChain 28 30
+             126:   24(fvec2) Load 125
+             127:   50(ivec4) ImageGather 124 126 112
+                              Store 121(txval32) 127
+             132:         129 Load 131(g_tTexcdf4)
+             133:          18 Load 20(g_sSamp)
+             135:         134 SampledImage 132 133
+             137:    136(ptr) AccessChain 28 90
+             138:   25(fvec3) Load 137
+             139:    7(fvec4) ImageGather 135 138 34
+                              Store 128(txval40) 139
+             144:         141 Load 143(g_tTexcdi4)
+             145:          18 Load 20(g_sSamp)
+             147:         146 SampledImage 144 145
+             148:    136(ptr) AccessChain 28 90
+             149:   25(fvec3) Load 148
+             150:   36(ivec4) ImageGather 147 149 34
+                              Store 140(txval41) 150
+             155:         152 Load 154(g_tTexcdu4)
+             156:          18 Load 20(g_sSamp)
+             158:         157 SampledImage 155 156
+             159:    136(ptr) AccessChain 28 90
+             160:   25(fvec3) Load 159
+             161:   50(ivec4) ImageGather 158 160 34
+                              Store 151(txval42) 161
+             163:         129 Load 131(g_tTexcdf4)
+             164:          18 Load 20(g_sSamp)
+             165:         134 SampledImage 163 164
+             166:    136(ptr) AccessChain 28 90
+             167:   25(fvec3) Load 166
+             168:    7(fvec4) ImageGather 165 167 30
+                              Store 162(txval50) 168
+             170:         141 Load 143(g_tTexcdi4)
+             171:          18 Load 20(g_sSamp)
+             172:         146 SampledImage 170 171
+             173:    136(ptr) AccessChain 28 90
+             174:   25(fvec3) Load 173
+             175:   36(ivec4) ImageGather 172 174 30
+                              Store 169(txval51) 175
+             177:         152 Load 154(g_tTexcdu4)
+             178:          18 Load 20(g_sSamp)
+             179:         157 SampledImage 177 178
+             180:    136(ptr) AccessChain 28 90
+             181:   25(fvec3) Load 180
+             182:   50(ivec4) ImageGather 179 181 30
+                              Store 176(txval52) 182
+             184:         129 Load 131(g_tTexcdf4)
+             185:          18 Load 20(g_sSamp)
+             186:         134 SampledImage 184 185
+             187:    136(ptr) AccessChain 28 90
+             188:   25(fvec3) Load 187
+             189:    7(fvec4) ImageGather 186 188 90
+                              Store 183(txval60) 189
+             191:         141 Load 143(g_tTexcdi4)
+             192:          18 Load 20(g_sSamp)
+             193:         146 SampledImage 191 192
+             194:    136(ptr) AccessChain 28 90
+             195:   25(fvec3) Load 194
+             196:   36(ivec4) ImageGather 193 195 90
+                              Store 190(txval61) 196
+             198:         152 Load 154(g_tTexcdu4)
+             199:          18 Load 20(g_sSamp)
+             200:         157 SampledImage 198 199
+             201:    136(ptr) AccessChain 28 90
+             202:   25(fvec3) Load 201
+             203:   50(ivec4) ImageGather 200 202 90
+                              Store 197(txval62) 203
+             205:         129 Load 131(g_tTexcdf4)
+             206:          18 Load 20(g_sSamp)
+             207:         134 SampledImage 205 206
+             208:    136(ptr) AccessChain 28 90
+             209:   25(fvec3) Load 208
+             210:    7(fvec4) ImageGather 207 209 112
+                              Store 204(txval70) 210
+             212:         141 Load 143(g_tTexcdi4)
+             213:          18 Load 20(g_sSamp)
+             214:         146 SampledImage 212 213
+             215:    136(ptr) AccessChain 28 90
+             216:   25(fvec3) Load 215
+             217:   36(ivec4) ImageGather 214 216 112
+                              Store 211(txval71) 217
+             219:         152 Load 154(g_tTexcdu4)
+             220:          18 Load 20(g_sSamp)
+             221:         157 SampledImage 219 220
+             222:    136(ptr) AccessChain 28 90
+             223:   25(fvec3) Load 222
+             224:   50(ivec4) ImageGather 221 223 112
+                              Store 218(txval72) 224
+             229:     12(ptr) AccessChain 226(psout) 34
+                              Store 229 228
+             231:    230(ptr) AccessChain 226(psout) 30
+                              Store 231 227
+             232:8(PS_OUTPUT) Load 226(psout)
+                              ReturnValue 232
+                              FunctionEnd

+ 555 - 532
3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gatherRGBA.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:39  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:39    Function Parameters: 
 0:?     Sequence
 0:46      Sequence
@@ -586,24 +586,28 @@ gl_FragCoord origin is upper left
 0:113            1 (const int)
 0:113        Constant:
 0:113          1.000000
-0:115      Sequence
-0:115        Sequence
-0:115          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:115            Color: direct index for structure (temp 4-component vector of float)
-0:115              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:115              Constant:
-0:115                0 (const int)
-0:115          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:115            Depth: direct index for structure (temp float)
-0:115              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:115              Constant:
-0:115                1 (const int)
-0:115        Branch: Return
+0:115      Branch: Return with expression
+0:115        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39  Function Definition: main( (temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      Sequence
+0:39        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:39          Color: direct index for structure (temp 4-component vector of float)
+0:39            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:39          Depth: direct index for structure (temp float)
+0:39            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39            Constant:
+0:39              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -619,6 +623,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -628,7 +634,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:39  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:39    Function Parameters: 
 0:?     Sequence
 0:46      Sequence
@@ -1212,24 +1218,28 @@ gl_FragCoord origin is upper left
 0:113            1 (const int)
 0:113        Constant:
 0:113          1.000000
-0:115      Sequence
-0:115        Sequence
-0:115          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:115            Color: direct index for structure (temp 4-component vector of float)
-0:115              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:115              Constant:
-0:115                0 (const int)
-0:115          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:115            Depth: direct index for structure (temp float)
-0:115              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:115              Constant:
-0:115                1 (const int)
-0:115        Branch: Return
+0:115      Branch: Return with expression
+0:115        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39  Function Definition: main( (temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      Sequence
+0:39        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:39          Color: direct index for structure (temp 4-component vector of float)
+0:39            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:39          Depth: direct index for structure (temp float)
+0:39            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:39            Constant:
+0:39              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -1245,521 +1255,534 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 392
+// Id's are bound by 399
 
                               Capability Shader
                               Capability ImageGatherExtended
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 355 359
+                              EntryPoint Fragment 4  "main" 363 367
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval001"
-                              Name 12  "g_tTex2df4"
-                              Name 16  "g_sSamp"
-                              Name 26  "$Global"
-                              MemberName 26($Global) 0  "c1"
-                              MemberName 26($Global) 1  "c2"
-                              MemberName 26($Global) 2  "c3"
-                              MemberName 26($Global) 3  "c4"
-                              MemberName 26($Global) 4  "o1"
-                              MemberName 26($Global) 5  "o2"
-                              MemberName 26($Global) 6  "o3"
-                              MemberName 26($Global) 7  "o4"
-                              Name 28  ""
-                              Name 40  "txval011"
-                              Name 43  "g_tTex2di4"
-                              Name 56  "txval021"
-                              Name 59  "g_tTex2du4"
-                              Name 69  "txval004"
-                              Name 87  "txval014"
-                              Name 103  "txval024"
-                              Name 119  "txval101"
-                              Name 128  "txval111"
-                              Name 137  "txval121"
-                              Name 146  "txval104"
-                              Name 162  "txval114"
-                              Name 178  "txval124"
-                              Name 194  "txval201"
-                              Name 204  "txval211"
-                              Name 213  "txval221"
-                              Name 222  "txval204"
-                              Name 238  "txval214"
-                              Name 254  "txval224"
-                              Name 270  "txval301"
-                              Name 280  "txval311"
-                              Name 289  "txval321"
-                              Name 298  "txval304"
-                              Name 314  "txval314"
-                              Name 330  "txval324"
-                              Name 346  "PS_OUTPUT"
-                              MemberName 346(PS_OUTPUT) 0  "Color"
-                              MemberName 346(PS_OUTPUT) 1  "Depth"
-                              Name 348  "psout"
-                              Name 355  "Color"
-                              Name 359  "Depth"
-                              Name 363  "g_sSamp2d"
-                              Name 366  "g_tTex1df4a"
-                              Name 367  "g_tTex1df4"
-                              Name 370  "g_tTex1di4"
-                              Name 373  "g_tTex1du4"
-                              Name 376  "g_tTex3df4"
-                              Name 379  "g_tTex3di4"
-                              Name 382  "g_tTex3du4"
-                              Name 385  "g_tTexcdf4"
-                              Name 388  "g_tTexcdi4"
-                              Name 391  "g_tTexcdu4"
-                              Decorate 12(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              MemberDecorate 26($Global) 0 Offset 0
-                              MemberDecorate 26($Global) 1 Offset 8
-                              MemberDecorate 26($Global) 2 Offset 16
-                              MemberDecorate 26($Global) 3 Offset 32
-                              MemberDecorate 26($Global) 4 Offset 48
-                              MemberDecorate 26($Global) 5 Offset 56
-                              MemberDecorate 26($Global) 6 Offset 64
-                              MemberDecorate 26($Global) 7 Offset 80
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
-                              Decorate 43(g_tTex2di4) DescriptorSet 0
-                              Decorate 59(g_tTex2du4) DescriptorSet 0
-                              Decorate 355(Color) Location 0
-                              Decorate 359(Depth) BuiltIn FragDepth
-                              Decorate 363(g_sSamp2d) DescriptorSet 0
-                              Decorate 366(g_tTex1df4a) DescriptorSet 0
-                              Decorate 366(g_tTex1df4a) Binding 1
-                              Decorate 367(g_tTex1df4) DescriptorSet 0
-                              Decorate 367(g_tTex1df4) Binding 0
-                              Decorate 370(g_tTex1di4) DescriptorSet 0
-                              Decorate 373(g_tTex1du4) DescriptorSet 0
-                              Decorate 376(g_tTex3df4) DescriptorSet 0
-                              Decorate 379(g_tTex3di4) DescriptorSet 0
-                              Decorate 382(g_tTex3du4) DescriptorSet 0
-                              Decorate 385(g_tTexcdf4) DescriptorSet 0
-                              Decorate 388(g_tTexcdi4) DescriptorSet 0
-                              Decorate 391(g_tTexcdu4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval001"
+                              Name 16  "g_tTex2df4"
+                              Name 20  "g_sSamp"
+                              Name 30  "$Global"
+                              MemberName 30($Global) 0  "c1"
+                              MemberName 30($Global) 1  "c2"
+                              MemberName 30($Global) 2  "c3"
+                              MemberName 30($Global) 3  "c4"
+                              MemberName 30($Global) 4  "o1"
+                              MemberName 30($Global) 5  "o2"
+                              MemberName 30($Global) 6  "o3"
+                              MemberName 30($Global) 7  "o4"
+                              Name 32  ""
+                              Name 44  "txval011"
+                              Name 47  "g_tTex2di4"
+                              Name 60  "txval021"
+                              Name 63  "g_tTex2du4"
+                              Name 73  "txval004"
+                              Name 91  "txval014"
+                              Name 107  "txval024"
+                              Name 123  "txval101"
+                              Name 132  "txval111"
+                              Name 141  "txval121"
+                              Name 150  "txval104"
+                              Name 166  "txval114"
+                              Name 182  "txval124"
+                              Name 198  "txval201"
+                              Name 208  "txval211"
+                              Name 217  "txval221"
+                              Name 226  "txval204"
+                              Name 242  "txval214"
+                              Name 258  "txval224"
+                              Name 274  "txval301"
+                              Name 284  "txval311"
+                              Name 293  "txval321"
+                              Name 302  "txval304"
+                              Name 318  "txval314"
+                              Name 334  "txval324"
+                              Name 351  "psout"
+                              Name 360  "flattenTemp"
+                              Name 363  "Color"
+                              Name 367  "Depth"
+                              Name 370  "g_sSamp2d"
+                              Name 373  "g_tTex1df4a"
+                              Name 374  "g_tTex1df4"
+                              Name 377  "g_tTex1di4"
+                              Name 380  "g_tTex1du4"
+                              Name 383  "g_tTex3df4"
+                              Name 386  "g_tTex3di4"
+                              Name 389  "g_tTex3du4"
+                              Name 392  "g_tTexcdf4"
+                              Name 395  "g_tTexcdi4"
+                              Name 398  "g_tTexcdu4"
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              MemberDecorate 30($Global) 0 Offset 0
+                              MemberDecorate 30($Global) 1 Offset 8
+                              MemberDecorate 30($Global) 2 Offset 16
+                              MemberDecorate 30($Global) 3 Offset 32
+                              MemberDecorate 30($Global) 4 Offset 48
+                              MemberDecorate 30($Global) 5 Offset 56
+                              MemberDecorate 30($Global) 6 Offset 64
+                              MemberDecorate 30($Global) 7 Offset 80
+                              Decorate 30($Global) Block
+                              Decorate 32 DescriptorSet 0
+                              Decorate 47(g_tTex2di4) DescriptorSet 0
+                              Decorate 63(g_tTex2du4) DescriptorSet 0
+                              Decorate 363(Color) Location 0
+                              Decorate 367(Depth) BuiltIn FragDepth
+                              Decorate 370(g_sSamp2d) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) Binding 1
+                              Decorate 374(g_tTex1df4) DescriptorSet 0
+                              Decorate 374(g_tTex1df4) Binding 0
+                              Decorate 377(g_tTex1di4) DescriptorSet 0
+                              Decorate 380(g_tTex1du4) DescriptorSet 0
+                              Decorate 383(g_tTex3df4) DescriptorSet 0
+                              Decorate 386(g_tTex3di4) DescriptorSet 0
+                              Decorate 389(g_tTex3du4) DescriptorSet 0
+                              Decorate 392(g_tTexcdf4) DescriptorSet 0
+                              Decorate 395(g_tTexcdi4) DescriptorSet 0
+                              Decorate 398(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex2df4):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:             TypeVector 6(float) 3
-              22:             TypeInt 32 1
-              23:             TypeVector 22(int) 2
-              24:             TypeVector 22(int) 3
-              25:             TypeVector 22(int) 4
-     26($Global):             TypeStruct 6(float) 20(fvec2) 21(fvec3) 7(fvec4) 22(int) 23(ivec2) 24(ivec3) 25(ivec4)
-              27:             TypePointer Uniform 26($Global)
-              28:     27(ptr) Variable Uniform
-              29:     22(int) Constant 1
-              30:             TypePointer Uniform 20(fvec2)
-              33:     22(int) Constant 5
-              34:             TypePointer Uniform 23(ivec2)
-              37:     22(int) Constant 0
-              39:             TypePointer Function 25(ivec4)
-              41:             TypeImage 22(int) 2D sampled format:Unknown
-              42:             TypePointer UniformConstant 41
-  43(g_tTex2di4):     42(ptr) Variable UniformConstant
-              46:             TypeSampledImage 41
-              53:             TypeInt 32 0
-              54:             TypeVector 53(int) 4
-              55:             TypePointer Function 54(ivec4)
-              57:             TypeImage 53(int) 2D sampled format:Unknown
-              58:             TypePointer UniformConstant 57
-  59(g_tTex2du4):     58(ptr) Variable UniformConstant
-              62:             TypeSampledImage 57
-              83:     53(int) Constant 4
-              84:             TypeArray 23(ivec2) 83
-             202:     22(int) Constant 2
-             278:     22(int) Constant 3
-  346(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             347:             TypePointer Function 346(PS_OUTPUT)
-             349:    6(float) Constant 1065353216
-             350:    7(fvec4) ConstantComposite 349 349 349 349
-             352:             TypePointer Function 6(float)
-             354:             TypePointer Output 7(fvec4)
-      355(Color):    354(ptr) Variable Output
-             358:             TypePointer Output 6(float)
-      359(Depth):    358(ptr) Variable Output
-  363(g_sSamp2d):     15(ptr) Variable UniformConstant
-             364:             TypeImage 6(float) 1D sampled format:Unknown
-             365:             TypePointer UniformConstant 364
-366(g_tTex1df4a):    365(ptr) Variable UniformConstant
- 367(g_tTex1df4):    365(ptr) Variable UniformConstant
-             368:             TypeImage 22(int) 1D sampled format:Unknown
-             369:             TypePointer UniformConstant 368
- 370(g_tTex1di4):    369(ptr) Variable UniformConstant
-             371:             TypeImage 53(int) 1D sampled format:Unknown
+  16(g_tTex2df4):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:             TypeVector 6(float) 3
+              26:             TypeInt 32 1
+              27:             TypeVector 26(int) 2
+              28:             TypeVector 26(int) 3
+              29:             TypeVector 26(int) 4
+     30($Global):             TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4) 26(int) 27(ivec2) 28(ivec3) 29(ivec4)
+              31:             TypePointer Uniform 30($Global)
+              32:     31(ptr) Variable Uniform
+              33:     26(int) Constant 1
+              34:             TypePointer Uniform 24(fvec2)
+              37:     26(int) Constant 5
+              38:             TypePointer Uniform 27(ivec2)
+              41:     26(int) Constant 0
+              43:             TypePointer Function 29(ivec4)
+              45:             TypeImage 26(int) 2D sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex2di4):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              57:             TypeInt 32 0
+              58:             TypeVector 57(int) 4
+              59:             TypePointer Function 58(ivec4)
+              61:             TypeImage 57(int) 2D sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+  63(g_tTex2du4):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              87:     57(int) Constant 4
+              88:             TypeArray 27(ivec2) 87
+             206:     26(int) Constant 2
+             282:     26(int) Constant 3
+             350:             TypePointer Function 8(PS_OUTPUT)
+             352:    6(float) Constant 1065353216
+             353:    7(fvec4) ConstantComposite 352 352 352 352
+             355:             TypePointer Function 6(float)
+             362:             TypePointer Output 7(fvec4)
+      363(Color):    362(ptr) Variable Output
+             366:             TypePointer Output 6(float)
+      367(Depth):    366(ptr) Variable Output
+  370(g_sSamp2d):     19(ptr) Variable UniformConstant
+             371:             TypeImage 6(float) 1D sampled format:Unknown
              372:             TypePointer UniformConstant 371
- 373(g_tTex1du4):    372(ptr) Variable UniformConstant
-             374:             TypeImage 6(float) 3D sampled format:Unknown
-             375:             TypePointer UniformConstant 374
- 376(g_tTex3df4):    375(ptr) Variable UniformConstant
-             377:             TypeImage 22(int) 3D sampled format:Unknown
-             378:             TypePointer UniformConstant 377
- 379(g_tTex3di4):    378(ptr) Variable UniformConstant
-             380:             TypeImage 53(int) 3D sampled format:Unknown
-             381:             TypePointer UniformConstant 380
- 382(g_tTex3du4):    381(ptr) Variable UniformConstant
-             383:             TypeImage 6(float) Cube sampled format:Unknown
-             384:             TypePointer UniformConstant 383
- 385(g_tTexcdf4):    384(ptr) Variable UniformConstant
-             386:             TypeImage 22(int) Cube sampled format:Unknown
-             387:             TypePointer UniformConstant 386
- 388(g_tTexcdi4):    387(ptr) Variable UniformConstant
-             389:             TypeImage 53(int) Cube sampled format:Unknown
-             390:             TypePointer UniformConstant 389
- 391(g_tTexcdu4):    390(ptr) Variable UniformConstant
+373(g_tTex1df4a):    372(ptr) Variable UniformConstant
+ 374(g_tTex1df4):    372(ptr) Variable UniformConstant
+             375:             TypeImage 26(int) 1D sampled format:Unknown
+             376:             TypePointer UniformConstant 375
+ 377(g_tTex1di4):    376(ptr) Variable UniformConstant
+             378:             TypeImage 57(int) 1D sampled format:Unknown
+             379:             TypePointer UniformConstant 378
+ 380(g_tTex1du4):    379(ptr) Variable UniformConstant
+             381:             TypeImage 6(float) 3D sampled format:Unknown
+             382:             TypePointer UniformConstant 381
+ 383(g_tTex3df4):    382(ptr) Variable UniformConstant
+             384:             TypeImage 26(int) 3D sampled format:Unknown
+             385:             TypePointer UniformConstant 384
+ 386(g_tTex3di4):    385(ptr) Variable UniformConstant
+             387:             TypeImage 57(int) 3D sampled format:Unknown
+             388:             TypePointer UniformConstant 387
+ 389(g_tTex3du4):    388(ptr) Variable UniformConstant
+             390:             TypeImage 6(float) Cube sampled format:Unknown
+             391:             TypePointer UniformConstant 390
+ 392(g_tTexcdf4):    391(ptr) Variable UniformConstant
+             393:             TypeImage 26(int) Cube sampled format:Unknown
+             394:             TypePointer UniformConstant 393
+ 395(g_tTexcdi4):    394(ptr) Variable UniformConstant
+             396:             TypeImage 57(int) Cube sampled format:Unknown
+             397:             TypePointer UniformConstant 396
+ 398(g_tTexcdu4):    397(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-     9(txval001):      8(ptr) Variable Function
-    40(txval011):     39(ptr) Variable Function
-    56(txval021):     55(ptr) Variable Function
-    69(txval004):      8(ptr) Variable Function
-    87(txval014):     39(ptr) Variable Function
-   103(txval024):     55(ptr) Variable Function
-   119(txval101):      8(ptr) Variable Function
-   128(txval111):     39(ptr) Variable Function
-   137(txval121):     55(ptr) Variable Function
-   146(txval104):      8(ptr) Variable Function
-   162(txval114):     39(ptr) Variable Function
-   178(txval124):     55(ptr) Variable Function
-   194(txval201):      8(ptr) Variable Function
-   204(txval211):     39(ptr) Variable Function
-   213(txval221):     55(ptr) Variable Function
-   222(txval204):      8(ptr) Variable Function
-   238(txval214):     39(ptr) Variable Function
-   254(txval224):     55(ptr) Variable Function
-   270(txval301):      8(ptr) Variable Function
-   280(txval311):     39(ptr) Variable Function
-   289(txval321):     55(ptr) Variable Function
-   298(txval304):      8(ptr) Variable Function
-   314(txval314):     39(ptr) Variable Function
-   330(txval324):     55(ptr) Variable Function
-      348(psout):    347(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              31:     30(ptr) AccessChain 28 29
-              32:   20(fvec2) Load 31
-              35:     34(ptr) AccessChain 28 33
-              36:   23(ivec2) Load 35
-              38:    7(fvec4) ImageGather 19 32 37 Offset 36
-                              Store 9(txval001) 38
-              44:          41 Load 43(g_tTex2di4)
-              45:          14 Load 16(g_sSamp)
-              47:          46 SampledImage 44 45
-              48:     30(ptr) AccessChain 28 29
-              49:   20(fvec2) Load 48
-              50:     34(ptr) AccessChain 28 33
-              51:   23(ivec2) Load 50
-              52:   25(ivec4) ImageGather 47 49 37 Offset 51
-                              Store 40(txval011) 52
-              60:          57 Load 59(g_tTex2du4)
-              61:          14 Load 16(g_sSamp)
-              63:          62 SampledImage 60 61
-              64:     30(ptr) AccessChain 28 29
-              65:   20(fvec2) Load 64
-              66:     34(ptr) AccessChain 28 33
-              67:   23(ivec2) Load 66
-              68:   54(ivec4) ImageGather 63 65 37 Offset 67
-                              Store 56(txval021) 68
-              70:          10 Load 12(g_tTex2df4)
-              71:          14 Load 16(g_sSamp)
-              72:          18 SampledImage 70 71
-              73:     30(ptr) AccessChain 28 29
-              74:   20(fvec2) Load 73
-              75:     34(ptr) AccessChain 28 33
-              76:   23(ivec2) Load 75
-              77:     34(ptr) AccessChain 28 33
-              78:   23(ivec2) Load 77
-              79:     34(ptr) AccessChain 28 33
-              80:   23(ivec2) Load 79
-              81:     34(ptr) AccessChain 28 33
-              82:   23(ivec2) Load 81
-              85:          84 CompositeConstruct 76 78 80 82
-              86:    7(fvec4) ImageGather 72 74 37 ConstOffsets 85
-                              Store 69(txval004) 86
-              88:          41 Load 43(g_tTex2di4)
-              89:          14 Load 16(g_sSamp)
-              90:          46 SampledImage 88 89
-              91:     30(ptr) AccessChain 28 29
-              92:   20(fvec2) Load 91
-              93:     34(ptr) AccessChain 28 33
-              94:   23(ivec2) Load 93
-              95:     34(ptr) AccessChain 28 33
-              96:   23(ivec2) Load 95
-              97:     34(ptr) AccessChain 28 33
-              98:   23(ivec2) Load 97
-              99:     34(ptr) AccessChain 28 33
-             100:   23(ivec2) Load 99
-             101:          84 CompositeConstruct 94 96 98 100
-             102:   25(ivec4) ImageGather 90 92 37 ConstOffsets 101
-                              Store 87(txval014) 102
-             104:          57 Load 59(g_tTex2du4)
-             105:          14 Load 16(g_sSamp)
-             106:          62 SampledImage 104 105
-             107:     30(ptr) AccessChain 28 29
-             108:   20(fvec2) Load 107
-             109:     34(ptr) AccessChain 28 33
-             110:   23(ivec2) Load 109
-             111:     34(ptr) AccessChain 28 33
-             112:   23(ivec2) Load 111
-             113:     34(ptr) AccessChain 28 33
-             114:   23(ivec2) Load 113
-             115:     34(ptr) AccessChain 28 33
-             116:   23(ivec2) Load 115
-             117:          84 CompositeConstruct 110 112 114 116
-             118:   54(ivec4) ImageGather 106 108 37 ConstOffsets 117
-                              Store 103(txval024) 118
-             120:          10 Load 12(g_tTex2df4)
-             121:          14 Load 16(g_sSamp)
-             122:          18 SampledImage 120 121
-             123:     30(ptr) AccessChain 28 29
-             124:   20(fvec2) Load 123
-             125:     34(ptr) AccessChain 28 33
-             126:   23(ivec2) Load 125
-             127:    7(fvec4) ImageGather 122 124 29 Offset 126
-                              Store 119(txval101) 127
-             129:          41 Load 43(g_tTex2di4)
-             130:          14 Load 16(g_sSamp)
-             131:          46 SampledImage 129 130
-             132:     30(ptr) AccessChain 28 29
-             133:   20(fvec2) Load 132
-             134:     34(ptr) AccessChain 28 33
-             135:   23(ivec2) Load 134
-             136:   25(ivec4) ImageGather 131 133 29 Offset 135
-                              Store 128(txval111) 136
-             138:          57 Load 59(g_tTex2du4)
-             139:          14 Load 16(g_sSamp)
-             140:          62 SampledImage 138 139
-             141:     30(ptr) AccessChain 28 29
-             142:   20(fvec2) Load 141
-             143:     34(ptr) AccessChain 28 33
-             144:   23(ivec2) Load 143
-             145:   54(ivec4) ImageGather 140 142 29 Offset 144
-                              Store 137(txval121) 145
-             147:          10 Load 12(g_tTex2df4)
-             148:          14 Load 16(g_sSamp)
-             149:          18 SampledImage 147 148
-             150:     30(ptr) AccessChain 28 29
-             151:   20(fvec2) Load 150
-             152:     34(ptr) AccessChain 28 33
-             153:   23(ivec2) Load 152
-             154:     34(ptr) AccessChain 28 33
-             155:   23(ivec2) Load 154
-             156:     34(ptr) AccessChain 28 33
-             157:   23(ivec2) Load 156
-             158:     34(ptr) AccessChain 28 33
-             159:   23(ivec2) Load 158
-             160:          84 CompositeConstruct 153 155 157 159
-             161:    7(fvec4) ImageGather 149 151 29 ConstOffsets 160
-                              Store 146(txval104) 161
-             163:          41 Load 43(g_tTex2di4)
-             164:          14 Load 16(g_sSamp)
-             165:          46 SampledImage 163 164
-             166:     30(ptr) AccessChain 28 29
-             167:   20(fvec2) Load 166
-             168:     34(ptr) AccessChain 28 33
-             169:   23(ivec2) Load 168
-             170:     34(ptr) AccessChain 28 33
-             171:   23(ivec2) Load 170
-             172:     34(ptr) AccessChain 28 33
-             173:   23(ivec2) Load 172
-             174:     34(ptr) AccessChain 28 33
-             175:   23(ivec2) Load 174
-             176:          84 CompositeConstruct 169 171 173 175
-             177:   25(ivec4) ImageGather 165 167 29 ConstOffsets 176
-                              Store 162(txval114) 177
-             179:          57 Load 59(g_tTex2du4)
-             180:          14 Load 16(g_sSamp)
-             181:          62 SampledImage 179 180
-             182:     30(ptr) AccessChain 28 29
-             183:   20(fvec2) Load 182
-             184:     34(ptr) AccessChain 28 33
-             185:   23(ivec2) Load 184
-             186:     34(ptr) AccessChain 28 33
-             187:   23(ivec2) Load 186
-             188:     34(ptr) AccessChain 28 33
-             189:   23(ivec2) Load 188
-             190:     34(ptr) AccessChain 28 33
-             191:   23(ivec2) Load 190
-             192:          84 CompositeConstruct 185 187 189 191
-             193:   54(ivec4) ImageGather 181 183 29 ConstOffsets 192
-                              Store 178(txval124) 193
-             195:          10 Load 12(g_tTex2df4)
-             196:          14 Load 16(g_sSamp)
-             197:          18 SampledImage 195 196
-             198:     30(ptr) AccessChain 28 29
-             199:   20(fvec2) Load 198
-             200:     34(ptr) AccessChain 28 33
-             201:   23(ivec2) Load 200
-             203:    7(fvec4) ImageGather 197 199 202 Offset 201
-                              Store 194(txval201) 203
-             205:          41 Load 43(g_tTex2di4)
-             206:          14 Load 16(g_sSamp)
-             207:          46 SampledImage 205 206
-             208:     30(ptr) AccessChain 28 29
-             209:   20(fvec2) Load 208
-             210:     34(ptr) AccessChain 28 33
-             211:   23(ivec2) Load 210
-             212:   25(ivec4) ImageGather 207 209 202 Offset 211
-                              Store 204(txval211) 212
-             214:          57 Load 59(g_tTex2du4)
-             215:          14 Load 16(g_sSamp)
-             216:          62 SampledImage 214 215
-             217:     30(ptr) AccessChain 28 29
-             218:   20(fvec2) Load 217
-             219:     34(ptr) AccessChain 28 33
-             220:   23(ivec2) Load 219
-             221:   54(ivec4) ImageGather 216 218 202 Offset 220
-                              Store 213(txval221) 221
-             223:          10 Load 12(g_tTex2df4)
-             224:          14 Load 16(g_sSamp)
-             225:          18 SampledImage 223 224
-             226:     30(ptr) AccessChain 28 29
-             227:   20(fvec2) Load 226
-             228:     34(ptr) AccessChain 28 33
-             229:   23(ivec2) Load 228
-             230:     34(ptr) AccessChain 28 33
-             231:   23(ivec2) Load 230
-             232:     34(ptr) AccessChain 28 33
-             233:   23(ivec2) Load 232
-             234:     34(ptr) AccessChain 28 33
-             235:   23(ivec2) Load 234
-             236:          84 CompositeConstruct 229 231 233 235
-             237:    7(fvec4) ImageGather 225 227 202 ConstOffsets 236
-                              Store 222(txval204) 237
-             239:          41 Load 43(g_tTex2di4)
-             240:          14 Load 16(g_sSamp)
-             241:          46 SampledImage 239 240
-             242:     30(ptr) AccessChain 28 29
-             243:   20(fvec2) Load 242
-             244:     34(ptr) AccessChain 28 33
-             245:   23(ivec2) Load 244
-             246:     34(ptr) AccessChain 28 33
-             247:   23(ivec2) Load 246
-             248:     34(ptr) AccessChain 28 33
-             249:   23(ivec2) Load 248
-             250:     34(ptr) AccessChain 28 33
-             251:   23(ivec2) Load 250
-             252:          84 CompositeConstruct 245 247 249 251
-             253:   25(ivec4) ImageGather 241 243 202 ConstOffsets 252
-                              Store 238(txval214) 253
-             255:          57 Load 59(g_tTex2du4)
-             256:          14 Load 16(g_sSamp)
-             257:          62 SampledImage 255 256
-             258:     30(ptr) AccessChain 28 29
-             259:   20(fvec2) Load 258
-             260:     34(ptr) AccessChain 28 33
-             261:   23(ivec2) Load 260
-             262:     34(ptr) AccessChain 28 33
-             263:   23(ivec2) Load 262
-             264:     34(ptr) AccessChain 28 33
-             265:   23(ivec2) Load 264
-             266:     34(ptr) AccessChain 28 33
-             267:   23(ivec2) Load 266
-             268:          84 CompositeConstruct 261 263 265 267
-             269:   54(ivec4) ImageGather 257 259 202 ConstOffsets 268
-                              Store 254(txval224) 269
-             271:          10 Load 12(g_tTex2df4)
-             272:          14 Load 16(g_sSamp)
-             273:          18 SampledImage 271 272
-             274:     30(ptr) AccessChain 28 29
-             275:   20(fvec2) Load 274
-             276:     34(ptr) AccessChain 28 33
-             277:   23(ivec2) Load 276
-             279:    7(fvec4) ImageGather 273 275 278 Offset 277
-                              Store 270(txval301) 279
-             281:          41 Load 43(g_tTex2di4)
-             282:          14 Load 16(g_sSamp)
-             283:          46 SampledImage 281 282
-             284:     30(ptr) AccessChain 28 29
-             285:   20(fvec2) Load 284
-             286:     34(ptr) AccessChain 28 33
-             287:   23(ivec2) Load 286
-             288:   25(ivec4) ImageGather 283 285 278 Offset 287
-                              Store 280(txval311) 288
-             290:          57 Load 59(g_tTex2du4)
-             291:          14 Load 16(g_sSamp)
-             292:          62 SampledImage 290 291
-             293:     30(ptr) AccessChain 28 29
-             294:   20(fvec2) Load 293
-             295:     34(ptr) AccessChain 28 33
-             296:   23(ivec2) Load 295
-             297:   54(ivec4) ImageGather 292 294 278 Offset 296
-                              Store 289(txval321) 297
-             299:          10 Load 12(g_tTex2df4)
-             300:          14 Load 16(g_sSamp)
-             301:          18 SampledImage 299 300
-             302:     30(ptr) AccessChain 28 29
-             303:   20(fvec2) Load 302
-             304:     34(ptr) AccessChain 28 33
-             305:   23(ivec2) Load 304
-             306:     34(ptr) AccessChain 28 33
-             307:   23(ivec2) Load 306
-             308:     34(ptr) AccessChain 28 33
-             309:   23(ivec2) Load 308
-             310:     34(ptr) AccessChain 28 33
-             311:   23(ivec2) Load 310
-             312:          84 CompositeConstruct 305 307 309 311
-             313:    7(fvec4) ImageGather 301 303 278 ConstOffsets 312
-                              Store 298(txval304) 313
-             315:          41 Load 43(g_tTex2di4)
-             316:          14 Load 16(g_sSamp)
-             317:          46 SampledImage 315 316
-             318:     30(ptr) AccessChain 28 29
-             319:   20(fvec2) Load 318
-             320:     34(ptr) AccessChain 28 33
-             321:   23(ivec2) Load 320
-             322:     34(ptr) AccessChain 28 33
-             323:   23(ivec2) Load 322
-             324:     34(ptr) AccessChain 28 33
-             325:   23(ivec2) Load 324
-             326:     34(ptr) AccessChain 28 33
-             327:   23(ivec2) Load 326
-             328:          84 CompositeConstruct 321 323 325 327
-             329:   25(ivec4) ImageGather 317 319 278 ConstOffsets 328
-                              Store 314(txval314) 329
-             331:          57 Load 59(g_tTex2du4)
-             332:          14 Load 16(g_sSamp)
-             333:          62 SampledImage 331 332
-             334:     30(ptr) AccessChain 28 29
-             335:   20(fvec2) Load 334
-             336:     34(ptr) AccessChain 28 33
-             337:   23(ivec2) Load 336
-             338:     34(ptr) AccessChain 28 33
-             339:   23(ivec2) Load 338
-             340:     34(ptr) AccessChain 28 33
-             341:   23(ivec2) Load 340
-             342:     34(ptr) AccessChain 28 33
-             343:   23(ivec2) Load 342
-             344:          84 CompositeConstruct 337 339 341 343
-             345:   54(ivec4) ImageGather 333 335 278 ConstOffsets 344
-                              Store 330(txval324) 345
-             351:      8(ptr) AccessChain 348(psout) 37
-                              Store 351 350
-             353:    352(ptr) AccessChain 348(psout) 29
-                              Store 353 349
-             356:      8(ptr) AccessChain 348(psout) 37
-             357:    7(fvec4) Load 356
-                              Store 355(Color) 357
-             360:    352(ptr) AccessChain 348(psout) 29
-             361:    6(float) Load 360
-                              Store 359(Depth) 361
+360(flattenTemp):    350(ptr) Variable Function
+             361:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 360(flattenTemp) 361
+             364:     12(ptr) AccessChain 360(flattenTemp) 41
+             365:    7(fvec4) Load 364
+                              Store 363(Color) 365
+             368:    355(ptr) AccessChain 360(flattenTemp) 33
+             369:    6(float) Load 368
+                              Store 367(Depth) 369
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+    13(txval001):     12(ptr) Variable Function
+    44(txval011):     43(ptr) Variable Function
+    60(txval021):     59(ptr) Variable Function
+    73(txval004):     12(ptr) Variable Function
+    91(txval014):     43(ptr) Variable Function
+   107(txval024):     59(ptr) Variable Function
+   123(txval101):     12(ptr) Variable Function
+   132(txval111):     43(ptr) Variable Function
+   141(txval121):     59(ptr) Variable Function
+   150(txval104):     12(ptr) Variable Function
+   166(txval114):     43(ptr) Variable Function
+   182(txval124):     59(ptr) Variable Function
+   198(txval201):     12(ptr) Variable Function
+   208(txval211):     43(ptr) Variable Function
+   217(txval221):     59(ptr) Variable Function
+   226(txval204):     12(ptr) Variable Function
+   242(txval214):     43(ptr) Variable Function
+   258(txval224):     59(ptr) Variable Function
+   274(txval301):     12(ptr) Variable Function
+   284(txval311):     43(ptr) Variable Function
+   293(txval321):     59(ptr) Variable Function
+   302(txval304):     12(ptr) Variable Function
+   318(txval314):     43(ptr) Variable Function
+   334(txval324):     59(ptr) Variable Function
+      351(psout):    350(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              35:     34(ptr) AccessChain 32 33
+              36:   24(fvec2) Load 35
+              39:     38(ptr) AccessChain 32 37
+              40:   27(ivec2) Load 39
+              42:    7(fvec4) ImageGather 23 36 41 Offset 40
+                              Store 13(txval001) 42
+              48:          45 Load 47(g_tTex2di4)
+              49:          18 Load 20(g_sSamp)
+              51:          50 SampledImage 48 49
+              52:     34(ptr) AccessChain 32 33
+              53:   24(fvec2) Load 52
+              54:     38(ptr) AccessChain 32 37
+              55:   27(ivec2) Load 54
+              56:   29(ivec4) ImageGather 51 53 41 Offset 55
+                              Store 44(txval011) 56
+              64:          61 Load 63(g_tTex2du4)
+              65:          18 Load 20(g_sSamp)
+              67:          66 SampledImage 64 65
+              68:     34(ptr) AccessChain 32 33
+              69:   24(fvec2) Load 68
+              70:     38(ptr) AccessChain 32 37
+              71:   27(ivec2) Load 70
+              72:   58(ivec4) ImageGather 67 69 41 Offset 71
+                              Store 60(txval021) 72
+              74:          14 Load 16(g_tTex2df4)
+              75:          18 Load 20(g_sSamp)
+              76:          22 SampledImage 74 75
+              77:     34(ptr) AccessChain 32 33
+              78:   24(fvec2) Load 77
+              79:     38(ptr) AccessChain 32 37
+              80:   27(ivec2) Load 79
+              81:     38(ptr) AccessChain 32 37
+              82:   27(ivec2) Load 81
+              83:     38(ptr) AccessChain 32 37
+              84:   27(ivec2) Load 83
+              85:     38(ptr) AccessChain 32 37
+              86:   27(ivec2) Load 85
+              89:          88 CompositeConstruct 80 82 84 86
+              90:    7(fvec4) ImageGather 76 78 41 ConstOffsets 89
+                              Store 73(txval004) 90
+              92:          45 Load 47(g_tTex2di4)
+              93:          18 Load 20(g_sSamp)
+              94:          50 SampledImage 92 93
+              95:     34(ptr) AccessChain 32 33
+              96:   24(fvec2) Load 95
+              97:     38(ptr) AccessChain 32 37
+              98:   27(ivec2) Load 97
+              99:     38(ptr) AccessChain 32 37
+             100:   27(ivec2) Load 99
+             101:     38(ptr) AccessChain 32 37
+             102:   27(ivec2) Load 101
+             103:     38(ptr) AccessChain 32 37
+             104:   27(ivec2) Load 103
+             105:          88 CompositeConstruct 98 100 102 104
+             106:   29(ivec4) ImageGather 94 96 41 ConstOffsets 105
+                              Store 91(txval014) 106
+             108:          61 Load 63(g_tTex2du4)
+             109:          18 Load 20(g_sSamp)
+             110:          66 SampledImage 108 109
+             111:     34(ptr) AccessChain 32 33
+             112:   24(fvec2) Load 111
+             113:     38(ptr) AccessChain 32 37
+             114:   27(ivec2) Load 113
+             115:     38(ptr) AccessChain 32 37
+             116:   27(ivec2) Load 115
+             117:     38(ptr) AccessChain 32 37
+             118:   27(ivec2) Load 117
+             119:     38(ptr) AccessChain 32 37
+             120:   27(ivec2) Load 119
+             121:          88 CompositeConstruct 114 116 118 120
+             122:   58(ivec4) ImageGather 110 112 41 ConstOffsets 121
+                              Store 107(txval024) 122
+             124:          14 Load 16(g_tTex2df4)
+             125:          18 Load 20(g_sSamp)
+             126:          22 SampledImage 124 125
+             127:     34(ptr) AccessChain 32 33
+             128:   24(fvec2) Load 127
+             129:     38(ptr) AccessChain 32 37
+             130:   27(ivec2) Load 129
+             131:    7(fvec4) ImageGather 126 128 33 Offset 130
+                              Store 123(txval101) 131
+             133:          45 Load 47(g_tTex2di4)
+             134:          18 Load 20(g_sSamp)
+             135:          50 SampledImage 133 134
+             136:     34(ptr) AccessChain 32 33
+             137:   24(fvec2) Load 136
+             138:     38(ptr) AccessChain 32 37
+             139:   27(ivec2) Load 138
+             140:   29(ivec4) ImageGather 135 137 33 Offset 139
+                              Store 132(txval111) 140
+             142:          61 Load 63(g_tTex2du4)
+             143:          18 Load 20(g_sSamp)
+             144:          66 SampledImage 142 143
+             145:     34(ptr) AccessChain 32 33
+             146:   24(fvec2) Load 145
+             147:     38(ptr) AccessChain 32 37
+             148:   27(ivec2) Load 147
+             149:   58(ivec4) ImageGather 144 146 33 Offset 148
+                              Store 141(txval121) 149
+             151:          14 Load 16(g_tTex2df4)
+             152:          18 Load 20(g_sSamp)
+             153:          22 SampledImage 151 152
+             154:     34(ptr) AccessChain 32 33
+             155:   24(fvec2) Load 154
+             156:     38(ptr) AccessChain 32 37
+             157:   27(ivec2) Load 156
+             158:     38(ptr) AccessChain 32 37
+             159:   27(ivec2) Load 158
+             160:     38(ptr) AccessChain 32 37
+             161:   27(ivec2) Load 160
+             162:     38(ptr) AccessChain 32 37
+             163:   27(ivec2) Load 162
+             164:          88 CompositeConstruct 157 159 161 163
+             165:    7(fvec4) ImageGather 153 155 33 ConstOffsets 164
+                              Store 150(txval104) 165
+             167:          45 Load 47(g_tTex2di4)
+             168:          18 Load 20(g_sSamp)
+             169:          50 SampledImage 167 168
+             170:     34(ptr) AccessChain 32 33
+             171:   24(fvec2) Load 170
+             172:     38(ptr) AccessChain 32 37
+             173:   27(ivec2) Load 172
+             174:     38(ptr) AccessChain 32 37
+             175:   27(ivec2) Load 174
+             176:     38(ptr) AccessChain 32 37
+             177:   27(ivec2) Load 176
+             178:     38(ptr) AccessChain 32 37
+             179:   27(ivec2) Load 178
+             180:          88 CompositeConstruct 173 175 177 179
+             181:   29(ivec4) ImageGather 169 171 33 ConstOffsets 180
+                              Store 166(txval114) 181
+             183:          61 Load 63(g_tTex2du4)
+             184:          18 Load 20(g_sSamp)
+             185:          66 SampledImage 183 184
+             186:     34(ptr) AccessChain 32 33
+             187:   24(fvec2) Load 186
+             188:     38(ptr) AccessChain 32 37
+             189:   27(ivec2) Load 188
+             190:     38(ptr) AccessChain 32 37
+             191:   27(ivec2) Load 190
+             192:     38(ptr) AccessChain 32 37
+             193:   27(ivec2) Load 192
+             194:     38(ptr) AccessChain 32 37
+             195:   27(ivec2) Load 194
+             196:          88 CompositeConstruct 189 191 193 195
+             197:   58(ivec4) ImageGather 185 187 33 ConstOffsets 196
+                              Store 182(txval124) 197
+             199:          14 Load 16(g_tTex2df4)
+             200:          18 Load 20(g_sSamp)
+             201:          22 SampledImage 199 200
+             202:     34(ptr) AccessChain 32 33
+             203:   24(fvec2) Load 202
+             204:     38(ptr) AccessChain 32 37
+             205:   27(ivec2) Load 204
+             207:    7(fvec4) ImageGather 201 203 206 Offset 205
+                              Store 198(txval201) 207
+             209:          45 Load 47(g_tTex2di4)
+             210:          18 Load 20(g_sSamp)
+             211:          50 SampledImage 209 210
+             212:     34(ptr) AccessChain 32 33
+             213:   24(fvec2) Load 212
+             214:     38(ptr) AccessChain 32 37
+             215:   27(ivec2) Load 214
+             216:   29(ivec4) ImageGather 211 213 206 Offset 215
+                              Store 208(txval211) 216
+             218:          61 Load 63(g_tTex2du4)
+             219:          18 Load 20(g_sSamp)
+             220:          66 SampledImage 218 219
+             221:     34(ptr) AccessChain 32 33
+             222:   24(fvec2) Load 221
+             223:     38(ptr) AccessChain 32 37
+             224:   27(ivec2) Load 223
+             225:   58(ivec4) ImageGather 220 222 206 Offset 224
+                              Store 217(txval221) 225
+             227:          14 Load 16(g_tTex2df4)
+             228:          18 Load 20(g_sSamp)
+             229:          22 SampledImage 227 228
+             230:     34(ptr) AccessChain 32 33
+             231:   24(fvec2) Load 230
+             232:     38(ptr) AccessChain 32 37
+             233:   27(ivec2) Load 232
+             234:     38(ptr) AccessChain 32 37
+             235:   27(ivec2) Load 234
+             236:     38(ptr) AccessChain 32 37
+             237:   27(ivec2) Load 236
+             238:     38(ptr) AccessChain 32 37
+             239:   27(ivec2) Load 238
+             240:          88 CompositeConstruct 233 235 237 239
+             241:    7(fvec4) ImageGather 229 231 206 ConstOffsets 240
+                              Store 226(txval204) 241
+             243:          45 Load 47(g_tTex2di4)
+             244:          18 Load 20(g_sSamp)
+             245:          50 SampledImage 243 244
+             246:     34(ptr) AccessChain 32 33
+             247:   24(fvec2) Load 246
+             248:     38(ptr) AccessChain 32 37
+             249:   27(ivec2) Load 248
+             250:     38(ptr) AccessChain 32 37
+             251:   27(ivec2) Load 250
+             252:     38(ptr) AccessChain 32 37
+             253:   27(ivec2) Load 252
+             254:     38(ptr) AccessChain 32 37
+             255:   27(ivec2) Load 254
+             256:          88 CompositeConstruct 249 251 253 255
+             257:   29(ivec4) ImageGather 245 247 206 ConstOffsets 256
+                              Store 242(txval214) 257
+             259:          61 Load 63(g_tTex2du4)
+             260:          18 Load 20(g_sSamp)
+             261:          66 SampledImage 259 260
+             262:     34(ptr) AccessChain 32 33
+             263:   24(fvec2) Load 262
+             264:     38(ptr) AccessChain 32 37
+             265:   27(ivec2) Load 264
+             266:     38(ptr) AccessChain 32 37
+             267:   27(ivec2) Load 266
+             268:     38(ptr) AccessChain 32 37
+             269:   27(ivec2) Load 268
+             270:     38(ptr) AccessChain 32 37
+             271:   27(ivec2) Load 270
+             272:          88 CompositeConstruct 265 267 269 271
+             273:   58(ivec4) ImageGather 261 263 206 ConstOffsets 272
+                              Store 258(txval224) 273
+             275:          14 Load 16(g_tTex2df4)
+             276:          18 Load 20(g_sSamp)
+             277:          22 SampledImage 275 276
+             278:     34(ptr) AccessChain 32 33
+             279:   24(fvec2) Load 278
+             280:     38(ptr) AccessChain 32 37
+             281:   27(ivec2) Load 280
+             283:    7(fvec4) ImageGather 277 279 282 Offset 281
+                              Store 274(txval301) 283
+             285:          45 Load 47(g_tTex2di4)
+             286:          18 Load 20(g_sSamp)
+             287:          50 SampledImage 285 286
+             288:     34(ptr) AccessChain 32 33
+             289:   24(fvec2) Load 288
+             290:     38(ptr) AccessChain 32 37
+             291:   27(ivec2) Load 290
+             292:   29(ivec4) ImageGather 287 289 282 Offset 291
+                              Store 284(txval311) 292
+             294:          61 Load 63(g_tTex2du4)
+             295:          18 Load 20(g_sSamp)
+             296:          66 SampledImage 294 295
+             297:     34(ptr) AccessChain 32 33
+             298:   24(fvec2) Load 297
+             299:     38(ptr) AccessChain 32 37
+             300:   27(ivec2) Load 299
+             301:   58(ivec4) ImageGather 296 298 282 Offset 300
+                              Store 293(txval321) 301
+             303:          14 Load 16(g_tTex2df4)
+             304:          18 Load 20(g_sSamp)
+             305:          22 SampledImage 303 304
+             306:     34(ptr) AccessChain 32 33
+             307:   24(fvec2) Load 306
+             308:     38(ptr) AccessChain 32 37
+             309:   27(ivec2) Load 308
+             310:     38(ptr) AccessChain 32 37
+             311:   27(ivec2) Load 310
+             312:     38(ptr) AccessChain 32 37
+             313:   27(ivec2) Load 312
+             314:     38(ptr) AccessChain 32 37
+             315:   27(ivec2) Load 314
+             316:          88 CompositeConstruct 309 311 313 315
+             317:    7(fvec4) ImageGather 305 307 282 ConstOffsets 316
+                              Store 302(txval304) 317
+             319:          45 Load 47(g_tTex2di4)
+             320:          18 Load 20(g_sSamp)
+             321:          50 SampledImage 319 320
+             322:     34(ptr) AccessChain 32 33
+             323:   24(fvec2) Load 322
+             324:     38(ptr) AccessChain 32 37
+             325:   27(ivec2) Load 324
+             326:     38(ptr) AccessChain 32 37
+             327:   27(ivec2) Load 326
+             328:     38(ptr) AccessChain 32 37
+             329:   27(ivec2) Load 328
+             330:     38(ptr) AccessChain 32 37
+             331:   27(ivec2) Load 330
+             332:          88 CompositeConstruct 325 327 329 331
+             333:   29(ivec4) ImageGather 321 323 282 ConstOffsets 332
+                              Store 318(txval314) 333
+             335:          61 Load 63(g_tTex2du4)
+             336:          18 Load 20(g_sSamp)
+             337:          66 SampledImage 335 336
+             338:     34(ptr) AccessChain 32 33
+             339:   24(fvec2) Load 338
+             340:     38(ptr) AccessChain 32 37
+             341:   27(ivec2) Load 340
+             342:     38(ptr) AccessChain 32 37
+             343:   27(ivec2) Load 342
+             344:     38(ptr) AccessChain 32 37
+             345:   27(ivec2) Load 344
+             346:     38(ptr) AccessChain 32 37
+             347:   27(ivec2) Load 346
+             348:          88 CompositeConstruct 341 343 345 347
+             349:   58(ivec4) ImageGather 337 339 282 ConstOffsets 348
+                              Store 334(txval324) 349
+             354:     12(ptr) AccessChain 351(psout) 41
+                              Store 354 353
+             356:    355(ptr) AccessChain 351(psout) 33
+                              Store 356 352
+             357:8(PS_OUTPUT) Load 351(psout)
+                              ReturnValue 357
+                              FunctionEnd

+ 537 - 514
3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.gatherRGBA.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:33  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:33    Function Parameters: 
 0:?     Sequence
 0:40      Sequence
@@ -586,24 +586,28 @@ gl_FragCoord origin is upper left
 0:107            1 (const int)
 0:107        Constant:
 0:107          1.000000
-0:109      Sequence
-0:109        Sequence
-0:109          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:109            Color: direct index for structure (temp 4-component vector of float)
-0:109              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:109              Constant:
-0:109                0 (const int)
-0:109          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:109            Depth: direct index for structure (temp float)
-0:109              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:109              Constant:
-0:109                1 (const int)
-0:109        Branch: Return
+0:109      Branch: Return with expression
+0:109        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33  Function Definition: main( (temp void)
+0:33    Function Parameters: 
+0:?     Sequence
+0:33      Sequence
+0:33        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:33          Color: direct index for structure (temp 4-component vector of float)
+0:33            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33            Constant:
+0:33              0 (const int)
+0:33        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:33          Depth: direct index for structure (temp float)
+0:33            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33            Constant:
+0:33              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -615,6 +619,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -624,7 +630,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:33  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:33    Function Parameters: 
 0:?     Sequence
 0:40      Sequence
@@ -1208,24 +1214,28 @@ gl_FragCoord origin is upper left
 0:107            1 (const int)
 0:107        Constant:
 0:107          1.000000
-0:109      Sequence
-0:109        Sequence
-0:109          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:109            Color: direct index for structure (temp 4-component vector of float)
-0:109              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:109              Constant:
-0:109                0 (const int)
-0:109          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:109            Depth: direct index for structure (temp float)
-0:109              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:109              Constant:
-0:109                1 (const int)
-0:109        Branch: Return
+0:109      Branch: Return with expression
+0:109        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33  Function Definition: main( (temp void)
+0:33    Function Parameters: 
+0:?     Sequence
+0:33      Sequence
+0:33        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:33          Color: direct index for structure (temp 4-component vector of float)
+0:33            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33            Constant:
+0:33              0 (const int)
+0:33        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:33          Depth: direct index for structure (temp float)
+0:33            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:33            Constant:
+0:33              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -1237,11 +1247,13 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 382
+// Id's are bound by 389
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -1249,491 +1261,502 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 355 359
+                              EntryPoint Fragment 4  "main" 363 367
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "txval001"
-                              Name 12  "g_tTex2df4a"
-                              Name 16  "g_sSamp"
-                              Name 26  "$Global"
-                              MemberName 26($Global) 0  "c1"
-                              MemberName 26($Global) 1  "c2"
-                              MemberName 26($Global) 2  "c3"
-                              MemberName 26($Global) 3  "c4"
-                              MemberName 26($Global) 4  "o1"
-                              MemberName 26($Global) 5  "o2"
-                              MemberName 26($Global) 6  "o3"
-                              MemberName 26($Global) 7  "o4"
-                              Name 28  ""
-                              Name 40  "txval011"
-                              Name 43  "g_tTex2di4a"
-                              Name 56  "txval021"
-                              Name 59  "g_tTex2du4a"
-                              Name 69  "txval004"
-                              Name 87  "txval014"
-                              Name 103  "txval024"
-                              Name 119  "txval101"
-                              Name 129  "txval111"
-                              Name 138  "txval121"
-                              Name 147  "txval104"
-                              Name 163  "txval114"
-                              Name 179  "txval124"
-                              Name 195  "txval201"
-                              Name 204  "txval211"
-                              Name 213  "txval221"
-                              Name 222  "txval204"
-                              Name 238  "txval214"
-                              Name 254  "txval224"
-                              Name 270  "txval301"
-                              Name 280  "txval311"
-                              Name 289  "txval321"
-                              Name 298  "txval304"
-                              Name 314  "txval314"
-                              Name 330  "txval324"
-                              Name 346  "PS_OUTPUT"
-                              MemberName 346(PS_OUTPUT) 0  "Color"
-                              MemberName 346(PS_OUTPUT) 1  "Depth"
-                              Name 348  "psout"
-                              Name 355  "Color"
-                              Name 359  "Depth"
-                              Name 363  "g_sSamp2d"
-                              Name 366  "g_tTex1df4a"
-                              Name 369  "g_tTex1di4a"
-                              Name 372  "g_tTex1du4a"
-                              Name 375  "g_tTexcdf4a"
-                              Name 378  "g_tTexcdi4a"
-                              Name 381  "g_tTexcdu4a"
-                              Decorate 12(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_sSamp) DescriptorSet 0
-                              Decorate 16(g_sSamp) Binding 0
-                              MemberDecorate 26($Global) 0 Offset 0
-                              MemberDecorate 26($Global) 1 Offset 8
-                              MemberDecorate 26($Global) 2 Offset 16
-                              MemberDecorate 26($Global) 3 Offset 32
-                              MemberDecorate 26($Global) 4 Offset 48
-                              MemberDecorate 26($Global) 5 Offset 56
-                              MemberDecorate 26($Global) 6 Offset 64
-                              MemberDecorate 26($Global) 7 Offset 80
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
-                              Decorate 43(g_tTex2di4a) DescriptorSet 0
-                              Decorate 59(g_tTex2du4a) DescriptorSet 0
-                              Decorate 355(Color) Location 0
-                              Decorate 359(Depth) BuiltIn FragDepth
-                              Decorate 363(g_sSamp2d) DescriptorSet 0
-                              Decorate 366(g_tTex1df4a) DescriptorSet 0
-                              Decorate 366(g_tTex1df4a) Binding 0
-                              Decorate 369(g_tTex1di4a) DescriptorSet 0
-                              Decorate 372(g_tTex1du4a) DescriptorSet 0
-                              Decorate 375(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 378(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 381(g_tTexcdu4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "txval001"
+                              Name 16  "g_tTex2df4a"
+                              Name 20  "g_sSamp"
+                              Name 30  "$Global"
+                              MemberName 30($Global) 0  "c1"
+                              MemberName 30($Global) 1  "c2"
+                              MemberName 30($Global) 2  "c3"
+                              MemberName 30($Global) 3  "c4"
+                              MemberName 30($Global) 4  "o1"
+                              MemberName 30($Global) 5  "o2"
+                              MemberName 30($Global) 6  "o3"
+                              MemberName 30($Global) 7  "o4"
+                              Name 32  ""
+                              Name 44  "txval011"
+                              Name 47  "g_tTex2di4a"
+                              Name 60  "txval021"
+                              Name 63  "g_tTex2du4a"
+                              Name 73  "txval004"
+                              Name 91  "txval014"
+                              Name 107  "txval024"
+                              Name 123  "txval101"
+                              Name 133  "txval111"
+                              Name 142  "txval121"
+                              Name 151  "txval104"
+                              Name 167  "txval114"
+                              Name 183  "txval124"
+                              Name 199  "txval201"
+                              Name 208  "txval211"
+                              Name 217  "txval221"
+                              Name 226  "txval204"
+                              Name 242  "txval214"
+                              Name 258  "txval224"
+                              Name 274  "txval301"
+                              Name 284  "txval311"
+                              Name 293  "txval321"
+                              Name 302  "txval304"
+                              Name 318  "txval314"
+                              Name 334  "txval324"
+                              Name 351  "psout"
+                              Name 360  "flattenTemp"
+                              Name 363  "Color"
+                              Name 367  "Depth"
+                              Name 370  "g_sSamp2d"
+                              Name 373  "g_tTex1df4a"
+                              Name 376  "g_tTex1di4a"
+                              Name 379  "g_tTex1du4a"
+                              Name 382  "g_tTexcdf4a"
+                              Name 385  "g_tTexcdi4a"
+                              Name 388  "g_tTexcdu4a"
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 20(g_sSamp) Binding 0
+                              MemberDecorate 30($Global) 0 Offset 0
+                              MemberDecorate 30($Global) 1 Offset 8
+                              MemberDecorate 30($Global) 2 Offset 16
+                              MemberDecorate 30($Global) 3 Offset 32
+                              MemberDecorate 30($Global) 4 Offset 48
+                              MemberDecorate 30($Global) 5 Offset 56
+                              MemberDecorate 30($Global) 6 Offset 64
+                              MemberDecorate 30($Global) 7 Offset 80
+                              Decorate 30($Global) Block
+                              Decorate 32 DescriptorSet 0
+                              Decorate 47(g_tTex2di4a) DescriptorSet 0
+                              Decorate 63(g_tTex2du4a) DescriptorSet 0
+                              Decorate 363(Color) Location 0
+                              Decorate 367(Depth) BuiltIn FragDepth
+                              Decorate 370(g_sSamp2d) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) Binding 0
+                              Decorate 376(g_tTex1di4a) DescriptorSet 0
+                              Decorate 379(g_tTex1du4a) DescriptorSet 0
+                              Decorate 382(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 385(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 388(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) 2D array sampled format:Unknown
-              11:             TypePointer UniformConstant 10
- 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
-              14:             TypeSampler
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) 2D array sampled format:Unknown
               15:             TypePointer UniformConstant 14
-     16(g_sSamp):     15(ptr) Variable UniformConstant
-              18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 2
-              21:             TypeVector 6(float) 3
-              22:             TypeInt 32 1
-              23:             TypeVector 22(int) 2
-              24:             TypeVector 22(int) 3
-              25:             TypeVector 22(int) 4
-     26($Global):             TypeStruct 6(float) 20(fvec2) 21(fvec3) 7(fvec4) 22(int) 23(ivec2) 24(ivec3) 25(ivec4)
-              27:             TypePointer Uniform 26($Global)
-              28:     27(ptr) Variable Uniform
-              29:     22(int) Constant 2
-              30:             TypePointer Uniform 21(fvec3)
-              33:     22(int) Constant 5
-              34:             TypePointer Uniform 23(ivec2)
-              37:     22(int) Constant 0
-              39:             TypePointer Function 25(ivec4)
-              41:             TypeImage 22(int) 2D array sampled format:Unknown
-              42:             TypePointer UniformConstant 41
- 43(g_tTex2di4a):     42(ptr) Variable UniformConstant
-              46:             TypeSampledImage 41
-              53:             TypeInt 32 0
-              54:             TypeVector 53(int) 4
-              55:             TypePointer Function 54(ivec4)
-              57:             TypeImage 53(int) 2D array sampled format:Unknown
-              58:             TypePointer UniformConstant 57
- 59(g_tTex2du4a):     58(ptr) Variable UniformConstant
-              62:             TypeSampledImage 57
-              83:     53(int) Constant 4
-              84:             TypeArray 23(ivec2) 83
-             127:     22(int) Constant 1
-             278:     22(int) Constant 3
-  346(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             347:             TypePointer Function 346(PS_OUTPUT)
-             349:    6(float) Constant 1065353216
-             350:    7(fvec4) ConstantComposite 349 349 349 349
-             352:             TypePointer Function 6(float)
-             354:             TypePointer Output 7(fvec4)
-      355(Color):    354(ptr) Variable Output
-             358:             TypePointer Output 6(float)
-      359(Depth):    358(ptr) Variable Output
-  363(g_sSamp2d):     15(ptr) Variable UniformConstant
-             364:             TypeImage 6(float) 1D array sampled format:Unknown
-             365:             TypePointer UniformConstant 364
-366(g_tTex1df4a):    365(ptr) Variable UniformConstant
-             367:             TypeImage 22(int) 1D array sampled format:Unknown
-             368:             TypePointer UniformConstant 367
-369(g_tTex1di4a):    368(ptr) Variable UniformConstant
-             370:             TypeImage 53(int) 1D array sampled format:Unknown
-             371:             TypePointer UniformConstant 370
-372(g_tTex1du4a):    371(ptr) Variable UniformConstant
-             373:             TypeImage 6(float) Cube array sampled format:Unknown
-             374:             TypePointer UniformConstant 373
-375(g_tTexcdf4a):    374(ptr) Variable UniformConstant
-             376:             TypeImage 22(int) Cube array sampled format:Unknown
-             377:             TypePointer UniformConstant 376
-378(g_tTexcdi4a):    377(ptr) Variable UniformConstant
-             379:             TypeImage 53(int) Cube array sampled format:Unknown
-             380:             TypePointer UniformConstant 379
-381(g_tTexcdu4a):    380(ptr) Variable UniformConstant
+ 16(g_tTex2df4a):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+     20(g_sSamp):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:             TypeVector 6(float) 3
+              26:             TypeInt 32 1
+              27:             TypeVector 26(int) 2
+              28:             TypeVector 26(int) 3
+              29:             TypeVector 26(int) 4
+     30($Global):             TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4) 26(int) 27(ivec2) 28(ivec3) 29(ivec4)
+              31:             TypePointer Uniform 30($Global)
+              32:     31(ptr) Variable Uniform
+              33:     26(int) Constant 2
+              34:             TypePointer Uniform 25(fvec3)
+              37:     26(int) Constant 5
+              38:             TypePointer Uniform 27(ivec2)
+              41:     26(int) Constant 0
+              43:             TypePointer Function 29(ivec4)
+              45:             TypeImage 26(int) 2D array sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+ 47(g_tTex2di4a):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              57:             TypeInt 32 0
+              58:             TypeVector 57(int) 4
+              59:             TypePointer Function 58(ivec4)
+              61:             TypeImage 57(int) 2D array sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+ 63(g_tTex2du4a):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              87:     57(int) Constant 4
+              88:             TypeArray 27(ivec2) 87
+             131:     26(int) Constant 1
+             282:     26(int) Constant 3
+             350:             TypePointer Function 8(PS_OUTPUT)
+             352:    6(float) Constant 1065353216
+             353:    7(fvec4) ConstantComposite 352 352 352 352
+             355:             TypePointer Function 6(float)
+             362:             TypePointer Output 7(fvec4)
+      363(Color):    362(ptr) Variable Output
+             366:             TypePointer Output 6(float)
+      367(Depth):    366(ptr) Variable Output
+  370(g_sSamp2d):     19(ptr) Variable UniformConstant
+             371:             TypeImage 6(float) 1D array sampled format:Unknown
+             372:             TypePointer UniformConstant 371
+373(g_tTex1df4a):    372(ptr) Variable UniformConstant
+             374:             TypeImage 26(int) 1D array sampled format:Unknown
+             375:             TypePointer UniformConstant 374
+376(g_tTex1di4a):    375(ptr) Variable UniformConstant
+             377:             TypeImage 57(int) 1D array sampled format:Unknown
+             378:             TypePointer UniformConstant 377
+379(g_tTex1du4a):    378(ptr) Variable UniformConstant
+             380:             TypeImage 6(float) Cube array sampled format:Unknown
+             381:             TypePointer UniformConstant 380
+382(g_tTexcdf4a):    381(ptr) Variable UniformConstant
+             383:             TypeImage 26(int) Cube array sampled format:Unknown
+             384:             TypePointer UniformConstant 383
+385(g_tTexcdi4a):    384(ptr) Variable UniformConstant
+             386:             TypeImage 57(int) Cube array sampled format:Unknown
+             387:             TypePointer UniformConstant 386
+388(g_tTexcdu4a):    387(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-     9(txval001):      8(ptr) Variable Function
-    40(txval011):     39(ptr) Variable Function
-    56(txval021):     55(ptr) Variable Function
-    69(txval004):      8(ptr) Variable Function
-    87(txval014):     39(ptr) Variable Function
-   103(txval024):     55(ptr) Variable Function
-   119(txval101):      8(ptr) Variable Function
-   129(txval111):     39(ptr) Variable Function
-   138(txval121):     55(ptr) Variable Function
-   147(txval104):      8(ptr) Variable Function
-   163(txval114):     39(ptr) Variable Function
-   179(txval124):     55(ptr) Variable Function
-   195(txval201):      8(ptr) Variable Function
-   204(txval211):     39(ptr) Variable Function
-   213(txval221):     55(ptr) Variable Function
-   222(txval204):      8(ptr) Variable Function
-   238(txval214):     39(ptr) Variable Function
-   254(txval224):     55(ptr) Variable Function
-   270(txval301):      8(ptr) Variable Function
-   280(txval311):     39(ptr) Variable Function
-   289(txval321):     55(ptr) Variable Function
-   298(txval304):      8(ptr) Variable Function
-   314(txval314):     39(ptr) Variable Function
-   330(txval324):     55(ptr) Variable Function
-      348(psout):    347(ptr) Variable Function
-              13:          10 Load 12(g_tTex2df4a)
-              17:          14 Load 16(g_sSamp)
-              19:          18 SampledImage 13 17
-              31:     30(ptr) AccessChain 28 29
-              32:   21(fvec3) Load 31
-              35:     34(ptr) AccessChain 28 33
-              36:   23(ivec2) Load 35
-              38:    7(fvec4) ImageGather 19 32 37 Offset 36
-                              Store 9(txval001) 38
-              44:          41 Load 43(g_tTex2di4a)
-              45:          14 Load 16(g_sSamp)
-              47:          46 SampledImage 44 45
-              48:     30(ptr) AccessChain 28 29
-              49:   21(fvec3) Load 48
-              50:     34(ptr) AccessChain 28 33
-              51:   23(ivec2) Load 50
-              52:   25(ivec4) ImageGather 47 49 37 Offset 51
-                              Store 40(txval011) 52
-              60:          57 Load 59(g_tTex2du4a)
-              61:          14 Load 16(g_sSamp)
-              63:          62 SampledImage 60 61
-              64:     30(ptr) AccessChain 28 29
-              65:   21(fvec3) Load 64
-              66:     34(ptr) AccessChain 28 33
-              67:   23(ivec2) Load 66
-              68:   54(ivec4) ImageGather 63 65 37 Offset 67
-                              Store 56(txval021) 68
-              70:          10 Load 12(g_tTex2df4a)
-              71:          14 Load 16(g_sSamp)
-              72:          18 SampledImage 70 71
-              73:     30(ptr) AccessChain 28 29
-              74:   21(fvec3) Load 73
-              75:     34(ptr) AccessChain 28 33
-              76:   23(ivec2) Load 75
-              77:     34(ptr) AccessChain 28 33
-              78:   23(ivec2) Load 77
-              79:     34(ptr) AccessChain 28 33
-              80:   23(ivec2) Load 79
-              81:     34(ptr) AccessChain 28 33
-              82:   23(ivec2) Load 81
-              85:          84 CompositeConstruct 76 78 80 82
-              86:    7(fvec4) ImageGather 72 74 37 ConstOffsets 85
-                              Store 69(txval004) 86
-              88:          41 Load 43(g_tTex2di4a)
-              89:          14 Load 16(g_sSamp)
-              90:          46 SampledImage 88 89
-              91:     30(ptr) AccessChain 28 29
-              92:   21(fvec3) Load 91
-              93:     34(ptr) AccessChain 28 33
-              94:   23(ivec2) Load 93
-              95:     34(ptr) AccessChain 28 33
-              96:   23(ivec2) Load 95
-              97:     34(ptr) AccessChain 28 33
-              98:   23(ivec2) Load 97
-              99:     34(ptr) AccessChain 28 33
-             100:   23(ivec2) Load 99
-             101:          84 CompositeConstruct 94 96 98 100
-             102:   25(ivec4) ImageGather 90 92 37 ConstOffsets 101
-                              Store 87(txval014) 102
-             104:          57 Load 59(g_tTex2du4a)
-             105:          14 Load 16(g_sSamp)
-             106:          62 SampledImage 104 105
-             107:     30(ptr) AccessChain 28 29
-             108:   21(fvec3) Load 107
-             109:     34(ptr) AccessChain 28 33
-             110:   23(ivec2) Load 109
-             111:     34(ptr) AccessChain 28 33
-             112:   23(ivec2) Load 111
-             113:     34(ptr) AccessChain 28 33
-             114:   23(ivec2) Load 113
-             115:     34(ptr) AccessChain 28 33
-             116:   23(ivec2) Load 115
-             117:          84 CompositeConstruct 110 112 114 116
-             118:   54(ivec4) ImageGather 106 108 37 ConstOffsets 117
-                              Store 103(txval024) 118
-             120:          10 Load 12(g_tTex2df4a)
-             121:          14 Load 16(g_sSamp)
-             122:          18 SampledImage 120 121
-             123:     30(ptr) AccessChain 28 29
-             124:   21(fvec3) Load 123
-             125:     34(ptr) AccessChain 28 33
-             126:   23(ivec2) Load 125
-             128:    7(fvec4) ImageGather 122 124 127 Offset 126
-                              Store 119(txval101) 128
-             130:          41 Load 43(g_tTex2di4a)
-             131:          14 Load 16(g_sSamp)
-             132:          46 SampledImage 130 131
-             133:     30(ptr) AccessChain 28 29
-             134:   21(fvec3) Load 133
-             135:     34(ptr) AccessChain 28 33
-             136:   23(ivec2) Load 135
-             137:   25(ivec4) ImageGather 132 134 127 Offset 136
-                              Store 129(txval111) 137
-             139:          57 Load 59(g_tTex2du4a)
-             140:          14 Load 16(g_sSamp)
-             141:          62 SampledImage 139 140
-             142:     30(ptr) AccessChain 28 29
-             143:   21(fvec3) Load 142
-             144:     34(ptr) AccessChain 28 33
-             145:   23(ivec2) Load 144
-             146:   54(ivec4) ImageGather 141 143 127 Offset 145
-                              Store 138(txval121) 146
-             148:          10 Load 12(g_tTex2df4a)
-             149:          14 Load 16(g_sSamp)
-             150:          18 SampledImage 148 149
-             151:     30(ptr) AccessChain 28 29
-             152:   21(fvec3) Load 151
-             153:     34(ptr) AccessChain 28 33
-             154:   23(ivec2) Load 153
-             155:     34(ptr) AccessChain 28 33
-             156:   23(ivec2) Load 155
-             157:     34(ptr) AccessChain 28 33
-             158:   23(ivec2) Load 157
-             159:     34(ptr) AccessChain 28 33
-             160:   23(ivec2) Load 159
-             161:          84 CompositeConstruct 154 156 158 160
-             162:    7(fvec4) ImageGather 150 152 127 ConstOffsets 161
-                              Store 147(txval104) 162
-             164:          41 Load 43(g_tTex2di4a)
-             165:          14 Load 16(g_sSamp)
-             166:          46 SampledImage 164 165
-             167:     30(ptr) AccessChain 28 29
-             168:   21(fvec3) Load 167
-             169:     34(ptr) AccessChain 28 33
-             170:   23(ivec2) Load 169
-             171:     34(ptr) AccessChain 28 33
-             172:   23(ivec2) Load 171
-             173:     34(ptr) AccessChain 28 33
-             174:   23(ivec2) Load 173
-             175:     34(ptr) AccessChain 28 33
-             176:   23(ivec2) Load 175
-             177:          84 CompositeConstruct 170 172 174 176
-             178:   25(ivec4) ImageGather 166 168 127 ConstOffsets 177
-                              Store 163(txval114) 178
-             180:          57 Load 59(g_tTex2du4a)
-             181:          14 Load 16(g_sSamp)
-             182:          62 SampledImage 180 181
-             183:     30(ptr) AccessChain 28 29
-             184:   21(fvec3) Load 183
-             185:     34(ptr) AccessChain 28 33
-             186:   23(ivec2) Load 185
-             187:     34(ptr) AccessChain 28 33
-             188:   23(ivec2) Load 187
-             189:     34(ptr) AccessChain 28 33
-             190:   23(ivec2) Load 189
-             191:     34(ptr) AccessChain 28 33
-             192:   23(ivec2) Load 191
-             193:          84 CompositeConstruct 186 188 190 192
-             194:   54(ivec4) ImageGather 182 184 127 ConstOffsets 193
-                              Store 179(txval124) 194
-             196:          10 Load 12(g_tTex2df4a)
-             197:          14 Load 16(g_sSamp)
-             198:          18 SampledImage 196 197
-             199:     30(ptr) AccessChain 28 29
-             200:   21(fvec3) Load 199
-             201:     34(ptr) AccessChain 28 33
-             202:   23(ivec2) Load 201
-             203:    7(fvec4) ImageGather 198 200 29 Offset 202
-                              Store 195(txval201) 203
-             205:          41 Load 43(g_tTex2di4a)
-             206:          14 Load 16(g_sSamp)
-             207:          46 SampledImage 205 206
-             208:     30(ptr) AccessChain 28 29
-             209:   21(fvec3) Load 208
-             210:     34(ptr) AccessChain 28 33
-             211:   23(ivec2) Load 210
-             212:   25(ivec4) ImageGather 207 209 29 Offset 211
-                              Store 204(txval211) 212
-             214:          57 Load 59(g_tTex2du4a)
-             215:          14 Load 16(g_sSamp)
-             216:          62 SampledImage 214 215
-             217:     30(ptr) AccessChain 28 29
-             218:   21(fvec3) Load 217
-             219:     34(ptr) AccessChain 28 33
-             220:   23(ivec2) Load 219
-             221:   54(ivec4) ImageGather 216 218 29 Offset 220
-                              Store 213(txval221) 221
-             223:          10 Load 12(g_tTex2df4a)
-             224:          14 Load 16(g_sSamp)
-             225:          18 SampledImage 223 224
-             226:     30(ptr) AccessChain 28 29
-             227:   21(fvec3) Load 226
-             228:     34(ptr) AccessChain 28 33
-             229:   23(ivec2) Load 228
-             230:     34(ptr) AccessChain 28 33
-             231:   23(ivec2) Load 230
-             232:     34(ptr) AccessChain 28 33
-             233:   23(ivec2) Load 232
-             234:     34(ptr) AccessChain 28 33
-             235:   23(ivec2) Load 234
-             236:          84 CompositeConstruct 229 231 233 235
-             237:    7(fvec4) ImageGather 225 227 29 ConstOffsets 236
-                              Store 222(txval204) 237
-             239:          41 Load 43(g_tTex2di4a)
-             240:          14 Load 16(g_sSamp)
-             241:          46 SampledImage 239 240
-             242:     30(ptr) AccessChain 28 29
-             243:   21(fvec3) Load 242
-             244:     34(ptr) AccessChain 28 33
-             245:   23(ivec2) Load 244
-             246:     34(ptr) AccessChain 28 33
-             247:   23(ivec2) Load 246
-             248:     34(ptr) AccessChain 28 33
-             249:   23(ivec2) Load 248
-             250:     34(ptr) AccessChain 28 33
-             251:   23(ivec2) Load 250
-             252:          84 CompositeConstruct 245 247 249 251
-             253:   25(ivec4) ImageGather 241 243 29 ConstOffsets 252
-                              Store 238(txval214) 253
-             255:          57 Load 59(g_tTex2du4a)
-             256:          14 Load 16(g_sSamp)
-             257:          62 SampledImage 255 256
-             258:     30(ptr) AccessChain 28 29
-             259:   21(fvec3) Load 258
-             260:     34(ptr) AccessChain 28 33
-             261:   23(ivec2) Load 260
-             262:     34(ptr) AccessChain 28 33
-             263:   23(ivec2) Load 262
-             264:     34(ptr) AccessChain 28 33
-             265:   23(ivec2) Load 264
-             266:     34(ptr) AccessChain 28 33
-             267:   23(ivec2) Load 266
-             268:          84 CompositeConstruct 261 263 265 267
-             269:   54(ivec4) ImageGather 257 259 29 ConstOffsets 268
-                              Store 254(txval224) 269
-             271:          10 Load 12(g_tTex2df4a)
-             272:          14 Load 16(g_sSamp)
-             273:          18 SampledImage 271 272
-             274:     30(ptr) AccessChain 28 29
-             275:   21(fvec3) Load 274
-             276:     34(ptr) AccessChain 28 33
-             277:   23(ivec2) Load 276
-             279:    7(fvec4) ImageGather 273 275 278 Offset 277
-                              Store 270(txval301) 279
-             281:          41 Load 43(g_tTex2di4a)
-             282:          14 Load 16(g_sSamp)
-             283:          46 SampledImage 281 282
-             284:     30(ptr) AccessChain 28 29
-             285:   21(fvec3) Load 284
-             286:     34(ptr) AccessChain 28 33
-             287:   23(ivec2) Load 286
-             288:   25(ivec4) ImageGather 283 285 278 Offset 287
-                              Store 280(txval311) 288
-             290:          57 Load 59(g_tTex2du4a)
-             291:          14 Load 16(g_sSamp)
-             292:          62 SampledImage 290 291
-             293:     30(ptr) AccessChain 28 29
-             294:   21(fvec3) Load 293
-             295:     34(ptr) AccessChain 28 33
-             296:   23(ivec2) Load 295
-             297:   54(ivec4) ImageGather 292 294 278 Offset 296
-                              Store 289(txval321) 297
-             299:          10 Load 12(g_tTex2df4a)
-             300:          14 Load 16(g_sSamp)
-             301:          18 SampledImage 299 300
-             302:     30(ptr) AccessChain 28 29
-             303:   21(fvec3) Load 302
-             304:     34(ptr) AccessChain 28 33
-             305:   23(ivec2) Load 304
-             306:     34(ptr) AccessChain 28 33
-             307:   23(ivec2) Load 306
-             308:     34(ptr) AccessChain 28 33
-             309:   23(ivec2) Load 308
-             310:     34(ptr) AccessChain 28 33
-             311:   23(ivec2) Load 310
-             312:          84 CompositeConstruct 305 307 309 311
-             313:    7(fvec4) ImageGather 301 303 278 ConstOffsets 312
-                              Store 298(txval304) 313
-             315:          41 Load 43(g_tTex2di4a)
-             316:          14 Load 16(g_sSamp)
-             317:          46 SampledImage 315 316
-             318:     30(ptr) AccessChain 28 29
-             319:   21(fvec3) Load 318
-             320:     34(ptr) AccessChain 28 33
-             321:   23(ivec2) Load 320
-             322:     34(ptr) AccessChain 28 33
-             323:   23(ivec2) Load 322
-             324:     34(ptr) AccessChain 28 33
-             325:   23(ivec2) Load 324
-             326:     34(ptr) AccessChain 28 33
-             327:   23(ivec2) Load 326
-             328:          84 CompositeConstruct 321 323 325 327
-             329:   25(ivec4) ImageGather 317 319 278 ConstOffsets 328
-                              Store 314(txval314) 329
-             331:          57 Load 59(g_tTex2du4a)
-             332:          14 Load 16(g_sSamp)
-             333:          62 SampledImage 331 332
-             334:     30(ptr) AccessChain 28 29
-             335:   21(fvec3) Load 334
-             336:     34(ptr) AccessChain 28 33
-             337:   23(ivec2) Load 336
-             338:     34(ptr) AccessChain 28 33
-             339:   23(ivec2) Load 338
-             340:     34(ptr) AccessChain 28 33
-             341:   23(ivec2) Load 340
-             342:     34(ptr) AccessChain 28 33
-             343:   23(ivec2) Load 342
-             344:          84 CompositeConstruct 337 339 341 343
-             345:   54(ivec4) ImageGather 333 335 278 ConstOffsets 344
-                              Store 330(txval324) 345
-             351:      8(ptr) AccessChain 348(psout) 37
-                              Store 351 350
-             353:    352(ptr) AccessChain 348(psout) 127
-                              Store 353 349
-             356:      8(ptr) AccessChain 348(psout) 37
-             357:    7(fvec4) Load 356
-                              Store 355(Color) 357
-             360:    352(ptr) AccessChain 348(psout) 127
-             361:    6(float) Load 360
-                              Store 359(Depth) 361
+360(flattenTemp):    350(ptr) Variable Function
+             361:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 360(flattenTemp) 361
+             364:     12(ptr) AccessChain 360(flattenTemp) 41
+             365:    7(fvec4) Load 364
+                              Store 363(Color) 365
+             368:    355(ptr) AccessChain 360(flattenTemp) 131
+             369:    6(float) Load 368
+                              Store 367(Depth) 369
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+    13(txval001):     12(ptr) Variable Function
+    44(txval011):     43(ptr) Variable Function
+    60(txval021):     59(ptr) Variable Function
+    73(txval004):     12(ptr) Variable Function
+    91(txval014):     43(ptr) Variable Function
+   107(txval024):     59(ptr) Variable Function
+   123(txval101):     12(ptr) Variable Function
+   133(txval111):     43(ptr) Variable Function
+   142(txval121):     59(ptr) Variable Function
+   151(txval104):     12(ptr) Variable Function
+   167(txval114):     43(ptr) Variable Function
+   183(txval124):     59(ptr) Variable Function
+   199(txval201):     12(ptr) Variable Function
+   208(txval211):     43(ptr) Variable Function
+   217(txval221):     59(ptr) Variable Function
+   226(txval204):     12(ptr) Variable Function
+   242(txval214):     43(ptr) Variable Function
+   258(txval224):     59(ptr) Variable Function
+   274(txval301):     12(ptr) Variable Function
+   284(txval311):     43(ptr) Variable Function
+   293(txval321):     59(ptr) Variable Function
+   302(txval304):     12(ptr) Variable Function
+   318(txval314):     43(ptr) Variable Function
+   334(txval324):     59(ptr) Variable Function
+      351(psout):    350(ptr) Variable Function
+              17:          14 Load 16(g_tTex2df4a)
+              21:          18 Load 20(g_sSamp)
+              23:          22 SampledImage 17 21
+              35:     34(ptr) AccessChain 32 33
+              36:   25(fvec3) Load 35
+              39:     38(ptr) AccessChain 32 37
+              40:   27(ivec2) Load 39
+              42:    7(fvec4) ImageGather 23 36 41 Offset 40
+                              Store 13(txval001) 42
+              48:          45 Load 47(g_tTex2di4a)
+              49:          18 Load 20(g_sSamp)
+              51:          50 SampledImage 48 49
+              52:     34(ptr) AccessChain 32 33
+              53:   25(fvec3) Load 52
+              54:     38(ptr) AccessChain 32 37
+              55:   27(ivec2) Load 54
+              56:   29(ivec4) ImageGather 51 53 41 Offset 55
+                              Store 44(txval011) 56
+              64:          61 Load 63(g_tTex2du4a)
+              65:          18 Load 20(g_sSamp)
+              67:          66 SampledImage 64 65
+              68:     34(ptr) AccessChain 32 33
+              69:   25(fvec3) Load 68
+              70:     38(ptr) AccessChain 32 37
+              71:   27(ivec2) Load 70
+              72:   58(ivec4) ImageGather 67 69 41 Offset 71
+                              Store 60(txval021) 72
+              74:          14 Load 16(g_tTex2df4a)
+              75:          18 Load 20(g_sSamp)
+              76:          22 SampledImage 74 75
+              77:     34(ptr) AccessChain 32 33
+              78:   25(fvec3) Load 77
+              79:     38(ptr) AccessChain 32 37
+              80:   27(ivec2) Load 79
+              81:     38(ptr) AccessChain 32 37
+              82:   27(ivec2) Load 81
+              83:     38(ptr) AccessChain 32 37
+              84:   27(ivec2) Load 83
+              85:     38(ptr) AccessChain 32 37
+              86:   27(ivec2) Load 85
+              89:          88 CompositeConstruct 80 82 84 86
+              90:    7(fvec4) ImageGather 76 78 41 ConstOffsets 89
+                              Store 73(txval004) 90
+              92:          45 Load 47(g_tTex2di4a)
+              93:          18 Load 20(g_sSamp)
+              94:          50 SampledImage 92 93
+              95:     34(ptr) AccessChain 32 33
+              96:   25(fvec3) Load 95
+              97:     38(ptr) AccessChain 32 37
+              98:   27(ivec2) Load 97
+              99:     38(ptr) AccessChain 32 37
+             100:   27(ivec2) Load 99
+             101:     38(ptr) AccessChain 32 37
+             102:   27(ivec2) Load 101
+             103:     38(ptr) AccessChain 32 37
+             104:   27(ivec2) Load 103
+             105:          88 CompositeConstruct 98 100 102 104
+             106:   29(ivec4) ImageGather 94 96 41 ConstOffsets 105
+                              Store 91(txval014) 106
+             108:          61 Load 63(g_tTex2du4a)
+             109:          18 Load 20(g_sSamp)
+             110:          66 SampledImage 108 109
+             111:     34(ptr) AccessChain 32 33
+             112:   25(fvec3) Load 111
+             113:     38(ptr) AccessChain 32 37
+             114:   27(ivec2) Load 113
+             115:     38(ptr) AccessChain 32 37
+             116:   27(ivec2) Load 115
+             117:     38(ptr) AccessChain 32 37
+             118:   27(ivec2) Load 117
+             119:     38(ptr) AccessChain 32 37
+             120:   27(ivec2) Load 119
+             121:          88 CompositeConstruct 114 116 118 120
+             122:   58(ivec4) ImageGather 110 112 41 ConstOffsets 121
+                              Store 107(txval024) 122
+             124:          14 Load 16(g_tTex2df4a)
+             125:          18 Load 20(g_sSamp)
+             126:          22 SampledImage 124 125
+             127:     34(ptr) AccessChain 32 33
+             128:   25(fvec3) Load 127
+             129:     38(ptr) AccessChain 32 37
+             130:   27(ivec2) Load 129
+             132:    7(fvec4) ImageGather 126 128 131 Offset 130
+                              Store 123(txval101) 132
+             134:          45 Load 47(g_tTex2di4a)
+             135:          18 Load 20(g_sSamp)
+             136:          50 SampledImage 134 135
+             137:     34(ptr) AccessChain 32 33
+             138:   25(fvec3) Load 137
+             139:     38(ptr) AccessChain 32 37
+             140:   27(ivec2) Load 139
+             141:   29(ivec4) ImageGather 136 138 131 Offset 140
+                              Store 133(txval111) 141
+             143:          61 Load 63(g_tTex2du4a)
+             144:          18 Load 20(g_sSamp)
+             145:          66 SampledImage 143 144
+             146:     34(ptr) AccessChain 32 33
+             147:   25(fvec3) Load 146
+             148:     38(ptr) AccessChain 32 37
+             149:   27(ivec2) Load 148
+             150:   58(ivec4) ImageGather 145 147 131 Offset 149
+                              Store 142(txval121) 150
+             152:          14 Load 16(g_tTex2df4a)
+             153:          18 Load 20(g_sSamp)
+             154:          22 SampledImage 152 153
+             155:     34(ptr) AccessChain 32 33
+             156:   25(fvec3) Load 155
+             157:     38(ptr) AccessChain 32 37
+             158:   27(ivec2) Load 157
+             159:     38(ptr) AccessChain 32 37
+             160:   27(ivec2) Load 159
+             161:     38(ptr) AccessChain 32 37
+             162:   27(ivec2) Load 161
+             163:     38(ptr) AccessChain 32 37
+             164:   27(ivec2) Load 163
+             165:          88 CompositeConstruct 158 160 162 164
+             166:    7(fvec4) ImageGather 154 156 131 ConstOffsets 165
+                              Store 151(txval104) 166
+             168:          45 Load 47(g_tTex2di4a)
+             169:          18 Load 20(g_sSamp)
+             170:          50 SampledImage 168 169
+             171:     34(ptr) AccessChain 32 33
+             172:   25(fvec3) Load 171
+             173:     38(ptr) AccessChain 32 37
+             174:   27(ivec2) Load 173
+             175:     38(ptr) AccessChain 32 37
+             176:   27(ivec2) Load 175
+             177:     38(ptr) AccessChain 32 37
+             178:   27(ivec2) Load 177
+             179:     38(ptr) AccessChain 32 37
+             180:   27(ivec2) Load 179
+             181:          88 CompositeConstruct 174 176 178 180
+             182:   29(ivec4) ImageGather 170 172 131 ConstOffsets 181
+                              Store 167(txval114) 182
+             184:          61 Load 63(g_tTex2du4a)
+             185:          18 Load 20(g_sSamp)
+             186:          66 SampledImage 184 185
+             187:     34(ptr) AccessChain 32 33
+             188:   25(fvec3) Load 187
+             189:     38(ptr) AccessChain 32 37
+             190:   27(ivec2) Load 189
+             191:     38(ptr) AccessChain 32 37
+             192:   27(ivec2) Load 191
+             193:     38(ptr) AccessChain 32 37
+             194:   27(ivec2) Load 193
+             195:     38(ptr) AccessChain 32 37
+             196:   27(ivec2) Load 195
+             197:          88 CompositeConstruct 190 192 194 196
+             198:   58(ivec4) ImageGather 186 188 131 ConstOffsets 197
+                              Store 183(txval124) 198
+             200:          14 Load 16(g_tTex2df4a)
+             201:          18 Load 20(g_sSamp)
+             202:          22 SampledImage 200 201
+             203:     34(ptr) AccessChain 32 33
+             204:   25(fvec3) Load 203
+             205:     38(ptr) AccessChain 32 37
+             206:   27(ivec2) Load 205
+             207:    7(fvec4) ImageGather 202 204 33 Offset 206
+                              Store 199(txval201) 207
+             209:          45 Load 47(g_tTex2di4a)
+             210:          18 Load 20(g_sSamp)
+             211:          50 SampledImage 209 210
+             212:     34(ptr) AccessChain 32 33
+             213:   25(fvec3) Load 212
+             214:     38(ptr) AccessChain 32 37
+             215:   27(ivec2) Load 214
+             216:   29(ivec4) ImageGather 211 213 33 Offset 215
+                              Store 208(txval211) 216
+             218:          61 Load 63(g_tTex2du4a)
+             219:          18 Load 20(g_sSamp)
+             220:          66 SampledImage 218 219
+             221:     34(ptr) AccessChain 32 33
+             222:   25(fvec3) Load 221
+             223:     38(ptr) AccessChain 32 37
+             224:   27(ivec2) Load 223
+             225:   58(ivec4) ImageGather 220 222 33 Offset 224
+                              Store 217(txval221) 225
+             227:          14 Load 16(g_tTex2df4a)
+             228:          18 Load 20(g_sSamp)
+             229:          22 SampledImage 227 228
+             230:     34(ptr) AccessChain 32 33
+             231:   25(fvec3) Load 230
+             232:     38(ptr) AccessChain 32 37
+             233:   27(ivec2) Load 232
+             234:     38(ptr) AccessChain 32 37
+             235:   27(ivec2) Load 234
+             236:     38(ptr) AccessChain 32 37
+             237:   27(ivec2) Load 236
+             238:     38(ptr) AccessChain 32 37
+             239:   27(ivec2) Load 238
+             240:          88 CompositeConstruct 233 235 237 239
+             241:    7(fvec4) ImageGather 229 231 33 ConstOffsets 240
+                              Store 226(txval204) 241
+             243:          45 Load 47(g_tTex2di4a)
+             244:          18 Load 20(g_sSamp)
+             245:          50 SampledImage 243 244
+             246:     34(ptr) AccessChain 32 33
+             247:   25(fvec3) Load 246
+             248:     38(ptr) AccessChain 32 37
+             249:   27(ivec2) Load 248
+             250:     38(ptr) AccessChain 32 37
+             251:   27(ivec2) Load 250
+             252:     38(ptr) AccessChain 32 37
+             253:   27(ivec2) Load 252
+             254:     38(ptr) AccessChain 32 37
+             255:   27(ivec2) Load 254
+             256:          88 CompositeConstruct 249 251 253 255
+             257:   29(ivec4) ImageGather 245 247 33 ConstOffsets 256
+                              Store 242(txval214) 257
+             259:          61 Load 63(g_tTex2du4a)
+             260:          18 Load 20(g_sSamp)
+             261:          66 SampledImage 259 260
+             262:     34(ptr) AccessChain 32 33
+             263:   25(fvec3) Load 262
+             264:     38(ptr) AccessChain 32 37
+             265:   27(ivec2) Load 264
+             266:     38(ptr) AccessChain 32 37
+             267:   27(ivec2) Load 266
+             268:     38(ptr) AccessChain 32 37
+             269:   27(ivec2) Load 268
+             270:     38(ptr) AccessChain 32 37
+             271:   27(ivec2) Load 270
+             272:          88 CompositeConstruct 265 267 269 271
+             273:   58(ivec4) ImageGather 261 263 33 ConstOffsets 272
+                              Store 258(txval224) 273
+             275:          14 Load 16(g_tTex2df4a)
+             276:          18 Load 20(g_sSamp)
+             277:          22 SampledImage 275 276
+             278:     34(ptr) AccessChain 32 33
+             279:   25(fvec3) Load 278
+             280:     38(ptr) AccessChain 32 37
+             281:   27(ivec2) Load 280
+             283:    7(fvec4) ImageGather 277 279 282 Offset 281
+                              Store 274(txval301) 283
+             285:          45 Load 47(g_tTex2di4a)
+             286:          18 Load 20(g_sSamp)
+             287:          50 SampledImage 285 286
+             288:     34(ptr) AccessChain 32 33
+             289:   25(fvec3) Load 288
+             290:     38(ptr) AccessChain 32 37
+             291:   27(ivec2) Load 290
+             292:   29(ivec4) ImageGather 287 289 282 Offset 291
+                              Store 284(txval311) 292
+             294:          61 Load 63(g_tTex2du4a)
+             295:          18 Load 20(g_sSamp)
+             296:          66 SampledImage 294 295
+             297:     34(ptr) AccessChain 32 33
+             298:   25(fvec3) Load 297
+             299:     38(ptr) AccessChain 32 37
+             300:   27(ivec2) Load 299
+             301:   58(ivec4) ImageGather 296 298 282 Offset 300
+                              Store 293(txval321) 301
+             303:          14 Load 16(g_tTex2df4a)
+             304:          18 Load 20(g_sSamp)
+             305:          22 SampledImage 303 304
+             306:     34(ptr) AccessChain 32 33
+             307:   25(fvec3) Load 306
+             308:     38(ptr) AccessChain 32 37
+             309:   27(ivec2) Load 308
+             310:     38(ptr) AccessChain 32 37
+             311:   27(ivec2) Load 310
+             312:     38(ptr) AccessChain 32 37
+             313:   27(ivec2) Load 312
+             314:     38(ptr) AccessChain 32 37
+             315:   27(ivec2) Load 314
+             316:          88 CompositeConstruct 309 311 313 315
+             317:    7(fvec4) ImageGather 305 307 282 ConstOffsets 316
+                              Store 302(txval304) 317
+             319:          45 Load 47(g_tTex2di4a)
+             320:          18 Load 20(g_sSamp)
+             321:          50 SampledImage 319 320
+             322:     34(ptr) AccessChain 32 33
+             323:   25(fvec3) Load 322
+             324:     38(ptr) AccessChain 32 37
+             325:   27(ivec2) Load 324
+             326:     38(ptr) AccessChain 32 37
+             327:   27(ivec2) Load 326
+             328:     38(ptr) AccessChain 32 37
+             329:   27(ivec2) Load 328
+             330:     38(ptr) AccessChain 32 37
+             331:   27(ivec2) Load 330
+             332:          88 CompositeConstruct 325 327 329 331
+             333:   29(ivec4) ImageGather 321 323 282 ConstOffsets 332
+                              Store 318(txval314) 333
+             335:          61 Load 63(g_tTex2du4a)
+             336:          18 Load 20(g_sSamp)
+             337:          66 SampledImage 335 336
+             338:     34(ptr) AccessChain 32 33
+             339:   25(fvec3) Load 338
+             340:     38(ptr) AccessChain 32 37
+             341:   27(ivec2) Load 340
+             342:     38(ptr) AccessChain 32 37
+             343:   27(ivec2) Load 342
+             344:     38(ptr) AccessChain 32 37
+             345:   27(ivec2) Load 344
+             346:     38(ptr) AccessChain 32 37
+             347:   27(ivec2) Load 346
+             348:          88 CompositeConstruct 341 343 345 347
+             349:   58(ivec4) ImageGather 337 339 282 ConstOffsets 348
+                              Store 334(txval324) 349
+             354:     12(ptr) AccessChain 351(psout) 41
+                              Store 354 353
+             356:    355(ptr) AccessChain 351(psout) 131
+                              Store 356 352
+             357:8(PS_OUTPUT) Load 351(psout)
+                              ReturnValue 357
+                              FunctionEnd

+ 909 - 886
3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.getdimensions.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:46  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:46    Function Parameters: 
 0:?     Sequence
 0:65      Sequence
@@ -1060,24 +1060,28 @@ gl_FragCoord origin is upper left
 0:277            1 (const int)
 0:277        Constant:
 0:277          1.000000
-0:279      Sequence
-0:279        Sequence
-0:279          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:279            Color: direct index for structure (temp 4-component vector of float)
-0:279              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:279              Constant:
-0:279                0 (const int)
-0:279          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:279            Depth: direct index for structure (temp float)
-0:279              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:279              Constant:
-0:279                1 (const int)
-0:279        Branch: Return
+0:279      Branch: Return with expression
+0:279        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46  Function Definition: main( (temp void)
+0:46    Function Parameters: 
+0:?     Sequence
+0:46      Sequence
+0:46        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:46          Color: direct index for structure (temp 4-component vector of float)
+0:46            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46            Constant:
+0:46              0 (const int)
+0:46        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:46          Depth: direct index for structure (temp float)
+0:46            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46            Constant:
+0:46              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -1106,6 +1110,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -1114,7 +1120,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:46  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:46    Function Parameters: 
 0:?     Sequence
 0:65      Sequence
@@ -2172,24 +2178,28 @@ gl_FragCoord origin is upper left
 0:277            1 (const int)
 0:277        Constant:
 0:277          1.000000
-0:279      Sequence
-0:279        Sequence
-0:279          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:279            Color: direct index for structure (temp 4-component vector of float)
-0:279              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:279              Constant:
-0:279                0 (const int)
-0:279          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:279            Depth: direct index for structure (temp float)
-0:279              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:279              Constant:
-0:279                1 (const int)
-0:279        Branch: Return
+0:279      Branch: Return with expression
+0:279        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46  Function Definition: main( (temp void)
+0:46    Function Parameters: 
+0:?     Sequence
+0:46      Sequence
+0:46        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:46          Color: direct index for structure (temp 4-component vector of float)
+0:46            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46            Constant:
+0:46              0 (const int)
+0:46        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:46          Depth: direct index for structure (temp float)
+0:46            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:46            Constant:
+0:46              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -2218,10 +2228,12 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 545
+// Id's are bound by 552
 
                               Capability Shader
                               Capability Sampled1D
@@ -2230,860 +2242,871 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 534 538
+                              EntryPoint Fragment 4  "main" 542 546
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "sizeQueryTemp"
-                              Name 12  "g_tTex1df4"
-                              Name 16  "WidthU"
-                              Name 18  "sizeQueryTemp"
-                              Name 23  "NumberOfLevelsU"
-                              Name 26  "sizeQueryTemp"
-                              Name 29  "g_tTex1di4"
-                              Name 33  "sizeQueryTemp"
-                              Name 39  "sizeQueryTemp"
-                              Name 42  "g_tTex1du4"
-                              Name 46  "sizeQueryTemp"
-                              Name 54  "sizeQueryTemp"
-                              Name 57  "g_tTex1df4a"
-                              Name 64  "ElementsU"
-                              Name 68  "sizeQueryTemp"
-                              Name 77  "sizeQueryTemp"
-                              Name 80  "g_tTex1di4a"
-                              Name 87  "sizeQueryTemp"
-                              Name 96  "sizeQueryTemp"
-                              Name 99  "g_tTex1du4a"
-                              Name 106  "sizeQueryTemp"
-                              Name 115  "sizeQueryTemp"
-                              Name 118  "g_tTex2df4"
-                              Name 123  "HeightU"
-                              Name 126  "sizeQueryTemp"
-                              Name 135  "sizeQueryTemp"
-                              Name 138  "g_tTex2di4"
-                              Name 145  "sizeQueryTemp"
-                              Name 154  "sizeQueryTemp"
-                              Name 157  "g_tTex2du4"
-                              Name 164  "sizeQueryTemp"
-                              Name 175  "sizeQueryTemp"
-                              Name 178  "g_tTex2df4a"
-                              Name 189  "sizeQueryTemp"
-                              Name 200  "sizeQueryTemp"
-                              Name 203  "g_tTex2di4a"
-                              Name 212  "sizeQueryTemp"
-                              Name 223  "sizeQueryTemp"
-                              Name 226  "g_tTex2du4a"
-                              Name 235  "sizeQueryTemp"
-                              Name 246  "sizeQueryTemp"
-                              Name 249  "g_tTex3df4"
-                              Name 256  "DepthU"
-                              Name 259  "sizeQueryTemp"
-                              Name 270  "sizeQueryTemp"
-                              Name 273  "g_tTex3di4"
-                              Name 282  "sizeQueryTemp"
-                              Name 293  "sizeQueryTemp"
-                              Name 296  "g_tTex3du4"
-                              Name 305  "sizeQueryTemp"
-                              Name 316  "sizeQueryTemp"
-                              Name 319  "g_tTexcdf4"
-                              Name 326  "sizeQueryTemp"
-                              Name 335  "sizeQueryTemp"
-                              Name 338  "g_tTexcdi4"
-                              Name 345  "sizeQueryTemp"
-                              Name 354  "sizeQueryTemp"
-                              Name 357  "g_tTexcdu4"
-                              Name 364  "sizeQueryTemp"
-                              Name 373  "sizeQueryTemp"
-                              Name 376  "g_tTexcdf4a"
-                              Name 385  "sizeQueryTemp"
-                              Name 396  "sizeQueryTemp"
-                              Name 399  "g_tTexcdi4a"
-                              Name 408  "sizeQueryTemp"
-                              Name 419  "sizeQueryTemp"
-                              Name 422  "g_tTexcdu4a"
-                              Name 431  "sizeQueryTemp"
-                              Name 442  "sizeQueryTemp"
-                              Name 445  "g_tTex2dmsf4"
-                              Name 452  "NumberOfSamplesU"
-                              Name 455  "sizeQueryTemp"
-                              Name 458  "g_tTex2dmsi4"
-                              Name 467  "sizeQueryTemp"
-                              Name 470  "g_tTex2dmsu4"
-                              Name 479  "sizeQueryTemp"
-                              Name 482  "g_tTex2dmsf4a"
-                              Name 493  "sizeQueryTemp"
-                              Name 496  "g_tTex2dmsi4a"
-                              Name 507  "sizeQueryTemp"
-                              Name 510  "g_tTex2dmsu4a"
-                              Name 522  "PS_OUTPUT"
-                              MemberName 522(PS_OUTPUT) 0  "Color"
-                              MemberName 522(PS_OUTPUT) 1  "Depth"
-                              Name 524  "psout"
-                              Name 534  "Color"
-                              Name 538  "Depth"
-                              Name 544  "g_sSamp"
-                              Decorate 12(g_tTex1df4) DescriptorSet 0
-                              Decorate 12(g_tTex1df4) Binding 0
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 42(g_tTex1du4) DescriptorSet 0
-                              Decorate 57(g_tTex1df4a) DescriptorSet 0
-                              Decorate 80(g_tTex1di4a) DescriptorSet 0
-                              Decorate 99(g_tTex1du4a) DescriptorSet 0
-                              Decorate 118(g_tTex2df4) DescriptorSet 0
-                              Decorate 138(g_tTex2di4) DescriptorSet 0
-                              Decorate 157(g_tTex2du4) DescriptorSet 0
-                              Decorate 178(g_tTex2df4a) DescriptorSet 0
-                              Decorate 203(g_tTex2di4a) DescriptorSet 0
-                              Decorate 226(g_tTex2du4a) DescriptorSet 0
-                              Decorate 249(g_tTex3df4) DescriptorSet 0
-                              Decorate 273(g_tTex3di4) DescriptorSet 0
-                              Decorate 296(g_tTex3du4) DescriptorSet 0
-                              Decorate 319(g_tTexcdf4) DescriptorSet 0
-                              Decorate 338(g_tTexcdi4) DescriptorSet 0
-                              Decorate 357(g_tTexcdu4) DescriptorSet 0
-                              Decorate 376(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 399(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 422(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 445(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 458(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 470(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 482(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 496(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 510(g_tTex2dmsu4a) DescriptorSet 0
-                              Decorate 534(Color) Location 0
-                              Decorate 538(Depth) BuiltIn FragDepth
-                              Decorate 544(g_sSamp) DescriptorSet 0
-                              Decorate 544(g_sSamp) Binding 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "sizeQueryTemp"
+                              Name 17  "g_tTex1df4"
+                              Name 21  "WidthU"
+                              Name 23  "sizeQueryTemp"
+                              Name 28  "NumberOfLevelsU"
+                              Name 31  "sizeQueryTemp"
+                              Name 34  "g_tTex1di4"
+                              Name 38  "sizeQueryTemp"
+                              Name 44  "sizeQueryTemp"
+                              Name 47  "g_tTex1du4"
+                              Name 51  "sizeQueryTemp"
+                              Name 59  "sizeQueryTemp"
+                              Name 62  "g_tTex1df4a"
+                              Name 69  "ElementsU"
+                              Name 73  "sizeQueryTemp"
+                              Name 82  "sizeQueryTemp"
+                              Name 85  "g_tTex1di4a"
+                              Name 92  "sizeQueryTemp"
+                              Name 101  "sizeQueryTemp"
+                              Name 104  "g_tTex1du4a"
+                              Name 111  "sizeQueryTemp"
+                              Name 120  "sizeQueryTemp"
+                              Name 123  "g_tTex2df4"
+                              Name 128  "HeightU"
+                              Name 131  "sizeQueryTemp"
+                              Name 140  "sizeQueryTemp"
+                              Name 143  "g_tTex2di4"
+                              Name 150  "sizeQueryTemp"
+                              Name 159  "sizeQueryTemp"
+                              Name 162  "g_tTex2du4"
+                              Name 169  "sizeQueryTemp"
+                              Name 180  "sizeQueryTemp"
+                              Name 183  "g_tTex2df4a"
+                              Name 194  "sizeQueryTemp"
+                              Name 205  "sizeQueryTemp"
+                              Name 208  "g_tTex2di4a"
+                              Name 217  "sizeQueryTemp"
+                              Name 228  "sizeQueryTemp"
+                              Name 231  "g_tTex2du4a"
+                              Name 240  "sizeQueryTemp"
+                              Name 251  "sizeQueryTemp"
+                              Name 254  "g_tTex3df4"
+                              Name 261  "DepthU"
+                              Name 264  "sizeQueryTemp"
+                              Name 275  "sizeQueryTemp"
+                              Name 278  "g_tTex3di4"
+                              Name 287  "sizeQueryTemp"
+                              Name 298  "sizeQueryTemp"
+                              Name 301  "g_tTex3du4"
+                              Name 310  "sizeQueryTemp"
+                              Name 321  "sizeQueryTemp"
+                              Name 324  "g_tTexcdf4"
+                              Name 331  "sizeQueryTemp"
+                              Name 340  "sizeQueryTemp"
+                              Name 343  "g_tTexcdi4"
+                              Name 350  "sizeQueryTemp"
+                              Name 359  "sizeQueryTemp"
+                              Name 362  "g_tTexcdu4"
+                              Name 369  "sizeQueryTemp"
+                              Name 378  "sizeQueryTemp"
+                              Name 381  "g_tTexcdf4a"
+                              Name 390  "sizeQueryTemp"
+                              Name 401  "sizeQueryTemp"
+                              Name 404  "g_tTexcdi4a"
+                              Name 413  "sizeQueryTemp"
+                              Name 424  "sizeQueryTemp"
+                              Name 427  "g_tTexcdu4a"
+                              Name 436  "sizeQueryTemp"
+                              Name 447  "sizeQueryTemp"
+                              Name 450  "g_tTex2dmsf4"
+                              Name 457  "NumberOfSamplesU"
+                              Name 460  "sizeQueryTemp"
+                              Name 463  "g_tTex2dmsi4"
+                              Name 472  "sizeQueryTemp"
+                              Name 475  "g_tTex2dmsu4"
+                              Name 484  "sizeQueryTemp"
+                              Name 487  "g_tTex2dmsf4a"
+                              Name 498  "sizeQueryTemp"
+                              Name 501  "g_tTex2dmsi4a"
+                              Name 512  "sizeQueryTemp"
+                              Name 515  "g_tTex2dmsu4a"
+                              Name 527  "psout"
+                              Name 539  "flattenTemp"
+                              Name 542  "Color"
+                              Name 546  "Depth"
+                              Name 551  "g_sSamp"
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
+                              Decorate 17(g_tTex1df4) Binding 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 62(g_tTex1df4a) DescriptorSet 0
+                              Decorate 85(g_tTex1di4a) DescriptorSet 0
+                              Decorate 104(g_tTex1du4a) DescriptorSet 0
+                              Decorate 123(g_tTex2df4) DescriptorSet 0
+                              Decorate 143(g_tTex2di4) DescriptorSet 0
+                              Decorate 162(g_tTex2du4) DescriptorSet 0
+                              Decorate 183(g_tTex2df4a) DescriptorSet 0
+                              Decorate 208(g_tTex2di4a) DescriptorSet 0
+                              Decorate 231(g_tTex2du4a) DescriptorSet 0
+                              Decorate 254(g_tTex3df4) DescriptorSet 0
+                              Decorate 278(g_tTex3di4) DescriptorSet 0
+                              Decorate 301(g_tTex3du4) DescriptorSet 0
+                              Decorate 324(g_tTexcdf4) DescriptorSet 0
+                              Decorate 343(g_tTexcdi4) DescriptorSet 0
+                              Decorate 362(g_tTexcdu4) DescriptorSet 0
+                              Decorate 381(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 404(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 427(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 450(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 463(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 475(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 487(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 501(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 515(g_tTex2dmsu4a) DescriptorSet 0
+                              Decorate 542(Color) Location 0
+                              Decorate 546(Depth) BuiltIn FragDepth
+                              Decorate 551(g_sSamp) DescriptorSet 0
+                              Decorate 551(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:             TypePointer Function 6(int)
-               9:             TypeFloat 32
-              10:             TypeImage 9(float) 1D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex1df4):     11(ptr) Variable UniformConstant
-              14:             TypeInt 32 1
-              20:      6(int) Constant 6
-              27:             TypeImage 14(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              40:             TypeImage 6(int) 1D sampled format:Unknown
-              41:             TypePointer UniformConstant 40
-  42(g_tTex1du4):     41(ptr) Variable UniformConstant
-              52:             TypeVector 6(int) 2
-              53:             TypePointer Function 52(ivec2)
-              55:             TypeImage 9(float) 1D array sampled format:Unknown
-              56:             TypePointer UniformConstant 55
- 57(g_tTex1df4a):     56(ptr) Variable UniformConstant
-              59:             TypeVector 14(int) 2
-              61:      6(int) Constant 0
-              65:      6(int) Constant 1
-              78:             TypeImage 14(int) 1D array sampled format:Unknown
-              79:             TypePointer UniformConstant 78
- 80(g_tTex1di4a):     79(ptr) Variable UniformConstant
-              97:             TypeImage 6(int) 1D array sampled format:Unknown
-              98:             TypePointer UniformConstant 97
- 99(g_tTex1du4a):     98(ptr) Variable UniformConstant
-             116:             TypeImage 9(float) 2D sampled format:Unknown
-             117:             TypePointer UniformConstant 116
- 118(g_tTex2df4):    117(ptr) Variable UniformConstant
-             136:             TypeImage 14(int) 2D sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTex2di4):    137(ptr) Variable UniformConstant
-             155:             TypeImage 6(int) 2D sampled format:Unknown
-             156:             TypePointer UniformConstant 155
- 157(g_tTex2du4):    156(ptr) Variable UniformConstant
-             173:             TypeVector 6(int) 3
-             174:             TypePointer Function 173(ivec3)
-             176:             TypeImage 9(float) 2D array sampled format:Unknown
-             177:             TypePointer UniformConstant 176
-178(g_tTex2df4a):    177(ptr) Variable UniformConstant
-             180:             TypeVector 14(int) 3
-             186:      6(int) Constant 2
-             201:             TypeImage 14(int) 2D array sampled format:Unknown
-             202:             TypePointer UniformConstant 201
-203(g_tTex2di4a):    202(ptr) Variable UniformConstant
-             224:             TypeImage 6(int) 2D array sampled format:Unknown
-             225:             TypePointer UniformConstant 224
-226(g_tTex2du4a):    225(ptr) Variable UniformConstant
-             247:             TypeImage 9(float) 3D sampled format:Unknown
-             248:             TypePointer UniformConstant 247
- 249(g_tTex3df4):    248(ptr) Variable UniformConstant
-             271:             TypeImage 14(int) 3D sampled format:Unknown
-             272:             TypePointer UniformConstant 271
- 273(g_tTex3di4):    272(ptr) Variable UniformConstant
-             294:             TypeImage 6(int) 3D sampled format:Unknown
-             295:             TypePointer UniformConstant 294
- 296(g_tTex3du4):    295(ptr) Variable UniformConstant
-             317:             TypeImage 9(float) Cube sampled format:Unknown
-             318:             TypePointer UniformConstant 317
- 319(g_tTexcdf4):    318(ptr) Variable UniformConstant
-             336:             TypeImage 14(int) Cube sampled format:Unknown
-             337:             TypePointer UniformConstant 336
- 338(g_tTexcdi4):    337(ptr) Variable UniformConstant
-             355:             TypeImage 6(int) Cube sampled format:Unknown
-             356:             TypePointer UniformConstant 355
- 357(g_tTexcdu4):    356(ptr) Variable UniformConstant
-             374:             TypeImage 9(float) Cube array sampled format:Unknown
-             375:             TypePointer UniformConstant 374
-376(g_tTexcdf4a):    375(ptr) Variable UniformConstant
-             397:             TypeImage 14(int) Cube array sampled format:Unknown
-             398:             TypePointer UniformConstant 397
-399(g_tTexcdi4a):    398(ptr) Variable UniformConstant
-             420:             TypeImage 6(int) Cube array sampled format:Unknown
-             421:             TypePointer UniformConstant 420
-422(g_tTexcdu4a):    421(ptr) Variable UniformConstant
-             443:             TypeImage 9(float) 2D multi-sampled sampled format:Unknown
-             444:             TypePointer UniformConstant 443
-445(g_tTex2dmsf4):    444(ptr) Variable UniformConstant
-             456:             TypeImage 14(int) 2D multi-sampled sampled format:Unknown
-             457:             TypePointer UniformConstant 456
-458(g_tTex2dmsi4):    457(ptr) Variable UniformConstant
-             468:             TypeImage 6(int) 2D multi-sampled sampled format:Unknown
-             469:             TypePointer UniformConstant 468
-470(g_tTex2dmsu4):    469(ptr) Variable UniformConstant
-             480:             TypeImage 9(float) 2D array multi-sampled sampled format:Unknown
-             481:             TypePointer UniformConstant 480
-482(g_tTex2dmsf4a):    481(ptr) Variable UniformConstant
-             494:             TypeImage 14(int) 2D array multi-sampled sampled format:Unknown
-             495:             TypePointer UniformConstant 494
-496(g_tTex2dmsi4a):    495(ptr) Variable UniformConstant
-             508:             TypeImage 6(int) 2D array multi-sampled sampled format:Unknown
-             509:             TypePointer UniformConstant 508
-510(g_tTex2dmsu4a):    509(ptr) Variable UniformConstant
-             521:             TypeVector 9(float) 4
-  522(PS_OUTPUT):             TypeStruct 521(fvec4) 9(float)
-             523:             TypePointer Function 522(PS_OUTPUT)
-             525:     14(int) Constant 0
-             526:    9(float) Constant 1065353216
-             527:  521(fvec4) ConstantComposite 526 526 526 526
-             528:             TypePointer Function 521(fvec4)
-             530:     14(int) Constant 1
-             531:             TypePointer Function 9(float)
-             533:             TypePointer Output 521(fvec4)
-      534(Color):    533(ptr) Variable Output
-             537:             TypePointer Output 9(float)
-      538(Depth):    537(ptr) Variable Output
-             542:             TypeSampler
-             543:             TypePointer UniformConstant 542
-    544(g_sSamp):    543(ptr) Variable UniformConstant
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+  17(g_tTex1df4):     16(ptr) Variable UniformConstant
+              19:             TypeInt 32 1
+              25:     12(int) Constant 6
+              32:             TypeImage 19(int) 1D sampled format:Unknown
+              33:             TypePointer UniformConstant 32
+  34(g_tTex1di4):     33(ptr) Variable UniformConstant
+              45:             TypeImage 12(int) 1D sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex1du4):     46(ptr) Variable UniformConstant
+              57:             TypeVector 12(int) 2
+              58:             TypePointer Function 57(ivec2)
+              60:             TypeImage 6(float) 1D array sampled format:Unknown
+              61:             TypePointer UniformConstant 60
+ 62(g_tTex1df4a):     61(ptr) Variable UniformConstant
+              64:             TypeVector 19(int) 2
+              66:     12(int) Constant 0
+              70:     12(int) Constant 1
+              83:             TypeImage 19(int) 1D array sampled format:Unknown
+              84:             TypePointer UniformConstant 83
+ 85(g_tTex1di4a):     84(ptr) Variable UniformConstant
+             102:             TypeImage 12(int) 1D array sampled format:Unknown
+             103:             TypePointer UniformConstant 102
+104(g_tTex1du4a):    103(ptr) Variable UniformConstant
+             121:             TypeImage 6(float) 2D sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+ 123(g_tTex2df4):    122(ptr) Variable UniformConstant
+             141:             TypeImage 19(int) 2D sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTex2di4):    142(ptr) Variable UniformConstant
+             160:             TypeImage 12(int) 2D sampled format:Unknown
+             161:             TypePointer UniformConstant 160
+ 162(g_tTex2du4):    161(ptr) Variable UniformConstant
+             178:             TypeVector 12(int) 3
+             179:             TypePointer Function 178(ivec3)
+             181:             TypeImage 6(float) 2D array sampled format:Unknown
+             182:             TypePointer UniformConstant 181
+183(g_tTex2df4a):    182(ptr) Variable UniformConstant
+             185:             TypeVector 19(int) 3
+             191:     12(int) Constant 2
+             206:             TypeImage 19(int) 2D array sampled format:Unknown
+             207:             TypePointer UniformConstant 206
+208(g_tTex2di4a):    207(ptr) Variable UniformConstant
+             229:             TypeImage 12(int) 2D array sampled format:Unknown
+             230:             TypePointer UniformConstant 229
+231(g_tTex2du4a):    230(ptr) Variable UniformConstant
+             252:             TypeImage 6(float) 3D sampled format:Unknown
+             253:             TypePointer UniformConstant 252
+ 254(g_tTex3df4):    253(ptr) Variable UniformConstant
+             276:             TypeImage 19(int) 3D sampled format:Unknown
+             277:             TypePointer UniformConstant 276
+ 278(g_tTex3di4):    277(ptr) Variable UniformConstant
+             299:             TypeImage 12(int) 3D sampled format:Unknown
+             300:             TypePointer UniformConstant 299
+ 301(g_tTex3du4):    300(ptr) Variable UniformConstant
+             322:             TypeImage 6(float) Cube sampled format:Unknown
+             323:             TypePointer UniformConstant 322
+ 324(g_tTexcdf4):    323(ptr) Variable UniformConstant
+             341:             TypeImage 19(int) Cube sampled format:Unknown
+             342:             TypePointer UniformConstant 341
+ 343(g_tTexcdi4):    342(ptr) Variable UniformConstant
+             360:             TypeImage 12(int) Cube sampled format:Unknown
+             361:             TypePointer UniformConstant 360
+ 362(g_tTexcdu4):    361(ptr) Variable UniformConstant
+             379:             TypeImage 6(float) Cube array sampled format:Unknown
+             380:             TypePointer UniformConstant 379
+381(g_tTexcdf4a):    380(ptr) Variable UniformConstant
+             402:             TypeImage 19(int) Cube array sampled format:Unknown
+             403:             TypePointer UniformConstant 402
+404(g_tTexcdi4a):    403(ptr) Variable UniformConstant
+             425:             TypeImage 12(int) Cube array sampled format:Unknown
+             426:             TypePointer UniformConstant 425
+427(g_tTexcdu4a):    426(ptr) Variable UniformConstant
+             448:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+             449:             TypePointer UniformConstant 448
+450(g_tTex2dmsf4):    449(ptr) Variable UniformConstant
+             461:             TypeImage 19(int) 2D multi-sampled sampled format:Unknown
+             462:             TypePointer UniformConstant 461
+463(g_tTex2dmsi4):    462(ptr) Variable UniformConstant
+             473:             TypeImage 12(int) 2D multi-sampled sampled format:Unknown
+             474:             TypePointer UniformConstant 473
+475(g_tTex2dmsu4):    474(ptr) Variable UniformConstant
+             485:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
+             486:             TypePointer UniformConstant 485
+487(g_tTex2dmsf4a):    486(ptr) Variable UniformConstant
+             499:             TypeImage 19(int) 2D array multi-sampled sampled format:Unknown
+             500:             TypePointer UniformConstant 499
+501(g_tTex2dmsi4a):    500(ptr) Variable UniformConstant
+             513:             TypeImage 12(int) 2D array multi-sampled sampled format:Unknown
+             514:             TypePointer UniformConstant 513
+515(g_tTex2dmsu4a):    514(ptr) Variable UniformConstant
+             526:             TypePointer Function 8(PS_OUTPUT)
+             528:     19(int) Constant 0
+             529:    6(float) Constant 1065353216
+             530:    7(fvec4) ConstantComposite 529 529 529 529
+             531:             TypePointer Function 7(fvec4)
+             533:     19(int) Constant 1
+             534:             TypePointer Function 6(float)
+             541:             TypePointer Output 7(fvec4)
+      542(Color):    541(ptr) Variable Output
+             545:             TypePointer Output 6(float)
+      546(Depth):    545(ptr) Variable Output
+             549:             TypeSampler
+             550:             TypePointer UniformConstant 549
+    551(g_sSamp):    550(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-8(sizeQueryTemp):      7(ptr) Variable Function
-      16(WidthU):      7(ptr) Variable Function
-18(sizeQueryTemp):      7(ptr) Variable Function
-23(NumberOfLevelsU):      7(ptr) Variable Function
-26(sizeQueryTemp):      7(ptr) Variable Function
-33(sizeQueryTemp):      7(ptr) Variable Function
-39(sizeQueryTemp):      7(ptr) Variable Function
-46(sizeQueryTemp):      7(ptr) Variable Function
-54(sizeQueryTemp):     53(ptr) Variable Function
-   64(ElementsU):      7(ptr) Variable Function
-68(sizeQueryTemp):     53(ptr) Variable Function
-77(sizeQueryTemp):     53(ptr) Variable Function
-87(sizeQueryTemp):     53(ptr) Variable Function
-96(sizeQueryTemp):     53(ptr) Variable Function
-106(sizeQueryTemp):     53(ptr) Variable Function
-115(sizeQueryTemp):     53(ptr) Variable Function
-    123(HeightU):      7(ptr) Variable Function
-126(sizeQueryTemp):     53(ptr) Variable Function
-135(sizeQueryTemp):     53(ptr) Variable Function
-145(sizeQueryTemp):     53(ptr) Variable Function
-154(sizeQueryTemp):     53(ptr) Variable Function
-164(sizeQueryTemp):     53(ptr) Variable Function
-175(sizeQueryTemp):    174(ptr) Variable Function
-189(sizeQueryTemp):    174(ptr) Variable Function
-200(sizeQueryTemp):    174(ptr) Variable Function
-212(sizeQueryTemp):    174(ptr) Variable Function
-223(sizeQueryTemp):    174(ptr) Variable Function
-235(sizeQueryTemp):    174(ptr) Variable Function
-246(sizeQueryTemp):    174(ptr) Variable Function
-     256(DepthU):      7(ptr) Variable Function
-259(sizeQueryTemp):    174(ptr) Variable Function
-270(sizeQueryTemp):    174(ptr) Variable Function
-282(sizeQueryTemp):    174(ptr) Variable Function
-293(sizeQueryTemp):    174(ptr) Variable Function
-305(sizeQueryTemp):    174(ptr) Variable Function
-316(sizeQueryTemp):     53(ptr) Variable Function
-326(sizeQueryTemp):     53(ptr) Variable Function
-335(sizeQueryTemp):     53(ptr) Variable Function
-345(sizeQueryTemp):     53(ptr) Variable Function
-354(sizeQueryTemp):     53(ptr) Variable Function
-364(sizeQueryTemp):     53(ptr) Variable Function
-373(sizeQueryTemp):    174(ptr) Variable Function
-385(sizeQueryTemp):    174(ptr) Variable Function
-396(sizeQueryTemp):    174(ptr) Variable Function
-408(sizeQueryTemp):    174(ptr) Variable Function
-419(sizeQueryTemp):    174(ptr) Variable Function
-431(sizeQueryTemp):    174(ptr) Variable Function
-442(sizeQueryTemp):     53(ptr) Variable Function
-452(NumberOfSamplesU):      7(ptr) Variable Function
-455(sizeQueryTemp):     53(ptr) Variable Function
-467(sizeQueryTemp):     53(ptr) Variable Function
-479(sizeQueryTemp):    174(ptr) Variable Function
-493(sizeQueryTemp):    174(ptr) Variable Function
-507(sizeQueryTemp):    174(ptr) Variable Function
-      524(psout):    523(ptr) Variable Function
-              13:          10 Load 12(g_tTex1df4)
-              15:     14(int) ImageQuerySize 13
-                              Store 8(sizeQueryTemp) 15
-              17:      6(int) Load 8(sizeQueryTemp)
-                              Store 16(WidthU) 17
-              19:          10 Load 12(g_tTex1df4)
-              21:     14(int) ImageQuerySizeLod 19 20
-                              Store 18(sizeQueryTemp) 21
-              22:      6(int) Load 18(sizeQueryTemp)
-                              Store 16(WidthU) 22
-              24:          10 Load 12(g_tTex1df4)
-              25:     14(int) ImageQueryLevels 24
-                              Store 23(NumberOfLevelsU) 25
-              30:          27 Load 29(g_tTex1di4)
-              31:     14(int) ImageQuerySize 30
-                              Store 26(sizeQueryTemp) 31
-              32:      6(int) Load 26(sizeQueryTemp)
-                              Store 16(WidthU) 32
-              34:          27 Load 29(g_tTex1di4)
-              35:     14(int) ImageQuerySizeLod 34 20
-                              Store 33(sizeQueryTemp) 35
-              36:      6(int) Load 33(sizeQueryTemp)
-                              Store 16(WidthU) 36
-              37:          27 Load 29(g_tTex1di4)
-              38:     14(int) ImageQueryLevels 37
-                              Store 23(NumberOfLevelsU) 38
-              43:          40 Load 42(g_tTex1du4)
-              44:     14(int) ImageQuerySize 43
-                              Store 39(sizeQueryTemp) 44
-              45:      6(int) Load 39(sizeQueryTemp)
-                              Store 16(WidthU) 45
-              47:          40 Load 42(g_tTex1du4)
-              48:     14(int) ImageQuerySizeLod 47 20
-                              Store 46(sizeQueryTemp) 48
-              49:      6(int) Load 46(sizeQueryTemp)
-                              Store 16(WidthU) 49
-              50:          40 Load 42(g_tTex1du4)
-              51:     14(int) ImageQueryLevels 50
-                              Store 23(NumberOfLevelsU) 51
-              58:          55 Load 57(g_tTex1df4a)
-              60:   59(ivec2) ImageQuerySize 58
-                              Store 54(sizeQueryTemp) 60
-              62:      7(ptr) AccessChain 54(sizeQueryTemp) 61
-              63:      6(int) Load 62
-                              Store 16(WidthU) 63
-              66:      7(ptr) AccessChain 54(sizeQueryTemp) 65
-              67:      6(int) Load 66
-                              Store 64(ElementsU) 67
-              69:          55 Load 57(g_tTex1df4a)
-              70:   59(ivec2) ImageQuerySizeLod 69 20
-                              Store 68(sizeQueryTemp) 70
-              71:      7(ptr) AccessChain 68(sizeQueryTemp) 61
-              72:      6(int) Load 71
-                              Store 16(WidthU) 72
-              73:      7(ptr) AccessChain 68(sizeQueryTemp) 65
-              74:      6(int) Load 73
-                              Store 64(ElementsU) 74
-              75:          55 Load 57(g_tTex1df4a)
-              76:     14(int) ImageQueryLevels 75
-                              Store 23(NumberOfLevelsU) 76
-              81:          78 Load 80(g_tTex1di4a)
-              82:   59(ivec2) ImageQuerySize 81
-                              Store 77(sizeQueryTemp) 82
-              83:      7(ptr) AccessChain 77(sizeQueryTemp) 61
-              84:      6(int) Load 83
-                              Store 16(WidthU) 84
-              85:      7(ptr) AccessChain 77(sizeQueryTemp) 65
-              86:      6(int) Load 85
-                              Store 64(ElementsU) 86
-              88:          78 Load 80(g_tTex1di4a)
-              89:   59(ivec2) ImageQuerySizeLod 88 20
-                              Store 87(sizeQueryTemp) 89
-              90:      7(ptr) AccessChain 87(sizeQueryTemp) 61
-              91:      6(int) Load 90
-                              Store 16(WidthU) 91
-              92:      7(ptr) AccessChain 87(sizeQueryTemp) 65
-              93:      6(int) Load 92
-                              Store 64(ElementsU) 93
-              94:          78 Load 80(g_tTex1di4a)
-              95:     14(int) ImageQueryLevels 94
-                              Store 23(NumberOfLevelsU) 95
-             100:          97 Load 99(g_tTex1du4a)
-             101:   59(ivec2) ImageQuerySize 100
-                              Store 96(sizeQueryTemp) 101
-             102:      7(ptr) AccessChain 96(sizeQueryTemp) 61
-             103:      6(int) Load 102
-                              Store 16(WidthU) 103
-             104:      7(ptr) AccessChain 96(sizeQueryTemp) 65
-             105:      6(int) Load 104
-                              Store 64(ElementsU) 105
-             107:          97 Load 99(g_tTex1du4a)
-             108:   59(ivec2) ImageQuerySizeLod 107 20
-                              Store 106(sizeQueryTemp) 108
-             109:      7(ptr) AccessChain 106(sizeQueryTemp) 61
-             110:      6(int) Load 109
-                              Store 16(WidthU) 110
-             111:      7(ptr) AccessChain 106(sizeQueryTemp) 65
-             112:      6(int) Load 111
-                              Store 64(ElementsU) 112
-             113:          97 Load 99(g_tTex1du4a)
-             114:     14(int) ImageQueryLevels 113
-                              Store 23(NumberOfLevelsU) 114
-             119:         116 Load 118(g_tTex2df4)
-             120:   59(ivec2) ImageQuerySize 119
-                              Store 115(sizeQueryTemp) 120
-             121:      7(ptr) AccessChain 115(sizeQueryTemp) 61
-             122:      6(int) Load 121
-                              Store 16(WidthU) 122
-             124:      7(ptr) AccessChain 115(sizeQueryTemp) 65
-             125:      6(int) Load 124
-                              Store 123(HeightU) 125
-             127:         116 Load 118(g_tTex2df4)
-             128:   59(ivec2) ImageQuerySizeLod 127 20
-                              Store 126(sizeQueryTemp) 128
-             129:      7(ptr) AccessChain 126(sizeQueryTemp) 61
-             130:      6(int) Load 129
-                              Store 16(WidthU) 130
-             131:      7(ptr) AccessChain 126(sizeQueryTemp) 65
-             132:      6(int) Load 131
-                              Store 123(HeightU) 132
-             133:         116 Load 118(g_tTex2df4)
-             134:     14(int) ImageQueryLevels 133
-                              Store 23(NumberOfLevelsU) 134
-             139:         136 Load 138(g_tTex2di4)
-             140:   59(ivec2) ImageQuerySize 139
-                              Store 135(sizeQueryTemp) 140
-             141:      7(ptr) AccessChain 135(sizeQueryTemp) 61
-             142:      6(int) Load 141
-                              Store 16(WidthU) 142
-             143:      7(ptr) AccessChain 135(sizeQueryTemp) 65
-             144:      6(int) Load 143
-                              Store 123(HeightU) 144
-             146:         136 Load 138(g_tTex2di4)
-             147:   59(ivec2) ImageQuerySizeLod 146 20
-                              Store 145(sizeQueryTemp) 147
-             148:      7(ptr) AccessChain 145(sizeQueryTemp) 61
-             149:      6(int) Load 148
-                              Store 16(WidthU) 149
-             150:      7(ptr) AccessChain 145(sizeQueryTemp) 65
-             151:      6(int) Load 150
-                              Store 123(HeightU) 151
-             152:         136 Load 138(g_tTex2di4)
-             153:     14(int) ImageQueryLevels 152
-                              Store 23(NumberOfLevelsU) 153
-             158:         155 Load 157(g_tTex2du4)
-             159:   59(ivec2) ImageQuerySize 158
-                              Store 154(sizeQueryTemp) 159
-             160:      7(ptr) AccessChain 154(sizeQueryTemp) 61
-             161:      6(int) Load 160
-                              Store 16(WidthU) 161
-             162:      7(ptr) AccessChain 154(sizeQueryTemp) 65
-             163:      6(int) Load 162
-                              Store 123(HeightU) 163
-             165:         155 Load 157(g_tTex2du4)
-             166:   59(ivec2) ImageQuerySizeLod 165 20
-                              Store 164(sizeQueryTemp) 166
-             167:      7(ptr) AccessChain 164(sizeQueryTemp) 61
-             168:      6(int) Load 167
-                              Store 16(WidthU) 168
-             169:      7(ptr) AccessChain 164(sizeQueryTemp) 65
-             170:      6(int) Load 169
-                              Store 123(HeightU) 170
-             171:         155 Load 157(g_tTex2du4)
-             172:     14(int) ImageQueryLevels 171
-                              Store 23(NumberOfLevelsU) 172
-             179:         176 Load 178(g_tTex2df4a)
-             181:  180(ivec3) ImageQuerySize 179
-                              Store 175(sizeQueryTemp) 181
-             182:      7(ptr) AccessChain 175(sizeQueryTemp) 61
-             183:      6(int) Load 182
-                              Store 16(WidthU) 183
-             184:      7(ptr) AccessChain 175(sizeQueryTemp) 65
-             185:      6(int) Load 184
-                              Store 123(HeightU) 185
-             187:      7(ptr) AccessChain 175(sizeQueryTemp) 186
-             188:      6(int) Load 187
-                              Store 64(ElementsU) 188
-             190:         176 Load 178(g_tTex2df4a)
-             191:  180(ivec3) ImageQuerySizeLod 190 20
-                              Store 189(sizeQueryTemp) 191
-             192:      7(ptr) AccessChain 189(sizeQueryTemp) 61
-             193:      6(int) Load 192
-                              Store 16(WidthU) 193
-             194:      7(ptr) AccessChain 189(sizeQueryTemp) 65
-             195:      6(int) Load 194
-                              Store 123(HeightU) 195
-             196:      7(ptr) AccessChain 189(sizeQueryTemp) 186
-             197:      6(int) Load 196
-                              Store 64(ElementsU) 197
-             198:         176 Load 178(g_tTex2df4a)
-             199:     14(int) ImageQueryLevels 198
-                              Store 23(NumberOfLevelsU) 199
-             204:         201 Load 203(g_tTex2di4a)
-             205:  180(ivec3) ImageQuerySize 204
-                              Store 200(sizeQueryTemp) 205
-             206:      7(ptr) AccessChain 200(sizeQueryTemp) 61
-             207:      6(int) Load 206
-                              Store 16(WidthU) 207
-             208:      7(ptr) AccessChain 200(sizeQueryTemp) 65
-             209:      6(int) Load 208
-                              Store 123(HeightU) 209
-             210:      7(ptr) AccessChain 200(sizeQueryTemp) 186
-             211:      6(int) Load 210
-                              Store 64(ElementsU) 211
-             213:         201 Load 203(g_tTex2di4a)
-             214:  180(ivec3) ImageQuerySizeLod 213 20
-                              Store 212(sizeQueryTemp) 214
-             215:      7(ptr) AccessChain 212(sizeQueryTemp) 61
-             216:      6(int) Load 215
-                              Store 16(WidthU) 216
-             217:      7(ptr) AccessChain 212(sizeQueryTemp) 65
-             218:      6(int) Load 217
-                              Store 123(HeightU) 218
-             219:      7(ptr) AccessChain 212(sizeQueryTemp) 186
-             220:      6(int) Load 219
-                              Store 64(ElementsU) 220
-             221:         201 Load 203(g_tTex2di4a)
-             222:     14(int) ImageQueryLevels 221
-                              Store 23(NumberOfLevelsU) 222
-             227:         224 Load 226(g_tTex2du4a)
-             228:  180(ivec3) ImageQuerySize 227
-                              Store 223(sizeQueryTemp) 228
-             229:      7(ptr) AccessChain 223(sizeQueryTemp) 61
-             230:      6(int) Load 229
-                              Store 16(WidthU) 230
-             231:      7(ptr) AccessChain 223(sizeQueryTemp) 65
-             232:      6(int) Load 231
-                              Store 123(HeightU) 232
-             233:      7(ptr) AccessChain 223(sizeQueryTemp) 186
-             234:      6(int) Load 233
-                              Store 64(ElementsU) 234
-             236:         224 Load 226(g_tTex2du4a)
-             237:  180(ivec3) ImageQuerySizeLod 236 20
-                              Store 235(sizeQueryTemp) 237
-             238:      7(ptr) AccessChain 235(sizeQueryTemp) 61
-             239:      6(int) Load 238
-                              Store 16(WidthU) 239
-             240:      7(ptr) AccessChain 235(sizeQueryTemp) 65
-             241:      6(int) Load 240
-                              Store 123(HeightU) 241
-             242:      7(ptr) AccessChain 235(sizeQueryTemp) 186
-             243:      6(int) Load 242
-                              Store 64(ElementsU) 243
-             244:         224 Load 226(g_tTex2du4a)
-             245:     14(int) ImageQueryLevels 244
-                              Store 23(NumberOfLevelsU) 245
-             250:         247 Load 249(g_tTex3df4)
-             251:  180(ivec3) ImageQuerySize 250
-                              Store 246(sizeQueryTemp) 251
-             252:      7(ptr) AccessChain 246(sizeQueryTemp) 61
-             253:      6(int) Load 252
-                              Store 16(WidthU) 253
-             254:      7(ptr) AccessChain 246(sizeQueryTemp) 65
-             255:      6(int) Load 254
-                              Store 123(HeightU) 255
-             257:      7(ptr) AccessChain 246(sizeQueryTemp) 186
-             258:      6(int) Load 257
-                              Store 256(DepthU) 258
-             260:         247 Load 249(g_tTex3df4)
-             261:  180(ivec3) ImageQuerySizeLod 260 20
-                              Store 259(sizeQueryTemp) 261
-             262:      7(ptr) AccessChain 259(sizeQueryTemp) 61
-             263:      6(int) Load 262
-                              Store 16(WidthU) 263
-             264:      7(ptr) AccessChain 259(sizeQueryTemp) 65
-             265:      6(int) Load 264
-                              Store 123(HeightU) 265
-             266:      7(ptr) AccessChain 259(sizeQueryTemp) 186
-             267:      6(int) Load 266
-                              Store 256(DepthU) 267
-             268:         247 Load 249(g_tTex3df4)
-             269:     14(int) ImageQueryLevels 268
-                              Store 23(NumberOfLevelsU) 269
-             274:         271 Load 273(g_tTex3di4)
-             275:  180(ivec3) ImageQuerySize 274
-                              Store 270(sizeQueryTemp) 275
-             276:      7(ptr) AccessChain 270(sizeQueryTemp) 61
-             277:      6(int) Load 276
-                              Store 16(WidthU) 277
-             278:      7(ptr) AccessChain 270(sizeQueryTemp) 65
-             279:      6(int) Load 278
-                              Store 123(HeightU) 279
-             280:      7(ptr) AccessChain 270(sizeQueryTemp) 186
-             281:      6(int) Load 280
-                              Store 256(DepthU) 281
-             283:         271 Load 273(g_tTex3di4)
-             284:  180(ivec3) ImageQuerySizeLod 283 20
-                              Store 282(sizeQueryTemp) 284
-             285:      7(ptr) AccessChain 282(sizeQueryTemp) 61
-             286:      6(int) Load 285
-                              Store 16(WidthU) 286
-             287:      7(ptr) AccessChain 282(sizeQueryTemp) 65
-             288:      6(int) Load 287
-                              Store 123(HeightU) 288
-             289:      7(ptr) AccessChain 282(sizeQueryTemp) 186
-             290:      6(int) Load 289
-                              Store 256(DepthU) 290
-             291:         271 Load 273(g_tTex3di4)
-             292:     14(int) ImageQueryLevels 291
-                              Store 23(NumberOfLevelsU) 292
-             297:         294 Load 296(g_tTex3du4)
-             298:  180(ivec3) ImageQuerySize 297
-                              Store 293(sizeQueryTemp) 298
-             299:      7(ptr) AccessChain 293(sizeQueryTemp) 61
-             300:      6(int) Load 299
-                              Store 16(WidthU) 300
-             301:      7(ptr) AccessChain 293(sizeQueryTemp) 65
-             302:      6(int) Load 301
-                              Store 123(HeightU) 302
-             303:      7(ptr) AccessChain 293(sizeQueryTemp) 186
-             304:      6(int) Load 303
-                              Store 256(DepthU) 304
-             306:         294 Load 296(g_tTex3du4)
-             307:  180(ivec3) ImageQuerySizeLod 306 20
-                              Store 305(sizeQueryTemp) 307
-             308:      7(ptr) AccessChain 305(sizeQueryTemp) 61
-             309:      6(int) Load 308
-                              Store 16(WidthU) 309
-             310:      7(ptr) AccessChain 305(sizeQueryTemp) 65
-             311:      6(int) Load 310
-                              Store 123(HeightU) 311
-             312:      7(ptr) AccessChain 305(sizeQueryTemp) 186
-             313:      6(int) Load 312
-                              Store 256(DepthU) 313
-             314:         294 Load 296(g_tTex3du4)
-             315:     14(int) ImageQueryLevels 314
-                              Store 23(NumberOfLevelsU) 315
-             320:         317 Load 319(g_tTexcdf4)
-             321:   59(ivec2) ImageQuerySize 320
-                              Store 316(sizeQueryTemp) 321
-             322:      7(ptr) AccessChain 316(sizeQueryTemp) 61
-             323:      6(int) Load 322
-                              Store 16(WidthU) 323
-             324:      7(ptr) AccessChain 316(sizeQueryTemp) 65
-             325:      6(int) Load 324
-                              Store 123(HeightU) 325
-             327:         317 Load 319(g_tTexcdf4)
-             328:   59(ivec2) ImageQuerySizeLod 327 20
-                              Store 326(sizeQueryTemp) 328
-             329:      7(ptr) AccessChain 326(sizeQueryTemp) 61
-             330:      6(int) Load 329
-                              Store 16(WidthU) 330
-             331:      7(ptr) AccessChain 326(sizeQueryTemp) 65
-             332:      6(int) Load 331
-                              Store 123(HeightU) 332
-             333:         317 Load 319(g_tTexcdf4)
-             334:     14(int) ImageQueryLevels 333
-                              Store 23(NumberOfLevelsU) 334
-             339:         336 Load 338(g_tTexcdi4)
-             340:   59(ivec2) ImageQuerySize 339
-                              Store 335(sizeQueryTemp) 340
-             341:      7(ptr) AccessChain 335(sizeQueryTemp) 61
-             342:      6(int) Load 341
-                              Store 16(WidthU) 342
-             343:      7(ptr) AccessChain 335(sizeQueryTemp) 65
-             344:      6(int) Load 343
-                              Store 123(HeightU) 344
-             346:         336 Load 338(g_tTexcdi4)
-             347:   59(ivec2) ImageQuerySizeLod 346 20
-                              Store 345(sizeQueryTemp) 347
-             348:      7(ptr) AccessChain 345(sizeQueryTemp) 61
-             349:      6(int) Load 348
-                              Store 16(WidthU) 349
-             350:      7(ptr) AccessChain 345(sizeQueryTemp) 65
-             351:      6(int) Load 350
-                              Store 123(HeightU) 351
-             352:         336 Load 338(g_tTexcdi4)
-             353:     14(int) ImageQueryLevels 352
-                              Store 23(NumberOfLevelsU) 353
-             358:         355 Load 357(g_tTexcdu4)
-             359:   59(ivec2) ImageQuerySize 358
-                              Store 354(sizeQueryTemp) 359
-             360:      7(ptr) AccessChain 354(sizeQueryTemp) 61
-             361:      6(int) Load 360
-                              Store 16(WidthU) 361
-             362:      7(ptr) AccessChain 354(sizeQueryTemp) 65
-             363:      6(int) Load 362
-                              Store 123(HeightU) 363
-             365:         355 Load 357(g_tTexcdu4)
-             366:   59(ivec2) ImageQuerySizeLod 365 20
-                              Store 364(sizeQueryTemp) 366
-             367:      7(ptr) AccessChain 364(sizeQueryTemp) 61
-             368:      6(int) Load 367
-                              Store 16(WidthU) 368
-             369:      7(ptr) AccessChain 364(sizeQueryTemp) 65
-             370:      6(int) Load 369
-                              Store 123(HeightU) 370
-             371:         355 Load 357(g_tTexcdu4)
-             372:     14(int) ImageQueryLevels 371
-                              Store 23(NumberOfLevelsU) 372
-             377:         374 Load 376(g_tTexcdf4a)
-             378:  180(ivec3) ImageQuerySize 377
-                              Store 373(sizeQueryTemp) 378
-             379:      7(ptr) AccessChain 373(sizeQueryTemp) 61
-             380:      6(int) Load 379
-                              Store 16(WidthU) 380
-             381:      7(ptr) AccessChain 373(sizeQueryTemp) 65
-             382:      6(int) Load 381
-                              Store 123(HeightU) 382
-             383:      7(ptr) AccessChain 373(sizeQueryTemp) 186
-             384:      6(int) Load 383
-                              Store 64(ElementsU) 384
-             386:         374 Load 376(g_tTexcdf4a)
-             387:  180(ivec3) ImageQuerySizeLod 386 20
-                              Store 385(sizeQueryTemp) 387
-             388:      7(ptr) AccessChain 385(sizeQueryTemp) 61
-             389:      6(int) Load 388
-                              Store 16(WidthU) 389
-             390:      7(ptr) AccessChain 385(sizeQueryTemp) 65
-             391:      6(int) Load 390
-                              Store 123(HeightU) 391
-             392:      7(ptr) AccessChain 385(sizeQueryTemp) 186
-             393:      6(int) Load 392
-                              Store 64(ElementsU) 393
-             394:         374 Load 376(g_tTexcdf4a)
-             395:     14(int) ImageQueryLevels 394
-                              Store 23(NumberOfLevelsU) 395
-             400:         397 Load 399(g_tTexcdi4a)
-             401:  180(ivec3) ImageQuerySize 400
-                              Store 396(sizeQueryTemp) 401
-             402:      7(ptr) AccessChain 396(sizeQueryTemp) 61
-             403:      6(int) Load 402
-                              Store 16(WidthU) 403
-             404:      7(ptr) AccessChain 396(sizeQueryTemp) 65
-             405:      6(int) Load 404
-                              Store 123(HeightU) 405
-             406:      7(ptr) AccessChain 396(sizeQueryTemp) 186
-             407:      6(int) Load 406
-                              Store 64(ElementsU) 407
-             409:         397 Load 399(g_tTexcdi4a)
-             410:  180(ivec3) ImageQuerySizeLod 409 20
-                              Store 408(sizeQueryTemp) 410
-             411:      7(ptr) AccessChain 408(sizeQueryTemp) 61
-             412:      6(int) Load 411
-                              Store 16(WidthU) 412
-             413:      7(ptr) AccessChain 408(sizeQueryTemp) 65
-             414:      6(int) Load 413
-                              Store 123(HeightU) 414
-             415:      7(ptr) AccessChain 408(sizeQueryTemp) 186
-             416:      6(int) Load 415
-                              Store 64(ElementsU) 416
-             417:         397 Load 399(g_tTexcdi4a)
-             418:     14(int) ImageQueryLevels 417
-                              Store 23(NumberOfLevelsU) 418
-             423:         420 Load 422(g_tTexcdu4a)
-             424:  180(ivec3) ImageQuerySize 423
-                              Store 419(sizeQueryTemp) 424
-             425:      7(ptr) AccessChain 419(sizeQueryTemp) 61
-             426:      6(int) Load 425
-                              Store 16(WidthU) 426
-             427:      7(ptr) AccessChain 419(sizeQueryTemp) 65
-             428:      6(int) Load 427
-                              Store 123(HeightU) 428
-             429:      7(ptr) AccessChain 419(sizeQueryTemp) 186
-             430:      6(int) Load 429
-                              Store 64(ElementsU) 430
-             432:         420 Load 422(g_tTexcdu4a)
-             433:  180(ivec3) ImageQuerySizeLod 432 20
-                              Store 431(sizeQueryTemp) 433
-             434:      7(ptr) AccessChain 431(sizeQueryTemp) 61
-             435:      6(int) Load 434
-                              Store 16(WidthU) 435
-             436:      7(ptr) AccessChain 431(sizeQueryTemp) 65
-             437:      6(int) Load 436
-                              Store 123(HeightU) 437
-             438:      7(ptr) AccessChain 431(sizeQueryTemp) 186
-             439:      6(int) Load 438
-                              Store 64(ElementsU) 439
-             440:         420 Load 422(g_tTexcdu4a)
-             441:     14(int) ImageQueryLevels 440
-                              Store 23(NumberOfLevelsU) 441
-             446:         443 Load 445(g_tTex2dmsf4)
-             447:   59(ivec2) ImageQuerySize 446
-                              Store 442(sizeQueryTemp) 447
-             448:      7(ptr) AccessChain 442(sizeQueryTemp) 61
-             449:      6(int) Load 448
-                              Store 16(WidthU) 449
-             450:      7(ptr) AccessChain 442(sizeQueryTemp) 65
-             451:      6(int) Load 450
-                              Store 123(HeightU) 451
-             453:         443 Load 445(g_tTex2dmsf4)
-             454:     14(int) ImageQuerySamples 453
-                              Store 452(NumberOfSamplesU) 454
-             459:         456 Load 458(g_tTex2dmsi4)
-             460:   59(ivec2) ImageQuerySize 459
-                              Store 455(sizeQueryTemp) 460
-             461:      7(ptr) AccessChain 455(sizeQueryTemp) 61
-             462:      6(int) Load 461
-                              Store 16(WidthU) 462
-             463:      7(ptr) AccessChain 455(sizeQueryTemp) 65
-             464:      6(int) Load 463
-                              Store 123(HeightU) 464
-             465:         456 Load 458(g_tTex2dmsi4)
-             466:     14(int) ImageQuerySamples 465
-                              Store 452(NumberOfSamplesU) 466
-             471:         468 Load 470(g_tTex2dmsu4)
-             472:   59(ivec2) ImageQuerySize 471
-                              Store 467(sizeQueryTemp) 472
-             473:      7(ptr) AccessChain 467(sizeQueryTemp) 61
-             474:      6(int) Load 473
-                              Store 16(WidthU) 474
-             475:      7(ptr) AccessChain 467(sizeQueryTemp) 65
-             476:      6(int) Load 475
-                              Store 123(HeightU) 476
-             477:         468 Load 470(g_tTex2dmsu4)
-             478:     14(int) ImageQuerySamples 477
-                              Store 452(NumberOfSamplesU) 478
-             483:         480 Load 482(g_tTex2dmsf4a)
-             484:  180(ivec3) ImageQuerySize 483
-                              Store 479(sizeQueryTemp) 484
-             485:      7(ptr) AccessChain 479(sizeQueryTemp) 61
-             486:      6(int) Load 485
-                              Store 16(WidthU) 486
-             487:      7(ptr) AccessChain 479(sizeQueryTemp) 65
-             488:      6(int) Load 487
-                              Store 123(HeightU) 488
-             489:      7(ptr) AccessChain 479(sizeQueryTemp) 186
-             490:      6(int) Load 489
-                              Store 64(ElementsU) 490
-             491:         480 Load 482(g_tTex2dmsf4a)
-             492:     14(int) ImageQuerySamples 491
-                              Store 452(NumberOfSamplesU) 492
-             497:         494 Load 496(g_tTex2dmsi4a)
-             498:  180(ivec3) ImageQuerySize 497
-                              Store 493(sizeQueryTemp) 498
-             499:      7(ptr) AccessChain 493(sizeQueryTemp) 61
-             500:      6(int) Load 499
-                              Store 16(WidthU) 500
-             501:      7(ptr) AccessChain 493(sizeQueryTemp) 65
-             502:      6(int) Load 501
-                              Store 123(HeightU) 502
-             503:      7(ptr) AccessChain 493(sizeQueryTemp) 186
-             504:      6(int) Load 503
-                              Store 64(ElementsU) 504
-             505:         494 Load 496(g_tTex2dmsi4a)
-             506:     14(int) ImageQuerySamples 505
-                              Store 452(NumberOfSamplesU) 506
-             511:         508 Load 510(g_tTex2dmsu4a)
-             512:  180(ivec3) ImageQuerySize 511
-                              Store 507(sizeQueryTemp) 512
-             513:      7(ptr) AccessChain 507(sizeQueryTemp) 61
-             514:      6(int) Load 513
-                              Store 16(WidthU) 514
-             515:      7(ptr) AccessChain 507(sizeQueryTemp) 65
-             516:      6(int) Load 515
-                              Store 123(HeightU) 516
-             517:      7(ptr) AccessChain 507(sizeQueryTemp) 186
-             518:      6(int) Load 517
-                              Store 64(ElementsU) 518
-             519:         508 Load 510(g_tTex2dmsu4a)
-             520:     14(int) ImageQuerySamples 519
-                              Store 452(NumberOfSamplesU) 520
-             529:    528(ptr) AccessChain 524(psout) 525
-                              Store 529 527
-             532:    531(ptr) AccessChain 524(psout) 530
-                              Store 532 526
-             535:    528(ptr) AccessChain 524(psout) 525
-             536:  521(fvec4) Load 535
-                              Store 534(Color) 536
-             539:    531(ptr) AccessChain 524(psout) 530
-             540:    9(float) Load 539
-                              Store 538(Depth) 540
+539(flattenTemp):    526(ptr) Variable Function
+             540:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 539(flattenTemp) 540
+             543:    531(ptr) AccessChain 539(flattenTemp) 528
+             544:    7(fvec4) Load 543
+                              Store 542(Color) 544
+             547:    534(ptr) AccessChain 539(flattenTemp) 533
+             548:    6(float) Load 547
+                              Store 546(Depth) 548
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+14(sizeQueryTemp):     13(ptr) Variable Function
+      21(WidthU):     13(ptr) Variable Function
+23(sizeQueryTemp):     13(ptr) Variable Function
+28(NumberOfLevelsU):     13(ptr) Variable Function
+31(sizeQueryTemp):     13(ptr) Variable Function
+38(sizeQueryTemp):     13(ptr) Variable Function
+44(sizeQueryTemp):     13(ptr) Variable Function
+51(sizeQueryTemp):     13(ptr) Variable Function
+59(sizeQueryTemp):     58(ptr) Variable Function
+   69(ElementsU):     13(ptr) Variable Function
+73(sizeQueryTemp):     58(ptr) Variable Function
+82(sizeQueryTemp):     58(ptr) Variable Function
+92(sizeQueryTemp):     58(ptr) Variable Function
+101(sizeQueryTemp):     58(ptr) Variable Function
+111(sizeQueryTemp):     58(ptr) Variable Function
+120(sizeQueryTemp):     58(ptr) Variable Function
+    128(HeightU):     13(ptr) Variable Function
+131(sizeQueryTemp):     58(ptr) Variable Function
+140(sizeQueryTemp):     58(ptr) Variable Function
+150(sizeQueryTemp):     58(ptr) Variable Function
+159(sizeQueryTemp):     58(ptr) Variable Function
+169(sizeQueryTemp):     58(ptr) Variable Function
+180(sizeQueryTemp):    179(ptr) Variable Function
+194(sizeQueryTemp):    179(ptr) Variable Function
+205(sizeQueryTemp):    179(ptr) Variable Function
+217(sizeQueryTemp):    179(ptr) Variable Function
+228(sizeQueryTemp):    179(ptr) Variable Function
+240(sizeQueryTemp):    179(ptr) Variable Function
+251(sizeQueryTemp):    179(ptr) Variable Function
+     261(DepthU):     13(ptr) Variable Function
+264(sizeQueryTemp):    179(ptr) Variable Function
+275(sizeQueryTemp):    179(ptr) Variable Function
+287(sizeQueryTemp):    179(ptr) Variable Function
+298(sizeQueryTemp):    179(ptr) Variable Function
+310(sizeQueryTemp):    179(ptr) Variable Function
+321(sizeQueryTemp):     58(ptr) Variable Function
+331(sizeQueryTemp):     58(ptr) Variable Function
+340(sizeQueryTemp):     58(ptr) Variable Function
+350(sizeQueryTemp):     58(ptr) Variable Function
+359(sizeQueryTemp):     58(ptr) Variable Function
+369(sizeQueryTemp):     58(ptr) Variable Function
+378(sizeQueryTemp):    179(ptr) Variable Function
+390(sizeQueryTemp):    179(ptr) Variable Function
+401(sizeQueryTemp):    179(ptr) Variable Function
+413(sizeQueryTemp):    179(ptr) Variable Function
+424(sizeQueryTemp):    179(ptr) Variable Function
+436(sizeQueryTemp):    179(ptr) Variable Function
+447(sizeQueryTemp):     58(ptr) Variable Function
+457(NumberOfSamplesU):     13(ptr) Variable Function
+460(sizeQueryTemp):     58(ptr) Variable Function
+472(sizeQueryTemp):     58(ptr) Variable Function
+484(sizeQueryTemp):    179(ptr) Variable Function
+498(sizeQueryTemp):    179(ptr) Variable Function
+512(sizeQueryTemp):    179(ptr) Variable Function
+      527(psout):    526(ptr) Variable Function
+              18:          15 Load 17(g_tTex1df4)
+              20:     19(int) ImageQuerySize 18
+                              Store 14(sizeQueryTemp) 20
+              22:     12(int) Load 14(sizeQueryTemp)
+                              Store 21(WidthU) 22
+              24:          15 Load 17(g_tTex1df4)
+              26:     19(int) ImageQuerySizeLod 24 25
+                              Store 23(sizeQueryTemp) 26
+              27:     12(int) Load 23(sizeQueryTemp)
+                              Store 21(WidthU) 27
+              29:          15 Load 17(g_tTex1df4)
+              30:     19(int) ImageQueryLevels 29
+                              Store 28(NumberOfLevelsU) 30
+              35:          32 Load 34(g_tTex1di4)
+              36:     19(int) ImageQuerySize 35
+                              Store 31(sizeQueryTemp) 36
+              37:     12(int) Load 31(sizeQueryTemp)
+                              Store 21(WidthU) 37
+              39:          32 Load 34(g_tTex1di4)
+              40:     19(int) ImageQuerySizeLod 39 25
+                              Store 38(sizeQueryTemp) 40
+              41:     12(int) Load 38(sizeQueryTemp)
+                              Store 21(WidthU) 41
+              42:          32 Load 34(g_tTex1di4)
+              43:     19(int) ImageQueryLevels 42
+                              Store 28(NumberOfLevelsU) 43
+              48:          45 Load 47(g_tTex1du4)
+              49:     19(int) ImageQuerySize 48
+                              Store 44(sizeQueryTemp) 49
+              50:     12(int) Load 44(sizeQueryTemp)
+                              Store 21(WidthU) 50
+              52:          45 Load 47(g_tTex1du4)
+              53:     19(int) ImageQuerySizeLod 52 25
+                              Store 51(sizeQueryTemp) 53
+              54:     12(int) Load 51(sizeQueryTemp)
+                              Store 21(WidthU) 54
+              55:          45 Load 47(g_tTex1du4)
+              56:     19(int) ImageQueryLevels 55
+                              Store 28(NumberOfLevelsU) 56
+              63:          60 Load 62(g_tTex1df4a)
+              65:   64(ivec2) ImageQuerySize 63
+                              Store 59(sizeQueryTemp) 65
+              67:     13(ptr) AccessChain 59(sizeQueryTemp) 66
+              68:     12(int) Load 67
+                              Store 21(WidthU) 68
+              71:     13(ptr) AccessChain 59(sizeQueryTemp) 70
+              72:     12(int) Load 71
+                              Store 69(ElementsU) 72
+              74:          60 Load 62(g_tTex1df4a)
+              75:   64(ivec2) ImageQuerySizeLod 74 25
+                              Store 73(sizeQueryTemp) 75
+              76:     13(ptr) AccessChain 73(sizeQueryTemp) 66
+              77:     12(int) Load 76
+                              Store 21(WidthU) 77
+              78:     13(ptr) AccessChain 73(sizeQueryTemp) 70
+              79:     12(int) Load 78
+                              Store 69(ElementsU) 79
+              80:          60 Load 62(g_tTex1df4a)
+              81:     19(int) ImageQueryLevels 80
+                              Store 28(NumberOfLevelsU) 81
+              86:          83 Load 85(g_tTex1di4a)
+              87:   64(ivec2) ImageQuerySize 86
+                              Store 82(sizeQueryTemp) 87
+              88:     13(ptr) AccessChain 82(sizeQueryTemp) 66
+              89:     12(int) Load 88
+                              Store 21(WidthU) 89
+              90:     13(ptr) AccessChain 82(sizeQueryTemp) 70
+              91:     12(int) Load 90
+                              Store 69(ElementsU) 91
+              93:          83 Load 85(g_tTex1di4a)
+              94:   64(ivec2) ImageQuerySizeLod 93 25
+                              Store 92(sizeQueryTemp) 94
+              95:     13(ptr) AccessChain 92(sizeQueryTemp) 66
+              96:     12(int) Load 95
+                              Store 21(WidthU) 96
+              97:     13(ptr) AccessChain 92(sizeQueryTemp) 70
+              98:     12(int) Load 97
+                              Store 69(ElementsU) 98
+              99:          83 Load 85(g_tTex1di4a)
+             100:     19(int) ImageQueryLevels 99
+                              Store 28(NumberOfLevelsU) 100
+             105:         102 Load 104(g_tTex1du4a)
+             106:   64(ivec2) ImageQuerySize 105
+                              Store 101(sizeQueryTemp) 106
+             107:     13(ptr) AccessChain 101(sizeQueryTemp) 66
+             108:     12(int) Load 107
+                              Store 21(WidthU) 108
+             109:     13(ptr) AccessChain 101(sizeQueryTemp) 70
+             110:     12(int) Load 109
+                              Store 69(ElementsU) 110
+             112:         102 Load 104(g_tTex1du4a)
+             113:   64(ivec2) ImageQuerySizeLod 112 25
+                              Store 111(sizeQueryTemp) 113
+             114:     13(ptr) AccessChain 111(sizeQueryTemp) 66
+             115:     12(int) Load 114
+                              Store 21(WidthU) 115
+             116:     13(ptr) AccessChain 111(sizeQueryTemp) 70
+             117:     12(int) Load 116
+                              Store 69(ElementsU) 117
+             118:         102 Load 104(g_tTex1du4a)
+             119:     19(int) ImageQueryLevels 118
+                              Store 28(NumberOfLevelsU) 119
+             124:         121 Load 123(g_tTex2df4)
+             125:   64(ivec2) ImageQuerySize 124
+                              Store 120(sizeQueryTemp) 125
+             126:     13(ptr) AccessChain 120(sizeQueryTemp) 66
+             127:     12(int) Load 126
+                              Store 21(WidthU) 127
+             129:     13(ptr) AccessChain 120(sizeQueryTemp) 70
+             130:     12(int) Load 129
+                              Store 128(HeightU) 130
+             132:         121 Load 123(g_tTex2df4)
+             133:   64(ivec2) ImageQuerySizeLod 132 25
+                              Store 131(sizeQueryTemp) 133
+             134:     13(ptr) AccessChain 131(sizeQueryTemp) 66
+             135:     12(int) Load 134
+                              Store 21(WidthU) 135
+             136:     13(ptr) AccessChain 131(sizeQueryTemp) 70
+             137:     12(int) Load 136
+                              Store 128(HeightU) 137
+             138:         121 Load 123(g_tTex2df4)
+             139:     19(int) ImageQueryLevels 138
+                              Store 28(NumberOfLevelsU) 139
+             144:         141 Load 143(g_tTex2di4)
+             145:   64(ivec2) ImageQuerySize 144
+                              Store 140(sizeQueryTemp) 145
+             146:     13(ptr) AccessChain 140(sizeQueryTemp) 66
+             147:     12(int) Load 146
+                              Store 21(WidthU) 147
+             148:     13(ptr) AccessChain 140(sizeQueryTemp) 70
+             149:     12(int) Load 148
+                              Store 128(HeightU) 149
+             151:         141 Load 143(g_tTex2di4)
+             152:   64(ivec2) ImageQuerySizeLod 151 25
+                              Store 150(sizeQueryTemp) 152
+             153:     13(ptr) AccessChain 150(sizeQueryTemp) 66
+             154:     12(int) Load 153
+                              Store 21(WidthU) 154
+             155:     13(ptr) AccessChain 150(sizeQueryTemp) 70
+             156:     12(int) Load 155
+                              Store 128(HeightU) 156
+             157:         141 Load 143(g_tTex2di4)
+             158:     19(int) ImageQueryLevels 157
+                              Store 28(NumberOfLevelsU) 158
+             163:         160 Load 162(g_tTex2du4)
+             164:   64(ivec2) ImageQuerySize 163
+                              Store 159(sizeQueryTemp) 164
+             165:     13(ptr) AccessChain 159(sizeQueryTemp) 66
+             166:     12(int) Load 165
+                              Store 21(WidthU) 166
+             167:     13(ptr) AccessChain 159(sizeQueryTemp) 70
+             168:     12(int) Load 167
+                              Store 128(HeightU) 168
+             170:         160 Load 162(g_tTex2du4)
+             171:   64(ivec2) ImageQuerySizeLod 170 25
+                              Store 169(sizeQueryTemp) 171
+             172:     13(ptr) AccessChain 169(sizeQueryTemp) 66
+             173:     12(int) Load 172
+                              Store 21(WidthU) 173
+             174:     13(ptr) AccessChain 169(sizeQueryTemp) 70
+             175:     12(int) Load 174
+                              Store 128(HeightU) 175
+             176:         160 Load 162(g_tTex2du4)
+             177:     19(int) ImageQueryLevels 176
+                              Store 28(NumberOfLevelsU) 177
+             184:         181 Load 183(g_tTex2df4a)
+             186:  185(ivec3) ImageQuerySize 184
+                              Store 180(sizeQueryTemp) 186
+             187:     13(ptr) AccessChain 180(sizeQueryTemp) 66
+             188:     12(int) Load 187
+                              Store 21(WidthU) 188
+             189:     13(ptr) AccessChain 180(sizeQueryTemp) 70
+             190:     12(int) Load 189
+                              Store 128(HeightU) 190
+             192:     13(ptr) AccessChain 180(sizeQueryTemp) 191
+             193:     12(int) Load 192
+                              Store 69(ElementsU) 193
+             195:         181 Load 183(g_tTex2df4a)
+             196:  185(ivec3) ImageQuerySizeLod 195 25
+                              Store 194(sizeQueryTemp) 196
+             197:     13(ptr) AccessChain 194(sizeQueryTemp) 66
+             198:     12(int) Load 197
+                              Store 21(WidthU) 198
+             199:     13(ptr) AccessChain 194(sizeQueryTemp) 70
+             200:     12(int) Load 199
+                              Store 128(HeightU) 200
+             201:     13(ptr) AccessChain 194(sizeQueryTemp) 191
+             202:     12(int) Load 201
+                              Store 69(ElementsU) 202
+             203:         181 Load 183(g_tTex2df4a)
+             204:     19(int) ImageQueryLevels 203
+                              Store 28(NumberOfLevelsU) 204
+             209:         206 Load 208(g_tTex2di4a)
+             210:  185(ivec3) ImageQuerySize 209
+                              Store 205(sizeQueryTemp) 210
+             211:     13(ptr) AccessChain 205(sizeQueryTemp) 66
+             212:     12(int) Load 211
+                              Store 21(WidthU) 212
+             213:     13(ptr) AccessChain 205(sizeQueryTemp) 70
+             214:     12(int) Load 213
+                              Store 128(HeightU) 214
+             215:     13(ptr) AccessChain 205(sizeQueryTemp) 191
+             216:     12(int) Load 215
+                              Store 69(ElementsU) 216
+             218:         206 Load 208(g_tTex2di4a)
+             219:  185(ivec3) ImageQuerySizeLod 218 25
+                              Store 217(sizeQueryTemp) 219
+             220:     13(ptr) AccessChain 217(sizeQueryTemp) 66
+             221:     12(int) Load 220
+                              Store 21(WidthU) 221
+             222:     13(ptr) AccessChain 217(sizeQueryTemp) 70
+             223:     12(int) Load 222
+                              Store 128(HeightU) 223
+             224:     13(ptr) AccessChain 217(sizeQueryTemp) 191
+             225:     12(int) Load 224
+                              Store 69(ElementsU) 225
+             226:         206 Load 208(g_tTex2di4a)
+             227:     19(int) ImageQueryLevels 226
+                              Store 28(NumberOfLevelsU) 227
+             232:         229 Load 231(g_tTex2du4a)
+             233:  185(ivec3) ImageQuerySize 232
+                              Store 228(sizeQueryTemp) 233
+             234:     13(ptr) AccessChain 228(sizeQueryTemp) 66
+             235:     12(int) Load 234
+                              Store 21(WidthU) 235
+             236:     13(ptr) AccessChain 228(sizeQueryTemp) 70
+             237:     12(int) Load 236
+                              Store 128(HeightU) 237
+             238:     13(ptr) AccessChain 228(sizeQueryTemp) 191
+             239:     12(int) Load 238
+                              Store 69(ElementsU) 239
+             241:         229 Load 231(g_tTex2du4a)
+             242:  185(ivec3) ImageQuerySizeLod 241 25
+                              Store 240(sizeQueryTemp) 242
+             243:     13(ptr) AccessChain 240(sizeQueryTemp) 66
+             244:     12(int) Load 243
+                              Store 21(WidthU) 244
+             245:     13(ptr) AccessChain 240(sizeQueryTemp) 70
+             246:     12(int) Load 245
+                              Store 128(HeightU) 246
+             247:     13(ptr) AccessChain 240(sizeQueryTemp) 191
+             248:     12(int) Load 247
+                              Store 69(ElementsU) 248
+             249:         229 Load 231(g_tTex2du4a)
+             250:     19(int) ImageQueryLevels 249
+                              Store 28(NumberOfLevelsU) 250
+             255:         252 Load 254(g_tTex3df4)
+             256:  185(ivec3) ImageQuerySize 255
+                              Store 251(sizeQueryTemp) 256
+             257:     13(ptr) AccessChain 251(sizeQueryTemp) 66
+             258:     12(int) Load 257
+                              Store 21(WidthU) 258
+             259:     13(ptr) AccessChain 251(sizeQueryTemp) 70
+             260:     12(int) Load 259
+                              Store 128(HeightU) 260
+             262:     13(ptr) AccessChain 251(sizeQueryTemp) 191
+             263:     12(int) Load 262
+                              Store 261(DepthU) 263
+             265:         252 Load 254(g_tTex3df4)
+             266:  185(ivec3) ImageQuerySizeLod 265 25
+                              Store 264(sizeQueryTemp) 266
+             267:     13(ptr) AccessChain 264(sizeQueryTemp) 66
+             268:     12(int) Load 267
+                              Store 21(WidthU) 268
+             269:     13(ptr) AccessChain 264(sizeQueryTemp) 70
+             270:     12(int) Load 269
+                              Store 128(HeightU) 270
+             271:     13(ptr) AccessChain 264(sizeQueryTemp) 191
+             272:     12(int) Load 271
+                              Store 261(DepthU) 272
+             273:         252 Load 254(g_tTex3df4)
+             274:     19(int) ImageQueryLevels 273
+                              Store 28(NumberOfLevelsU) 274
+             279:         276 Load 278(g_tTex3di4)
+             280:  185(ivec3) ImageQuerySize 279
+                              Store 275(sizeQueryTemp) 280
+             281:     13(ptr) AccessChain 275(sizeQueryTemp) 66
+             282:     12(int) Load 281
+                              Store 21(WidthU) 282
+             283:     13(ptr) AccessChain 275(sizeQueryTemp) 70
+             284:     12(int) Load 283
+                              Store 128(HeightU) 284
+             285:     13(ptr) AccessChain 275(sizeQueryTemp) 191
+             286:     12(int) Load 285
+                              Store 261(DepthU) 286
+             288:         276 Load 278(g_tTex3di4)
+             289:  185(ivec3) ImageQuerySizeLod 288 25
+                              Store 287(sizeQueryTemp) 289
+             290:     13(ptr) AccessChain 287(sizeQueryTemp) 66
+             291:     12(int) Load 290
+                              Store 21(WidthU) 291
+             292:     13(ptr) AccessChain 287(sizeQueryTemp) 70
+             293:     12(int) Load 292
+                              Store 128(HeightU) 293
+             294:     13(ptr) AccessChain 287(sizeQueryTemp) 191
+             295:     12(int) Load 294
+                              Store 261(DepthU) 295
+             296:         276 Load 278(g_tTex3di4)
+             297:     19(int) ImageQueryLevels 296
+                              Store 28(NumberOfLevelsU) 297
+             302:         299 Load 301(g_tTex3du4)
+             303:  185(ivec3) ImageQuerySize 302
+                              Store 298(sizeQueryTemp) 303
+             304:     13(ptr) AccessChain 298(sizeQueryTemp) 66
+             305:     12(int) Load 304
+                              Store 21(WidthU) 305
+             306:     13(ptr) AccessChain 298(sizeQueryTemp) 70
+             307:     12(int) Load 306
+                              Store 128(HeightU) 307
+             308:     13(ptr) AccessChain 298(sizeQueryTemp) 191
+             309:     12(int) Load 308
+                              Store 261(DepthU) 309
+             311:         299 Load 301(g_tTex3du4)
+             312:  185(ivec3) ImageQuerySizeLod 311 25
+                              Store 310(sizeQueryTemp) 312
+             313:     13(ptr) AccessChain 310(sizeQueryTemp) 66
+             314:     12(int) Load 313
+                              Store 21(WidthU) 314
+             315:     13(ptr) AccessChain 310(sizeQueryTemp) 70
+             316:     12(int) Load 315
+                              Store 128(HeightU) 316
+             317:     13(ptr) AccessChain 310(sizeQueryTemp) 191
+             318:     12(int) Load 317
+                              Store 261(DepthU) 318
+             319:         299 Load 301(g_tTex3du4)
+             320:     19(int) ImageQueryLevels 319
+                              Store 28(NumberOfLevelsU) 320
+             325:         322 Load 324(g_tTexcdf4)
+             326:   64(ivec2) ImageQuerySize 325
+                              Store 321(sizeQueryTemp) 326
+             327:     13(ptr) AccessChain 321(sizeQueryTemp) 66
+             328:     12(int) Load 327
+                              Store 21(WidthU) 328
+             329:     13(ptr) AccessChain 321(sizeQueryTemp) 70
+             330:     12(int) Load 329
+                              Store 128(HeightU) 330
+             332:         322 Load 324(g_tTexcdf4)
+             333:   64(ivec2) ImageQuerySizeLod 332 25
+                              Store 331(sizeQueryTemp) 333
+             334:     13(ptr) AccessChain 331(sizeQueryTemp) 66
+             335:     12(int) Load 334
+                              Store 21(WidthU) 335
+             336:     13(ptr) AccessChain 331(sizeQueryTemp) 70
+             337:     12(int) Load 336
+                              Store 128(HeightU) 337
+             338:         322 Load 324(g_tTexcdf4)
+             339:     19(int) ImageQueryLevels 338
+                              Store 28(NumberOfLevelsU) 339
+             344:         341 Load 343(g_tTexcdi4)
+             345:   64(ivec2) ImageQuerySize 344
+                              Store 340(sizeQueryTemp) 345
+             346:     13(ptr) AccessChain 340(sizeQueryTemp) 66
+             347:     12(int) Load 346
+                              Store 21(WidthU) 347
+             348:     13(ptr) AccessChain 340(sizeQueryTemp) 70
+             349:     12(int) Load 348
+                              Store 128(HeightU) 349
+             351:         341 Load 343(g_tTexcdi4)
+             352:   64(ivec2) ImageQuerySizeLod 351 25
+                              Store 350(sizeQueryTemp) 352
+             353:     13(ptr) AccessChain 350(sizeQueryTemp) 66
+             354:     12(int) Load 353
+                              Store 21(WidthU) 354
+             355:     13(ptr) AccessChain 350(sizeQueryTemp) 70
+             356:     12(int) Load 355
+                              Store 128(HeightU) 356
+             357:         341 Load 343(g_tTexcdi4)
+             358:     19(int) ImageQueryLevels 357
+                              Store 28(NumberOfLevelsU) 358
+             363:         360 Load 362(g_tTexcdu4)
+             364:   64(ivec2) ImageQuerySize 363
+                              Store 359(sizeQueryTemp) 364
+             365:     13(ptr) AccessChain 359(sizeQueryTemp) 66
+             366:     12(int) Load 365
+                              Store 21(WidthU) 366
+             367:     13(ptr) AccessChain 359(sizeQueryTemp) 70
+             368:     12(int) Load 367
+                              Store 128(HeightU) 368
+             370:         360 Load 362(g_tTexcdu4)
+             371:   64(ivec2) ImageQuerySizeLod 370 25
+                              Store 369(sizeQueryTemp) 371
+             372:     13(ptr) AccessChain 369(sizeQueryTemp) 66
+             373:     12(int) Load 372
+                              Store 21(WidthU) 373
+             374:     13(ptr) AccessChain 369(sizeQueryTemp) 70
+             375:     12(int) Load 374
+                              Store 128(HeightU) 375
+             376:         360 Load 362(g_tTexcdu4)
+             377:     19(int) ImageQueryLevels 376
+                              Store 28(NumberOfLevelsU) 377
+             382:         379 Load 381(g_tTexcdf4a)
+             383:  185(ivec3) ImageQuerySize 382
+                              Store 378(sizeQueryTemp) 383
+             384:     13(ptr) AccessChain 378(sizeQueryTemp) 66
+             385:     12(int) Load 384
+                              Store 21(WidthU) 385
+             386:     13(ptr) AccessChain 378(sizeQueryTemp) 70
+             387:     12(int) Load 386
+                              Store 128(HeightU) 387
+             388:     13(ptr) AccessChain 378(sizeQueryTemp) 191
+             389:     12(int) Load 388
+                              Store 69(ElementsU) 389
+             391:         379 Load 381(g_tTexcdf4a)
+             392:  185(ivec3) ImageQuerySizeLod 391 25
+                              Store 390(sizeQueryTemp) 392
+             393:     13(ptr) AccessChain 390(sizeQueryTemp) 66
+             394:     12(int) Load 393
+                              Store 21(WidthU) 394
+             395:     13(ptr) AccessChain 390(sizeQueryTemp) 70
+             396:     12(int) Load 395
+                              Store 128(HeightU) 396
+             397:     13(ptr) AccessChain 390(sizeQueryTemp) 191
+             398:     12(int) Load 397
+                              Store 69(ElementsU) 398
+             399:         379 Load 381(g_tTexcdf4a)
+             400:     19(int) ImageQueryLevels 399
+                              Store 28(NumberOfLevelsU) 400
+             405:         402 Load 404(g_tTexcdi4a)
+             406:  185(ivec3) ImageQuerySize 405
+                              Store 401(sizeQueryTemp) 406
+             407:     13(ptr) AccessChain 401(sizeQueryTemp) 66
+             408:     12(int) Load 407
+                              Store 21(WidthU) 408
+             409:     13(ptr) AccessChain 401(sizeQueryTemp) 70
+             410:     12(int) Load 409
+                              Store 128(HeightU) 410
+             411:     13(ptr) AccessChain 401(sizeQueryTemp) 191
+             412:     12(int) Load 411
+                              Store 69(ElementsU) 412
+             414:         402 Load 404(g_tTexcdi4a)
+             415:  185(ivec3) ImageQuerySizeLod 414 25
+                              Store 413(sizeQueryTemp) 415
+             416:     13(ptr) AccessChain 413(sizeQueryTemp) 66
+             417:     12(int) Load 416
+                              Store 21(WidthU) 417
+             418:     13(ptr) AccessChain 413(sizeQueryTemp) 70
+             419:     12(int) Load 418
+                              Store 128(HeightU) 419
+             420:     13(ptr) AccessChain 413(sizeQueryTemp) 191
+             421:     12(int) Load 420
+                              Store 69(ElementsU) 421
+             422:         402 Load 404(g_tTexcdi4a)
+             423:     19(int) ImageQueryLevels 422
+                              Store 28(NumberOfLevelsU) 423
+             428:         425 Load 427(g_tTexcdu4a)
+             429:  185(ivec3) ImageQuerySize 428
+                              Store 424(sizeQueryTemp) 429
+             430:     13(ptr) AccessChain 424(sizeQueryTemp) 66
+             431:     12(int) Load 430
+                              Store 21(WidthU) 431
+             432:     13(ptr) AccessChain 424(sizeQueryTemp) 70
+             433:     12(int) Load 432
+                              Store 128(HeightU) 433
+             434:     13(ptr) AccessChain 424(sizeQueryTemp) 191
+             435:     12(int) Load 434
+                              Store 69(ElementsU) 435
+             437:         425 Load 427(g_tTexcdu4a)
+             438:  185(ivec3) ImageQuerySizeLod 437 25
+                              Store 436(sizeQueryTemp) 438
+             439:     13(ptr) AccessChain 436(sizeQueryTemp) 66
+             440:     12(int) Load 439
+                              Store 21(WidthU) 440
+             441:     13(ptr) AccessChain 436(sizeQueryTemp) 70
+             442:     12(int) Load 441
+                              Store 128(HeightU) 442
+             443:     13(ptr) AccessChain 436(sizeQueryTemp) 191
+             444:     12(int) Load 443
+                              Store 69(ElementsU) 444
+             445:         425 Load 427(g_tTexcdu4a)
+             446:     19(int) ImageQueryLevels 445
+                              Store 28(NumberOfLevelsU) 446
+             451:         448 Load 450(g_tTex2dmsf4)
+             452:   64(ivec2) ImageQuerySize 451
+                              Store 447(sizeQueryTemp) 452
+             453:     13(ptr) AccessChain 447(sizeQueryTemp) 66
+             454:     12(int) Load 453
+                              Store 21(WidthU) 454
+             455:     13(ptr) AccessChain 447(sizeQueryTemp) 70
+             456:     12(int) Load 455
+                              Store 128(HeightU) 456
+             458:         448 Load 450(g_tTex2dmsf4)
+             459:     19(int) ImageQuerySamples 458
+                              Store 457(NumberOfSamplesU) 459
+             464:         461 Load 463(g_tTex2dmsi4)
+             465:   64(ivec2) ImageQuerySize 464
+                              Store 460(sizeQueryTemp) 465
+             466:     13(ptr) AccessChain 460(sizeQueryTemp) 66
+             467:     12(int) Load 466
+                              Store 21(WidthU) 467
+             468:     13(ptr) AccessChain 460(sizeQueryTemp) 70
+             469:     12(int) Load 468
+                              Store 128(HeightU) 469
+             470:         461 Load 463(g_tTex2dmsi4)
+             471:     19(int) ImageQuerySamples 470
+                              Store 457(NumberOfSamplesU) 471
+             476:         473 Load 475(g_tTex2dmsu4)
+             477:   64(ivec2) ImageQuerySize 476
+                              Store 472(sizeQueryTemp) 477
+             478:     13(ptr) AccessChain 472(sizeQueryTemp) 66
+             479:     12(int) Load 478
+                              Store 21(WidthU) 479
+             480:     13(ptr) AccessChain 472(sizeQueryTemp) 70
+             481:     12(int) Load 480
+                              Store 128(HeightU) 481
+             482:         473 Load 475(g_tTex2dmsu4)
+             483:     19(int) ImageQuerySamples 482
+                              Store 457(NumberOfSamplesU) 483
+             488:         485 Load 487(g_tTex2dmsf4a)
+             489:  185(ivec3) ImageQuerySize 488
+                              Store 484(sizeQueryTemp) 489
+             490:     13(ptr) AccessChain 484(sizeQueryTemp) 66
+             491:     12(int) Load 490
+                              Store 21(WidthU) 491
+             492:     13(ptr) AccessChain 484(sizeQueryTemp) 70
+             493:     12(int) Load 492
+                              Store 128(HeightU) 493
+             494:     13(ptr) AccessChain 484(sizeQueryTemp) 191
+             495:     12(int) Load 494
+                              Store 69(ElementsU) 495
+             496:         485 Load 487(g_tTex2dmsf4a)
+             497:     19(int) ImageQuerySamples 496
+                              Store 457(NumberOfSamplesU) 497
+             502:         499 Load 501(g_tTex2dmsi4a)
+             503:  185(ivec3) ImageQuerySize 502
+                              Store 498(sizeQueryTemp) 503
+             504:     13(ptr) AccessChain 498(sizeQueryTemp) 66
+             505:     12(int) Load 504
+                              Store 21(WidthU) 505
+             506:     13(ptr) AccessChain 498(sizeQueryTemp) 70
+             507:     12(int) Load 506
+                              Store 128(HeightU) 507
+             508:     13(ptr) AccessChain 498(sizeQueryTemp) 191
+             509:     12(int) Load 508
+                              Store 69(ElementsU) 509
+             510:         499 Load 501(g_tTex2dmsi4a)
+             511:     19(int) ImageQuerySamples 510
+                              Store 457(NumberOfSamplesU) 511
+             516:         513 Load 515(g_tTex2dmsu4a)
+             517:  185(ivec3) ImageQuerySize 516
+                              Store 512(sizeQueryTemp) 517
+             518:     13(ptr) AccessChain 512(sizeQueryTemp) 66
+             519:     12(int) Load 518
+                              Store 21(WidthU) 519
+             520:     13(ptr) AccessChain 512(sizeQueryTemp) 70
+             521:     12(int) Load 520
+                              Store 128(HeightU) 521
+             522:     13(ptr) AccessChain 512(sizeQueryTemp) 191
+             523:     12(int) Load 522
+                              Store 69(ElementsU) 523
+             524:         513 Load 515(g_tTex2dmsu4a)
+             525:     19(int) ImageQuerySamples 524
+                              Store 457(NumberOfSamplesU) 525
+             532:    531(ptr) AccessChain 527(psout) 528
+                              Store 532 530
+             535:    534(ptr) AccessChain 527(psout) 533
+                              Store 535 529
+             536:8(PS_OUTPUT) Load 527(psout)
+                              ReturnValue 536
+                              FunctionEnd

+ 93 - 90
3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out

@@ -1,7 +1,7 @@
 hlsl.getdimensions.dx10.vert
 Shader version: 450
 0:? Sequence
-0:11  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:11  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:11    Function Parameters: 
 0:?     Sequence
 0:21      Sequence
@@ -36,19 +36,21 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:26            Pos: direct index for structure (temp 4-component vector of float)
-0:26              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:11  Function Definition: main( (temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:11          Pos: direct index for structure (temp 4-component vector of float)
+0:11            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:11            Constant:
+0:11              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 
 Linked vertex stage:
@@ -56,7 +58,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:11  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:11  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:11    Function Parameters: 
 0:?     Sequence
 0:21      Sequence
@@ -91,100 +93,101 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:26            Pos: direct index for structure (temp 4-component vector of float)
-0:26              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:11  Function Definition: main( (temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:11          Pos: direct index for structure (temp 4-component vector of float)
+0:11            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:11            Constant:
+0:11              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 46
+// Id's are bound by 48
 
                               Capability Shader
                               Capability Sampled1D
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 36 45
+                              EntryPoint Vertex 4  "main" 42
                               Name 4  "main"
-                              Name 8  "sizeQueryTemp"
-                              Name 12  "g_tTex1df4"
-                              Name 16  "WidthU"
-                              Name 18  "sizeQueryTemp"
-                              Name 23  "NumberOfLevelsU"
-                              Name 27  "VS_OUTPUT"
-                              MemberName 27(VS_OUTPUT) 0  "Pos"
-                              Name 29  "vsout"
-                              Name 36  "Pos"
-                              Name 42  "g_sSamp"
-                              Name 43  "PerVertex_out"
-                              MemberName 43(PerVertex_out) 0  "Pos"
-                              Name 45  "PerVertex_out"
-                              Decorate 12(g_tTex1df4) DescriptorSet 0
-                              Decorate 12(g_tTex1df4) Binding 0
-                              Decorate 36(Pos) BuiltIn Position
-                              Decorate 42(g_sSamp) DescriptorSet 0
-                              Decorate 42(g_sSamp) Binding 0
-                              MemberDecorate 43(PerVertex_out) 0 BuiltIn Position
-                              Decorate 43(PerVertex_out) Block
+                              Name 8  "VS_OUTPUT"
+                              MemberName 8(VS_OUTPUT) 0  "Pos"
+                              Name 10  "@main("
+                              Name 14  "sizeQueryTemp"
+                              Name 17  "g_tTex1df4"
+                              Name 21  "WidthU"
+                              Name 23  "sizeQueryTemp"
+                              Name 28  "NumberOfLevelsU"
+                              Name 32  "vsout"
+                              Name 42  "@entryPointOutput_Pos"
+                              Name 47  "g_sSamp"
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
+                              Decorate 17(g_tTex1df4) Binding 0
+                              Decorate 42(@entryPointOutput_Pos) BuiltIn Position
+                              Decorate 47(g_sSamp) DescriptorSet 0
+                              Decorate 47(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:             TypePointer Function 6(int)
-               9:             TypeFloat 32
-              10:             TypeImage 9(float) 1D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
-  12(g_tTex1df4):     11(ptr) Variable UniformConstant
-              14:             TypeInt 32 1
-              20:      6(int) Constant 6
-              26:             TypeVector 9(float) 4
-   27(VS_OUTPUT):             TypeStruct 26(fvec4)
-              28:             TypePointer Function 27(VS_OUTPUT)
-              30:     14(int) Constant 0
-              31:    9(float) Constant 0
-              32:   26(fvec4) ConstantComposite 31 31 31 31
-              33:             TypePointer Function 26(fvec4)
-              35:             TypePointer Output 26(fvec4)
-         36(Pos):     35(ptr) Variable Output
-              40:             TypeSampler
-              41:             TypePointer UniformConstant 40
-     42(g_sSamp):     41(ptr) Variable UniformConstant
-43(PerVertex_out):             TypeStruct 26(fvec4)
-              44:             TypePointer Output 43(PerVertex_out)
-45(PerVertex_out):     44(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(VS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(VS_OUTPUT)
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+  17(g_tTex1df4):     16(ptr) Variable UniformConstant
+              19:             TypeInt 32 1
+              25:     12(int) Constant 6
+              31:             TypePointer Function 8(VS_OUTPUT)
+              33:     19(int) Constant 0
+              34:    6(float) Constant 0
+              35:    7(fvec4) ConstantComposite 34 34 34 34
+              36:             TypePointer Function 7(fvec4)
+              41:             TypePointer Output 7(fvec4)
+42(@entryPointOutput_Pos):     41(ptr) Variable Output
+              45:             TypeSampler
+              46:             TypePointer UniformConstant 45
+     47(g_sSamp):     46(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-8(sizeQueryTemp):      7(ptr) Variable Function
-      16(WidthU):      7(ptr) Variable Function
-18(sizeQueryTemp):      7(ptr) Variable Function
-23(NumberOfLevelsU):      7(ptr) Variable Function
-       29(vsout):     28(ptr) Variable Function
-              13:          10 Load 12(g_tTex1df4)
-              15:     14(int) ImageQuerySize 13
-                              Store 8(sizeQueryTemp) 15
-              17:      6(int) Load 8(sizeQueryTemp)
-                              Store 16(WidthU) 17
-              19:          10 Load 12(g_tTex1df4)
-              21:     14(int) ImageQuerySizeLod 19 20
-                              Store 18(sizeQueryTemp) 21
-              22:      6(int) Load 18(sizeQueryTemp)
-                              Store 16(WidthU) 22
-              24:          10 Load 12(g_tTex1df4)
-              25:     14(int) ImageQueryLevels 24
-                              Store 23(NumberOfLevelsU) 25
-              34:     33(ptr) AccessChain 29(vsout) 30
-                              Store 34 32
-              37:     33(ptr) AccessChain 29(vsout) 30
-              38:   26(fvec4) Load 37
-                              Store 36(Pos) 38
+              43:8(VS_OUTPUT) FunctionCall 10(@main()
+              44:    7(fvec4) CompositeExtract 43 0
+                              Store 42(@entryPointOutput_Pos) 44
                               Return
                               FunctionEnd
+      10(@main():8(VS_OUTPUT) Function None 9
+              11:             Label
+14(sizeQueryTemp):     13(ptr) Variable Function
+      21(WidthU):     13(ptr) Variable Function
+23(sizeQueryTemp):     13(ptr) Variable Function
+28(NumberOfLevelsU):     13(ptr) Variable Function
+       32(vsout):     31(ptr) Variable Function
+              18:          15 Load 17(g_tTex1df4)
+              20:     19(int) ImageQuerySize 18
+                              Store 14(sizeQueryTemp) 20
+              22:     12(int) Load 14(sizeQueryTemp)
+                              Store 21(WidthU) 22
+              24:          15 Load 17(g_tTex1df4)
+              26:     19(int) ImageQuerySizeLod 24 25
+                              Store 23(sizeQueryTemp) 26
+              27:     12(int) Load 23(sizeQueryTemp)
+                              Store 21(WidthU) 27
+              29:          15 Load 17(g_tTex1df4)
+              30:     19(int) ImageQueryLevels 29
+                              Store 28(NumberOfLevelsU) 30
+              37:     36(ptr) AccessChain 32(vsout) 33
+                              Store 37 35
+              38:8(VS_OUTPUT) Load 32(vsout)
+                              ReturnValue 38
+                              FunctionEnd

+ 427 - 404
3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.getdimensions.rw.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:44  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:44    Function Parameters: 
 0:?     Sequence
 0:63      Sequence
@@ -310,24 +310,28 @@ gl_FragCoord origin is upper left
 0:93            1 (const int)
 0:93        Constant:
 0:93          1.000000
-0:95      Sequence
-0:95        Sequence
-0:95          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:95            Color: direct index for structure (temp 4-component vector of float)
-0:95              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:95              Constant:
-0:95                0 (const int)
-0:95          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:95            Depth: direct index for structure (temp float)
-0:95              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:95              Constant:
-0:95                1 (const int)
-0:95        Branch: Return
+0:95      Branch: Return with expression
+0:95        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44  Function Definition: main( (temp void)
+0:44    Function Parameters: 
+0:?     Sequence
+0:44      Sequence
+0:44        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:44          Color: direct index for structure (temp 4-component vector of float)
+0:44            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44            Constant:
+0:44              0 (const int)
+0:44        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:44          Depth: direct index for structure (temp float)
+0:44            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44            Constant:
+0:44              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -347,6 +351,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -356,7 +362,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:44  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:44    Function Parameters: 
 0:?     Sequence
 0:63      Sequence
@@ -664,24 +670,28 @@ gl_FragCoord origin is upper left
 0:93            1 (const int)
 0:93        Constant:
 0:93          1.000000
-0:95      Sequence
-0:95        Sequence
-0:95          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:95            Color: direct index for structure (temp 4-component vector of float)
-0:95              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:95              Constant:
-0:95                0 (const int)
-0:95          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:95            Depth: direct index for structure (temp float)
-0:95              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:95              Constant:
-0:95                1 (const int)
-0:95        Branch: Return
+0:95      Branch: Return with expression
+0:95        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44  Function Definition: main( (temp void)
+0:44    Function Parameters: 
+0:?     Sequence
+0:44      Sequence
+0:44        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:44          Color: direct index for structure (temp 4-component vector of float)
+0:44            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44            Constant:
+0:44              0 (const int)
+0:44        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:44          Depth: direct index for structure (temp float)
+0:44            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:44            Constant:
+0:44              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -701,11 +711,13 @@ gl_FragCoord origin is upper left
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 225
+// Id's are bound by 232
 
                               Capability Shader
                               Capability Sampled1D
@@ -713,378 +725,389 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 210 214
+                              EntryPoint Fragment 4  "main" 218 222
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "sizeQueryTemp"
-                              Name 12  "g_tTex1df4"
-                              Name 16  "WidthU"
-                              Name 18  "sizeQueryTemp"
-                              Name 21  "g_tTex1di4"
-                              Name 25  "sizeQueryTemp"
-                              Name 28  "g_tTex1du4"
-                              Name 32  "sizeQueryTemp"
-                              Name 35  "g_tBuffF"
-                              Name 39  "sizeQueryTemp"
-                              Name 42  "g_tBuffI"
-                              Name 46  "sizeQueryTemp"
-                              Name 49  "g_tBuffU"
-                              Name 55  "sizeQueryTemp"
-                              Name 58  "g_tTex1df4a"
-                              Name 65  "ElementsU"
-                              Name 69  "sizeQueryTemp"
-                              Name 72  "g_tTex1di4a"
-                              Name 79  "sizeQueryTemp"
-                              Name 82  "g_tTex1du4a"
-                              Name 89  "sizeQueryTemp"
-                              Name 92  "g_tTex2df4"
-                              Name 97  "HeightU"
-                              Name 100  "sizeQueryTemp"
-                              Name 103  "g_tTex2di4"
-                              Name 110  "sizeQueryTemp"
-                              Name 113  "g_tTex2du4"
-                              Name 122  "sizeQueryTemp"
-                              Name 125  "g_tTex2df4a"
-                              Name 136  "sizeQueryTemp"
-                              Name 139  "g_tTex2di4a"
-                              Name 148  "sizeQueryTemp"
-                              Name 151  "g_tTex2du4a"
-                              Name 160  "sizeQueryTemp"
-                              Name 163  "g_tTex3df4"
-                              Name 170  "DepthU"
-                              Name 173  "sizeQueryTemp"
-                              Name 176  "g_tTex3di4"
-                              Name 185  "sizeQueryTemp"
-                              Name 188  "g_tTex3du4"
-                              Name 198  "PS_OUTPUT"
-                              MemberName 198(PS_OUTPUT) 0  "Color"
-                              MemberName 198(PS_OUTPUT) 1  "Depth"
-                              Name 200  "psout"
-                              Name 210  "Color"
-                              Name 214  "Depth"
-                              Name 220  "g_sSamp"
-                              Name 222  "$Global"
-                              MemberName 222($Global) 0  "c1"
-                              MemberName 222($Global) 1  "c2"
-                              MemberName 222($Global) 2  "c3"
-                              MemberName 222($Global) 3  "c4"
-                              MemberName 222($Global) 4  "o1"
-                              MemberName 222($Global) 5  "o2"
-                              MemberName 222($Global) 6  "o3"
-                              MemberName 222($Global) 7  "o4"
-                              Name 224  ""
-                              Decorate 12(g_tTex1df4) DescriptorSet 0
-                              Decorate 12(g_tTex1df4) Binding 0
-                              Decorate 21(g_tTex1di4) DescriptorSet 0
-                              Decorate 28(g_tTex1du4) DescriptorSet 0
-                              Decorate 35(g_tBuffF) DescriptorSet 0
-                              Decorate 42(g_tBuffI) DescriptorSet 0
-                              Decorate 49(g_tBuffU) DescriptorSet 0
-                              Decorate 58(g_tTex1df4a) DescriptorSet 0
-                              Decorate 72(g_tTex1di4a) DescriptorSet 0
-                              Decorate 82(g_tTex1du4a) DescriptorSet 0
-                              Decorate 92(g_tTex2df4) DescriptorSet 0
-                              Decorate 103(g_tTex2di4) DescriptorSet 0
-                              Decorate 113(g_tTex2du4) DescriptorSet 0
-                              Decorate 125(g_tTex2df4a) DescriptorSet 0
-                              Decorate 139(g_tTex2di4a) DescriptorSet 0
-                              Decorate 151(g_tTex2du4a) DescriptorSet 0
-                              Decorate 163(g_tTex3df4) DescriptorSet 0
-                              Decorate 176(g_tTex3di4) DescriptorSet 0
-                              Decorate 188(g_tTex3du4) DescriptorSet 0
-                              Decorate 210(Color) Location 0
-                              Decorate 214(Depth) BuiltIn FragDepth
-                              Decorate 220(g_sSamp) DescriptorSet 0
-                              Decorate 220(g_sSamp) Binding 0
-                              MemberDecorate 222($Global) 0 Offset 0
-                              MemberDecorate 222($Global) 1 Offset 8
-                              MemberDecorate 222($Global) 2 Offset 16
-                              MemberDecorate 222($Global) 3 Offset 32
-                              MemberDecorate 222($Global) 4 Offset 48
-                              MemberDecorate 222($Global) 5 Offset 56
-                              MemberDecorate 222($Global) 6 Offset 64
-                              MemberDecorate 222($Global) 7 Offset 80
-                              Decorate 222($Global) Block
-                              Decorate 224 DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "sizeQueryTemp"
+                              Name 17  "g_tTex1df4"
+                              Name 21  "WidthU"
+                              Name 23  "sizeQueryTemp"
+                              Name 26  "g_tTex1di4"
+                              Name 30  "sizeQueryTemp"
+                              Name 33  "g_tTex1du4"
+                              Name 37  "sizeQueryTemp"
+                              Name 40  "g_tBuffF"
+                              Name 44  "sizeQueryTemp"
+                              Name 47  "g_tBuffI"
+                              Name 51  "sizeQueryTemp"
+                              Name 54  "g_tBuffU"
+                              Name 60  "sizeQueryTemp"
+                              Name 63  "g_tTex1df4a"
+                              Name 70  "ElementsU"
+                              Name 74  "sizeQueryTemp"
+                              Name 77  "g_tTex1di4a"
+                              Name 84  "sizeQueryTemp"
+                              Name 87  "g_tTex1du4a"
+                              Name 94  "sizeQueryTemp"
+                              Name 97  "g_tTex2df4"
+                              Name 102  "HeightU"
+                              Name 105  "sizeQueryTemp"
+                              Name 108  "g_tTex2di4"
+                              Name 115  "sizeQueryTemp"
+                              Name 118  "g_tTex2du4"
+                              Name 127  "sizeQueryTemp"
+                              Name 130  "g_tTex2df4a"
+                              Name 141  "sizeQueryTemp"
+                              Name 144  "g_tTex2di4a"
+                              Name 153  "sizeQueryTemp"
+                              Name 156  "g_tTex2du4a"
+                              Name 165  "sizeQueryTemp"
+                              Name 168  "g_tTex3df4"
+                              Name 175  "DepthU"
+                              Name 178  "sizeQueryTemp"
+                              Name 181  "g_tTex3di4"
+                              Name 190  "sizeQueryTemp"
+                              Name 193  "g_tTex3du4"
+                              Name 203  "psout"
+                              Name 215  "flattenTemp"
+                              Name 218  "Color"
+                              Name 222  "Depth"
+                              Name 227  "g_sSamp"
+                              Name 229  "$Global"
+                              MemberName 229($Global) 0  "c1"
+                              MemberName 229($Global) 1  "c2"
+                              MemberName 229($Global) 2  "c3"
+                              MemberName 229($Global) 3  "c4"
+                              MemberName 229($Global) 4  "o1"
+                              MemberName 229($Global) 5  "o2"
+                              MemberName 229($Global) 6  "o3"
+                              MemberName 229($Global) 7  "o4"
+                              Name 231  ""
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
+                              Decorate 17(g_tTex1df4) Binding 0
+                              Decorate 26(g_tTex1di4) DescriptorSet 0
+                              Decorate 33(g_tTex1du4) DescriptorSet 0
+                              Decorate 40(g_tBuffF) DescriptorSet 0
+                              Decorate 47(g_tBuffI) DescriptorSet 0
+                              Decorate 54(g_tBuffU) DescriptorSet 0
+                              Decorate 63(g_tTex1df4a) DescriptorSet 0
+                              Decorate 77(g_tTex1di4a) DescriptorSet 0
+                              Decorate 87(g_tTex1du4a) DescriptorSet 0
+                              Decorate 97(g_tTex2df4) DescriptorSet 0
+                              Decorate 108(g_tTex2di4) DescriptorSet 0
+                              Decorate 118(g_tTex2du4) DescriptorSet 0
+                              Decorate 130(g_tTex2df4a) DescriptorSet 0
+                              Decorate 144(g_tTex2di4a) DescriptorSet 0
+                              Decorate 156(g_tTex2du4a) DescriptorSet 0
+                              Decorate 168(g_tTex3df4) DescriptorSet 0
+                              Decorate 181(g_tTex3di4) DescriptorSet 0
+                              Decorate 193(g_tTex3du4) DescriptorSet 0
+                              Decorate 218(Color) Location 0
+                              Decorate 222(Depth) BuiltIn FragDepth
+                              Decorate 227(g_sSamp) DescriptorSet 0
+                              Decorate 227(g_sSamp) Binding 0
+                              MemberDecorate 229($Global) 0 Offset 0
+                              MemberDecorate 229($Global) 1 Offset 8
+                              MemberDecorate 229($Global) 2 Offset 16
+                              MemberDecorate 229($Global) 3 Offset 32
+                              MemberDecorate 229($Global) 4 Offset 48
+                              MemberDecorate 229($Global) 5 Offset 56
+                              MemberDecorate 229($Global) 6 Offset 64
+                              MemberDecorate 229($Global) 7 Offset 80
+                              Decorate 229($Global) Block
+                              Decorate 231 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:             TypePointer Function 6(int)
-               9:             TypeFloat 32
-              10:             TypeImage 9(float) 1D nonsampled format:Rgba32f
-              11:             TypePointer UniformConstant 10
-  12(g_tTex1df4):     11(ptr) Variable UniformConstant
-              14:             TypeInt 32 1
-              19:             TypeImage 14(int) 1D nonsampled format:Rgba32i
-              20:             TypePointer UniformConstant 19
-  21(g_tTex1di4):     20(ptr) Variable UniformConstant
-              26:             TypeImage 6(int) 1D nonsampled format:Rgba32ui
-              27:             TypePointer UniformConstant 26
-  28(g_tTex1du4):     27(ptr) Variable UniformConstant
-              33:             TypeImage 9(float) Buffer nonsampled format:Rgba32f
-              34:             TypePointer UniformConstant 33
-    35(g_tBuffF):     34(ptr) Variable UniformConstant
-              40:             TypeImage 14(int) Buffer nonsampled format:Rgba32i
-              41:             TypePointer UniformConstant 40
-    42(g_tBuffI):     41(ptr) Variable UniformConstant
-              47:             TypeImage 6(int) Buffer nonsampled format:Rgba32ui
-              48:             TypePointer UniformConstant 47
-    49(g_tBuffU):     48(ptr) Variable UniformConstant
-              53:             TypeVector 6(int) 2
-              54:             TypePointer Function 53(ivec2)
-              56:             TypeImage 9(float) 1D array nonsampled format:Rgba32f
-              57:             TypePointer UniformConstant 56
- 58(g_tTex1df4a):     57(ptr) Variable UniformConstant
-              60:             TypeVector 14(int) 2
-              62:      6(int) Constant 0
-              66:      6(int) Constant 1
-              70:             TypeImage 14(int) 1D array nonsampled format:Rgba32i
-              71:             TypePointer UniformConstant 70
- 72(g_tTex1di4a):     71(ptr) Variable UniformConstant
-              80:             TypeImage 6(int) 1D array nonsampled format:Rgba32ui
-              81:             TypePointer UniformConstant 80
- 82(g_tTex1du4a):     81(ptr) Variable UniformConstant
-              90:             TypeImage 9(float) 2D nonsampled format:Rgba32f
-              91:             TypePointer UniformConstant 90
-  92(g_tTex2df4):     91(ptr) Variable UniformConstant
-             101:             TypeImage 14(int) 2D nonsampled format:Rgba32i
-             102:             TypePointer UniformConstant 101
- 103(g_tTex2di4):    102(ptr) Variable UniformConstant
-             111:             TypeImage 6(int) 2D nonsampled format:Rgba32ui
-             112:             TypePointer UniformConstant 111
- 113(g_tTex2du4):    112(ptr) Variable UniformConstant
-             120:             TypeVector 6(int) 3
-             121:             TypePointer Function 120(ivec3)
-             123:             TypeImage 9(float) 2D array nonsampled format:Rgba32f
-             124:             TypePointer UniformConstant 123
-125(g_tTex2df4a):    124(ptr) Variable UniformConstant
-             127:             TypeVector 14(int) 3
-             133:      6(int) Constant 2
-             137:             TypeImage 14(int) 2D array nonsampled format:Rgba32i
-             138:             TypePointer UniformConstant 137
-139(g_tTex2di4a):    138(ptr) Variable UniformConstant
-             149:             TypeImage 6(int) 2D array nonsampled format:Rgba32ui
-             150:             TypePointer UniformConstant 149
-151(g_tTex2du4a):    150(ptr) Variable UniformConstant
-             161:             TypeImage 9(float) 3D nonsampled format:Rgba32f
-             162:             TypePointer UniformConstant 161
- 163(g_tTex3df4):    162(ptr) Variable UniformConstant
-             174:             TypeImage 14(int) 3D nonsampled format:Rgba32i
-             175:             TypePointer UniformConstant 174
- 176(g_tTex3di4):    175(ptr) Variable UniformConstant
-             186:             TypeImage 6(int) 3D nonsampled format:Rgba32ui
-             187:             TypePointer UniformConstant 186
- 188(g_tTex3du4):    187(ptr) Variable UniformConstant
-             197:             TypeVector 9(float) 4
-  198(PS_OUTPUT):             TypeStruct 197(fvec4) 9(float)
-             199:             TypePointer Function 198(PS_OUTPUT)
-             201:     14(int) Constant 0
-             202:    9(float) Constant 1065353216
-             203:  197(fvec4) ConstantComposite 202 202 202 202
-             204:             TypePointer Function 197(fvec4)
-             206:     14(int) Constant 1
-             207:             TypePointer Function 9(float)
-             209:             TypePointer Output 197(fvec4)
-      210(Color):    209(ptr) Variable Output
-             213:             TypePointer Output 9(float)
-      214(Depth):    213(ptr) Variable Output
-             218:             TypeSampler
-             219:             TypePointer UniformConstant 218
-    220(g_sSamp):    219(ptr) Variable UniformConstant
-             221:             TypeVector 14(int) 4
-    222($Global):             TypeStruct 14(int) 60(ivec2) 127(ivec3) 221(ivec4) 14(int) 60(ivec2) 127(ivec3) 221(ivec4)
-             223:             TypePointer Uniform 222($Global)
-             224:    223(ptr) Variable Uniform
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              15:             TypeImage 6(float) 1D nonsampled format:Rgba32f
+              16:             TypePointer UniformConstant 15
+  17(g_tTex1df4):     16(ptr) Variable UniformConstant
+              19:             TypeInt 32 1
+              24:             TypeImage 19(int) 1D nonsampled format:Rgba32i
+              25:             TypePointer UniformConstant 24
+  26(g_tTex1di4):     25(ptr) Variable UniformConstant
+              31:             TypeImage 12(int) 1D nonsampled format:Rgba32ui
+              32:             TypePointer UniformConstant 31
+  33(g_tTex1du4):     32(ptr) Variable UniformConstant
+              38:             TypeImage 6(float) Buffer nonsampled format:Rgba32f
+              39:             TypePointer UniformConstant 38
+    40(g_tBuffF):     39(ptr) Variable UniformConstant
+              45:             TypeImage 19(int) Buffer nonsampled format:Rgba32i
+              46:             TypePointer UniformConstant 45
+    47(g_tBuffI):     46(ptr) Variable UniformConstant
+              52:             TypeImage 12(int) Buffer nonsampled format:Rgba32ui
+              53:             TypePointer UniformConstant 52
+    54(g_tBuffU):     53(ptr) Variable UniformConstant
+              58:             TypeVector 12(int) 2
+              59:             TypePointer Function 58(ivec2)
+              61:             TypeImage 6(float) 1D array nonsampled format:Rgba32f
+              62:             TypePointer UniformConstant 61
+ 63(g_tTex1df4a):     62(ptr) Variable UniformConstant
+              65:             TypeVector 19(int) 2
+              67:     12(int) Constant 0
+              71:     12(int) Constant 1
+              75:             TypeImage 19(int) 1D array nonsampled format:Rgba32i
+              76:             TypePointer UniformConstant 75
+ 77(g_tTex1di4a):     76(ptr) Variable UniformConstant
+              85:             TypeImage 12(int) 1D array nonsampled format:Rgba32ui
+              86:             TypePointer UniformConstant 85
+ 87(g_tTex1du4a):     86(ptr) Variable UniformConstant
+              95:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              96:             TypePointer UniformConstant 95
+  97(g_tTex2df4):     96(ptr) Variable UniformConstant
+             106:             TypeImage 19(int) 2D nonsampled format:Rgba32i
+             107:             TypePointer UniformConstant 106
+ 108(g_tTex2di4):    107(ptr) Variable UniformConstant
+             116:             TypeImage 12(int) 2D nonsampled format:Rgba32ui
+             117:             TypePointer UniformConstant 116
+ 118(g_tTex2du4):    117(ptr) Variable UniformConstant
+             125:             TypeVector 12(int) 3
+             126:             TypePointer Function 125(ivec3)
+             128:             TypeImage 6(float) 2D array nonsampled format:Rgba32f
+             129:             TypePointer UniformConstant 128
+130(g_tTex2df4a):    129(ptr) Variable UniformConstant
+             132:             TypeVector 19(int) 3
+             138:     12(int) Constant 2
+             142:             TypeImage 19(int) 2D array nonsampled format:Rgba32i
+             143:             TypePointer UniformConstant 142
+144(g_tTex2di4a):    143(ptr) Variable UniformConstant
+             154:             TypeImage 12(int) 2D array nonsampled format:Rgba32ui
+             155:             TypePointer UniformConstant 154
+156(g_tTex2du4a):    155(ptr) Variable UniformConstant
+             166:             TypeImage 6(float) 3D nonsampled format:Rgba32f
+             167:             TypePointer UniformConstant 166
+ 168(g_tTex3df4):    167(ptr) Variable UniformConstant
+             179:             TypeImage 19(int) 3D nonsampled format:Rgba32i
+             180:             TypePointer UniformConstant 179
+ 181(g_tTex3di4):    180(ptr) Variable UniformConstant
+             191:             TypeImage 12(int) 3D nonsampled format:Rgba32ui
+             192:             TypePointer UniformConstant 191
+ 193(g_tTex3du4):    192(ptr) Variable UniformConstant
+             202:             TypePointer Function 8(PS_OUTPUT)
+             204:     19(int) Constant 0
+             205:    6(float) Constant 1065353216
+             206:    7(fvec4) ConstantComposite 205 205 205 205
+             207:             TypePointer Function 7(fvec4)
+             209:     19(int) Constant 1
+             210:             TypePointer Function 6(float)
+             217:             TypePointer Output 7(fvec4)
+      218(Color):    217(ptr) Variable Output
+             221:             TypePointer Output 6(float)
+      222(Depth):    221(ptr) Variable Output
+             225:             TypeSampler
+             226:             TypePointer UniformConstant 225
+    227(g_sSamp):    226(ptr) Variable UniformConstant
+             228:             TypeVector 19(int) 4
+    229($Global):             TypeStruct 19(int) 65(ivec2) 132(ivec3) 228(ivec4) 19(int) 65(ivec2) 132(ivec3) 228(ivec4)
+             230:             TypePointer Uniform 229($Global)
+             231:    230(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-8(sizeQueryTemp):      7(ptr) Variable Function
-      16(WidthU):      7(ptr) Variable Function
-18(sizeQueryTemp):      7(ptr) Variable Function
-25(sizeQueryTemp):      7(ptr) Variable Function
-32(sizeQueryTemp):      7(ptr) Variable Function
-39(sizeQueryTemp):      7(ptr) Variable Function
-46(sizeQueryTemp):      7(ptr) Variable Function
-55(sizeQueryTemp):     54(ptr) Variable Function
-   65(ElementsU):      7(ptr) Variable Function
-69(sizeQueryTemp):     54(ptr) Variable Function
-79(sizeQueryTemp):     54(ptr) Variable Function
-89(sizeQueryTemp):     54(ptr) Variable Function
-     97(HeightU):      7(ptr) Variable Function
-100(sizeQueryTemp):     54(ptr) Variable Function
-110(sizeQueryTemp):     54(ptr) Variable Function
-122(sizeQueryTemp):    121(ptr) Variable Function
-136(sizeQueryTemp):    121(ptr) Variable Function
-148(sizeQueryTemp):    121(ptr) Variable Function
-160(sizeQueryTemp):    121(ptr) Variable Function
-     170(DepthU):      7(ptr) Variable Function
-173(sizeQueryTemp):    121(ptr) Variable Function
-185(sizeQueryTemp):    121(ptr) Variable Function
-      200(psout):    199(ptr) Variable Function
-              13:          10 Load 12(g_tTex1df4)
-              15:     14(int) ImageQuerySize 13
-                              Store 8(sizeQueryTemp) 15
-              17:      6(int) Load 8(sizeQueryTemp)
-                              Store 16(WidthU) 17
-              22:          19 Load 21(g_tTex1di4)
-              23:     14(int) ImageQuerySize 22
-                              Store 18(sizeQueryTemp) 23
-              24:      6(int) Load 18(sizeQueryTemp)
-                              Store 16(WidthU) 24
-              29:          26 Load 28(g_tTex1du4)
-              30:     14(int) ImageQuerySize 29
-                              Store 25(sizeQueryTemp) 30
-              31:      6(int) Load 25(sizeQueryTemp)
-                              Store 16(WidthU) 31
-              36:          33 Load 35(g_tBuffF)
-              37:     14(int) ImageQuerySize 36
-                              Store 32(sizeQueryTemp) 37
-              38:      6(int) Load 32(sizeQueryTemp)
-                              Store 16(WidthU) 38
-              43:          40 Load 42(g_tBuffI)
-              44:     14(int) ImageQuerySize 43
-                              Store 39(sizeQueryTemp) 44
-              45:      6(int) Load 39(sizeQueryTemp)
-                              Store 16(WidthU) 45
-              50:          47 Load 49(g_tBuffU)
-              51:     14(int) ImageQuerySize 50
-                              Store 46(sizeQueryTemp) 51
-              52:      6(int) Load 46(sizeQueryTemp)
-                              Store 16(WidthU) 52
-              59:          56 Load 58(g_tTex1df4a)
-              61:   60(ivec2) ImageQuerySize 59
-                              Store 55(sizeQueryTemp) 61
-              63:      7(ptr) AccessChain 55(sizeQueryTemp) 62
-              64:      6(int) Load 63
-                              Store 16(WidthU) 64
-              67:      7(ptr) AccessChain 55(sizeQueryTemp) 66
-              68:      6(int) Load 67
-                              Store 65(ElementsU) 68
-              73:          70 Load 72(g_tTex1di4a)
-              74:   60(ivec2) ImageQuerySize 73
-                              Store 69(sizeQueryTemp) 74
-              75:      7(ptr) AccessChain 69(sizeQueryTemp) 62
-              76:      6(int) Load 75
-                              Store 16(WidthU) 76
-              77:      7(ptr) AccessChain 69(sizeQueryTemp) 66
-              78:      6(int) Load 77
-                              Store 65(ElementsU) 78
-              83:          80 Load 82(g_tTex1du4a)
-              84:   60(ivec2) ImageQuerySize 83
-                              Store 79(sizeQueryTemp) 84
-              85:      7(ptr) AccessChain 79(sizeQueryTemp) 62
-              86:      6(int) Load 85
-                              Store 16(WidthU) 86
-              87:      7(ptr) AccessChain 79(sizeQueryTemp) 66
-              88:      6(int) Load 87
-                              Store 65(ElementsU) 88
-              93:          90 Load 92(g_tTex2df4)
-              94:   60(ivec2) ImageQuerySize 93
-                              Store 89(sizeQueryTemp) 94
-              95:      7(ptr) AccessChain 89(sizeQueryTemp) 62
-              96:      6(int) Load 95
-                              Store 16(WidthU) 96
-              98:      7(ptr) AccessChain 89(sizeQueryTemp) 66
-              99:      6(int) Load 98
-                              Store 97(HeightU) 99
-             104:         101 Load 103(g_tTex2di4)
-             105:   60(ivec2) ImageQuerySize 104
-                              Store 100(sizeQueryTemp) 105
-             106:      7(ptr) AccessChain 100(sizeQueryTemp) 62
-             107:      6(int) Load 106
-                              Store 16(WidthU) 107
-             108:      7(ptr) AccessChain 100(sizeQueryTemp) 66
-             109:      6(int) Load 108
-                              Store 97(HeightU) 109
-             114:         111 Load 113(g_tTex2du4)
-             115:   60(ivec2) ImageQuerySize 114
-                              Store 110(sizeQueryTemp) 115
-             116:      7(ptr) AccessChain 110(sizeQueryTemp) 62
-             117:      6(int) Load 116
-                              Store 16(WidthU) 117
-             118:      7(ptr) AccessChain 110(sizeQueryTemp) 66
-             119:      6(int) Load 118
-                              Store 97(HeightU) 119
-             126:         123 Load 125(g_tTex2df4a)
-             128:  127(ivec3) ImageQuerySize 126
-                              Store 122(sizeQueryTemp) 128
-             129:      7(ptr) AccessChain 122(sizeQueryTemp) 62
-             130:      6(int) Load 129
-                              Store 16(WidthU) 130
-             131:      7(ptr) AccessChain 122(sizeQueryTemp) 66
-             132:      6(int) Load 131
-                              Store 97(HeightU) 132
-             134:      7(ptr) AccessChain 122(sizeQueryTemp) 133
-             135:      6(int) Load 134
-                              Store 65(ElementsU) 135
-             140:         137 Load 139(g_tTex2di4a)
-             141:  127(ivec3) ImageQuerySize 140
-                              Store 136(sizeQueryTemp) 141
-             142:      7(ptr) AccessChain 136(sizeQueryTemp) 62
-             143:      6(int) Load 142
-                              Store 16(WidthU) 143
-             144:      7(ptr) AccessChain 136(sizeQueryTemp) 66
-             145:      6(int) Load 144
-                              Store 97(HeightU) 145
-             146:      7(ptr) AccessChain 136(sizeQueryTemp) 133
-             147:      6(int) Load 146
-                              Store 65(ElementsU) 147
-             152:         149 Load 151(g_tTex2du4a)
-             153:  127(ivec3) ImageQuerySize 152
-                              Store 148(sizeQueryTemp) 153
-             154:      7(ptr) AccessChain 148(sizeQueryTemp) 62
-             155:      6(int) Load 154
-                              Store 16(WidthU) 155
-             156:      7(ptr) AccessChain 148(sizeQueryTemp) 66
-             157:      6(int) Load 156
-                              Store 97(HeightU) 157
-             158:      7(ptr) AccessChain 148(sizeQueryTemp) 133
-             159:      6(int) Load 158
-                              Store 65(ElementsU) 159
-             164:         161 Load 163(g_tTex3df4)
-             165:  127(ivec3) ImageQuerySize 164
-                              Store 160(sizeQueryTemp) 165
-             166:      7(ptr) AccessChain 160(sizeQueryTemp) 62
-             167:      6(int) Load 166
-                              Store 16(WidthU) 167
-             168:      7(ptr) AccessChain 160(sizeQueryTemp) 66
-             169:      6(int) Load 168
-                              Store 97(HeightU) 169
-             171:      7(ptr) AccessChain 160(sizeQueryTemp) 133
-             172:      6(int) Load 171
-                              Store 170(DepthU) 172
-             177:         174 Load 176(g_tTex3di4)
-             178:  127(ivec3) ImageQuerySize 177
-                              Store 173(sizeQueryTemp) 178
-             179:      7(ptr) AccessChain 173(sizeQueryTemp) 62
-             180:      6(int) Load 179
-                              Store 16(WidthU) 180
-             181:      7(ptr) AccessChain 173(sizeQueryTemp) 66
-             182:      6(int) Load 181
-                              Store 97(HeightU) 182
-             183:      7(ptr) AccessChain 173(sizeQueryTemp) 133
-             184:      6(int) Load 183
-                              Store 170(DepthU) 184
-             189:         186 Load 188(g_tTex3du4)
-             190:  127(ivec3) ImageQuerySize 189
-                              Store 185(sizeQueryTemp) 190
-             191:      7(ptr) AccessChain 185(sizeQueryTemp) 62
-             192:      6(int) Load 191
-                              Store 16(WidthU) 192
-             193:      7(ptr) AccessChain 185(sizeQueryTemp) 66
-             194:      6(int) Load 193
-                              Store 97(HeightU) 194
-             195:      7(ptr) AccessChain 185(sizeQueryTemp) 133
-             196:      6(int) Load 195
-                              Store 170(DepthU) 196
-             205:    204(ptr) AccessChain 200(psout) 201
-                              Store 205 203
-             208:    207(ptr) AccessChain 200(psout) 206
-                              Store 208 202
-             211:    204(ptr) AccessChain 200(psout) 201
-             212:  197(fvec4) Load 211
-                              Store 210(Color) 212
-             215:    207(ptr) AccessChain 200(psout) 206
-             216:    9(float) Load 215
-                              Store 214(Depth) 216
+215(flattenTemp):    202(ptr) Variable Function
+             216:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 215(flattenTemp) 216
+             219:    207(ptr) AccessChain 215(flattenTemp) 204
+             220:    7(fvec4) Load 219
+                              Store 218(Color) 220
+             223:    210(ptr) AccessChain 215(flattenTemp) 209
+             224:    6(float) Load 223
+                              Store 222(Depth) 224
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+14(sizeQueryTemp):     13(ptr) Variable Function
+      21(WidthU):     13(ptr) Variable Function
+23(sizeQueryTemp):     13(ptr) Variable Function
+30(sizeQueryTemp):     13(ptr) Variable Function
+37(sizeQueryTemp):     13(ptr) Variable Function
+44(sizeQueryTemp):     13(ptr) Variable Function
+51(sizeQueryTemp):     13(ptr) Variable Function
+60(sizeQueryTemp):     59(ptr) Variable Function
+   70(ElementsU):     13(ptr) Variable Function
+74(sizeQueryTemp):     59(ptr) Variable Function
+84(sizeQueryTemp):     59(ptr) Variable Function
+94(sizeQueryTemp):     59(ptr) Variable Function
+    102(HeightU):     13(ptr) Variable Function
+105(sizeQueryTemp):     59(ptr) Variable Function
+115(sizeQueryTemp):     59(ptr) Variable Function
+127(sizeQueryTemp):    126(ptr) Variable Function
+141(sizeQueryTemp):    126(ptr) Variable Function
+153(sizeQueryTemp):    126(ptr) Variable Function
+165(sizeQueryTemp):    126(ptr) Variable Function
+     175(DepthU):     13(ptr) Variable Function
+178(sizeQueryTemp):    126(ptr) Variable Function
+190(sizeQueryTemp):    126(ptr) Variable Function
+      203(psout):    202(ptr) Variable Function
+              18:          15 Load 17(g_tTex1df4)
+              20:     19(int) ImageQuerySize 18
+                              Store 14(sizeQueryTemp) 20
+              22:     12(int) Load 14(sizeQueryTemp)
+                              Store 21(WidthU) 22
+              27:          24 Load 26(g_tTex1di4)
+              28:     19(int) ImageQuerySize 27
+                              Store 23(sizeQueryTemp) 28
+              29:     12(int) Load 23(sizeQueryTemp)
+                              Store 21(WidthU) 29
+              34:          31 Load 33(g_tTex1du4)
+              35:     19(int) ImageQuerySize 34
+                              Store 30(sizeQueryTemp) 35
+              36:     12(int) Load 30(sizeQueryTemp)
+                              Store 21(WidthU) 36
+              41:          38 Load 40(g_tBuffF)
+              42:     19(int) ImageQuerySize 41
+                              Store 37(sizeQueryTemp) 42
+              43:     12(int) Load 37(sizeQueryTemp)
+                              Store 21(WidthU) 43
+              48:          45 Load 47(g_tBuffI)
+              49:     19(int) ImageQuerySize 48
+                              Store 44(sizeQueryTemp) 49
+              50:     12(int) Load 44(sizeQueryTemp)
+                              Store 21(WidthU) 50
+              55:          52 Load 54(g_tBuffU)
+              56:     19(int) ImageQuerySize 55
+                              Store 51(sizeQueryTemp) 56
+              57:     12(int) Load 51(sizeQueryTemp)
+                              Store 21(WidthU) 57
+              64:          61 Load 63(g_tTex1df4a)
+              66:   65(ivec2) ImageQuerySize 64
+                              Store 60(sizeQueryTemp) 66
+              68:     13(ptr) AccessChain 60(sizeQueryTemp) 67
+              69:     12(int) Load 68
+                              Store 21(WidthU) 69
+              72:     13(ptr) AccessChain 60(sizeQueryTemp) 71
+              73:     12(int) Load 72
+                              Store 70(ElementsU) 73
+              78:          75 Load 77(g_tTex1di4a)
+              79:   65(ivec2) ImageQuerySize 78
+                              Store 74(sizeQueryTemp) 79
+              80:     13(ptr) AccessChain 74(sizeQueryTemp) 67
+              81:     12(int) Load 80
+                              Store 21(WidthU) 81
+              82:     13(ptr) AccessChain 74(sizeQueryTemp) 71
+              83:     12(int) Load 82
+                              Store 70(ElementsU) 83
+              88:          85 Load 87(g_tTex1du4a)
+              89:   65(ivec2) ImageQuerySize 88
+                              Store 84(sizeQueryTemp) 89
+              90:     13(ptr) AccessChain 84(sizeQueryTemp) 67
+              91:     12(int) Load 90
+                              Store 21(WidthU) 91
+              92:     13(ptr) AccessChain 84(sizeQueryTemp) 71
+              93:     12(int) Load 92
+                              Store 70(ElementsU) 93
+              98:          95 Load 97(g_tTex2df4)
+              99:   65(ivec2) ImageQuerySize 98
+                              Store 94(sizeQueryTemp) 99
+             100:     13(ptr) AccessChain 94(sizeQueryTemp) 67
+             101:     12(int) Load 100
+                              Store 21(WidthU) 101
+             103:     13(ptr) AccessChain 94(sizeQueryTemp) 71
+             104:     12(int) Load 103
+                              Store 102(HeightU) 104
+             109:         106 Load 108(g_tTex2di4)
+             110:   65(ivec2) ImageQuerySize 109
+                              Store 105(sizeQueryTemp) 110
+             111:     13(ptr) AccessChain 105(sizeQueryTemp) 67
+             112:     12(int) Load 111
+                              Store 21(WidthU) 112
+             113:     13(ptr) AccessChain 105(sizeQueryTemp) 71
+             114:     12(int) Load 113
+                              Store 102(HeightU) 114
+             119:         116 Load 118(g_tTex2du4)
+             120:   65(ivec2) ImageQuerySize 119
+                              Store 115(sizeQueryTemp) 120
+             121:     13(ptr) AccessChain 115(sizeQueryTemp) 67
+             122:     12(int) Load 121
+                              Store 21(WidthU) 122
+             123:     13(ptr) AccessChain 115(sizeQueryTemp) 71
+             124:     12(int) Load 123
+                              Store 102(HeightU) 124
+             131:         128 Load 130(g_tTex2df4a)
+             133:  132(ivec3) ImageQuerySize 131
+                              Store 127(sizeQueryTemp) 133
+             134:     13(ptr) AccessChain 127(sizeQueryTemp) 67
+             135:     12(int) Load 134
+                              Store 21(WidthU) 135
+             136:     13(ptr) AccessChain 127(sizeQueryTemp) 71
+             137:     12(int) Load 136
+                              Store 102(HeightU) 137
+             139:     13(ptr) AccessChain 127(sizeQueryTemp) 138
+             140:     12(int) Load 139
+                              Store 70(ElementsU) 140
+             145:         142 Load 144(g_tTex2di4a)
+             146:  132(ivec3) ImageQuerySize 145
+                              Store 141(sizeQueryTemp) 146
+             147:     13(ptr) AccessChain 141(sizeQueryTemp) 67
+             148:     12(int) Load 147
+                              Store 21(WidthU) 148
+             149:     13(ptr) AccessChain 141(sizeQueryTemp) 71
+             150:     12(int) Load 149
+                              Store 102(HeightU) 150
+             151:     13(ptr) AccessChain 141(sizeQueryTemp) 138
+             152:     12(int) Load 151
+                              Store 70(ElementsU) 152
+             157:         154 Load 156(g_tTex2du4a)
+             158:  132(ivec3) ImageQuerySize 157
+                              Store 153(sizeQueryTemp) 158
+             159:     13(ptr) AccessChain 153(sizeQueryTemp) 67
+             160:     12(int) Load 159
+                              Store 21(WidthU) 160
+             161:     13(ptr) AccessChain 153(sizeQueryTemp) 71
+             162:     12(int) Load 161
+                              Store 102(HeightU) 162
+             163:     13(ptr) AccessChain 153(sizeQueryTemp) 138
+             164:     12(int) Load 163
+                              Store 70(ElementsU) 164
+             169:         166 Load 168(g_tTex3df4)
+             170:  132(ivec3) ImageQuerySize 169
+                              Store 165(sizeQueryTemp) 170
+             171:     13(ptr) AccessChain 165(sizeQueryTemp) 67
+             172:     12(int) Load 171
+                              Store 21(WidthU) 172
+             173:     13(ptr) AccessChain 165(sizeQueryTemp) 71
+             174:     12(int) Load 173
+                              Store 102(HeightU) 174
+             176:     13(ptr) AccessChain 165(sizeQueryTemp) 138
+             177:     12(int) Load 176
+                              Store 175(DepthU) 177
+             182:         179 Load 181(g_tTex3di4)
+             183:  132(ivec3) ImageQuerySize 182
+                              Store 178(sizeQueryTemp) 183
+             184:     13(ptr) AccessChain 178(sizeQueryTemp) 67
+             185:     12(int) Load 184
+                              Store 21(WidthU) 185
+             186:     13(ptr) AccessChain 178(sizeQueryTemp) 71
+             187:     12(int) Load 186
+                              Store 102(HeightU) 187
+             188:     13(ptr) AccessChain 178(sizeQueryTemp) 138
+             189:     12(int) Load 188
+                              Store 175(DepthU) 189
+             194:         191 Load 193(g_tTex3du4)
+             195:  132(ivec3) ImageQuerySize 194
+                              Store 190(sizeQueryTemp) 195
+             196:     13(ptr) AccessChain 190(sizeQueryTemp) 67
+             197:     12(int) Load 196
+                              Store 21(WidthU) 197
+             198:     13(ptr) AccessChain 190(sizeQueryTemp) 71
+             199:     12(int) Load 198
+                              Store 102(HeightU) 199
+             200:     13(ptr) AccessChain 190(sizeQueryTemp) 138
+             201:     12(int) Load 200
+                              Store 175(DepthU) 201
+             208:    207(ptr) AccessChain 203(psout) 204
+                              Store 208 206
+             211:    210(ptr) AccessChain 203(psout) 209
+                              Store 211 205
+             212:8(PS_OUTPUT) Load 203(psout)
+                              ReturnValue 212
+                              FunctionEnd

+ 48 - 36
3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out

@@ -7,7 +7,7 @@ ERROR: 2 compilation errors.  No code generated.
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:13  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:13    Function Parameters: 
 0:?     Sequence
 0:16      Sequence
@@ -43,27 +43,33 @@ ERROR: node is still EOpNull!
 0:20            1 (const int)
 0:20        Constant:
 0:20          1.000000
-0:22      Sequence
-0:22        Sequence
-0:22          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:22            Color: direct index for structure (temp 4-component vector of float)
-0:22              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:22              Constant:
-0:22                0 (const int)
-0:22          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:22            Depth: direct index for structure (temp float)
-0:22              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:22              Constant:
-0:22                1 (const int)
-0:22        Branch: Return
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13  Function Definition: main( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:13          Color: direct index for structure (temp 4-component vector of float)
+0:13            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:13          Depth: direct index for structure (temp float)
+0:13            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13            Constant:
+0:13              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -72,7 +78,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:13  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:13    Function Parameters: 
 0:?     Sequence
 0:16      Sequence
@@ -108,26 +114,32 @@ ERROR: node is still EOpNull!
 0:20            1 (const int)
 0:20        Constant:
 0:20          1.000000
-0:22      Sequence
-0:22        Sequence
-0:22          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:22            Color: direct index for structure (temp 4-component vector of float)
-0:22              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:22              Constant:
-0:22                0 (const int)
-0:22          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:22            Depth: direct index for structure (temp float)
-0:22              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:22              Constant:
-0:22                1 (const int)
-0:22        Branch: Return
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13  Function Definition: main( (temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:13          Color: direct index for structure (temp 4-component vector of float)
+0:13            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:13          Depth: direct index for structure (temp float)
+0:13            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:13            Constant:
+0:13              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 
 SPIR-V is not generated for failed compile or link

+ 359 - 0
3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out

@@ -0,0 +1,359 @@
+hlsl.hull.1.tesc
+Shader version: 450
+vertices = 4
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[4];u1; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      'm_cpid' (in uint)
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp uint)
+0:?         'm_cpid' (temp uint)
+0:?         'm_cpid' (in uint InvocationID)
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[4];u1; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?           'm_cpid' (temp uint)
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'm_cpid' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child (temp structure{temp 2-element array of float edges})
+0:?             '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?             Function Call: PCF(u1; (temp structure{temp 2-element array of float edges})
+0:?               'pid' (in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:33  Function Definition: PCF(u1; (temp structure{temp 2-element array of float edges})
+0:33    Function Parameters: 
+0:33      'pid' (in uint)
+0:?     Sequence
+0:36      move second child to first child (temp float)
+0:36        direct index (temp float)
+0:36          edges: direct index for structure (temp 2-element array of float)
+0:36            'output' (temp structure{temp 2-element array of float edges})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        Constant:
+0:36          2.000000
+0:37      move second child to first child (temp float)
+0:37        direct index (temp float)
+0:37          edges: direct index for structure (temp 2-element array of float)
+0:37            'output' (temp structure{temp 2-element array of float edges})
+0:37            Constant:
+0:37              0 (const int)
+0:37          Constant:
+0:37            1 (const int)
+0:37        Constant:
+0:37          8.000000
+0:38      Branch: Return with expression
+0:38        'output' (temp structure{temp 2-element array of float edges})
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     'm_cpid' (in uint InvocationID)
+0:?     'pid' (in uint PrimitiveID)
+0:?     '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 450
+vertices = 4
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[4];u1; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      'm_cpid' (in uint)
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp uint)
+0:?         'm_cpid' (temp uint)
+0:?         'm_cpid' (in uint InvocationID)
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[4];u1; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?           'm_cpid' (temp uint)
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'm_cpid' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child (temp structure{temp 2-element array of float edges})
+0:?             '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?             Function Call: PCF(u1; (temp structure{temp 2-element array of float edges})
+0:?               'pid' (in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:33  Function Definition: PCF(u1; (temp structure{temp 2-element array of float edges})
+0:33    Function Parameters: 
+0:33      'pid' (in uint)
+0:?     Sequence
+0:36      move second child to first child (temp float)
+0:36        direct index (temp float)
+0:36          edges: direct index for structure (temp 2-element array of float)
+0:36            'output' (temp structure{temp 2-element array of float edges})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        Constant:
+0:36          2.000000
+0:37      move second child to first child (temp float)
+0:37        direct index (temp float)
+0:37          edges: direct index for structure (temp 2-element array of float)
+0:37            'output' (temp structure{temp 2-element array of float edges})
+0:37            Constant:
+0:37              0 (const int)
+0:37          Constant:
+0:37            1 (const int)
+0:37        Constant:
+0:37          8.000000
+0:38      Branch: Return with expression
+0:38        'output' (temp structure{temp 2-element array of float edges})
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     'm_cpid' (in uint InvocationID)
+0:?     'pid' (in uint PrimitiveID)
+0:?     '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 85
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 40 44 47 62 67
+                              ExecutionMode 4 OutputVertices 4
+                              Name 4  "main"
+                              Name 8  "VS_OUT"
+                              MemberName 8(VS_OUT) 0  "cpoint"
+                              Name 14  "HS_OUT"
+                              MemberName 14(HS_OUT) 0  "cpoint"
+                              Name 18  "@main(struct-VS_OUT-vf31[4];u1;"
+                              Name 16  "ip"
+                              Name 17  "m_cpid"
+                              Name 22  "HS_CONSTANT_OUT"
+                              MemberName 22(HS_CONSTANT_OUT) 0  "edges"
+                              Name 25  "PCF(u1;"
+                              Name 24  "pid"
+                              Name 28  "output"
+                              Name 38  "ip"
+                              Name 40  "ip"
+                              Name 42  "m_cpid"
+                              Name 44  "m_cpid"
+                              Name 47  "@entryPointOutput"
+                              Name 48  "param"
+                              Name 50  "param"
+                              Name 61  "@patchConstantResult"
+                              Name 62  "pid"
+                              Name 63  "param"
+                              Name 67  "@patchConstantOutput_edges"
+                              Name 77  "output"
+                              Decorate 40(ip) Location 0
+                              Decorate 44(m_cpid) BuiltIn InvocationId
+                              Decorate 47(@entryPointOutput) Location 0
+                              Decorate 62(pid) BuiltIn PrimitiveId
+                              Decorate 67(@patchConstantOutput_edges) BuiltIn TessLevelOuter
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+       8(VS_OUT):             TypeStruct 7(fvec3)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 4
+              11:             TypeArray 8(VS_OUT) 10
+              12:             TypePointer Function 11
+              13:             TypePointer Function 9(int)
+      14(HS_OUT):             TypeStruct 7(fvec3)
+              15:             TypeFunction 14(HS_OUT) 12(ptr) 13(ptr)
+              20:      9(int) Constant 2
+              21:             TypeArray 6(float) 20
+22(HS_CONSTANT_OUT):             TypeStruct 21
+              23:             TypeFunction 22(HS_CONSTANT_OUT) 13(ptr)
+              27:             TypePointer Function 14(HS_OUT)
+              29:             TypeInt 32 1
+              30:     29(int) Constant 0
+              31:             TypePointer Function 7(fvec3)
+              39:             TypePointer Input 11
+          40(ip):     39(ptr) Variable Input
+              43:             TypePointer Input 9(int)
+      44(m_cpid):     43(ptr) Variable Input
+              46:             TypePointer Output 14(HS_OUT)
+47(@entryPointOutput):     46(ptr) Variable Output
+              53:      9(int) Constant 1
+              54:      9(int) Constant 0
+              56:             TypeBool
+              60:             TypePointer Function 22(HS_CONSTANT_OUT)
+         62(pid):     43(ptr) Variable Input
+              66:             TypePointer Output 21
+67(@patchConstantOutput_edges):     66(ptr) Variable Output
+              68:             TypePointer Function 6(float)
+              71:             TypePointer Output 6(float)
+              73:     29(int) Constant 1
+              78:    6(float) Constant 1073741824
+              80:    6(float) Constant 1090519040
+         4(main):           2 Function None 3
+               5:             Label
+          38(ip):     12(ptr) Variable Function
+      42(m_cpid):     13(ptr) Variable Function
+       48(param):     12(ptr) Variable Function
+       50(param):     13(ptr) Variable Function
+61(@patchConstantResult):     60(ptr) Variable Function
+       63(param):     13(ptr) Variable Function
+              41:          11 Load 40(ip)
+                              Store 38(ip) 41
+              45:      9(int) Load 44(m_cpid)
+                              Store 42(m_cpid) 45
+              49:          11 Load 38(ip)
+                              Store 48(param) 49
+              51:      9(int) Load 42(m_cpid)
+                              Store 50(param) 51
+              52:  14(HS_OUT) FunctionCall 18(@main(struct-VS_OUT-vf31[4];u1;) 48(param) 50(param)
+                              Store 47(@entryPointOutput) 52
+                              ControlBarrier 20 53 54
+              55:      9(int) Load 44(m_cpid)
+              57:    56(bool) IEqual 55 30
+                              SelectionMerge 59 None
+                              BranchConditional 57 58 59
+              58:               Label
+              64:      9(int)   Load 62(pid)
+                                Store 63(param) 64
+              65:22(HS_CONSTANT_OUT)   FunctionCall 25(PCF(u1;) 63(param)
+                                Store 61(@patchConstantResult) 65
+              69:     68(ptr)   AccessChain 61(@patchConstantResult) 30 30
+              70:    6(float)   Load 69
+              72:     71(ptr)   AccessChain 67(@patchConstantOutput_edges) 30
+                                Store 72 70
+              74:     68(ptr)   AccessChain 61(@patchConstantResult) 30 73
+              75:    6(float)   Load 74
+              76:     71(ptr)   AccessChain 67(@patchConstantOutput_edges) 73
+                                Store 76 75
+                                Branch 59
+              59:             Label
+                              Return
+                              FunctionEnd
+18(@main(struct-VS_OUT-vf31[4];u1;):  14(HS_OUT) Function None 15
+          16(ip):     12(ptr) FunctionParameter
+      17(m_cpid):     13(ptr) FunctionParameter
+              19:             Label
+      28(output):     27(ptr) Variable Function
+              32:     31(ptr) AccessChain 16(ip) 30 30
+              33:    7(fvec3) Load 32
+              34:     31(ptr) AccessChain 28(output) 30
+                              Store 34 33
+              35:  14(HS_OUT) Load 28(output)
+                              ReturnValue 35
+                              FunctionEnd
+     25(PCF(u1;):22(HS_CONSTANT_OUT) Function None 23
+         24(pid):     13(ptr) FunctionParameter
+              26:             Label
+      77(output):     60(ptr) Variable Function
+              79:     68(ptr) AccessChain 77(output) 30 30
+                              Store 79 78
+              81:     68(ptr) AccessChain 77(output) 30 73
+                              Store 81 80
+              82:22(HS_CONSTANT_OUT) Load 77(output)
+                              ReturnValue 82
+                              FunctionEnd

+ 357 - 0
3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out

@@ -0,0 +1,357 @@
+hlsl.hull.2.tesc
+Shader version: 450
+vertices = 4
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[4]; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[4]; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'InvocationId' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child (temp structure{temp 2-element array of float edges})
+0:?             '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?             Function Call: PCF(u1;vf4; (temp structure{temp 2-element array of float edges})
+0:?               'pid' (in uint PrimitiveID)
+0:?               'pos' (in 4-component vector of float Position)
+0:?           Sequence
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:33  Function Definition: PCF(u1;vf4; (temp structure{temp 2-element array of float edges})
+0:33    Function Parameters: 
+0:33      'pid' (in uint)
+0:33      'pos' (in 4-component vector of float)
+0:?     Sequence
+0:36      move second child to first child (temp float)
+0:36        direct index (temp float)
+0:36          edges: direct index for structure (temp 2-element array of float)
+0:36            'output' (temp structure{temp 2-element array of float edges})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        Constant:
+0:36          2.000000
+0:37      move second child to first child (temp float)
+0:37        direct index (temp float)
+0:37          edges: direct index for structure (temp 2-element array of float)
+0:37            'output' (temp structure{temp 2-element array of float edges})
+0:37            Constant:
+0:37              0 (const int)
+0:37          Constant:
+0:37            1 (const int)
+0:37        Constant:
+0:37          8.000000
+0:38      Branch: Return with expression
+0:38        'output' (temp structure{temp 2-element array of float edges})
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     'pid' (in uint PrimitiveID)
+0:?     'pos' (in 4-component vector of float Position)
+0:?     'InvocationId' (in uint InvocationID)
+0:?     '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 450
+vertices = 4
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[4]; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 4-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[4]; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 4-element array of structure{temp 3-component vector of float cpoint})
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'InvocationId' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child (temp structure{temp 2-element array of float edges})
+0:?             '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?             Function Call: PCF(u1;vf4; (temp structure{temp 2-element array of float edges})
+0:?               'pid' (in uint PrimitiveID)
+0:?               'pos' (in 4-component vector of float Position)
+0:?           Sequence
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child (temp float)
+0:?               direct index (out float TessLevelOuter)
+0:?                 '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index (temp float)
+0:?                 edges: direct index for structure (temp 2-element array of float)
+0:?                   '@patchConstantResult' (temp structure{temp 2-element array of float edges})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:33  Function Definition: PCF(u1;vf4; (temp structure{temp 2-element array of float edges})
+0:33    Function Parameters: 
+0:33      'pid' (in uint)
+0:33      'pos' (in 4-component vector of float)
+0:?     Sequence
+0:36      move second child to first child (temp float)
+0:36        direct index (temp float)
+0:36          edges: direct index for structure (temp 2-element array of float)
+0:36            'output' (temp structure{temp 2-element array of float edges})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        Constant:
+0:36          2.000000
+0:37      move second child to first child (temp float)
+0:37        direct index (temp float)
+0:37          edges: direct index for structure (temp 2-element array of float)
+0:37            'output' (temp structure{temp 2-element array of float edges})
+0:37            Constant:
+0:37              0 (const int)
+0:37          Constant:
+0:37            1 (const int)
+0:37        Constant:
+0:37          8.000000
+0:38      Branch: Return with expression
+0:38        'output' (temp structure{temp 2-element array of float edges})
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 4-element array of structure{temp 3-component vector of float cpoint})
+0:?     'pid' (in uint PrimitiveID)
+0:?     'pos' (in 4-component vector of float Position)
+0:?     'InvocationId' (in uint InvocationID)
+0:?     '@patchConstantOutput_edges' (out 2-element array of float TessLevelOuter)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 87
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 42 45 52 60 62 69
+                              ExecutionMode 4 OutputVertices 4
+                              Name 4  "main"
+                              Name 8  "VS_OUT"
+                              MemberName 8(VS_OUT) 0  "cpoint"
+                              Name 13  "HS_OUT"
+                              MemberName 13(HS_OUT) 0  "cpoint"
+                              Name 16  "@main(struct-VS_OUT-vf31[4];"
+                              Name 15  "ip"
+                              Name 23  "HS_CONSTANT_OUT"
+                              MemberName 23(HS_CONSTANT_OUT) 0  "edges"
+                              Name 27  "PCF(u1;vf4;"
+                              Name 25  "pid"
+                              Name 26  "pos"
+                              Name 30  "output"
+                              Name 40  "ip"
+                              Name 42  "ip"
+                              Name 45  "@entryPointOutput"
+                              Name 46  "param"
+                              Name 52  "InvocationId"
+                              Name 59  "@patchConstantResult"
+                              Name 60  "pid"
+                              Name 62  "pos"
+                              Name 63  "param"
+                              Name 65  "param"
+                              Name 69  "@patchConstantOutput_edges"
+                              Name 79  "output"
+                              Decorate 42(ip) Location 0
+                              Decorate 45(@entryPointOutput) Location 0
+                              Decorate 52(InvocationId) BuiltIn InvocationId
+                              Decorate 60(pid) BuiltIn PrimitiveId
+                              Decorate 62(pos) BuiltIn Position
+                              Decorate 69(@patchConstantOutput_edges) BuiltIn TessLevelOuter
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+       8(VS_OUT):             TypeStruct 7(fvec3)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 4
+              11:             TypeArray 8(VS_OUT) 10
+              12:             TypePointer Function 11
+      13(HS_OUT):             TypeStruct 7(fvec3)
+              14:             TypeFunction 13(HS_OUT) 12(ptr)
+              18:             TypePointer Function 9(int)
+              19:             TypeVector 6(float) 4
+              20:             TypePointer Function 19(fvec4)
+              21:      9(int) Constant 2
+              22:             TypeArray 6(float) 21
+23(HS_CONSTANT_OUT):             TypeStruct 22
+              24:             TypeFunction 23(HS_CONSTANT_OUT) 18(ptr) 20(ptr)
+              29:             TypePointer Function 13(HS_OUT)
+              31:             TypeInt 32 1
+              32:     31(int) Constant 0
+              33:             TypePointer Function 7(fvec3)
+              41:             TypePointer Input 11
+          42(ip):     41(ptr) Variable Input
+              44:             TypePointer Output 13(HS_OUT)
+45(@entryPointOutput):     44(ptr) Variable Output
+              49:      9(int) Constant 1
+              50:      9(int) Constant 0
+              51:             TypePointer Input 9(int)
+52(InvocationId):     51(ptr) Variable Input
+              54:             TypeBool
+              58:             TypePointer Function 23(HS_CONSTANT_OUT)
+         60(pid):     51(ptr) Variable Input
+              61:             TypePointer Input 19(fvec4)
+         62(pos):     61(ptr) Variable Input
+              68:             TypePointer Output 22
+69(@patchConstantOutput_edges):     68(ptr) Variable Output
+              70:             TypePointer Function 6(float)
+              73:             TypePointer Output 6(float)
+              75:     31(int) Constant 1
+              80:    6(float) Constant 1073741824
+              82:    6(float) Constant 1090519040
+         4(main):           2 Function None 3
+               5:             Label
+          40(ip):     12(ptr) Variable Function
+       46(param):     12(ptr) Variable Function
+59(@patchConstantResult):     58(ptr) Variable Function
+       63(param):     18(ptr) Variable Function
+       65(param):     20(ptr) Variable Function
+              43:          11 Load 42(ip)
+                              Store 40(ip) 43
+              47:          11 Load 40(ip)
+                              Store 46(param) 47
+              48:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 46(param)
+                              Store 45(@entryPointOutput) 48
+                              ControlBarrier 21 49 50
+              53:      9(int) Load 52(InvocationId)
+              55:    54(bool) IEqual 53 32
+                              SelectionMerge 57 None
+                              BranchConditional 55 56 57
+              56:               Label
+              64:      9(int)   Load 60(pid)
+                                Store 63(param) 64
+              66:   19(fvec4)   Load 62(pos)
+                                Store 65(param) 66
+              67:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 63(param) 65(param)
+                                Store 59(@patchConstantResult) 67
+              71:     70(ptr)   AccessChain 59(@patchConstantResult) 32 32
+              72:    6(float)   Load 71
+              74:     73(ptr)   AccessChain 69(@patchConstantOutput_edges) 32
+                                Store 74 72
+              76:     70(ptr)   AccessChain 59(@patchConstantResult) 32 75
+              77:    6(float)   Load 76
+              78:     73(ptr)   AccessChain 69(@patchConstantOutput_edges) 75
+                                Store 78 77
+                                Branch 57
+              57:             Label
+                              Return
+                              FunctionEnd
+16(@main(struct-VS_OUT-vf31[4];):  13(HS_OUT) Function None 14
+          15(ip):     12(ptr) FunctionParameter
+              17:             Label
+      30(output):     29(ptr) Variable Function
+              34:     33(ptr) AccessChain 15(ip) 32 32
+              35:    7(fvec3) Load 34
+              36:     33(ptr) AccessChain 30(output) 32
+                              Store 36 35
+              37:  13(HS_OUT) Load 30(output)
+                              ReturnValue 37
+                              FunctionEnd
+ 27(PCF(u1;vf4;):23(HS_CONSTANT_OUT) Function None 24
+         25(pid):     18(ptr) FunctionParameter
+         26(pos):     20(ptr) FunctionParameter
+              28:             Label
+      79(output):     58(ptr) Variable Function
+              81:     70(ptr) AccessChain 79(output) 32 32
+                              Store 81 80
+              83:     70(ptr) AccessChain 79(output) 32 75
+                              Store 83 82
+              84:23(HS_CONSTANT_OUT) Load 79(output)
+                              ReturnValue 84
+                              FunctionEnd

+ 186 - 0
3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out

@@ -0,0 +1,186 @@
+hlsl.hull.void.tesc
+Shader version: 450
+vertices = 3
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[3]; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 3-element array of structure{temp 3-component vector of float cpoint})
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 3-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 3-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[3]; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'InvocationId' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Function Call: PCF( (temp void)
+0:33  Function Definition: PCF( (temp void)
+0:33    Function Parameters: 
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 3-element array of structure{temp 3-component vector of float cpoint})
+0:?     'InvocationId' (in uint InvocationID)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 450
+vertices = 3
+0:? Sequence
+0:26  Function Definition: @main(struct-VS_OUT-vf31[3]; (temp structure{temp 3-component vector of float cpoint})
+0:26    Function Parameters: 
+0:26      'ip' (in 3-element array of structure{temp 3-component vector of float cpoint})
+0:?     Sequence
+0:28      move second child to first child (temp 3-component vector of float)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          'output' (temp structure{temp 3-component vector of float cpoint})
+0:28          Constant:
+0:28            0 (const int)
+0:28        cpoint: direct index for structure (temp 3-component vector of float)
+0:28          direct index (temp structure{temp 3-component vector of float cpoint})
+0:28            'ip' (in 3-element array of structure{temp 3-component vector of float cpoint})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:29      Branch: Return with expression
+0:29        'output' (temp structure{temp 3-component vector of float cpoint})
+0:26  Function Definition: main( (temp void)
+0:26    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?         'ip' (layout(location=0 ) in 3-element array of structure{temp 3-component vector of float cpoint})
+0:26      move second child to first child (temp structure{temp 3-component vector of float cpoint})
+0:?         '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:26        Function Call: @main(struct-VS_OUT-vf31[3]; (temp structure{temp 3-component vector of float cpoint})
+0:?           'ip' (temp 3-element array of structure{temp 3-component vector of float cpoint})
+0:?       Barrier (temp void)
+0:?       Test condition and select (temp void)
+0:?         Condition
+0:?         Compare Equal (temp bool)
+0:?           'InvocationId' (in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Function Call: PCF( (temp void)
+0:33  Function Definition: PCF( (temp void)
+0:33    Function Parameters: 
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out structure{temp 3-component vector of float cpoint})
+0:?     'ip' (layout(location=0 ) in 3-element array of structure{temp 3-component vector of float cpoint})
+0:?     'InvocationId' (in uint InvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 51
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 33 36 44
+                              ExecutionMode 4 OutputVertices 3
+                              Name 4  "main"
+                              Name 8  "VS_OUT"
+                              MemberName 8(VS_OUT) 0  "cpoint"
+                              Name 13  "HS_OUT"
+                              MemberName 13(HS_OUT) 0  "cpoint"
+                              Name 16  "@main(struct-VS_OUT-vf31[3];"
+                              Name 15  "ip"
+                              Name 18  "PCF("
+                              Name 21  "output"
+                              Name 31  "ip"
+                              Name 33  "ip"
+                              Name 36  "@entryPointOutput"
+                              Name 37  "param"
+                              Name 44  "InvocationId"
+                              Decorate 33(ip) Location 0
+                              Decorate 36(@entryPointOutput) Location 0
+                              Decorate 44(InvocationId) BuiltIn InvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+       8(VS_OUT):             TypeStruct 7(fvec3)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 3
+              11:             TypeArray 8(VS_OUT) 10
+              12:             TypePointer Function 11
+      13(HS_OUT):             TypeStruct 7(fvec3)
+              14:             TypeFunction 13(HS_OUT) 12(ptr)
+              20:             TypePointer Function 13(HS_OUT)
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+              24:             TypePointer Function 7(fvec3)
+              32:             TypePointer Input 11
+          33(ip):     32(ptr) Variable Input
+              35:             TypePointer Output 13(HS_OUT)
+36(@entryPointOutput):     35(ptr) Variable Output
+              40:      9(int) Constant 2
+              41:      9(int) Constant 1
+              42:      9(int) Constant 0
+              43:             TypePointer Input 9(int)
+44(InvocationId):     43(ptr) Variable Input
+              46:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+          31(ip):     12(ptr) Variable Function
+       37(param):     12(ptr) Variable Function
+              34:          11 Load 33(ip)
+                              Store 31(ip) 34
+              38:          11 Load 31(ip)
+                              Store 37(param) 38
+              39:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[3];) 37(param)
+                              Store 36(@entryPointOutput) 39
+                              ControlBarrier 40 41 42
+              45:      9(int) Load 44(InvocationId)
+              47:    46(bool) IEqual 45 23
+                              SelectionMerge 49 None
+                              BranchConditional 47 48 49
+              48:               Label
+              50:           2   FunctionCall 18(PCF()
+                                Branch 49
+              49:             Label
+                              Return
+                              FunctionEnd
+16(@main(struct-VS_OUT-vf31[3];):  13(HS_OUT) Function None 14
+          15(ip):     12(ptr) FunctionParameter
+              17:             Label
+      21(output):     20(ptr) Variable Function
+              25:     24(ptr) AccessChain 15(ip) 23 23
+              26:    7(fvec3) Load 25
+              27:     24(ptr) AccessChain 21(output) 23
+                              Store 27 26
+              28:  13(HS_OUT) Load 21(output)
+                              ReturnValue 28
+                              FunctionEnd
+        18(PCF():           2 Function None 3
+              19:             Label
+                              Return
+                              FunctionEnd

+ 66 - 53
3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out

@@ -8,7 +8,7 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:9      Branch: Return with expression
 0:9        'x' (in int)
-0:12  Function Definition: main( (temp 4-component vector of float)
+0:12  Function Definition: @main( (temp 4-component vector of float)
 0:12    Function Parameters: 
 0:?     Sequence
 0:15      Sequence
@@ -19,21 +19,24 @@ gl_FragCoord origin is upper left
 0:?             4.000000
 0:?             5.000000
 0:?             6.000000
-0:17      Sequence
-0:17        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:17          vector swizzle (temp 4-component vector of float)
-0:17            'sample' (temp 4-component vector of float)
-0:17            Sequence
-0:17              Constant:
-0:17                0 (const int)
-0:17              Constant:
-0:17                1 (const int)
-0:17              Constant:
-0:17                2 (const int)
-0:17              Constant:
-0:17                3 (const int)
-0:17        Branch: Return
+0:17      Branch: Return with expression
+0:17        vector swizzle (temp 4-component vector of float)
+0:17          'sample' (temp 4-component vector of float)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17            Constant:
+0:17              3 (const int)
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:12        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
@@ -50,7 +53,7 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:9      Branch: Return with expression
 0:9        'x' (in int)
-0:12  Function Definition: main( (temp 4-component vector of float)
+0:12  Function Definition: @main( (temp 4-component vector of float)
 0:12    Function Parameters: 
 0:?     Sequence
 0:15      Sequence
@@ -61,65 +64,75 @@ gl_FragCoord origin is upper left
 0:?             4.000000
 0:?             5.000000
 0:?             6.000000
-0:17      Sequence
-0:17        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:17          vector swizzle (temp 4-component vector of float)
-0:17            'sample' (temp 4-component vector of float)
-0:17            Sequence
-0:17              Constant:
-0:17                0 (const int)
-0:17              Constant:
-0:17                1 (const int)
-0:17              Constant:
-0:17                2 (const int)
-0:17              Constant:
-0:17                3 (const int)
-0:17        Branch: Return
+0:17      Branch: Return with expression
+0:17        vector swizzle (temp 4-component vector of float)
+0:17          'sample' (temp 4-component vector of float)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17            Constant:
+0:17              3 (const int)
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:12        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 28
+// Id's are bound by 33
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 25
+                              EntryPoint Fragment 4  "main" 31
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 10  "sample(i1;"
                               Name 9  "x"
-                              Name 18  "sample"
-                              Name 25  "@entryPointOutput"
-                              Decorate 25(@entryPointOutput) Location 0
+                              Name 15  "@main("
+                              Name 21  "sample"
+                              Name 31  "@entryPointOutput"
+                              Decorate 31(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypePointer Function 6(int)
                8:             TypeFunction 6(int) 7(ptr)
-              15:             TypeFloat 32
-              16:             TypeVector 15(float) 4
-              17:             TypePointer Function 16(fvec4)
-              19:   15(float) Constant 1077936128
-              20:   15(float) Constant 1082130432
-              21:   15(float) Constant 1084227584
-              22:   15(float) Constant 1086324736
-              23:   16(fvec4) ConstantComposite 19 20 21 22
-              24:             TypePointer Output 16(fvec4)
-25(@entryPointOutput):     24(ptr) Variable Output
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 4
+              14:             TypeFunction 13(fvec4)
+              20:             TypePointer Function 13(fvec4)
+              22:   12(float) Constant 1077936128
+              23:   12(float) Constant 1082130432
+              24:   12(float) Constant 1084227584
+              25:   12(float) Constant 1086324736
+              26:   13(fvec4) ConstantComposite 22 23 24 25
+              30:             TypePointer Output 13(fvec4)
+31(@entryPointOutput):     30(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-      18(sample):     17(ptr) Variable Function
-                              Store 18(sample) 23
-              26:   16(fvec4) Load 18(sample)
-                              Store 25(@entryPointOutput) 26
+              32:   13(fvec4) FunctionCall 15(@main()
+                              Store 31(@entryPointOutput) 32
                               Return
                               FunctionEnd
   10(sample(i1;):      6(int) Function None 8
             9(x):      7(ptr) FunctionParameter
               11:             Label
-              12:      6(int) Load 9(x)
-                              ReturnValue 12
+              17:      6(int) Load 9(x)
+                              ReturnValue 17
+                              FunctionEnd
+      15(@main():   13(fvec4) Function None 14
+              16:             Label
+      21(sample):     20(ptr) Variable Function
+                              Store 21(sample) 26
+              27:   13(fvec4) Load 21(sample)
+                              ReturnValue 27
                               FunctionEnd

+ 186 - 189
3rdparty/glslang/Test/baseResults/hlsl.if.frag.out

@@ -2,95 +2,77 @@ hlsl.if.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
 0:3        all (temp bool)
 0:3          Equal (temp 4-component vector of bool)
-0:3            'input' (layout(location=0 ) in 4-component vector of float)
-0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (in 4-component vector of float)
+0:3            'input' (in 4-component vector of float)
 0:3        true case
-0:4        Sequence
-0:4          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:4            'input' (layout(location=0 ) in 4-component vector of float)
-0:4          Branch: Return
+0:4        Branch: Return with expression
+0:4          'input' (in 4-component vector of float)
 0:6      Test condition and select (temp void)
 0:6        Condition
 0:6        all (temp bool)
 0:6          Equal (temp 4-component vector of bool)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6            'input' (in 4-component vector of float)
+0:6            'input' (in 4-component vector of float)
 0:6        true case
-0:7        Sequence
-0:7          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
-0:7          Branch: Return
+0:7        Branch: Return with expression
+0:7          'input' (in 4-component vector of float)
 0:6        false case
-0:9        Sequence
-0:9          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:9            Negate value (temp 4-component vector of float)
-0:9              'input' (layout(location=0 ) in 4-component vector of float)
-0:9          Branch: Return
+0:9        Branch: Return with expression
+0:9          Negate value (temp 4-component vector of float)
+0:9            'input' (in 4-component vector of float)
 0:11      Test condition and select (temp void)
 0:11        Condition
 0:11        all (temp bool)
 0:11          Equal (temp 4-component vector of bool)
-0:11            'input' (layout(location=0 ) in 4-component vector of float)
-0:11            'input' (layout(location=0 ) in 4-component vector of float)
+0:11            'input' (in 4-component vector of float)
+0:11            'input' (in 4-component vector of float)
 0:11        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
 0:14        all (temp bool)
 0:14          Equal (temp 4-component vector of bool)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
 0:14        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        all (temp bool)
 0:19          Equal (temp 4-component vector of bool)
-0:19            'input' (layout(location=0 ) in 4-component vector of float)
-0:19            'input' (layout(location=0 ) in 4-component vector of float)
+0:19            'input' (in 4-component vector of float)
+0:19            'input' (in 4-component vector of float)
 0:19        true case
 0:?         Sequence
-0:20          Sequence
-0:20            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:20              'input' (layout(location=0 ) in 4-component vector of float)
-0:20            Branch: Return
+0:20          Branch: Return with expression
+0:20            'input' (in 4-component vector of float)
 0:23      Test condition and select (temp void)
 0:23        Condition
 0:23        all (temp bool)
 0:23          Equal (temp 4-component vector of bool)
-0:23            'input' (layout(location=0 ) in 4-component vector of float)
-0:23            'input' (layout(location=0 ) in 4-component vector of float)
+0:23            'input' (in 4-component vector of float)
+0:23            'input' (in 4-component vector of float)
 0:23        true case
 0:?         Sequence
-0:24          Sequence
-0:24            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:24              'input' (layout(location=0 ) in 4-component vector of float)
-0:24            Branch: Return
+0:24          Branch: Return with expression
+0:24            'input' (in 4-component vector of float)
 0:23        false case
 0:?         Sequence
-0:26          Sequence
-0:26            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:26              Negate value (temp 4-component vector of float)
-0:26                'input' (layout(location=0 ) in 4-component vector of float)
-0:26            Branch: Return
+0:26          Branch: Return with expression
+0:26            Negate value (temp 4-component vector of float)
+0:26              'input' (in 4-component vector of float)
 0:30      Test condition and select (temp void)
 0:30        Condition
 0:30        move second child to first child (temp float)
 0:30          'ii' (temp float)
 0:30          direct index (temp float)
-0:30            'input' (layout(location=0 ) in 4-component vector of float)
+0:30            'input' (in 4-component vector of float)
 0:30            Constant:
 0:30              2 (const int)
 0:30        true case
@@ -98,6 +80,16 @@ gl_FragCoord origin is upper left
 0:31          'ii' (temp float)
 0:32      Pre-Increment (temp int)
 0:32        'ii' (temp int)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -109,95 +101,77 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input' (layout(location=0 ) in 4-component vector of float)
+0:2      'input' (in 4-component vector of float)
 0:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
 0:3        all (temp bool)
 0:3          Equal (temp 4-component vector of bool)
-0:3            'input' (layout(location=0 ) in 4-component vector of float)
-0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (in 4-component vector of float)
+0:3            'input' (in 4-component vector of float)
 0:3        true case
-0:4        Sequence
-0:4          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:4            'input' (layout(location=0 ) in 4-component vector of float)
-0:4          Branch: Return
+0:4        Branch: Return with expression
+0:4          'input' (in 4-component vector of float)
 0:6      Test condition and select (temp void)
 0:6        Condition
 0:6        all (temp bool)
 0:6          Equal (temp 4-component vector of bool)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6            'input' (in 4-component vector of float)
+0:6            'input' (in 4-component vector of float)
 0:6        true case
-0:7        Sequence
-0:7          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
-0:7          Branch: Return
+0:7        Branch: Return with expression
+0:7          'input' (in 4-component vector of float)
 0:6        false case
-0:9        Sequence
-0:9          move second child to first child (temp 4-component vector of float)
-0:?             '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:9            Negate value (temp 4-component vector of float)
-0:9              'input' (layout(location=0 ) in 4-component vector of float)
-0:9          Branch: Return
+0:9        Branch: Return with expression
+0:9          Negate value (temp 4-component vector of float)
+0:9            'input' (in 4-component vector of float)
 0:11      Test condition and select (temp void)
 0:11        Condition
 0:11        all (temp bool)
 0:11          Equal (temp 4-component vector of bool)
-0:11            'input' (layout(location=0 ) in 4-component vector of float)
-0:11            'input' (layout(location=0 ) in 4-component vector of float)
+0:11            'input' (in 4-component vector of float)
+0:11            'input' (in 4-component vector of float)
 0:11        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
 0:14        all (temp bool)
 0:14          Equal (temp 4-component vector of bool)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
-0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
+0:14            'input' (in 4-component vector of float)
 0:14        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        all (temp bool)
 0:19          Equal (temp 4-component vector of bool)
-0:19            'input' (layout(location=0 ) in 4-component vector of float)
-0:19            'input' (layout(location=0 ) in 4-component vector of float)
+0:19            'input' (in 4-component vector of float)
+0:19            'input' (in 4-component vector of float)
 0:19        true case
 0:?         Sequence
-0:20          Sequence
-0:20            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:20              'input' (layout(location=0 ) in 4-component vector of float)
-0:20            Branch: Return
+0:20          Branch: Return with expression
+0:20            'input' (in 4-component vector of float)
 0:23      Test condition and select (temp void)
 0:23        Condition
 0:23        all (temp bool)
 0:23          Equal (temp 4-component vector of bool)
-0:23            'input' (layout(location=0 ) in 4-component vector of float)
-0:23            'input' (layout(location=0 ) in 4-component vector of float)
+0:23            'input' (in 4-component vector of float)
+0:23            'input' (in 4-component vector of float)
 0:23        true case
 0:?         Sequence
-0:24          Sequence
-0:24            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:24              'input' (layout(location=0 ) in 4-component vector of float)
-0:24            Branch: Return
+0:24          Branch: Return with expression
+0:24            'input' (in 4-component vector of float)
 0:23        false case
 0:?         Sequence
-0:26          Sequence
-0:26            move second child to first child (temp 4-component vector of float)
-0:?               '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:26              Negate value (temp 4-component vector of float)
-0:26                'input' (layout(location=0 ) in 4-component vector of float)
-0:26            Branch: Return
+0:26          Branch: Return with expression
+0:26            Negate value (temp 4-component vector of float)
+0:26              'input' (in 4-component vector of float)
 0:30      Test condition and select (temp void)
 0:30        Condition
 0:30        move second child to first child (temp float)
 0:30          'ii' (temp float)
 0:30          direct index (temp float)
-0:30            'input' (layout(location=0 ) in 4-component vector of float)
+0:30            'input' (in 4-component vector of float)
 0:30            Constant:
 0:30              2 (const int)
 0:30        true case
@@ -205,133 +179,156 @@ gl_FragCoord origin is upper left
 0:31          'ii' (temp float)
 0:32      Pre-Increment (temp int)
 0:32        'ii' (temp int)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 84
+// Id's are bound by 94
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 19
+                              EntryPoint Fragment 4  "PixelShaderFunction" 87 90
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "input"
-                              Name 19  "@entryPointOutput"
-                              Name 67  "ii"
+                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 68  "ii"
                               Name 80  "ii"
-                              Decorate 9(input) Location 0
-                              Decorate 19(@entryPointOutput) Location 0
+                              Name 85  "input"
+                              Name 87  "input"
+                              Name 90  "@entryPointOutput"
+                              Name 91  "param"
+                              Decorate 87(input) Location 0
+                              Decorate 90(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Input 7(fvec4)
-        9(input):      8(ptr) Variable Input
-              12:             TypeBool
-              13:             TypeVector 12(bool) 4
-              18:             TypePointer Output 7(fvec4)
-19(@entryPointOutput):     18(ptr) Variable Output
-              66:             TypePointer Function 6(float)
-              68:             TypeInt 32 0
-              69:     68(int) Constant 2
-              70:             TypePointer Input 6(float)
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              15:             TypeBool
+              16:             TypeVector 15(bool) 4
+              67:             TypePointer Function 6(float)
+              69:             TypeInt 32 0
+              70:     69(int) Constant 2
               76:    6(float) Constant 1065353216
               78:             TypeInt 32 1
               79:             TypePointer Function 78(int)
               82:     78(int) Constant 1
+              86:             TypePointer Input 7(fvec4)
+       87(input):     86(ptr) Variable Input
+              89:             TypePointer Output 7(fvec4)
+90(@entryPointOutput):     89(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          67(ii):     66(ptr) Variable Function
+       85(input):      8(ptr) Variable Function
+       91(param):      8(ptr) Variable Function
+              88:    7(fvec4) Load 87(input)
+                              Store 85(input) 88
+              92:    7(fvec4) Load 85(input)
+                              Store 91(param) 92
+              93:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 91(param)
+                              Store 90(@entryPointOutput) 93
+                              Return
+                              FunctionEnd
+11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+          68(ii):     67(ptr) Variable Function
           80(ii):     79(ptr) Variable Function
-              10:    7(fvec4) Load 9(input)
-              11:    7(fvec4) Load 9(input)
-              14:   13(bvec4) FOrdEqual 10 11
-              15:    12(bool) All 14
-                              SelectionMerge 17 None
-                              BranchConditional 15 16 17
-              16:               Label
-              20:    7(fvec4)   Load 9(input)
-                                Store 19(@entryPointOutput) 20
-                                Return
-              17:             Label
-              22:    7(fvec4) Load 9(input)
-              23:    7(fvec4) Load 9(input)
-              24:   13(bvec4) FOrdEqual 22 23
-              25:    12(bool) All 24
-                              SelectionMerge 27 None
-                              BranchConditional 25 26 30
-              26:               Label
-              28:    7(fvec4)   Load 9(input)
-                                Store 19(@entryPointOutput) 28
-                                Return
-              30:               Label
-              31:    7(fvec4)   Load 9(input)
-              32:    7(fvec4)   FNegate 31
-                                Store 19(@entryPointOutput) 32
-                                Return
-              27:             Label
-              34:    7(fvec4) Load 9(input)
-              35:    7(fvec4) Load 9(input)
-              36:   13(bvec4) FOrdEqual 34 35
-              37:    12(bool) All 36
-                              SelectionMerge 39 None
-                              BranchConditional 37 38 39
-              38:               Label
-                                Branch 39
-              39:             Label
-              40:    7(fvec4) Load 9(input)
-              41:    7(fvec4) Load 9(input)
-              42:   13(bvec4) FOrdEqual 40 41
-              43:    12(bool) All 42
-                              SelectionMerge 45 None
-                              BranchConditional 43 44 45
-              44:               Label
-                                Branch 45
-              45:             Label
-              46:    7(fvec4) Load 9(input)
-              47:    7(fvec4) Load 9(input)
-              48:   13(bvec4) FOrdEqual 46 47
-              49:    12(bool) All 48
-                              SelectionMerge 51 None
-                              BranchConditional 49 50 51
-              50:               Label
-              52:    7(fvec4)   Load 9(input)
-                                Store 19(@entryPointOutput) 52
-                                Return
-              51:             Label
-              54:    7(fvec4) Load 9(input)
-              55:    7(fvec4) Load 9(input)
-              56:   13(bvec4) FOrdEqual 54 55
-              57:    12(bool) All 56
-                              SelectionMerge 59 None
-                              BranchConditional 57 58 62
-              58:               Label
-              60:    7(fvec4)   Load 9(input)
-                                Store 19(@entryPointOutput) 60
-                                Return
-              62:               Label
-              63:    7(fvec4)   Load 9(input)
-              64:    7(fvec4)   FNegate 63
-                                Store 19(@entryPointOutput) 64
-                                Return
-              59:             Label
-              71:     70(ptr) AccessChain 9(input) 69
+              13:    7(fvec4) Load 10(input)
+              14:    7(fvec4) Load 10(input)
+              17:   16(bvec4) FOrdEqual 13 14
+              18:    15(bool) All 17
+                              SelectionMerge 20 None
+                              BranchConditional 18 19 20
+              19:               Label
+              21:    7(fvec4)   Load 10(input)
+                                ReturnValue 21
+              20:             Label
+              23:    7(fvec4) Load 10(input)
+              24:    7(fvec4) Load 10(input)
+              25:   16(bvec4) FOrdEqual 23 24
+              26:    15(bool) All 25
+                              SelectionMerge 28 None
+                              BranchConditional 26 27 31
+              27:               Label
+              29:    7(fvec4)   Load 10(input)
+                                ReturnValue 29
+              31:               Label
+              32:    7(fvec4)   Load 10(input)
+              33:    7(fvec4)   FNegate 32
+                                ReturnValue 33
+              28:             Label
+              35:    7(fvec4) Load 10(input)
+              36:    7(fvec4) Load 10(input)
+              37:   16(bvec4) FOrdEqual 35 36
+              38:    15(bool) All 37
+                              SelectionMerge 40 None
+                              BranchConditional 38 39 40
+              39:               Label
+                                Branch 40
+              40:             Label
+              41:    7(fvec4) Load 10(input)
+              42:    7(fvec4) Load 10(input)
+              43:   16(bvec4) FOrdEqual 41 42
+              44:    15(bool) All 43
+                              SelectionMerge 46 None
+                              BranchConditional 44 45 46
+              45:               Label
+                                Branch 46
+              46:             Label
+              47:    7(fvec4) Load 10(input)
+              48:    7(fvec4) Load 10(input)
+              49:   16(bvec4) FOrdEqual 47 48
+              50:    15(bool) All 49
+                              SelectionMerge 52 None
+                              BranchConditional 50 51 52
+              51:               Label
+              53:    7(fvec4)   Load 10(input)
+                                ReturnValue 53
+              52:             Label
+              55:    7(fvec4) Load 10(input)
+              56:    7(fvec4) Load 10(input)
+              57:   16(bvec4) FOrdEqual 55 56
+              58:    15(bool) All 57
+                              SelectionMerge 60 None
+                              BranchConditional 58 59 63
+              59:               Label
+              61:    7(fvec4)   Load 10(input)
+                                ReturnValue 61
+              63:               Label
+              64:    7(fvec4)   Load 10(input)
+              65:    7(fvec4)   FNegate 64
+                                ReturnValue 65
+              60:             Label
+              71:     67(ptr) AccessChain 10(input) 70
               72:    6(float) Load 71
-                              Store 67(ii) 72
+                              Store 68(ii) 72
                               SelectionMerge 74 None
                               BranchConditional 72 73 74
               73:               Label
-              75:    6(float)   Load 67(ii)
+              75:    6(float)   Load 68(ii)
               77:    6(float)   FAdd 75 76
-                                Store 67(ii) 77
+                                Store 68(ii) 77
                                 Branch 74
               74:             Label
               81:     78(int) Load 80(ii)
               83:     78(int) IAdd 81 82
                               Store 80(ii) 83
-                              Return
+              84:    7(fvec4) Undef
+                              ReturnValue 84
                               FunctionEnd

+ 217 - 186
3rdparty/glslang/Test/baseResults/hlsl.init.frag.out

@@ -81,9 +81,9 @@ gl_FragCoord origin is upper left
 0:18      Constant:
 0:18        4 (const uint)
 0:18        5 (const uint)
-0:21  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:21  Function Definition: @ShaderFunction(vf4; (temp 4-component vector of float)
 0:21    Function Parameters: 
-0:21      'input' (layout(location=0 ) in 4-component vector of float)
+0:21      'input' (in 4-component vector of float)
 0:?     Sequence
 0:22      Sequence
 0:22        move second child to first child (temp 4-component vector of float)
@@ -127,16 +127,21 @@ gl_FragCoord origin is upper left
 0:33        move second child to first child (temp float)
 0:33          'a9' (temp float)
 0:33          'a5' (global float)
-0:35      Sequence
-0:35        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:35          component-wise multiply (temp 4-component vector of float)
-0:35            'input' (layout(location=0 ) in 4-component vector of float)
-0:35            'a1' (global 4-component vector of float)
-0:35        Branch: Return
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
+0:21  Function Definition: ShaderFunction( (temp void)
+0:21    Function Parameters: 
+0:?     Sequence
+0:21      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:21      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:21        Function Call: @ShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
 0:?     'a1i' (global 4-component vector of float)
@@ -155,6 +160,8 @@ gl_FragCoord origin is upper left
 0:?     'single2' (global structure{temp 2-component vector of uint v})
 0:?     'single3' (global structure{temp structure{temp int f} s1})
 0:?     'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform float a, layout(row_major std140 ) uniform float b, layout(row_major std140 ) uniform float c})
 
 
@@ -240,9 +247,9 @@ gl_FragCoord origin is upper left
 0:18      Constant:
 0:18        4 (const uint)
 0:18        5 (const uint)
-0:21  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:21  Function Definition: @ShaderFunction(vf4; (temp 4-component vector of float)
 0:21    Function Parameters: 
-0:21      'input' (layout(location=0 ) in 4-component vector of float)
+0:21      'input' (in 4-component vector of float)
 0:?     Sequence
 0:22      Sequence
 0:22        move second child to first child (temp 4-component vector of float)
@@ -286,16 +293,21 @@ gl_FragCoord origin is upper left
 0:33        move second child to first child (temp float)
 0:33          'a9' (temp float)
 0:33          'a5' (global float)
-0:35      Sequence
-0:35        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:35          component-wise multiply (temp 4-component vector of float)
-0:35            'input' (layout(location=0 ) in 4-component vector of float)
-0:35            'a1' (global 4-component vector of float)
-0:35        Branch: Return
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
+0:21  Function Definition: ShaderFunction( (temp void)
+0:21    Function Parameters: 
+0:?     Sequence
+0:21      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:21      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:21        Function Call: @ShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
 0:?     'a1i' (global 4-component vector of float)
@@ -314,185 +326,204 @@ gl_FragCoord origin is upper left
 0:?     'single2' (global structure{temp 2-component vector of uint v})
 0:?     'single3' (global structure{temp structure{temp int f} s1})
 0:?     'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform float a, layout(row_major std140 ) uniform float b, layout(row_major std140 ) uniform float c})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 100
+// Id's are bound by 110
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "ShaderFunction" 88 90
+                              EntryPoint Fragment 4  "ShaderFunction" 98 101
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "ShaderFunction"
-                              Name 9  "a1"
-                              Name 14  "b1"
-                              Name 20  "a1i"
-                              Name 21  "b1i"
-                              Name 23  "a2"
-                              Name 25  "b3"
-                              Name 27  "b4"
-                              Name 29  "a5"
-                              Name 30  "c5"
-                              Name 33  "Single1"
-                              MemberName 33(Single1) 0  "f"
-                              Name 35  "single1"
-                              Name 40  "Single2"
-                              MemberName 40(Single2) 0  "v"
-                              Name 42  "single2"
-                              Name 47  "Single3"
-                              MemberName 47(Single3) 0  "s1"
-                              Name 49  "single3"
-                              Name 53  "Single4"
-                              MemberName 53(Single4) 0  "s1"
-                              Name 55  "single4"
-                              Name 62  "a2"
-                              Name 64  "S1"
-                              MemberName 64(S1) 0  "f"
-                              MemberName 64(S1) 1  "i"
-                              Name 65  "S2"
-                              MemberName 65(S2) 0  "j"
-                              MemberName 65(S2) 1  "g"
-                              MemberName 65(S2) 2  "s1"
-                              Name 67  "s2i"
-                              Name 70  "a3"
-                              Name 71  "a4"
-                              Name 76  "s2"
-                              Name 82  "a8"
-                              Name 83  "b2"
-                              Name 85  "a9"
-                              Name 88  "@entryPointOutput"
-                              Name 90  "input"
-                              Name 95  "c4"
-                              Name 96  "b5"
-                              Name 97  "Constants"
-                              MemberName 97(Constants) 0  "a"
-                              MemberName 97(Constants) 1  "b"
-                              MemberName 97(Constants) 2  "c"
-                              Name 99  ""
-                              Decorate 88(@entryPointOutput) Location 0
-                              Decorate 90(input) Location 0
-                              MemberDecorate 97(Constants) 0 Offset 0
-                              MemberDecorate 97(Constants) 1 Offset 4
-                              MemberDecorate 97(Constants) 2 Offset 8
-                              Decorate 97(Constants) Block
-                              Decorate 99 DescriptorSet 0
+                              Name 11  "@ShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 14  "a1"
+                              Name 19  "b1"
+                              Name 25  "a1i"
+                              Name 26  "b1i"
+                              Name 28  "a2"
+                              Name 30  "b3"
+                              Name 32  "b4"
+                              Name 34  "a5"
+                              Name 35  "c5"
+                              Name 38  "Single1"
+                              MemberName 38(Single1) 0  "f"
+                              Name 40  "single1"
+                              Name 45  "Single2"
+                              MemberName 45(Single2) 0  "v"
+                              Name 47  "single2"
+                              Name 52  "Single3"
+                              MemberName 52(Single3) 0  "s1"
+                              Name 54  "single3"
+                              Name 58  "Single4"
+                              MemberName 58(Single4) 0  "s1"
+                              Name 60  "single4"
+                              Name 66  "a2"
+                              Name 68  "S1"
+                              MemberName 68(S1) 0  "f"
+                              MemberName 68(S1) 1  "i"
+                              Name 69  "S2"
+                              MemberName 69(S2) 0  "j"
+                              MemberName 69(S2) 1  "g"
+                              MemberName 69(S2) 2  "s1"
+                              Name 71  "s2i"
+                              Name 74  "a3"
+                              Name 75  "a4"
+                              Name 80  "s2"
+                              Name 86  "a8"
+                              Name 87  "b2"
+                              Name 89  "a9"
+                              Name 96  "input"
+                              Name 98  "input"
+                              Name 101  "@entryPointOutput"
+                              Name 102  "param"
+                              Name 105  "c4"
+                              Name 106  "b5"
+                              Name 107  "Constants"
+                              MemberName 107(Constants) 0  "a"
+                              MemberName 107(Constants) 1  "b"
+                              MemberName 107(Constants) 2  "c"
+                              Name 109  ""
+                              Decorate 98(input) Location 0
+                              Decorate 101(@entryPointOutput) Location 0
+                              MemberDecorate 107(Constants) 0 Offset 0
+                              MemberDecorate 107(Constants) 1 Offset 4
+                              MemberDecorate 107(Constants) 2 Offset 8
+                              Decorate 107(Constants) Block
+                              Decorate 109 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Private 7(fvec4)
-           9(a1):      8(ptr) Variable Private
-              10:    6(float) Constant 1065353216
-              11:    6(float) Constant 1056964608
-              12:    6(float) Constant 0
-              13:    7(fvec4) ConstantComposite 10 11 12 10
-          14(b1):      8(ptr) Variable Private
-              15:    6(float) Constant 1073741824
-              16:    6(float) Constant 1075838976
-              17:    6(float) Constant 1074161254
-              18:    6(float) Constant 1074580685
-              19:    7(fvec4) ConstantComposite 15 16 17 18
-         20(a1i):      8(ptr) Variable Private
-         21(b1i):      8(ptr) Variable Private
-              22:             TypePointer Private 6(float)
-          23(a2):     22(ptr) Variable Private
-              24:    6(float) Constant 1045220557
-          25(b3):     22(ptr) Variable Private
-              26:    6(float) Constant 1050253722
-          27(b4):     22(ptr) Variable Private
-              28:    6(float) Constant 1053609165
-          29(a5):     22(ptr) Variable Private
-          30(c5):     22(ptr) Variable Private
-              31:    6(float) Constant 1069547520
-              32:             TypeInt 32 1
-     33(Single1):             TypeStruct 32(int)
-              34:             TypePointer Private 33(Single1)
-     35(single1):     34(ptr) Variable Private
-              36:     32(int) Constant 10
-              37: 33(Single1) ConstantComposite 36
-              38:             TypeInt 32 0
-              39:             TypeVector 38(int) 2
-     40(Single2):             TypeStruct 39(ivec2)
-              41:             TypePointer Private 40(Single2)
-     42(single2):     41(ptr) Variable Private
-              43:     38(int) Constant 1
-              44:     38(int) Constant 2
-              45:   39(ivec2) ConstantComposite 43 44
-              46: 40(Single2) ConstantComposite 45
-     47(Single3):             TypeStruct 33(Single1)
-              48:             TypePointer Private 47(Single3)
-     49(single3):     48(ptr) Variable Private
-              50:     32(int) Constant 3
-              51: 33(Single1) ConstantComposite 50
-              52: 47(Single3) ConstantComposite 51
-     53(Single4):             TypeStruct 40(Single2)
-              54:             TypePointer Private 53(Single4)
-     55(single4):     54(ptr) Variable Private
-              56:     38(int) Constant 4
-              57:     38(int) Constant 5
-              58:   39(ivec2) ConstantComposite 56 57
-              59: 40(Single2) ConstantComposite 58
-              60: 53(Single4) ConstantComposite 59
-              61:             TypePointer Function 7(fvec4)
-              63:    7(fvec4) ConstantComposite 24 26 28 11
-          64(S1):             TypeStruct 6(float) 32(int)
-          65(S2):             TypeStruct 32(int) 6(float) 64(S1)
-              66:             TypePointer Function 65(S2)
-              68:     32(int) Constant 9
-          70(a3):     22(ptr) Variable Private
-          71(a4):     22(ptr) Variable Private
-              73:     32(int) Constant 12
-              81:             TypePointer Function 6(float)
-          83(b2):     22(ptr) Variable Private
-              87:             TypePointer Output 7(fvec4)
-88(@entryPointOutput):     87(ptr) Variable Output
-              89:             TypePointer Input 7(fvec4)
-       90(input):     89(ptr) Variable Input
-          95(c4):     22(ptr) Variable Private
-          96(b5):     22(ptr) Variable Private
-   97(Constants):             TypeStruct 6(float) 6(float) 6(float)
-              98:             TypePointer Uniform 97(Constants)
-              99:     98(ptr) Variable Uniform
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypePointer Private 7(fvec4)
+          14(a1):     13(ptr) Variable Private
+              15:    6(float) Constant 1065353216
+              16:    6(float) Constant 1056964608
+              17:    6(float) Constant 0
+              18:    7(fvec4) ConstantComposite 15 16 17 15
+          19(b1):     13(ptr) Variable Private
+              20:    6(float) Constant 1073741824
+              21:    6(float) Constant 1075838976
+              22:    6(float) Constant 1074161254
+              23:    6(float) Constant 1074580685
+              24:    7(fvec4) ConstantComposite 20 21 22 23
+         25(a1i):     13(ptr) Variable Private
+         26(b1i):     13(ptr) Variable Private
+              27:             TypePointer Private 6(float)
+          28(a2):     27(ptr) Variable Private
+              29:    6(float) Constant 1045220557
+          30(b3):     27(ptr) Variable Private
+              31:    6(float) Constant 1050253722
+          32(b4):     27(ptr) Variable Private
+              33:    6(float) Constant 1053609165
+          34(a5):     27(ptr) Variable Private
+          35(c5):     27(ptr) Variable Private
+              36:    6(float) Constant 1069547520
+              37:             TypeInt 32 1
+     38(Single1):             TypeStruct 37(int)
+              39:             TypePointer Private 38(Single1)
+     40(single1):     39(ptr) Variable Private
+              41:     37(int) Constant 10
+              42: 38(Single1) ConstantComposite 41
+              43:             TypeInt 32 0
+              44:             TypeVector 43(int) 2
+     45(Single2):             TypeStruct 44(ivec2)
+              46:             TypePointer Private 45(Single2)
+     47(single2):     46(ptr) Variable Private
+              48:     43(int) Constant 1
+              49:     43(int) Constant 2
+              50:   44(ivec2) ConstantComposite 48 49
+              51: 45(Single2) ConstantComposite 50
+     52(Single3):             TypeStruct 38(Single1)
+              53:             TypePointer Private 52(Single3)
+     54(single3):     53(ptr) Variable Private
+              55:     37(int) Constant 3
+              56: 38(Single1) ConstantComposite 55
+              57: 52(Single3) ConstantComposite 56
+     58(Single4):             TypeStruct 45(Single2)
+              59:             TypePointer Private 58(Single4)
+     60(single4):     59(ptr) Variable Private
+              61:     43(int) Constant 4
+              62:     43(int) Constant 5
+              63:   44(ivec2) ConstantComposite 61 62
+              64: 45(Single2) ConstantComposite 63
+              65: 58(Single4) ConstantComposite 64
+              67:    7(fvec4) ConstantComposite 29 31 33 16
+          68(S1):             TypeStruct 6(float) 37(int)
+          69(S2):             TypeStruct 37(int) 6(float) 68(S1)
+              70:             TypePointer Function 69(S2)
+              72:     37(int) Constant 9
+          74(a3):     27(ptr) Variable Private
+          75(a4):     27(ptr) Variable Private
+              77:     37(int) Constant 12
+              85:             TypePointer Function 6(float)
+          87(b2):     27(ptr) Variable Private
+              97:             TypePointer Input 7(fvec4)
+       98(input):     97(ptr) Variable Input
+             100:             TypePointer Output 7(fvec4)
+101(@entryPointOutput):    100(ptr) Variable Output
+         105(c4):     27(ptr) Variable Private
+         106(b5):     27(ptr) Variable Private
+  107(Constants):             TypeStruct 6(float) 6(float) 6(float)
+             108:             TypePointer Uniform 107(Constants)
+             109:    108(ptr) Variable Uniform
 4(ShaderFunction):           2 Function None 3
                5:             Label
-          62(a2):     61(ptr) Variable Function
-         67(s2i):     66(ptr) Variable Function
-          76(s2):     66(ptr) Variable Function
-          82(a8):     81(ptr) Variable Function
-          85(a9):     81(ptr) Variable Function
-                              Store 9(a1) 13
-                              Store 14(b1) 19
-                              Store 20(a1i) 13
-                              Store 21(b1i) 19
-                              Store 23(a2) 24
-                              Store 25(b3) 26
-                              Store 27(b4) 28
-                              Store 29(a5) 11
-                              Store 30(c5) 31
-                              Store 35(single1) 37
-                              Store 42(single2) 46
-                              Store 49(single3) 52
-                              Store 55(single4) 60
-                              Store 62(a2) 63
-              69:    6(float) Load 29(a5)
-              72:    6(float) Load 71(a4)
-              74:      64(S1) CompositeConstruct 72 73
-              75:      65(S2) CompositeConstruct 68 69 74
-                              Store 67(s2i) 75
-              77:    6(float) Load 29(a5)
-              78:    6(float) Load 71(a4)
-              79:      64(S1) CompositeConstruct 78 73
-              80:      65(S2) CompositeConstruct 68 77 79
-                              Store 76(s2) 80
-              84:    6(float) Load 83(b2)
-                              Store 82(a8) 84
-              86:    6(float) Load 29(a5)
-                              Store 85(a9) 86
-              91:    7(fvec4) Load 90(input)
-              92:    7(fvec4) Load 9(a1)
-              93:    7(fvec4) FMul 91 92
-                              Store 88(@entryPointOutput) 93
+       96(input):      8(ptr) Variable Function
+      102(param):      8(ptr) Variable Function
+                              Store 14(a1) 18
+                              Store 19(b1) 24
+                              Store 25(a1i) 18
+                              Store 26(b1i) 24
+                              Store 28(a2) 29
+                              Store 30(b3) 31
+                              Store 32(b4) 33
+                              Store 34(a5) 16
+                              Store 35(c5) 36
+                              Store 40(single1) 42
+                              Store 47(single2) 51
+                              Store 54(single3) 57
+                              Store 60(single4) 65
+              99:    7(fvec4) Load 98(input)
+                              Store 96(input) 99
+             103:    7(fvec4) Load 96(input)
+                              Store 102(param) 103
+             104:    7(fvec4) FunctionCall 11(@ShaderFunction(vf4;) 102(param)
+                              Store 101(@entryPointOutput) 104
                               Return
                               FunctionEnd
+11(@ShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+          66(a2):      8(ptr) Variable Function
+         71(s2i):     70(ptr) Variable Function
+          80(s2):     70(ptr) Variable Function
+          86(a8):     85(ptr) Variable Function
+          89(a9):     85(ptr) Variable Function
+                              Store 66(a2) 67
+              73:    6(float) Load 34(a5)
+              76:    6(float) Load 75(a4)
+              78:      68(S1) CompositeConstruct 76 77
+              79:      69(S2) CompositeConstruct 72 73 78
+                              Store 71(s2i) 79
+              81:    6(float) Load 34(a5)
+              82:    6(float) Load 75(a4)
+              83:      68(S1) CompositeConstruct 82 77
+              84:      69(S2) CompositeConstruct 72 81 83
+                              Store 80(s2) 84
+              88:    6(float) Load 87(b2)
+                              Store 86(a8) 88
+              90:    6(float) Load 34(a5)
+                              Store 89(a9) 90
+              91:    7(fvec4) Load 10(input)
+              92:    7(fvec4) Load 14(a1)
+              93:    7(fvec4) FMul 91 92
+                              ReturnValue 93
+                              FunctionEnd

+ 177 - 164
3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out

@@ -147,7 +147,7 @@ gl_FragCoord origin is upper left
 0:39                'n' (temp float)
 0:39                Constant:
 0:39                  1.000000
-0:45  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:45  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:45    Function Parameters: 
 0:?     Sequence
 0:46      Function Call: Test1( (temp void)
@@ -161,15 +161,18 @@ gl_FragCoord origin is upper left
 0:49          1.000000
 0:49          1.000000
 0:49          1.000000
-0:50      Sequence
-0:50        Sequence
-0:50          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:50            color: direct index for structure (temp 4-component vector of float)
-0:50              'ps_output' (temp structure{temp 4-component vector of float color})
-0:50              Constant:
-0:50                0 (const int)
-0:50        Branch: Return
+0:50      Branch: Return with expression
+0:50        'ps_output' (temp structure{temp 4-component vector of float color})
+0:45  Function Definition: main( (temp void)
+0:45    Function Parameters: 
+0:?     Sequence
+0:45      Sequence
+0:45        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:45          color: direct index for structure (temp 4-component vector of float)
+0:45            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:45            Constant:
+0:45              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -325,7 +328,7 @@ gl_FragCoord origin is upper left
 0:39                'n' (temp float)
 0:39                Constant:
 0:39                  1.000000
-0:45  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:45  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:45    Function Parameters: 
 0:?     Sequence
 0:46      Function Call: Test1( (temp void)
@@ -339,179 +342,189 @@ gl_FragCoord origin is upper left
 0:49          1.000000
 0:49          1.000000
 0:49          1.000000
-0:50      Sequence
-0:50        Sequence
-0:50          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:50            color: direct index for structure (temp 4-component vector of float)
-0:50              'ps_output' (temp structure{temp 4-component vector of float color})
-0:50              Constant:
-0:50                0 (const int)
-0:50        Branch: Return
+0:50      Branch: Return with expression
+0:50        'ps_output' (temp structure{temp 4-component vector of float color})
+0:45  Function Definition: main( (temp void)
+0:45    Function Parameters: 
+0:?     Sequence
+0:45      Sequence
+0:45        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:45          color: direct index for structure (temp 4-component vector of float)
+0:45            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:45            Constant:
+0:45              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 107
+// Id's are bound by 112
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 103
+                              EntryPoint Fragment 4  "main" 109
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 6  "Test1("
-                              Name 10  "mystruct"
-                              MemberName 10(mystruct) 0  "a"
-                              Name 12  "test1"
-                              Name 17  "test2"
-                              Name 23  "test4"
-                              Name 25  "mystruct2"
-                              MemberName 25(mystruct2) 0  "a"
-                              MemberName 25(mystruct2) 1  "b"
-                              MemberName 25(mystruct2) 2  "c"
-                              Name 27  "test5"
-                              Name 32  "n"
-                              Name 39  "a"
-                              Name 75  "one"
-                              MemberName 75(one) 0  "a"
-                              Name 77  "oneNonConst"
-                              Name 82  "two"
-                              MemberName 82(two) 0  "a"
-                              MemberName 82(two) 1  "b"
-                              Name 84  "twoNonConst"
-                              Name 94  "PS_OUTPUT"
-                              MemberName 94(PS_OUTPUT) 0  "color"
-                              Name 96  "ps_output"
-                              Name 103  "color"
-                              Decorate 103(color) Location 0
+                              Name 10  "PS_OUTPUT"
+                              MemberName 10(PS_OUTPUT) 0  "color"
+                              Name 12  "@main("
+                              Name 15  "mystruct"
+                              MemberName 15(mystruct) 0  "a"
+                              Name 17  "test1"
+                              Name 22  "test2"
+                              Name 28  "test4"
+                              Name 30  "mystruct2"
+                              MemberName 30(mystruct2) 0  "a"
+                              MemberName 30(mystruct2) 1  "b"
+                              MemberName 30(mystruct2) 2  "c"
+                              Name 32  "test5"
+                              Name 37  "n"
+                              Name 44  "a"
+                              Name 80  "one"
+                              MemberName 80(one) 0  "a"
+                              Name 82  "oneNonConst"
+                              Name 87  "two"
+                              MemberName 87(two) 0  "a"
+                              MemberName 87(two) 1  "b"
+                              Name 89  "twoNonConst"
+                              Name 99  "ps_output"
+                              Name 109  "color"
+                              Decorate 109(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
-               9:             TypeVector 8(float) 2
-    10(mystruct):             TypeStruct 9(fvec2)
-              11:             TypePointer Function 10(mystruct)
-              13:    8(float) Constant 1065353216
-              14:    8(float) Constant 1073741824
-              15:    9(fvec2) ConstantComposite 13 14
-              16:10(mystruct) ConstantComposite 15
-              18:    8(float) Constant 1077936128
-              19:    8(float) Constant 1082130432
-              20:    9(fvec2) ConstantComposite 18 19
-              21:10(mystruct) ConstantComposite 20
-              22:             TypePointer Function 8(float)
-              24:    8(float) Constant 1088421888
-   25(mystruct2):             TypeStruct 8(float) 8(float) 8(float)
-              26:             TypePointer Function 25(mystruct2)
-              28:    8(float) Constant 1090519040
-              29:    8(float) Constant 1091567616
-              30:    8(float) Constant 1092616192
-              31:25(mystruct2) ConstantComposite 28 29 30
-              33:    8(float) Constant 0
-              34:             TypeVector 8(float) 3
-              35:             TypeInt 32 0
-              36:     35(int) Constant 8
-              37:             TypeArray 34(fvec3) 36
-              38:             TypePointer Function 37
-              40:    8(float) Constant 1058262330
-              41:   34(fvec3) ConstantComposite 40 40 40
-              45:    8(float) Constant 3205745978
-              46:   34(fvec3) ConstantComposite 45 45 45
-              50:   34(fvec3) ConstantComposite 45 45 40
-              54:   34(fvec3) ConstantComposite 45 40 45
-              58:   34(fvec3) ConstantComposite 45 40 40
-              62:   34(fvec3) ConstantComposite 40 45 45
-              66:   34(fvec3) ConstantComposite 40 45 40
-              70:   34(fvec3) ConstantComposite 40 40 45
-         75(one):             TypeStruct 34(fvec3)
-              76:             TypePointer Function 75(one)
-         82(two):             TypeStruct 34(fvec3) 34(fvec3)
-              83:             TypePointer Function 82(two)
-              93:             TypeVector 8(float) 4
-   94(PS_OUTPUT):             TypeStruct 93(fvec4)
-              95:             TypePointer Function 94(PS_OUTPUT)
-              97:             TypeInt 32 1
-              98:     97(int) Constant 0
-              99:   93(fvec4) ConstantComposite 13 13 13 13
-             100:             TypePointer Function 93(fvec4)
-             102:             TypePointer Output 93(fvec4)
-      103(color):    102(ptr) Variable Output
+               9:             TypeVector 8(float) 4
+   10(PS_OUTPUT):             TypeStruct 9(fvec4)
+              11:             TypeFunction 10(PS_OUTPUT)
+              14:             TypeVector 8(float) 2
+    15(mystruct):             TypeStruct 14(fvec2)
+              16:             TypePointer Function 15(mystruct)
+              18:    8(float) Constant 1065353216
+              19:    8(float) Constant 1073741824
+              20:   14(fvec2) ConstantComposite 18 19
+              21:15(mystruct) ConstantComposite 20
+              23:    8(float) Constant 1077936128
+              24:    8(float) Constant 1082130432
+              25:   14(fvec2) ConstantComposite 23 24
+              26:15(mystruct) ConstantComposite 25
+              27:             TypePointer Function 8(float)
+              29:    8(float) Constant 1088421888
+   30(mystruct2):             TypeStruct 8(float) 8(float) 8(float)
+              31:             TypePointer Function 30(mystruct2)
+              33:    8(float) Constant 1090519040
+              34:    8(float) Constant 1091567616
+              35:    8(float) Constant 1092616192
+              36:30(mystruct2) ConstantComposite 33 34 35
+              38:    8(float) Constant 0
+              39:             TypeVector 8(float) 3
+              40:             TypeInt 32 0
+              41:     40(int) Constant 8
+              42:             TypeArray 39(fvec3) 41
+              43:             TypePointer Function 42
+              45:    8(float) Constant 1058262330
+              46:   39(fvec3) ConstantComposite 45 45 45
+              50:    8(float) Constant 3205745978
+              51:   39(fvec3) ConstantComposite 50 50 50
+              55:   39(fvec3) ConstantComposite 50 50 45
+              59:   39(fvec3) ConstantComposite 50 45 50
+              63:   39(fvec3) ConstantComposite 50 45 45
+              67:   39(fvec3) ConstantComposite 45 50 50
+              71:   39(fvec3) ConstantComposite 45 50 45
+              75:   39(fvec3) ConstantComposite 45 45 50
+         80(one):             TypeStruct 39(fvec3)
+              81:             TypePointer Function 80(one)
+         87(two):             TypeStruct 39(fvec3) 39(fvec3)
+              88:             TypePointer Function 87(two)
+              98:             TypePointer Function 10(PS_OUTPUT)
+             100:             TypeInt 32 1
+             101:    100(int) Constant 0
+             102:    9(fvec4) ConstantComposite 18 18 18 18
+             103:             TypePointer Function 9(fvec4)
+             108:             TypePointer Output 9(fvec4)
+      109(color):    108(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-   96(ps_output):     95(ptr) Variable Function
-              92:           2 FunctionCall 6(Test1()
-             101:    100(ptr) AccessChain 96(ps_output) 98
-                              Store 101 99
-             104:    100(ptr) AccessChain 96(ps_output) 98
-             105:   93(fvec4) Load 104
-                              Store 103(color) 105
+             110:10(PS_OUTPUT) FunctionCall 12(@main()
+             111:    9(fvec4) CompositeExtract 110 0
+                              Store 109(color) 111
                               Return
                               FunctionEnd
        6(Test1():           2 Function None 3
                7:             Label
-       12(test1):     11(ptr) Variable Function
-       17(test2):     11(ptr) Variable Function
-       23(test4):     22(ptr) Variable Function
-       27(test5):     26(ptr) Variable Function
-           32(n):     22(ptr) Variable Function
-           39(a):     38(ptr) Variable Function
- 77(oneNonConst):     76(ptr) Variable Function
- 84(twoNonConst):     83(ptr) Variable Function
-                              Store 12(test1) 16
-                              Store 17(test2) 21
-                              Store 23(test4) 24
-                              Store 27(test5) 31
-                              Store 32(n) 33
-              42:    8(float) Load 32(n)
-              43:    8(float) FAdd 42 13
-                              Store 32(n) 43
-              44:   34(fvec3) VectorTimesScalar 41 43
-              47:    8(float) Load 32(n)
-              48:    8(float) FAdd 47 13
-                              Store 32(n) 48
-              49:   34(fvec3) VectorTimesScalar 46 48
-              51:    8(float) Load 32(n)
-              52:    8(float) FAdd 51 13
-                              Store 32(n) 52
-              53:   34(fvec3) VectorTimesScalar 50 52
-              55:    8(float) Load 32(n)
-              56:    8(float) FAdd 55 13
-                              Store 32(n) 56
-              57:   34(fvec3) VectorTimesScalar 54 56
-              59:    8(float) Load 32(n)
-              60:    8(float) FAdd 59 13
-                              Store 32(n) 60
-              61:   34(fvec3) VectorTimesScalar 58 60
-              63:    8(float) Load 32(n)
-              64:    8(float) FAdd 63 13
-                              Store 32(n) 64
-              65:   34(fvec3) VectorTimesScalar 62 64
-              67:    8(float) Load 32(n)
-              68:    8(float) FAdd 67 13
-                              Store 32(n) 68
-              69:   34(fvec3) VectorTimesScalar 66 68
-              71:    8(float) Load 32(n)
-              72:    8(float) FAdd 71 13
-                              Store 32(n) 72
-              73:   34(fvec3) VectorTimesScalar 70 72
-              74:          37 CompositeConstruct 44 49 53 57 61 65 69 73
-                              Store 39(a) 74
-              78:    8(float) Load 32(n)
-              79:    8(float) FAdd 78 13
-                              Store 32(n) 79
-              80:   34(fvec3) VectorTimesScalar 58 79
-              81:     75(one) CompositeConstruct 80
-                              Store 77(oneNonConst) 81
-              85:    8(float) Load 32(n)
-              86:    8(float) FAdd 85 13
-                              Store 32(n) 86
-              87:   34(fvec3) VectorTimesScalar 58 86
-              88:    8(float) Load 32(n)
-              89:    8(float) FAdd 88 13
-                              Store 32(n) 89
-              90:   34(fvec3) VectorTimesScalar 58 89
-              91:     82(two) CompositeConstruct 87 90
-                              Store 84(twoNonConst) 91
+       17(test1):     16(ptr) Variable Function
+       22(test2):     16(ptr) Variable Function
+       28(test4):     27(ptr) Variable Function
+       32(test5):     31(ptr) Variable Function
+           37(n):     27(ptr) Variable Function
+           44(a):     43(ptr) Variable Function
+ 82(oneNonConst):     81(ptr) Variable Function
+ 89(twoNonConst):     88(ptr) Variable Function
+                              Store 17(test1) 21
+                              Store 22(test2) 26
+                              Store 28(test4) 29
+                              Store 32(test5) 36
+                              Store 37(n) 38
+              47:    8(float) Load 37(n)
+              48:    8(float) FAdd 47 18
+                              Store 37(n) 48
+              49:   39(fvec3) VectorTimesScalar 46 48
+              52:    8(float) Load 37(n)
+              53:    8(float) FAdd 52 18
+                              Store 37(n) 53
+              54:   39(fvec3) VectorTimesScalar 51 53
+              56:    8(float) Load 37(n)
+              57:    8(float) FAdd 56 18
+                              Store 37(n) 57
+              58:   39(fvec3) VectorTimesScalar 55 57
+              60:    8(float) Load 37(n)
+              61:    8(float) FAdd 60 18
+                              Store 37(n) 61
+              62:   39(fvec3) VectorTimesScalar 59 61
+              64:    8(float) Load 37(n)
+              65:    8(float) FAdd 64 18
+                              Store 37(n) 65
+              66:   39(fvec3) VectorTimesScalar 63 65
+              68:    8(float) Load 37(n)
+              69:    8(float) FAdd 68 18
+                              Store 37(n) 69
+              70:   39(fvec3) VectorTimesScalar 67 69
+              72:    8(float) Load 37(n)
+              73:    8(float) FAdd 72 18
+                              Store 37(n) 73
+              74:   39(fvec3) VectorTimesScalar 71 73
+              76:    8(float) Load 37(n)
+              77:    8(float) FAdd 76 18
+                              Store 37(n) 77
+              78:   39(fvec3) VectorTimesScalar 75 77
+              79:          42 CompositeConstruct 49 54 58 62 66 70 74 78
+                              Store 44(a) 79
+              83:    8(float) Load 37(n)
+              84:    8(float) FAdd 83 18
+                              Store 37(n) 84
+              85:   39(fvec3) VectorTimesScalar 63 84
+              86:     80(one) CompositeConstruct 85
+                              Store 82(oneNonConst) 86
+              90:    8(float) Load 37(n)
+              91:    8(float) FAdd 90 18
+                              Store 37(n) 91
+              92:   39(fvec3) VectorTimesScalar 63 91
+              93:    8(float) Load 37(n)
+              94:    8(float) FAdd 93 18
+                              Store 37(n) 94
+              95:   39(fvec3) VectorTimesScalar 63 94
+              96:     87(two) CompositeConstruct 92 95
+                              Store 89(twoNonConst) 96
                               Return
                               FunctionEnd
+      12(@main():10(PS_OUTPUT) Function None 11
+              13:             Label
+   99(ps_output):     98(ptr) Variable Function
+              97:           2 FunctionCall 6(Test1()
+             104:    103(ptr) AccessChain 99(ps_output) 101
+                              Store 104 102
+             105:10(PS_OUTPUT) Load 99(ps_output)
+                              ReturnValue 105
+                              FunctionEnd

+ 179 - 120
3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out

@@ -18,10 +18,10 @@ gl_FragCoord origin is upper left
 0:11        'x' (in float)
 0:11        Constant:
 0:11          -1.000000
-0:15  Function Definition: main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15  Function Definition: @main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:15    Function Parameters: 
-0:15      'inpos' (noperspective in 4-component vector of float FragCoord)
-0:15      'sampleMask' (out int SampleMaskIn)
+0:15      'inpos' (in 4-component vector of float)
+0:15      'sampleMask' (out int)
 0:?     Sequence
 0:18      Sequence
 0:18        move second child to first child (temp float)
@@ -53,24 +53,38 @@ gl_FragCoord origin is upper left
 0:22          Constant:
 0:22            1 (const int)
 0:22        direct index (temp float)
-0:22          'inpos' (noperspective in 4-component vector of float FragCoord)
+0:22          'inpos' (in 4-component vector of float)
 0:22          Constant:
 0:22            3 (const int)
-0:24      Sequence
-0:24        Sequence
-0:24          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:24            Color: direct index for structure (temp 4-component vector of float)
-0:24              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:24              Constant:
-0:24                0 (const int)
-0:24          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:24            Depth: direct index for structure (temp float)
-0:24              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:24              Constant:
-0:24                1 (const int)
-0:24        Branch: Return
+0:24      Branch: Return with expression
+0:24        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15  Function Definition: main( (temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      move second child to first child (temp 4-component vector of float)
+0:?         'inpos' (temp 4-component vector of float)
+0:?         'inpos' (noperspective in 4-component vector of float FragCoord)
+0:15      Sequence
+0:15        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15          Function Call: @main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:?             'inpos' (temp 4-component vector of float)
+0:?             'sampleMask' (temp int)
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:15          Color: direct index for structure (temp 4-component vector of float)
+0:15            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15            Constant:
+0:15              0 (const int)
+0:15        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:15          Depth: direct index for structure (temp float)
+0:15            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15            Constant:
+0:15              1 (const int)
+0:15      move second child to first child (temp int)
+0:?         'sampleMask' (out int SampleMaskIn)
+0:?         'sampleMask' (temp int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
@@ -100,10 +114,10 @@ gl_FragCoord origin is upper left
 0:11        'x' (in float)
 0:11        Constant:
 0:11          -1.000000
-0:15  Function Definition: main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15  Function Definition: @main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:15    Function Parameters: 
-0:15      'inpos' (noperspective in 4-component vector of float FragCoord)
-0:15      'sampleMask' (out int SampleMaskIn)
+0:15      'inpos' (in 4-component vector of float)
+0:15      'sampleMask' (out int)
 0:?     Sequence
 0:18      Sequence
 0:18        move second child to first child (temp float)
@@ -135,24 +149,38 @@ gl_FragCoord origin is upper left
 0:22          Constant:
 0:22            1 (const int)
 0:22        direct index (temp float)
-0:22          'inpos' (noperspective in 4-component vector of float FragCoord)
+0:22          'inpos' (in 4-component vector of float)
 0:22          Constant:
 0:22            3 (const int)
-0:24      Sequence
-0:24        Sequence
-0:24          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:24            Color: direct index for structure (temp 4-component vector of float)
-0:24              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:24              Constant:
-0:24                0 (const int)
-0:24          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:24            Depth: direct index for structure (temp float)
-0:24              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:24              Constant:
-0:24                1 (const int)
-0:24        Branch: Return
+0:24      Branch: Return with expression
+0:24        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15  Function Definition: main( (temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      move second child to first child (temp 4-component vector of float)
+0:?         'inpos' (temp 4-component vector of float)
+0:?         'inpos' (noperspective in 4-component vector of float FragCoord)
+0:15      Sequence
+0:15        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15          Function Call: @main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:?             'inpos' (temp 4-component vector of float)
+0:?             'sampleMask' (temp int)
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:15          Color: direct index for structure (temp 4-component vector of float)
+0:15            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15            Constant:
+0:15              0 (const int)
+0:15        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:15          Depth: direct index for structure (temp float)
+0:15            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15            Constant:
+0:15              1 (const int)
+0:15      move second child to first child (temp int)
+0:?         'sampleMask' (out int SampleMaskIn)
+0:?         'sampleMask' (temp int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
@@ -161,101 +189,97 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 63
+// Id's are bound by 80
 
                               Capability Shader
                               Capability SampleRateShading
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 45 53 57 62
+                              EntryPoint Fragment 4  "main" 60 70 74 78
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 12  "MyFunc(f1;f1;f1;"
                               Name 9  "x"
                               Name 10  "y"
                               Name 11  "z"
-                              Name 17  "x"
-                              Name 19  "z"
-                              Name 21  "y"
-                              Name 22  "param"
-                              Name 24  "param"
-                              Name 25  "param"
-                              Name 31  "PS_OUTPUT"
-                              MemberName 31(PS_OUTPUT) 0  "Color"
-                              MemberName 31(PS_OUTPUT) 1  "Depth"
-                              Name 33  "psout"
-                              Name 45  "inpos"
-                              Name 53  "Color"
-                              Name 57  "Depth"
-                              Name 62  "sampleMask"
-                              Decorate 45(inpos) NoPerspective
-                              Decorate 45(inpos) BuiltIn FragCoord
-                              Decorate 53(Color) Location 0
-                              Decorate 57(Depth) BuiltIn FragDepth
-                              Decorate 62(sampleMask) BuiltIn SampleMask
+                              Name 18  "PS_OUTPUT"
+                              MemberName 18(PS_OUTPUT) 0  "Color"
+                              MemberName 18(PS_OUTPUT) 1  "Depth"
+                              Name 22  "@main(vf4;i1;"
+                              Name 20  "inpos"
+                              Name 21  "sampleMask"
+                              Name 27  "x"
+                              Name 29  "z"
+                              Name 31  "y"
+                              Name 32  "param"
+                              Name 34  "param"
+                              Name 35  "param"
+                              Name 41  "psout"
+                              Name 58  "inpos"
+                              Name 60  "inpos"
+                              Name 62  "flattenTemp"
+                              Name 63  "sampleMask"
+                              Name 64  "param"
+                              Name 66  "param"
+                              Name 70  "Color"
+                              Name 74  "Depth"
+                              Name 78  "sampleMask"
+                              Decorate 60(inpos) NoPerspective
+                              Decorate 60(inpos) BuiltIn FragCoord
+                              Decorate 70(Color) Location 0
+                              Decorate 74(Depth) BuiltIn FragDepth
+                              Decorate 78(sampleMask) BuiltIn SampleMask
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
                8:             TypeFunction 2 7(ptr) 7(ptr) 7(ptr)
-              16:    6(float) Constant 3212836864
-              18:    6(float) Constant 1088421888
-              20:    6(float) Constant 1077936128
-              30:             TypeVector 6(float) 4
-   31(PS_OUTPUT):             TypeStruct 30(fvec4) 6(float)
-              32:             TypePointer Function 31(PS_OUTPUT)
-              34:             TypeInt 32 1
-              35:     34(int) Constant 0
-              39:    6(float) Constant 1065353216
-              41:             TypePointer Function 30(fvec4)
-              43:     34(int) Constant 1
-              44:             TypePointer Input 30(fvec4)
-       45(inpos):     44(ptr) Variable Input
-              46:             TypeInt 32 0
-              47:     46(int) Constant 3
-              48:             TypePointer Input 6(float)
-              52:             TypePointer Output 30(fvec4)
-       53(Color):     52(ptr) Variable Output
-              56:             TypePointer Output 6(float)
-       57(Depth):     56(ptr) Variable Output
-              61:             TypePointer Output 34(int)
-  62(sampleMask):     61(ptr) Variable Output
+              14:             TypeVector 6(float) 4
+              15:             TypePointer Function 14(fvec4)
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+   18(PS_OUTPUT):             TypeStruct 14(fvec4) 6(float)
+              19:             TypeFunction 18(PS_OUTPUT) 15(ptr) 17(ptr)
+              26:    6(float) Constant 3212836864
+              28:    6(float) Constant 1088421888
+              30:    6(float) Constant 1077936128
+              40:             TypePointer Function 18(PS_OUTPUT)
+              42:     16(int) Constant 0
+              46:    6(float) Constant 1065353216
+              49:     16(int) Constant 1
+              50:             TypeInt 32 0
+              51:     50(int) Constant 3
+              59:             TypePointer Input 14(fvec4)
+       60(inpos):     59(ptr) Variable Input
+              69:             TypePointer Output 14(fvec4)
+       70(Color):     69(ptr) Variable Output
+              73:             TypePointer Output 6(float)
+       74(Depth):     73(ptr) Variable Output
+              77:             TypePointer Output 16(int)
+  78(sampleMask):     77(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-           17(x):      7(ptr) Variable Function
-           19(z):      7(ptr) Variable Function
-           21(y):      7(ptr) Variable Function
-       22(param):      7(ptr) Variable Function
-       24(param):      7(ptr) Variable Function
-       25(param):      7(ptr) Variable Function
-       33(psout):     32(ptr) Variable Function
-                              Store 17(x) 18
-                              Store 19(z) 20
-              23:    6(float) Load 17(x)
-                              Store 22(param) 23
-              26:    6(float) Load 19(z)
-                              Store 25(param) 26
-              27:           2 FunctionCall 12(MyFunc(f1;f1;f1;) 22(param) 24(param) 25(param)
-              28:    6(float) Load 24(param)
-                              Store 21(y) 28
-              29:    6(float) Load 25(param)
-                              Store 19(z) 29
-              36:    6(float) Load 17(x)
-              37:    6(float) Load 21(y)
-              38:    6(float) Load 19(z)
-              40:   30(fvec4) CompositeConstruct 36 37 38 39
-              42:     41(ptr) AccessChain 33(psout) 35
-                              Store 42 40
-              49:     48(ptr) AccessChain 45(inpos) 47
-              50:    6(float) Load 49
-              51:      7(ptr) AccessChain 33(psout) 43
-                              Store 51 50
-              54:     41(ptr) AccessChain 33(psout) 35
-              55:   30(fvec4) Load 54
-                              Store 53(Color) 55
-              58:      7(ptr) AccessChain 33(psout) 43
-              59:    6(float) Load 58
-                              Store 57(Depth) 59
+       58(inpos):     15(ptr) Variable Function
+ 62(flattenTemp):     40(ptr) Variable Function
+  63(sampleMask):     17(ptr) Variable Function
+       64(param):     15(ptr) Variable Function
+       66(param):     17(ptr) Variable Function
+              61:   14(fvec4) Load 60(inpos)
+                              Store 58(inpos) 61
+              65:   14(fvec4) Load 58(inpos)
+                              Store 64(param) 65
+              67:18(PS_OUTPUT) FunctionCall 22(@main(vf4;i1;) 64(param) 66(param)
+              68:     16(int) Load 66(param)
+                              Store 63(sampleMask) 68
+                              Store 62(flattenTemp) 67
+              71:     15(ptr) AccessChain 62(flattenTemp) 42
+              72:   14(fvec4) Load 71
+                              Store 70(Color) 72
+              75:      7(ptr) AccessChain 62(flattenTemp) 49
+              76:    6(float) Load 75
+                              Store 74(Depth) 76
+              79:     16(int) Load 63(sampleMask)
+                              Store 78(sampleMask) 79
                               Return
                               FunctionEnd
 12(MyFunc(f1;f1;f1;):           2 Function None 8
@@ -263,10 +287,45 @@ gl_FragCoord origin is upper left
            10(y):      7(ptr) FunctionParameter
            11(z):      7(ptr) FunctionParameter
               13:             Label
-              14:    6(float) Load 9(x)
-                              Store 10(y) 14
-              15:    6(float) Load 10(y)
-                              Store 11(z) 15
-                              Store 9(x) 16
+              24:    6(float) Load 9(x)
+                              Store 10(y) 24
+              25:    6(float) Load 10(y)
+                              Store 11(z) 25
+                              Store 9(x) 26
                               Return
                               FunctionEnd
+22(@main(vf4;i1;):18(PS_OUTPUT) Function None 19
+       20(inpos):     15(ptr) FunctionParameter
+  21(sampleMask):     17(ptr) FunctionParameter
+              23:             Label
+           27(x):      7(ptr) Variable Function
+           29(z):      7(ptr) Variable Function
+           31(y):      7(ptr) Variable Function
+       32(param):      7(ptr) Variable Function
+       34(param):      7(ptr) Variable Function
+       35(param):      7(ptr) Variable Function
+       41(psout):     40(ptr) Variable Function
+                              Store 27(x) 28
+                              Store 29(z) 30
+              33:    6(float) Load 27(x)
+                              Store 32(param) 33
+              36:    6(float) Load 29(z)
+                              Store 35(param) 36
+              37:           2 FunctionCall 12(MyFunc(f1;f1;f1;) 32(param) 34(param) 35(param)
+              38:    6(float) Load 34(param)
+                              Store 31(y) 38
+              39:    6(float) Load 35(param)
+                              Store 29(z) 39
+              43:    6(float) Load 27(x)
+              44:    6(float) Load 31(y)
+              45:    6(float) Load 29(z)
+              47:   14(fvec4) CompositeConstruct 43 44 45 46
+              48:     15(ptr) AccessChain 41(psout) 42
+                              Store 48 47
+              52:      7(ptr) AccessChain 20(inpos) 51
+              53:    6(float) Load 52
+              54:      7(ptr) AccessChain 41(psout) 49
+                              Store 54 53
+              55:18(PS_OUTPUT) Load 41(psout)
+                              ReturnValue 55
+                              FunctionEnd

+ 48 - 35
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out

@@ -2,7 +2,7 @@ hlsl.intrinsics.barriers.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:3  Function Definition: ComputeShaderFunction( (temp float)
+0:3  Function Definition: @ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      MemoryBarrier (temp void)
@@ -11,12 +11,15 @@ local_size = (1, 1, 1)
 0:7      GroupMemoryBarrierWithGroupSync (temp void)
 0:8      WorkgroupMemoryBarrier (temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync (temp void)
-0:11      Sequence
-0:11        move second child to first child (temp float)
-0:?           '@entryPointOutput' (layout(location=0 ) out float)
-0:11          Constant:
-0:11            0.000000
-0:11        Branch: Return
+0:11      Branch: Return with expression
+0:11        Constant:
+0:11          0.000000
+0:3  Function Definition: ComputeShaderFunction( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp float)
+0:?         '@entryPointOutput' (layout(location=0 ) out float)
+0:3        Function Call: @ComputeShaderFunction( (temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out float)
 
@@ -27,7 +30,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:3  Function Definition: ComputeShaderFunction( (temp float)
+0:3  Function Definition: @ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      MemoryBarrier (temp void)
@@ -36,47 +39,57 @@ local_size = (1, 1, 1)
 0:7      GroupMemoryBarrierWithGroupSync (temp void)
 0:8      WorkgroupMemoryBarrier (temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync (temp void)
-0:11      Sequence
-0:11        move second child to first child (temp float)
-0:?           '@entryPointOutput' (layout(location=0 ) out float)
-0:11          Constant:
-0:11            0.000000
-0:11        Branch: Return
+0:11      Branch: Return with expression
+0:11        Constant:
+0:11          0.000000
+0:3  Function Definition: ComputeShaderFunction( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp float)
+0:?         '@entryPointOutput' (layout(location=0 ) out float)
+0:3        Function Call: @ComputeShaderFunction( (temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 17
+// Id's are bound by 22
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 14
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 20
                               ExecutionMode 4 LocalSize 1 1 1
                               Name 4  "ComputeShaderFunction"
-                              Name 14  "@entryPointOutput"
-                              Decorate 14(@entryPointOutput) Location 0
+                              Name 8  "@ComputeShaderFunction("
+                              Name 20  "@entryPointOutput"
+                              Decorate 20(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 4048
-               9:      6(int) Constant 512
-              10:      6(int) Constant 2
-              11:      6(int) Constant 256
-              12:             TypeFloat 32
-              13:             TypePointer Output 12(float)
-14(@entryPointOutput):     13(ptr) Variable Output
-              15:   12(float) Constant 0
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              10:             TypeInt 32 0
+              11:     10(int) Constant 1
+              12:     10(int) Constant 4048
+              13:     10(int) Constant 512
+              14:     10(int) Constant 2
+              15:     10(int) Constant 256
+              16:    6(float) Constant 0
+              19:             TypePointer Output 6(float)
+20(@entryPointOutput):     19(ptr) Variable Output
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-                              MemoryBarrier 7 8
-                              ControlBarrier 7 7 8
-                              MemoryBarrier 7 9
-                              ControlBarrier 7 7 9
-                              MemoryBarrier 10 11
-                              ControlBarrier 10 10 11
-                              Store 14(@entryPointOutput) 15
+              21:    6(float) FunctionCall 8(@ComputeShaderFunction()
+                              Store 20(@entryPointOutput) 21
                               Return
                               FunctionEnd
+8(@ComputeShaderFunction():    6(float) Function None 7
+               9:             Label
+                              MemoryBarrier 11 12
+                              ControlBarrier 11 11 12
+                              MemoryBarrier 11 13
+                              ControlBarrier 11 11 13
+                              MemoryBarrier 14 15
+                              ControlBarrier 14 14 15
+                              ReturnValue 16
+                              FunctionEnd

+ 382 - 278
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out

@@ -230,16 +230,16 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:105  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:105  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:105    Function Parameters: 
-0:105      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:105      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:105      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:105      'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:105      'inU1' (layout(location=4 ) in 4-component vector of uint)
+0:105      'inF0' (in 4-component vector of float)
+0:105      'inF1' (in 4-component vector of float)
+0:105      'inF2' (in 4-component vector of float)
+0:105      'inU0' (in 4-component vector of uint)
+0:105      'inU1' (in 4-component vector of uint)
 0:?     Sequence
 0:109      all (temp bool)
-0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
+0:109        'inF0' (in 4-component vector of float)
 0:112      AtomicAdd (temp void)
 0:112        'gs_ua4' (shared 4-component vector of uint)
 0:112        'gs_ub4' (shared 4-component vector of uint)
@@ -299,22 +299,39 @@ local_size = (1, 1, 1)
 0:125        AtomicXor (temp 4-component vector of uint)
 0:125          'gs_ua4' (shared 4-component vector of uint)
 0:125          'gs_ub4' (shared 4-component vector of uint)
-0:128      Sequence
-0:128        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:128        Branch: Return
+0:128      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:105  Function Definition: ComputeShaderFunction( (temp void)
+0:105    Function Parameters: 
+0:?     Sequence
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of uint)
+0:?         'inU0' (temp 4-component vector of uint)
+0:?         'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:105      move second child to first child (temp 4-component vector of uint)
+0:?         'inU1' (temp 4-component vector of uint)
+0:?         'inU1' (layout(location=4 ) in 4-component vector of uint)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:105        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inU0' (temp 4-component vector of uint)
+0:?           'inU1' (temp 4-component vector of uint)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -327,6 +344,12 @@ local_size = (1, 1, 1)
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 
 
 Linked compute stage:
@@ -563,16 +586,16 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:105  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:105  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:105    Function Parameters: 
-0:105      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:105      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:105      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:105      'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:105      'inU1' (layout(location=4 ) in 4-component vector of uint)
+0:105      'inF0' (in 4-component vector of float)
+0:105      'inF1' (in 4-component vector of float)
+0:105      'inF2' (in 4-component vector of float)
+0:105      'inU0' (in 4-component vector of uint)
+0:105      'inU1' (in 4-component vector of uint)
 0:?     Sequence
 0:109      all (temp bool)
-0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
+0:109        'inF0' (in 4-component vector of float)
 0:112      AtomicAdd (temp void)
 0:112        'gs_ua4' (shared 4-component vector of uint)
 0:112        'gs_ub4' (shared 4-component vector of uint)
@@ -632,22 +655,39 @@ local_size = (1, 1, 1)
 0:125        AtomicXor (temp 4-component vector of uint)
 0:125          'gs_ua4' (shared 4-component vector of uint)
 0:125          'gs_ub4' (shared 4-component vector of uint)
-0:128      Sequence
-0:128        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:128        Branch: Return
+0:128      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:105  Function Definition: ComputeShaderFunction( (temp void)
+0:105    Function Parameters: 
+0:?     Sequence
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:105      move second child to first child (temp 4-component vector of uint)
+0:?         'inU0' (temp 4-component vector of uint)
+0:?         'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:105      move second child to first child (temp 4-component vector of uint)
+0:?         'inU1' (temp 4-component vector of uint)
+0:?         'inU1' (layout(location=4 ) in 4-component vector of uint)
+0:105      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:105        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inU0' (temp 4-component vector of uint)
+0:?           'inU1' (temp 4-component vector of uint)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -660,15 +700,21 @@ local_size = (1, 1, 1)
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 224
+// Id's are bound by 255
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 175 215 219 220 222 223
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 227 230 233 237 240 243
                               ExecutionMode 4 LocalSize 1 1 1
                               Name 4  "ComputeShaderFunction"
                               Name 16  "ComputeShaderFunctionS(f1;f1;f1;u1;u1;"
@@ -693,34 +739,50 @@ local_size = (1, 1, 1)
                               Name 43  "inF2"
                               Name 44  "inU0"
                               Name 45  "inU1"
-                              Name 52  "gs_ua"
-                              Name 53  "gs_ub"
-                              Name 58  "out_u1"
-                              Name 66  "gs_uc"
-                              Name 95  "gs_ua2"
-                              Name 96  "gs_ub2"
-                              Name 99  "out_u2"
-                              Name 107  "gs_uc2"
-                              Name 136  "gs_ua3"
-                              Name 137  "gs_ub3"
-                              Name 140  "out_u3"
-                              Name 148  "gs_uc3"
-                              Name 175  "inF0"
-                              Name 180  "gs_ua4"
-                              Name 181  "gs_ub4"
-                              Name 185  "out_u4"
-                              Name 193  "gs_uc4"
-                              Name 215  "@entryPointOutput"
-                              Name 219  "inF1"
-                              Name 220  "inF2"
-                              Name 222  "inU0"
-                              Name 223  "inU1"
-                              Decorate 175(inF0) Location 0
-                              Decorate 215(@entryPointOutput) Location 0
-                              Decorate 219(inF1) Location 1
-                              Decorate 220(inF2) Location 2
-                              Decorate 222(inU0) Location 3
-                              Decorate 223(inU1) Location 4
+                              Name 58  "@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;"
+                              Name 53  "inF0"
+                              Name 54  "inF1"
+                              Name 55  "inF2"
+                              Name 56  "inU0"
+                              Name 57  "inU1"
+                              Name 64  "gs_ua"
+                              Name 65  "gs_ub"
+                              Name 70  "out_u1"
+                              Name 78  "gs_uc"
+                              Name 107  "gs_ua2"
+                              Name 108  "gs_ub2"
+                              Name 111  "out_u2"
+                              Name 119  "gs_uc2"
+                              Name 148  "gs_ua3"
+                              Name 149  "gs_ub3"
+                              Name 152  "out_u3"
+                              Name 160  "gs_uc3"
+                              Name 188  "gs_ua4"
+                              Name 189  "gs_ub4"
+                              Name 192  "out_u4"
+                              Name 200  "gs_uc4"
+                              Name 225  "inF0"
+                              Name 227  "inF0"
+                              Name 229  "inF1"
+                              Name 230  "inF1"
+                              Name 232  "inF2"
+                              Name 233  "inF2"
+                              Name 235  "inU0"
+                              Name 237  "inU0"
+                              Name 239  "inU1"
+                              Name 240  "inU1"
+                              Name 243  "@entryPointOutput"
+                              Name 244  "param"
+                              Name 246  "param"
+                              Name 248  "param"
+                              Name 250  "param"
+                              Name 252  "param"
+                              Decorate 227(inF0) Location 0
+                              Decorate 230(inF1) Location 1
+                              Decorate 233(inF2) Location 2
+                              Decorate 237(inU0) Location 3
+                              Decorate 240(inU1) Location 4
+                              Decorate 243(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -739,88 +801,81 @@ local_size = (1, 1, 1)
               38:             TypeVector 8(int) 3
               39:             TypePointer Function 38(ivec3)
               40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
-              49:             TypeBool
-              51:             TypePointer Workgroup 8(int)
-       52(gs_ua):     51(ptr) Variable Workgroup
-       53(gs_ub):     51(ptr) Variable Workgroup
-              55:      8(int) Constant 1
-              56:      8(int) Constant 0
-       66(gs_uc):     51(ptr) Variable Workgroup
-              87:    6(float) Constant 0
-              94:             TypePointer Workgroup 26(ivec2)
-      95(gs_ua2):     94(ptr) Variable Workgroup
-      96(gs_ub2):     94(ptr) Variable Workgroup
-     107(gs_uc2):     94(ptr) Variable Workgroup
-             128:    6(float) Constant 1065353216
-             129:    6(float) Constant 1073741824
-             130:   24(fvec2) ConstantComposite 128 129
-             135:             TypePointer Workgroup 38(ivec3)
-     136(gs_ua3):    135(ptr) Variable Workgroup
-     137(gs_ub3):    135(ptr) Variable Workgroup
-     148(gs_uc3):    135(ptr) Variable Workgroup
-             169:    6(float) Constant 1077936128
-             170:   36(fvec3) ConstantComposite 128 129 169
-             173:             TypeVector 6(float) 4
-             174:             TypePointer Input 173(fvec4)
-       175(inF0):    174(ptr) Variable Input
-             178:             TypeVector 8(int) 4
-             179:             TypePointer Workgroup 178(ivec4)
-     180(gs_ua4):    179(ptr) Variable Workgroup
-     181(gs_ub4):    179(ptr) Variable Workgroup
-             184:             TypePointer Function 178(ivec4)
-     193(gs_uc4):    179(ptr) Variable Workgroup
-             214:             TypePointer Output 173(fvec4)
-215(@entryPointOutput):    214(ptr) Variable Output
-             216:    6(float) Constant 1082130432
-             217:  173(fvec4) ConstantComposite 128 129 169 216
-       219(inF1):    174(ptr) Variable Input
-       220(inF2):    174(ptr) Variable Input
-             221:             TypePointer Input 178(ivec4)
-       222(inU0):    221(ptr) Variable Input
-       223(inU1):    221(ptr) Variable Input
+              48:             TypeVector 6(float) 4
+              49:             TypePointer Function 48(fvec4)
+              50:             TypeVector 8(int) 4
+              51:             TypePointer Function 50(ivec4)
+              52:             TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr)
+              61:             TypeBool
+              63:             TypePointer Workgroup 8(int)
+       64(gs_ua):     63(ptr) Variable Workgroup
+       65(gs_ub):     63(ptr) Variable Workgroup
+              67:      8(int) Constant 1
+              68:      8(int) Constant 0
+       78(gs_uc):     63(ptr) Variable Workgroup
+              99:    6(float) Constant 0
+             106:             TypePointer Workgroup 26(ivec2)
+     107(gs_ua2):    106(ptr) Variable Workgroup
+     108(gs_ub2):    106(ptr) Variable Workgroup
+     119(gs_uc2):    106(ptr) Variable Workgroup
+             140:    6(float) Constant 1065353216
+             141:    6(float) Constant 1073741824
+             142:   24(fvec2) ConstantComposite 140 141
+             147:             TypePointer Workgroup 38(ivec3)
+     148(gs_ua3):    147(ptr) Variable Workgroup
+     149(gs_ub3):    147(ptr) Variable Workgroup
+     160(gs_uc3):    147(ptr) Variable Workgroup
+             181:    6(float) Constant 1077936128
+             182:   36(fvec3) ConstantComposite 140 141 181
+             187:             TypePointer Workgroup 50(ivec4)
+     188(gs_ua4):    187(ptr) Variable Workgroup
+     189(gs_ub4):    187(ptr) Variable Workgroup
+     200(gs_uc4):    187(ptr) Variable Workgroup
+             221:    6(float) Constant 1082130432
+             222:   48(fvec4) ConstantComposite 140 141 181 221
+             226:             TypePointer Input 48(fvec4)
+       227(inF0):    226(ptr) Variable Input
+       230(inF1):    226(ptr) Variable Input
+       233(inF2):    226(ptr) Variable Input
+             236:             TypePointer Input 50(ivec4)
+       237(inU0):    236(ptr) Variable Input
+       240(inU1):    236(ptr) Variable Input
+             242:             TypePointer Output 48(fvec4)
+243(@entryPointOutput):    242(ptr) Variable Output
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-     185(out_u4):    184(ptr) Variable Function
-             176:  173(fvec4) Load 175(inF0)
-             177:    49(bool) All 176
-             182:  178(ivec4) Load 181(gs_ub4)
-             183:           2 AtomicIAdd 180(gs_ua4) 55 56 182
-             186:  178(ivec4) Load 181(gs_ub4)
-             187:  178(ivec4) AtomicIAdd 180(gs_ua4) 55 56 186
-                              Store 185(out_u4) 187
-             188:  178(ivec4) Load 181(gs_ub4)
-             189:           2 AtomicAnd 180(gs_ua4) 55 56 188
-             190:  178(ivec4) Load 181(gs_ub4)
-             191:  178(ivec4) AtomicAnd 180(gs_ua4) 55 56 190
-                              Store 185(out_u4) 191
-             192:  178(ivec4) Load 181(gs_ub4)
-             194:  178(ivec4) Load 193(gs_uc4)
-             195:  178(ivec4) AtomicCompareExchange 180(gs_ua4) 55 56 56 194 192
-                              Store 185(out_u4) 195
-             196:  178(ivec4) Load 181(gs_ub4)
-             197:  178(ivec4) AtomicExchange 180(gs_ua4) 55 56 196
-                              Store 185(out_u4) 197
-             198:  178(ivec4) Load 181(gs_ub4)
-             199:           2 AtomicSMax 180(gs_ua4) 55 56 198
-             200:  178(ivec4) Load 181(gs_ub4)
-             201:  178(ivec4) AtomicUMax 180(gs_ua4) 55 56 200
-                              Store 185(out_u4) 201
-             202:  178(ivec4) Load 181(gs_ub4)
-             203:           2 AtomicSMin 180(gs_ua4) 55 56 202
-             204:  178(ivec4) Load 181(gs_ub4)
-             205:  178(ivec4) AtomicUMin 180(gs_ua4) 55 56 204
-                              Store 185(out_u4) 205
-             206:  178(ivec4) Load 181(gs_ub4)
-             207:           2 AtomicOr 180(gs_ua4) 55 56 206
-             208:  178(ivec4) Load 181(gs_ub4)
-             209:  178(ivec4) AtomicOr 180(gs_ua4) 55 56 208
-                              Store 185(out_u4) 209
-             210:  178(ivec4) Load 181(gs_ub4)
-             211:           2 AtomicXor 180(gs_ua4) 55 56 210
-             212:  178(ivec4) Load 181(gs_ub4)
-             213:  178(ivec4) AtomicXor 180(gs_ua4) 55 56 212
-                              Store 185(out_u4) 213
-                              Store 215(@entryPointOutput) 217
+       225(inF0):     49(ptr) Variable Function
+       229(inF1):     49(ptr) Variable Function
+       232(inF2):     49(ptr) Variable Function
+       235(inU0):     51(ptr) Variable Function
+       239(inU1):     51(ptr) Variable Function
+      244(param):     49(ptr) Variable Function
+      246(param):     49(ptr) Variable Function
+      248(param):     49(ptr) Variable Function
+      250(param):     51(ptr) Variable Function
+      252(param):     51(ptr) Variable Function
+             228:   48(fvec4) Load 227(inF0)
+                              Store 225(inF0) 228
+             231:   48(fvec4) Load 230(inF1)
+                              Store 229(inF1) 231
+             234:   48(fvec4) Load 233(inF2)
+                              Store 232(inF2) 234
+             238:   50(ivec4) Load 237(inU0)
+                              Store 235(inU0) 238
+             241:   50(ivec4) Load 240(inU1)
+                              Store 239(inU1) 241
+             245:   48(fvec4) Load 225(inF0)
+                              Store 244(param) 245
+             247:   48(fvec4) Load 229(inF1)
+                              Store 246(param) 247
+             249:   48(fvec4) Load 232(inF2)
+                              Store 248(param) 249
+             251:   50(ivec4) Load 235(inU0)
+                              Store 250(param) 251
+             253:   50(ivec4) Load 239(inU1)
+                              Store 252(param) 253
+             254:   48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 244(param) 246(param) 248(param) 250(param) 252(param)
+                              Store 243(@entryPointOutput) 254
                               Return
                               FunctionEnd
 16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
@@ -830,54 +885,54 @@ local_size = (1, 1, 1)
         14(inU0):      9(ptr) FunctionParameter
         15(inU1):      9(ptr) FunctionParameter
               17:             Label
-      58(out_u1):      9(ptr) Variable Function
-              48:    6(float) Load 11(inF0)
-              50:    49(bool) All 48
-              54:      8(int) Load 53(gs_ub)
-              57:           2 AtomicIAdd 52(gs_ua) 55 56 54
-              59:      8(int) Load 53(gs_ub)
-              60:      8(int) AtomicIAdd 52(gs_ua) 55 56 59
-                              Store 58(out_u1) 60
-              61:      8(int) Load 53(gs_ub)
-              62:           2 AtomicAnd 52(gs_ua) 55 56 61
-              63:      8(int) Load 53(gs_ub)
-              64:      8(int) AtomicAnd 52(gs_ua) 55 56 63
-                              Store 58(out_u1) 64
-              65:      8(int) Load 53(gs_ub)
-              67:      8(int) Load 66(gs_uc)
-              68:      8(int) AtomicCompareExchange 52(gs_ua) 55 56 56 67 65
-                              Store 58(out_u1) 68
-              69:      8(int) Load 53(gs_ub)
-              70:      8(int) AtomicExchange 52(gs_ua) 55 56 69
-                              Store 58(out_u1) 70
-              71:      8(int) Load 53(gs_ub)
-              72:           2 AtomicSMax 52(gs_ua) 55 56 71
-              73:      8(int) Load 53(gs_ub)
-              74:      8(int) AtomicUMax 52(gs_ua) 55 56 73
-                              Store 58(out_u1) 74
-              75:      8(int) Load 53(gs_ub)
-              76:           2 AtomicSMin 52(gs_ua) 55 56 75
-              77:      8(int) Load 53(gs_ub)
-              78:      8(int) AtomicUMin 52(gs_ua) 55 56 77
-                              Store 58(out_u1) 78
-              79:      8(int) Load 53(gs_ub)
-              80:           2 AtomicOr 52(gs_ua) 55 56 79
-              81:      8(int) Load 53(gs_ub)
-              82:      8(int) AtomicOr 52(gs_ua) 55 56 81
-                              Store 58(out_u1) 82
-              83:      8(int) Load 53(gs_ub)
-              84:           2 AtomicXor 52(gs_ua) 55 56 83
-              85:      8(int) Load 53(gs_ub)
-              86:      8(int) AtomicXor 52(gs_ua) 55 56 85
-                              Store 58(out_u1) 86
-                              ReturnValue 87
+      70(out_u1):      9(ptr) Variable Function
+              60:    6(float) Load 11(inF0)
+              62:    61(bool) All 60
+              66:      8(int) Load 65(gs_ub)
+              69:           2 AtomicIAdd 64(gs_ua) 67 68 66
+              71:      8(int) Load 65(gs_ub)
+              72:      8(int) AtomicIAdd 64(gs_ua) 67 68 71
+                              Store 70(out_u1) 72
+              73:      8(int) Load 65(gs_ub)
+              74:           2 AtomicAnd 64(gs_ua) 67 68 73
+              75:      8(int) Load 65(gs_ub)
+              76:      8(int) AtomicAnd 64(gs_ua) 67 68 75
+                              Store 70(out_u1) 76
+              77:      8(int) Load 65(gs_ub)
+              79:      8(int) Load 78(gs_uc)
+              80:      8(int) AtomicCompareExchange 64(gs_ua) 67 68 68 79 77
+                              Store 70(out_u1) 80
+              81:      8(int) Load 65(gs_ub)
+              82:      8(int) AtomicExchange 64(gs_ua) 67 68 81
+                              Store 70(out_u1) 82
+              83:      8(int) Load 65(gs_ub)
+              84:           2 AtomicSMax 64(gs_ua) 67 68 83
+              85:      8(int) Load 65(gs_ub)
+              86:      8(int) AtomicUMax 64(gs_ua) 67 68 85
+                              Store 70(out_u1) 86
+              87:      8(int) Load 65(gs_ub)
+              88:           2 AtomicSMin 64(gs_ua) 67 68 87
+              89:      8(int) Load 65(gs_ub)
+              90:      8(int) AtomicUMin 64(gs_ua) 67 68 89
+                              Store 70(out_u1) 90
+              91:      8(int) Load 65(gs_ub)
+              92:           2 AtomicOr 64(gs_ua) 67 68 91
+              93:      8(int) Load 65(gs_ub)
+              94:      8(int) AtomicOr 64(gs_ua) 67 68 93
+                              Store 70(out_u1) 94
+              95:      8(int) Load 65(gs_ub)
+              96:           2 AtomicXor 64(gs_ua) 67 68 95
+              97:      8(int) Load 65(gs_ub)
+              98:      8(int) AtomicXor 64(gs_ua) 67 68 97
+                              Store 70(out_u1) 98
+                              ReturnValue 99
                               FunctionEnd
 22(ComputeShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
         19(inF0):      7(ptr) FunctionParameter
         20(inF1):      7(ptr) FunctionParameter
         21(inF2):      7(ptr) FunctionParameter
               23:             Label
-                              ReturnValue 87
+                              ReturnValue 99
                               FunctionEnd
 34(ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
         29(inF0):     25(ptr) FunctionParameter
@@ -886,47 +941,47 @@ local_size = (1, 1, 1)
         32(inU0):     27(ptr) FunctionParameter
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
-      99(out_u2):     27(ptr) Variable Function
-              92:   24(fvec2) Load 29(inF0)
-              93:    49(bool) All 92
-              97:   26(ivec2) Load 96(gs_ub2)
-              98:           2 AtomicIAdd 95(gs_ua2) 55 56 97
-             100:   26(ivec2) Load 96(gs_ub2)
-             101:   26(ivec2) AtomicIAdd 95(gs_ua2) 55 56 100
-                              Store 99(out_u2) 101
-             102:   26(ivec2) Load 96(gs_ub2)
-             103:           2 AtomicAnd 95(gs_ua2) 55 56 102
-             104:   26(ivec2) Load 96(gs_ub2)
-             105:   26(ivec2) AtomicAnd 95(gs_ua2) 55 56 104
-                              Store 99(out_u2) 105
-             106:   26(ivec2) Load 96(gs_ub2)
-             108:   26(ivec2) Load 107(gs_uc2)
-             109:   26(ivec2) AtomicCompareExchange 95(gs_ua2) 55 56 56 108 106
-                              Store 99(out_u2) 109
-             110:   26(ivec2) Load 96(gs_ub2)
-             111:   26(ivec2) AtomicExchange 95(gs_ua2) 55 56 110
-                              Store 99(out_u2) 111
-             112:   26(ivec2) Load 96(gs_ub2)
-             113:           2 AtomicSMax 95(gs_ua2) 55 56 112
-             114:   26(ivec2) Load 96(gs_ub2)
-             115:   26(ivec2) AtomicUMax 95(gs_ua2) 55 56 114
-                              Store 99(out_u2) 115
-             116:   26(ivec2) Load 96(gs_ub2)
-             117:           2 AtomicSMin 95(gs_ua2) 55 56 116
-             118:   26(ivec2) Load 96(gs_ub2)
-             119:   26(ivec2) AtomicUMin 95(gs_ua2) 55 56 118
-                              Store 99(out_u2) 119
-             120:   26(ivec2) Load 96(gs_ub2)
-             121:           2 AtomicOr 95(gs_ua2) 55 56 120
-             122:   26(ivec2) Load 96(gs_ub2)
-             123:   26(ivec2) AtomicOr 95(gs_ua2) 55 56 122
-                              Store 99(out_u2) 123
-             124:   26(ivec2) Load 96(gs_ub2)
-             125:           2 AtomicXor 95(gs_ua2) 55 56 124
-             126:   26(ivec2) Load 96(gs_ub2)
-             127:   26(ivec2) AtomicXor 95(gs_ua2) 55 56 126
-                              Store 99(out_u2) 127
-                              ReturnValue 130
+     111(out_u2):     27(ptr) Variable Function
+             104:   24(fvec2) Load 29(inF0)
+             105:    61(bool) All 104
+             109:   26(ivec2) Load 108(gs_ub2)
+             110:           2 AtomicIAdd 107(gs_ua2) 67 68 109
+             112:   26(ivec2) Load 108(gs_ub2)
+             113:   26(ivec2) AtomicIAdd 107(gs_ua2) 67 68 112
+                              Store 111(out_u2) 113
+             114:   26(ivec2) Load 108(gs_ub2)
+             115:           2 AtomicAnd 107(gs_ua2) 67 68 114
+             116:   26(ivec2) Load 108(gs_ub2)
+             117:   26(ivec2) AtomicAnd 107(gs_ua2) 67 68 116
+                              Store 111(out_u2) 117
+             118:   26(ivec2) Load 108(gs_ub2)
+             120:   26(ivec2) Load 119(gs_uc2)
+             121:   26(ivec2) AtomicCompareExchange 107(gs_ua2) 67 68 68 120 118
+                              Store 111(out_u2) 121
+             122:   26(ivec2) Load 108(gs_ub2)
+             123:   26(ivec2) AtomicExchange 107(gs_ua2) 67 68 122
+                              Store 111(out_u2) 123
+             124:   26(ivec2) Load 108(gs_ub2)
+             125:           2 AtomicSMax 107(gs_ua2) 67 68 124
+             126:   26(ivec2) Load 108(gs_ub2)
+             127:   26(ivec2) AtomicUMax 107(gs_ua2) 67 68 126
+                              Store 111(out_u2) 127
+             128:   26(ivec2) Load 108(gs_ub2)
+             129:           2 AtomicSMin 107(gs_ua2) 67 68 128
+             130:   26(ivec2) Load 108(gs_ub2)
+             131:   26(ivec2) AtomicUMin 107(gs_ua2) 67 68 130
+                              Store 111(out_u2) 131
+             132:   26(ivec2) Load 108(gs_ub2)
+             133:           2 AtomicOr 107(gs_ua2) 67 68 132
+             134:   26(ivec2) Load 108(gs_ub2)
+             135:   26(ivec2) AtomicOr 107(gs_ua2) 67 68 134
+                              Store 111(out_u2) 135
+             136:   26(ivec2) Load 108(gs_ub2)
+             137:           2 AtomicXor 107(gs_ua2) 67 68 136
+             138:   26(ivec2) Load 108(gs_ub2)
+             139:   26(ivec2) AtomicXor 107(gs_ua2) 67 68 138
+                              Store 111(out_u2) 139
+                              ReturnValue 142
                               FunctionEnd
 46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -935,45 +990,94 @@ local_size = (1, 1, 1)
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-     140(out_u3):     39(ptr) Variable Function
-             133:   36(fvec3) Load 41(inF0)
-             134:    49(bool) All 133
-             138:   38(ivec3) Load 137(gs_ub3)
-             139:           2 AtomicIAdd 136(gs_ua3) 55 56 138
-             141:   38(ivec3) Load 137(gs_ub3)
-             142:   38(ivec3) AtomicIAdd 136(gs_ua3) 55 56 141
-                              Store 140(out_u3) 142
-             143:   38(ivec3) Load 137(gs_ub3)
-             144:           2 AtomicAnd 136(gs_ua3) 55 56 143
-             145:   38(ivec3) Load 137(gs_ub3)
-             146:   38(ivec3) AtomicAnd 136(gs_ua3) 55 56 145
-                              Store 140(out_u3) 146
-             147:   38(ivec3) Load 137(gs_ub3)
-             149:   38(ivec3) Load 148(gs_uc3)
-             150:   38(ivec3) AtomicCompareExchange 136(gs_ua3) 55 56 56 149 147
-                              Store 140(out_u3) 150
-             151:   38(ivec3) Load 137(gs_ub3)
-             152:   38(ivec3) AtomicExchange 136(gs_ua3) 55 56 151
-                              Store 140(out_u3) 152
-             153:   38(ivec3) Load 137(gs_ub3)
-             154:           2 AtomicSMax 136(gs_ua3) 55 56 153
-             155:   38(ivec3) Load 137(gs_ub3)
-             156:   38(ivec3) AtomicUMax 136(gs_ua3) 55 56 155
-                              Store 140(out_u3) 156
-             157:   38(ivec3) Load 137(gs_ub3)
-             158:           2 AtomicSMin 136(gs_ua3) 55 56 157
-             159:   38(ivec3) Load 137(gs_ub3)
-             160:   38(ivec3) AtomicUMin 136(gs_ua3) 55 56 159
-                              Store 140(out_u3) 160
-             161:   38(ivec3) Load 137(gs_ub3)
-             162:           2 AtomicOr 136(gs_ua3) 55 56 161
-             163:   38(ivec3) Load 137(gs_ub3)
-             164:   38(ivec3) AtomicOr 136(gs_ua3) 55 56 163
-                              Store 140(out_u3) 164
-             165:   38(ivec3) Load 137(gs_ub3)
-             166:           2 AtomicXor 136(gs_ua3) 55 56 165
-             167:   38(ivec3) Load 137(gs_ub3)
-             168:   38(ivec3) AtomicXor 136(gs_ua3) 55 56 167
-                              Store 140(out_u3) 168
-                              ReturnValue 170
+     152(out_u3):     39(ptr) Variable Function
+             145:   36(fvec3) Load 41(inF0)
+             146:    61(bool) All 145
+             150:   38(ivec3) Load 149(gs_ub3)
+             151:           2 AtomicIAdd 148(gs_ua3) 67 68 150
+             153:   38(ivec3) Load 149(gs_ub3)
+             154:   38(ivec3) AtomicIAdd 148(gs_ua3) 67 68 153
+                              Store 152(out_u3) 154
+             155:   38(ivec3) Load 149(gs_ub3)
+             156:           2 AtomicAnd 148(gs_ua3) 67 68 155
+             157:   38(ivec3) Load 149(gs_ub3)
+             158:   38(ivec3) AtomicAnd 148(gs_ua3) 67 68 157
+                              Store 152(out_u3) 158
+             159:   38(ivec3) Load 149(gs_ub3)
+             161:   38(ivec3) Load 160(gs_uc3)
+             162:   38(ivec3) AtomicCompareExchange 148(gs_ua3) 67 68 68 161 159
+                              Store 152(out_u3) 162
+             163:   38(ivec3) Load 149(gs_ub3)
+             164:   38(ivec3) AtomicExchange 148(gs_ua3) 67 68 163
+                              Store 152(out_u3) 164
+             165:   38(ivec3) Load 149(gs_ub3)
+             166:           2 AtomicSMax 148(gs_ua3) 67 68 165
+             167:   38(ivec3) Load 149(gs_ub3)
+             168:   38(ivec3) AtomicUMax 148(gs_ua3) 67 68 167
+                              Store 152(out_u3) 168
+             169:   38(ivec3) Load 149(gs_ub3)
+             170:           2 AtomicSMin 148(gs_ua3) 67 68 169
+             171:   38(ivec3) Load 149(gs_ub3)
+             172:   38(ivec3) AtomicUMin 148(gs_ua3) 67 68 171
+                              Store 152(out_u3) 172
+             173:   38(ivec3) Load 149(gs_ub3)
+             174:           2 AtomicOr 148(gs_ua3) 67 68 173
+             175:   38(ivec3) Load 149(gs_ub3)
+             176:   38(ivec3) AtomicOr 148(gs_ua3) 67 68 175
+                              Store 152(out_u3) 176
+             177:   38(ivec3) Load 149(gs_ub3)
+             178:           2 AtomicXor 148(gs_ua3) 67 68 177
+             179:   38(ivec3) Load 149(gs_ub3)
+             180:   38(ivec3) AtomicXor 148(gs_ua3) 67 68 179
+                              Store 152(out_u3) 180
+                              ReturnValue 182
+                              FunctionEnd
+58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
+        53(inF0):     49(ptr) FunctionParameter
+        54(inF1):     49(ptr) FunctionParameter
+        55(inF2):     49(ptr) FunctionParameter
+        56(inU0):     51(ptr) FunctionParameter
+        57(inU1):     51(ptr) FunctionParameter
+              59:             Label
+     192(out_u4):     51(ptr) Variable Function
+             185:   48(fvec4) Load 53(inF0)
+             186:    61(bool) All 185
+             190:   50(ivec4) Load 189(gs_ub4)
+             191:           2 AtomicIAdd 188(gs_ua4) 67 68 190
+             193:   50(ivec4) Load 189(gs_ub4)
+             194:   50(ivec4) AtomicIAdd 188(gs_ua4) 67 68 193
+                              Store 192(out_u4) 194
+             195:   50(ivec4) Load 189(gs_ub4)
+             196:           2 AtomicAnd 188(gs_ua4) 67 68 195
+             197:   50(ivec4) Load 189(gs_ub4)
+             198:   50(ivec4) AtomicAnd 188(gs_ua4) 67 68 197
+                              Store 192(out_u4) 198
+             199:   50(ivec4) Load 189(gs_ub4)
+             201:   50(ivec4) Load 200(gs_uc4)
+             202:   50(ivec4) AtomicCompareExchange 188(gs_ua4) 67 68 68 201 199
+                              Store 192(out_u4) 202
+             203:   50(ivec4) Load 189(gs_ub4)
+             204:   50(ivec4) AtomicExchange 188(gs_ua4) 67 68 203
+                              Store 192(out_u4) 204
+             205:   50(ivec4) Load 189(gs_ub4)
+             206:           2 AtomicSMax 188(gs_ua4) 67 68 205
+             207:   50(ivec4) Load 189(gs_ub4)
+             208:   50(ivec4) AtomicUMax 188(gs_ua4) 67 68 207
+                              Store 192(out_u4) 208
+             209:   50(ivec4) Load 189(gs_ub4)
+             210:           2 AtomicSMin 188(gs_ua4) 67 68 209
+             211:   50(ivec4) Load 189(gs_ub4)
+             212:   50(ivec4) AtomicUMin 188(gs_ua4) 67 68 211
+                              Store 192(out_u4) 212
+             213:   50(ivec4) Load 189(gs_ub4)
+             214:           2 AtomicOr 188(gs_ua4) 67 68 213
+             215:   50(ivec4) Load 189(gs_ub4)
+             216:   50(ivec4) AtomicOr 188(gs_ua4) 67 68 215
+                              Store 192(out_u4) 216
+             217:   50(ivec4) Load 189(gs_ub4)
+             218:           2 AtomicXor 188(gs_ua4) 67 68 217
+             219:   50(ivec4) Load 189(gs_ub4)
+             220:   50(ivec4) AtomicXor 188(gs_ua4) 67 68 219
+                              Store 192(out_u4) 220
+                              ReturnValue 222
                               FunctionEnd

+ 85 - 72
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out

@@ -2,31 +2,34 @@ hlsl.intrinsics.d3dcolortoubyte4.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp 4-component vector of int)
+0:5  Function Definition: @main( (temp 4-component vector of int)
 0:5    Function Parameters: 
 0:?     Sequence
-0:6      Sequence
-0:6        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:6          Convert float to int (temp 4-component vector of int)
-0:6            vector-scale (temp 4-component vector of float)
-0:6              Constant:
-0:6                255.001953
-0:6              vector swizzle (temp 4-component vector of float)
-0:6                col4: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
-0:6                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
-0:6                  Constant:
-0:6                    0 (const uint)
-0:6                Sequence
-0:6                  Constant:
-0:6                    2 (const int)
-0:6                  Constant:
-0:6                    1 (const int)
-0:6                  Constant:
-0:6                    0 (const int)
-0:6                  Constant:
-0:6                    3 (const int)
-0:6        Branch: Return
+0:6      Branch: Return with expression
+0:6        Convert float to int (temp 4-component vector of int)
+0:6          vector-scale (temp 4-component vector of float)
+0:6            Constant:
+0:6              255.001953
+0:6            vector swizzle (temp 4-component vector of float)
+0:6              col4: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:6                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
+0:6                Constant:
+0:6                  0 (const uint)
+0:6              Sequence
+0:6                Constant:
+0:6                  2 (const int)
+0:6                Constant:
+0:6                  1 (const int)
+0:6                Constant:
+0:6                  0 (const int)
+0:6                Constant:
+0:6                  3 (const int)
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:5        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
@@ -38,74 +41,84 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp 4-component vector of int)
+0:5  Function Definition: @main( (temp 4-component vector of int)
 0:5    Function Parameters: 
 0:?     Sequence
-0:6      Sequence
-0:6        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:6          Convert float to int (temp 4-component vector of int)
-0:6            vector-scale (temp 4-component vector of float)
-0:6              Constant:
-0:6                255.001953
-0:6              vector swizzle (temp 4-component vector of float)
-0:6                col4: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
-0:6                  'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
-0:6                  Constant:
-0:6                    0 (const uint)
-0:6                Sequence
-0:6                  Constant:
-0:6                    2 (const int)
-0:6                  Constant:
-0:6                    1 (const int)
-0:6                  Constant:
-0:6                    0 (const int)
-0:6                  Constant:
-0:6                    3 (const int)
-0:6        Branch: Return
+0:6      Branch: Return with expression
+0:6        Convert float to int (temp 4-component vector of int)
+0:6          vector-scale (temp 4-component vector of float)
+0:6            Constant:
+0:6              255.001953
+0:6            vector swizzle (temp 4-component vector of float)
+0:6              col4: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:6                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
+0:6                Constant:
+0:6                  0 (const uint)
+0:6              Sequence
+0:6                Constant:
+0:6                  2 (const int)
+0:6                Constant:
+0:6                  1 (const int)
+0:6                Constant:
+0:6                  0 (const int)
+0:6                Constant:
+0:6                  3 (const int)
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:5        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float col4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 24
+// Id's are bound by 29
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 9
+                              EntryPoint Fragment 4  "main" 27
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "@entryPointOutput"
-                              Name 13  "$Global"
-                              MemberName 13($Global) 0  "col4"
-                              Name 15  ""
-                              Decorate 9(@entryPointOutput) Location 0
-                              MemberDecorate 13($Global) 0 Offset 0
-                              Decorate 13($Global) Block
-                              Decorate 15 DescriptorSet 0
+                              Name 9  "@main("
+                              Name 14  "$Global"
+                              MemberName 14($Global) 0  "col4"
+                              Name 16  ""
+                              Name 27  "@entryPointOutput"
+                              MemberDecorate 14($Global) 0 Offset 0
+                              Decorate 14($Global) Block
+                              Decorate 16 DescriptorSet 0
+                              Decorate 27(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypeVector 6(int) 4
-               8:             TypePointer Output 7(ivec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:             TypeFloat 32
-              11:   10(float) Constant 1132396672
-              12:             TypeVector 10(float) 4
-     13($Global):             TypeStruct 12(fvec4)
-              14:             TypePointer Uniform 13($Global)
-              15:     14(ptr) Variable Uniform
-              16:      6(int) Constant 0
-              17:             TypePointer Uniform 12(fvec4)
+               8:             TypeFunction 7(ivec4)
+              11:             TypeFloat 32
+              12:   11(float) Constant 1132396672
+              13:             TypeVector 11(float) 4
+     14($Global):             TypeStruct 13(fvec4)
+              15:             TypePointer Uniform 14($Global)
+              16:     15(ptr) Variable Uniform
+              17:      6(int) Constant 0
+              18:             TypePointer Uniform 13(fvec4)
+              26:             TypePointer Output 7(ivec4)
+27(@entryPointOutput):     26(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              18:     17(ptr) AccessChain 15 16
-              19:   12(fvec4) Load 18
-              20:   12(fvec4) VectorShuffle 19 19 2 1 0 3
-              21:   12(fvec4) VectorTimesScalar 20 11
-              22:    7(ivec4) ConvertFToS 21
-                              Store 9(@entryPointOutput) 22
+              28:    7(ivec4) FunctionCall 9(@main()
+                              Store 27(@entryPointOutput) 28
                               Return
                               FunctionEnd
+       9(@main():    7(ivec4) Function None 8
+              10:             Label
+              19:     18(ptr) AccessChain 16 17
+              20:   13(fvec4) Load 19
+              21:   13(fvec4) VectorShuffle 20 20 2 1 0 3
+              22:   13(fvec4) VectorTimesScalar 21 12
+              23:    7(ivec4) ConvertFToS 22
+                              ReturnValue 23
+                              FunctionEnd

+ 258 - 97
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out

@@ -2,37 +2,72 @@ hlsl.intrinsics.double.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
+0:5  Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
 0:5    Function Parameters: 
-0:5      'inDV1a' (layout(location=0 ) in double)
-0:5      'inDV1b' (layout(location=1 ) in double)
-0:5      'inDV1c' (layout(location=2 ) in double)
-0:5      'inDV2' (layout(location=3 ) in 2-component vector of double)
-0:5      'inDV3' (layout(location=4 ) in 3-component vector of double)
-0:5      'inDV4' (layout(location=6 ) in 4-component vector of double)
-0:5      'inU1a' (layout(location=8 ) in uint)
-0:5      'inU1b' (layout(location=9 ) in uint)
+0:5      'inDV1a' (in double)
+0:5      'inDV1b' (in double)
+0:5      'inDV1c' (in double)
+0:5      'inDV2' (in 2-component vector of double)
+0:5      'inDV3' (in 3-component vector of double)
+0:5      'inDV4' (in 4-component vector of double)
+0:5      'inU1a' (in uint)
+0:5      'inU1b' (in uint)
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
 0:6          fma (temp double)
-0:6            'inDV1a' (layout(location=0 ) in double)
-0:6            'inDV1b' (layout(location=1 ) in double)
-0:6            'inDV1c' (layout(location=2 ) in double)
+0:6            'inDV1a' (in double)
+0:6            'inDV1b' (in double)
+0:6            'inDV1c' (in double)
 0:7      Sequence
 0:7        move second child to first child (temp double)
 0:7          'r01' (temp double)
 0:7          uint64BitsToDouble (temp double)
 0:7            Construct uvec2 (temp 2-component vector of uint)
-0:7              'inU1a' (layout(location=8 ) in uint)
-0:7              'inU1b' (layout(location=9 ) in uint)
-0:9      Sequence
-0:9        move second child to first child (temp float)
-0:?           '@entryPointOutput' (layout(location=0 ) out float)
-0:9          Constant:
-0:9            0.000000
-0:9        Branch: Return
+0:7              'inU1a' (in uint)
+0:7              'inU1b' (in uint)
+0:9      Branch: Return with expression
+0:9        Constant:
+0:9          0.000000
+0:5  Function Definition: PixelShaderFunction( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp double)
+0:?         'inDV1a' (temp double)
+0:?         'inDV1a' (layout(location=0 ) in double)
+0:5      move second child to first child (temp double)
+0:?         'inDV1b' (temp double)
+0:?         'inDV1b' (layout(location=1 ) in double)
+0:5      move second child to first child (temp double)
+0:?         'inDV1c' (temp double)
+0:?         'inDV1c' (layout(location=2 ) in double)
+0:5      move second child to first child (temp 2-component vector of double)
+0:?         'inDV2' (temp 2-component vector of double)
+0:?         'inDV2' (layout(location=3 ) in 2-component vector of double)
+0:5      move second child to first child (temp 3-component vector of double)
+0:?         'inDV3' (temp 3-component vector of double)
+0:?         'inDV3' (layout(location=4 ) in 3-component vector of double)
+0:5      move second child to first child (temp 4-component vector of double)
+0:?         'inDV4' (temp 4-component vector of double)
+0:?         'inDV4' (layout(location=6 ) in 4-component vector of double)
+0:5      move second child to first child (temp uint)
+0:?         'inU1a' (temp uint)
+0:?         'inU1a' (layout(location=8 ) in uint)
+0:5      move second child to first child (temp uint)
+0:?         'inU1b' (temp uint)
+0:?         'inU1b' (layout(location=9 ) in uint)
+0:5      move second child to first child (temp float)
+0:?         '@entryPointOutput' (layout(location=0 ) out float)
+0:5        Function Call: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
+0:?           'inDV1a' (temp double)
+0:?           'inDV1b' (temp double)
+0:?           'inDV1c' (temp double)
+0:?           'inDV2' (temp 2-component vector of double)
+0:?           'inDV3' (temp 3-component vector of double)
+0:?           'inDV4' (temp 4-component vector of double)
+0:?           'inU1a' (temp uint)
+0:?           'inU1b' (temp uint)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out float)
 0:?     'inDV1a' (layout(location=0 ) in double)
@@ -51,37 +86,72 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
+0:5  Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
 0:5    Function Parameters: 
-0:5      'inDV1a' (layout(location=0 ) in double)
-0:5      'inDV1b' (layout(location=1 ) in double)
-0:5      'inDV1c' (layout(location=2 ) in double)
-0:5      'inDV2' (layout(location=3 ) in 2-component vector of double)
-0:5      'inDV3' (layout(location=4 ) in 3-component vector of double)
-0:5      'inDV4' (layout(location=6 ) in 4-component vector of double)
-0:5      'inU1a' (layout(location=8 ) in uint)
-0:5      'inU1b' (layout(location=9 ) in uint)
+0:5      'inDV1a' (in double)
+0:5      'inDV1b' (in double)
+0:5      'inDV1c' (in double)
+0:5      'inDV2' (in 2-component vector of double)
+0:5      'inDV3' (in 3-component vector of double)
+0:5      'inDV4' (in 4-component vector of double)
+0:5      'inU1a' (in uint)
+0:5      'inU1b' (in uint)
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
 0:6          fma (temp double)
-0:6            'inDV1a' (layout(location=0 ) in double)
-0:6            'inDV1b' (layout(location=1 ) in double)
-0:6            'inDV1c' (layout(location=2 ) in double)
+0:6            'inDV1a' (in double)
+0:6            'inDV1b' (in double)
+0:6            'inDV1c' (in double)
 0:7      Sequence
 0:7        move second child to first child (temp double)
 0:7          'r01' (temp double)
 0:7          uint64BitsToDouble (temp double)
 0:7            Construct uvec2 (temp 2-component vector of uint)
-0:7              'inU1a' (layout(location=8 ) in uint)
-0:7              'inU1b' (layout(location=9 ) in uint)
-0:9      Sequence
-0:9        move second child to first child (temp float)
-0:?           '@entryPointOutput' (layout(location=0 ) out float)
-0:9          Constant:
-0:9            0.000000
-0:9        Branch: Return
+0:7              'inU1a' (in uint)
+0:7              'inU1b' (in uint)
+0:9      Branch: Return with expression
+0:9        Constant:
+0:9          0.000000
+0:5  Function Definition: PixelShaderFunction( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp double)
+0:?         'inDV1a' (temp double)
+0:?         'inDV1a' (layout(location=0 ) in double)
+0:5      move second child to first child (temp double)
+0:?         'inDV1b' (temp double)
+0:?         'inDV1b' (layout(location=1 ) in double)
+0:5      move second child to first child (temp double)
+0:?         'inDV1c' (temp double)
+0:?         'inDV1c' (layout(location=2 ) in double)
+0:5      move second child to first child (temp 2-component vector of double)
+0:?         'inDV2' (temp 2-component vector of double)
+0:?         'inDV2' (layout(location=3 ) in 2-component vector of double)
+0:5      move second child to first child (temp 3-component vector of double)
+0:?         'inDV3' (temp 3-component vector of double)
+0:?         'inDV3' (layout(location=4 ) in 3-component vector of double)
+0:5      move second child to first child (temp 4-component vector of double)
+0:?         'inDV4' (temp 4-component vector of double)
+0:?         'inDV4' (layout(location=6 ) in 4-component vector of double)
+0:5      move second child to first child (temp uint)
+0:?         'inU1a' (temp uint)
+0:?         'inU1a' (layout(location=8 ) in uint)
+0:5      move second child to first child (temp uint)
+0:?         'inU1b' (temp uint)
+0:?         'inU1b' (layout(location=9 ) in uint)
+0:5      move second child to first child (temp float)
+0:?         '@entryPointOutput' (layout(location=0 ) out float)
+0:5        Function Call: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (temp float)
+0:?           'inDV1a' (temp double)
+0:?           'inDV1b' (temp double)
+0:?           'inDV1c' (temp double)
+0:?           'inDV2' (temp 2-component vector of double)
+0:?           'inDV3' (temp 3-component vector of double)
+0:?           'inDV4' (temp 4-component vector of double)
+0:?           'inU1a' (temp uint)
+0:?           'inU1b' (temp uint)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out float)
 0:?     'inDV1a' (layout(location=0 ) in double)
@@ -95,75 +165,166 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 41
+// Id's are bound by 90
 
                               Capability Shader
                               Capability Float64
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 10 12 14 20 22 29 34 37 40
+                              EntryPoint Fragment 4  "PixelShaderFunction" 44 47 50 54 58 62 66 69 72
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 8  "r00"
-                              Name 10  "inDV1a"
-                              Name 12  "inDV1b"
-                              Name 14  "inDV1c"
-                              Name 17  "r01"
-                              Name 20  "inU1a"
-                              Name 22  "inU1b"
-                              Name 29  "@entryPointOutput"
-                              Name 34  "inDV2"
-                              Name 37  "inDV3"
-                              Name 40  "inDV4"
-                              Decorate 10(inDV1a) Location 0
-                              Decorate 12(inDV1b) Location 1
-                              Decorate 14(inDV1c) Location 2
-                              Decorate 20(inU1a) Location 8
-                              Decorate 22(inU1b) Location 9
-                              Decorate 29(@entryPointOutput) Location 0
-                              Decorate 34(inDV2) Location 3
-                              Decorate 37(inDV3) Location 4
-                              Decorate 40(inDV4) Location 6
+                              Name 26  "@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;"
+                              Name 18  "inDV1a"
+                              Name 19  "inDV1b"
+                              Name 20  "inDV1c"
+                              Name 21  "inDV2"
+                              Name 22  "inDV3"
+                              Name 23  "inDV4"
+                              Name 24  "inU1a"
+                              Name 25  "inU1b"
+                              Name 28  "r00"
+                              Name 33  "r01"
+                              Name 42  "inDV1a"
+                              Name 44  "inDV1a"
+                              Name 46  "inDV1b"
+                              Name 47  "inDV1b"
+                              Name 49  "inDV1c"
+                              Name 50  "inDV1c"
+                              Name 52  "inDV2"
+                              Name 54  "inDV2"
+                              Name 56  "inDV3"
+                              Name 58  "inDV3"
+                              Name 60  "inDV4"
+                              Name 62  "inDV4"
+                              Name 64  "inU1a"
+                              Name 66  "inU1a"
+                              Name 68  "inU1b"
+                              Name 69  "inU1b"
+                              Name 72  "@entryPointOutput"
+                              Name 73  "param"
+                              Name 75  "param"
+                              Name 77  "param"
+                              Name 79  "param"
+                              Name 81  "param"
+                              Name 83  "param"
+                              Name 85  "param"
+                              Name 87  "param"
+                              Decorate 44(inDV1a) Location 0
+                              Decorate 47(inDV1b) Location 1
+                              Decorate 50(inDV1c) Location 2
+                              Decorate 54(inDV2) Location 3
+                              Decorate 58(inDV3) Location 4
+                              Decorate 62(inDV4) Location 6
+                              Decorate 66(inU1a) Location 8
+                              Decorate 69(inU1b) Location 9
+                              Decorate 72(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 64
                7:             TypePointer Function 6(float)
-               9:             TypePointer Input 6(float)
-      10(inDV1a):      9(ptr) Variable Input
-      12(inDV1b):      9(ptr) Variable Input
-      14(inDV1c):      9(ptr) Variable Input
-              18:             TypeInt 32 0
-              19:             TypePointer Input 18(int)
-       20(inU1a):     19(ptr) Variable Input
-       22(inU1b):     19(ptr) Variable Input
-              24:             TypeVector 18(int) 2
-              27:             TypeFloat 32
-              28:             TypePointer Output 27(float)
-29(@entryPointOutput):     28(ptr) Variable Output
-              30:   27(float) Constant 0
-              32:             TypeVector 6(float) 2
-              33:             TypePointer Input 32(fvec2)
-       34(inDV2):     33(ptr) Variable Input
-              35:             TypeVector 6(float) 3
-              36:             TypePointer Input 35(fvec3)
-       37(inDV3):     36(ptr) Variable Input
-              38:             TypeVector 6(float) 4
-              39:             TypePointer Input 38(fvec4)
-       40(inDV4):     39(ptr) Variable Input
+               8:             TypeVector 6(float) 2
+               9:             TypePointer Function 8(fvec2)
+              10:             TypeVector 6(float) 3
+              11:             TypePointer Function 10(fvec3)
+              12:             TypeVector 6(float) 4
+              13:             TypePointer Function 12(fvec4)
+              14:             TypeInt 32 0
+              15:             TypePointer Function 14(int)
+              16:             TypeFloat 32
+              17:             TypeFunction 16(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 11(ptr) 13(ptr) 15(ptr) 15(ptr)
+              36:             TypeVector 14(int) 2
+              39:   16(float) Constant 0
+              43:             TypePointer Input 6(float)
+      44(inDV1a):     43(ptr) Variable Input
+      47(inDV1b):     43(ptr) Variable Input
+      50(inDV1c):     43(ptr) Variable Input
+              53:             TypePointer Input 8(fvec2)
+       54(inDV2):     53(ptr) Variable Input
+              57:             TypePointer Input 10(fvec3)
+       58(inDV3):     57(ptr) Variable Input
+              61:             TypePointer Input 12(fvec4)
+       62(inDV4):     61(ptr) Variable Input
+              65:             TypePointer Input 14(int)
+       66(inU1a):     65(ptr) Variable Input
+       69(inU1b):     65(ptr) Variable Input
+              71:             TypePointer Output 16(float)
+72(@entryPointOutput):     71(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          8(r00):      7(ptr) Variable Function
-         17(r01):      7(ptr) Variable Function
-              11:    6(float) Load 10(inDV1a)
-              13:    6(float) Load 12(inDV1b)
-              15:    6(float) Load 14(inDV1c)
-              16:    6(float) ExtInst 1(GLSL.std.450) 50(Fma) 11 13 15
-                              Store 8(r00) 16
-              21:     18(int) Load 20(inU1a)
-              23:     18(int) Load 22(inU1b)
-              25:   24(ivec2) CompositeConstruct 21 23
-              26:    6(float) Bitcast 25
-                              Store 17(r01) 26
-                              Store 29(@entryPointOutput) 30
+      42(inDV1a):      7(ptr) Variable Function
+      46(inDV1b):      7(ptr) Variable Function
+      49(inDV1c):      7(ptr) Variable Function
+       52(inDV2):      9(ptr) Variable Function
+       56(inDV3):     11(ptr) Variable Function
+       60(inDV4):     13(ptr) Variable Function
+       64(inU1a):     15(ptr) Variable Function
+       68(inU1b):     15(ptr) Variable Function
+       73(param):      7(ptr) Variable Function
+       75(param):      7(ptr) Variable Function
+       77(param):      7(ptr) Variable Function
+       79(param):      9(ptr) Variable Function
+       81(param):     11(ptr) Variable Function
+       83(param):     13(ptr) Variable Function
+       85(param):     15(ptr) Variable Function
+       87(param):     15(ptr) Variable Function
+              45:    6(float) Load 44(inDV1a)
+                              Store 42(inDV1a) 45
+              48:    6(float) Load 47(inDV1b)
+                              Store 46(inDV1b) 48
+              51:    6(float) Load 50(inDV1c)
+                              Store 49(inDV1c) 51
+              55:    8(fvec2) Load 54(inDV2)
+                              Store 52(inDV2) 55
+              59:   10(fvec3) Load 58(inDV3)
+                              Store 56(inDV3) 59
+              63:   12(fvec4) Load 62(inDV4)
+                              Store 60(inDV4) 63
+              67:     14(int) Load 66(inU1a)
+                              Store 64(inU1a) 67
+              70:     14(int) Load 69(inU1b)
+                              Store 68(inU1b) 70
+              74:    6(float) Load 42(inDV1a)
+                              Store 73(param) 74
+              76:    6(float) Load 46(inDV1b)
+                              Store 75(param) 76
+              78:    6(float) Load 49(inDV1c)
+                              Store 77(param) 78
+              80:    8(fvec2) Load 52(inDV2)
+                              Store 79(param) 80
+              82:   10(fvec3) Load 56(inDV3)
+                              Store 81(param) 82
+              84:   12(fvec4) Load 60(inDV4)
+                              Store 83(param) 84
+              86:     14(int) Load 64(inU1a)
+                              Store 85(param) 86
+              88:     14(int) Load 68(inU1b)
+                              Store 87(param) 88
+              89:   16(float) FunctionCall 26(@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;) 73(param) 75(param) 77(param) 79(param) 81(param) 83(param) 85(param) 87(param)
+                              Store 72(@entryPointOutput) 89
                               Return
                               FunctionEnd
+26(@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;):   16(float) Function None 17
+      18(inDV1a):      7(ptr) FunctionParameter
+      19(inDV1b):      7(ptr) FunctionParameter
+      20(inDV1c):      7(ptr) FunctionParameter
+       21(inDV2):      9(ptr) FunctionParameter
+       22(inDV3):     11(ptr) FunctionParameter
+       23(inDV4):     13(ptr) FunctionParameter
+       24(inU1a):     15(ptr) FunctionParameter
+       25(inU1b):     15(ptr) FunctionParameter
+              27:             Label
+         28(r00):      7(ptr) Variable Function
+         33(r01):      7(ptr) Variable Function
+              29:    6(float) Load 18(inDV1a)
+              30:    6(float) Load 19(inDV1b)
+              31:    6(float) Load 20(inDV1c)
+              32:    6(float) ExtInst 1(GLSL.std.450) 50(Fma) 29 30 31
+                              Store 28(r00) 32
+              34:     14(int) Load 24(inU1a)
+              35:     14(int) Load 25(inU1b)
+              37:   36(ivec2) CompositeConstruct 34 35
+              38:    6(float) Bitcast 37
+                              Store 33(r01) 38
+                              ReturnValue 39
+                              FunctionEnd

+ 185 - 75
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out

@@ -2,47 +2,71 @@ hlsl.intrinsics.evalfns.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:3  Function Definition: @main(f1;vf2;vf3;vf4;vi2; (temp void)
 0:3    Function Parameters: 
-0:3      'inF1' (layout(location=0 ) in float)
-0:3      'inF2' (layout(location=1 ) in 2-component vector of float)
-0:3      'inF3' (layout(location=2 ) in 3-component vector of float)
-0:3      'inF4' (layout(location=3 ) in 4-component vector of float)
-0:3      'inI2' (layout(location=4 ) in 2-component vector of int)
+0:3      'inF1' (in float)
+0:3      'inF2' (in 2-component vector of float)
+0:3      'inF3' (in 3-component vector of float)
+0:3      'inF4' (in 4-component vector of float)
+0:3      'inI2' (in 2-component vector of int)
 0:?     Sequence
 0:4      interpolateAtOffset (temp float)
-0:4        'inF1' (layout(location=0 ) in float)
+0:4        'inF1' (in float)
 0:?         Constant:
 0:?           -0.500000
 0:?           -0.062500
 0:5      interpolateAtOffset (temp 2-component vector of float)
-0:5        'inF2' (layout(location=1 ) in 2-component vector of float)
+0:5        'inF2' (in 2-component vector of float)
 0:?         Constant:
 0:?           0.000000
 0:?           0.062500
 0:6      interpolateAtOffset (temp 3-component vector of float)
-0:6        'inF3' (layout(location=2 ) in 3-component vector of float)
+0:6        'inF3' (in 3-component vector of float)
 0:?         Constant:
 0:?           0.187500
 0:?           -0.375000
 0:7      interpolateAtOffset (temp 4-component vector of float)
-0:7        'inF4' (layout(location=3 ) in 4-component vector of float)
+0:7        'inF4' (in 4-component vector of float)
 0:?         Constant:
 0:?           0.437500
 0:?           -0.500000
 0:9      interpolateAtOffset (temp float)
-0:9        'inF1' (layout(location=0 ) in float)
+0:9        'inF1' (in float)
 0:9        vector-scale (temp 2-component vector of float)
 0:9          Convert int to float (temp 2-component vector of float)
 0:9            right-shift (temp 2-component vector of int)
 0:9              left-shift (temp 2-component vector of int)
-0:9                'inI2' (layout(location=4 ) in 2-component vector of int)
+0:9                'inI2' (in 2-component vector of int)
 0:9                Constant:
 0:9                  28 (const int)
 0:9              Constant:
 0:9                28 (const int)
 0:9          Constant:
 0:9            0.062500
+0:3  Function Definition: main( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp float)
+0:?         'inF1' (temp float)
+0:?         'inF1' (layout(location=0 ) in float)
+0:3      move second child to first child (temp 2-component vector of float)
+0:?         'inF2' (temp 2-component vector of float)
+0:?         'inF2' (layout(location=1 ) in 2-component vector of float)
+0:3      move second child to first child (temp 3-component vector of float)
+0:?         'inF3' (temp 3-component vector of float)
+0:?         'inF3' (layout(location=2 ) in 3-component vector of float)
+0:3      move second child to first child (temp 4-component vector of float)
+0:?         'inF4' (temp 4-component vector of float)
+0:?         'inF4' (layout(location=3 ) in 4-component vector of float)
+0:3      move second child to first child (temp 2-component vector of int)
+0:?         'inI2' (temp 2-component vector of int)
+0:?         'inI2' (layout(location=4 ) in 2-component vector of int)
+0:3      Function Call: @main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:?         'inF1' (temp float)
+0:?         'inF2' (temp 2-component vector of float)
+0:?         'inF3' (temp 3-component vector of float)
+0:?         'inF4' (temp 4-component vector of float)
+0:?         'inI2' (temp 2-component vector of int)
 0:?   Linker Objects
 0:?     'inF1' (layout(location=0 ) in float)
 0:?     'inF2' (layout(location=1 ) in 2-component vector of float)
@@ -57,47 +81,71 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:3  Function Definition: @main(f1;vf2;vf3;vf4;vi2; (temp void)
 0:3    Function Parameters: 
-0:3      'inF1' (layout(location=0 ) in float)
-0:3      'inF2' (layout(location=1 ) in 2-component vector of float)
-0:3      'inF3' (layout(location=2 ) in 3-component vector of float)
-0:3      'inF4' (layout(location=3 ) in 4-component vector of float)
-0:3      'inI2' (layout(location=4 ) in 2-component vector of int)
+0:3      'inF1' (in float)
+0:3      'inF2' (in 2-component vector of float)
+0:3      'inF3' (in 3-component vector of float)
+0:3      'inF4' (in 4-component vector of float)
+0:3      'inI2' (in 2-component vector of int)
 0:?     Sequence
 0:4      interpolateAtOffset (temp float)
-0:4        'inF1' (layout(location=0 ) in float)
+0:4        'inF1' (in float)
 0:?         Constant:
 0:?           -0.500000
 0:?           -0.062500
 0:5      interpolateAtOffset (temp 2-component vector of float)
-0:5        'inF2' (layout(location=1 ) in 2-component vector of float)
+0:5        'inF2' (in 2-component vector of float)
 0:?         Constant:
 0:?           0.000000
 0:?           0.062500
 0:6      interpolateAtOffset (temp 3-component vector of float)
-0:6        'inF3' (layout(location=2 ) in 3-component vector of float)
+0:6        'inF3' (in 3-component vector of float)
 0:?         Constant:
 0:?           0.187500
 0:?           -0.375000
 0:7      interpolateAtOffset (temp 4-component vector of float)
-0:7        'inF4' (layout(location=3 ) in 4-component vector of float)
+0:7        'inF4' (in 4-component vector of float)
 0:?         Constant:
 0:?           0.437500
 0:?           -0.500000
 0:9      interpolateAtOffset (temp float)
-0:9        'inF1' (layout(location=0 ) in float)
+0:9        'inF1' (in float)
 0:9        vector-scale (temp 2-component vector of float)
 0:9          Convert int to float (temp 2-component vector of float)
 0:9            right-shift (temp 2-component vector of int)
 0:9              left-shift (temp 2-component vector of int)
-0:9                'inI2' (layout(location=4 ) in 2-component vector of int)
+0:9                'inI2' (in 2-component vector of int)
 0:9                Constant:
 0:9                  28 (const int)
 0:9              Constant:
 0:9                28 (const int)
 0:9          Constant:
 0:9            0.062500
+0:3  Function Definition: main( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp float)
+0:?         'inF1' (temp float)
+0:?         'inF1' (layout(location=0 ) in float)
+0:3      move second child to first child (temp 2-component vector of float)
+0:?         'inF2' (temp 2-component vector of float)
+0:?         'inF2' (layout(location=1 ) in 2-component vector of float)
+0:3      move second child to first child (temp 3-component vector of float)
+0:?         'inF3' (temp 3-component vector of float)
+0:?         'inF3' (layout(location=2 ) in 3-component vector of float)
+0:3      move second child to first child (temp 4-component vector of float)
+0:?         'inF4' (temp 4-component vector of float)
+0:?         'inF4' (layout(location=3 ) in 4-component vector of float)
+0:3      move second child to first child (temp 2-component vector of int)
+0:?         'inI2' (temp 2-component vector of int)
+0:?         'inI2' (layout(location=4 ) in 2-component vector of int)
+0:3      Function Call: @main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:?         'inF1' (temp float)
+0:?         'inF2' (temp 2-component vector of float)
+0:?         'inF3' (temp 3-component vector of float)
+0:?         'inF4' (temp 4-component vector of float)
+0:?         'inI2' (temp 2-component vector of int)
 0:?   Linker Objects
 0:?     'inF1' (layout(location=0 ) in float)
 0:?     'inF2' (layout(location=1 ) in 2-component vector of float)
@@ -107,68 +155,130 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 46
+// Id's are bound by 80
 
                               Capability Shader
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 8 15 22 29 36
+                              EntryPoint Fragment 4  "main" 51 55 59 63 67
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "inF1"
-                              Name 15  "inF2"
-                              Name 22  "inF3"
-                              Name 29  "inF4"
-                              Name 36  "inI2"
-                              Decorate 8(inF1) Location 0
-                              Decorate 15(inF2) Location 1
-                              Decorate 22(inF3) Location 2
-                              Decorate 29(inF4) Location 3
-                              Decorate 36(inI2) Location 4
+                              Name 23  "@main(f1;vf2;vf3;vf4;vi2;"
+                              Name 18  "inF1"
+                              Name 19  "inF2"
+                              Name 20  "inF3"
+                              Name 21  "inF4"
+                              Name 22  "inI2"
+                              Name 49  "inF1"
+                              Name 51  "inF1"
+                              Name 53  "inF2"
+                              Name 55  "inF2"
+                              Name 57  "inF3"
+                              Name 59  "inF3"
+                              Name 61  "inF4"
+                              Name 63  "inF4"
+                              Name 65  "inI2"
+                              Name 67  "inI2"
+                              Name 69  "param"
+                              Name 71  "param"
+                              Name 73  "param"
+                              Name 75  "param"
+                              Name 77  "param"
+                              Decorate 51(inF1) Location 0
+                              Decorate 55(inF2) Location 1
+                              Decorate 59(inF3) Location 2
+                              Decorate 63(inF4) Location 3
+                              Decorate 67(inI2) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Input 6(float)
-         8(inF1):      7(ptr) Variable Input
-               9:             TypeVector 6(float) 2
-              10:    6(float) Constant 3204448256
-              11:    6(float) Constant 3179282432
-              12:    9(fvec2) ConstantComposite 10 11
-              14:             TypePointer Input 9(fvec2)
-        15(inF2):     14(ptr) Variable Input
-              16:    6(float) Constant 0
-              17:    6(float) Constant 1031798784
-              18:    9(fvec2) ConstantComposite 16 17
-              20:             TypeVector 6(float) 3
-              21:             TypePointer Input 20(fvec3)
-        22(inF3):     21(ptr) Variable Input
-              23:    6(float) Constant 1044381696
-              24:    6(float) Constant 3200253952
-              25:    9(fvec2) ConstantComposite 23 24
-              27:             TypeVector 6(float) 4
-              28:             TypePointer Input 27(fvec4)
-        29(inF4):     28(ptr) Variable Input
-              30:    6(float) Constant 1054867456
-              31:    9(fvec2) ConstantComposite 30 10
-              33:             TypeInt 32 1
-              34:             TypeVector 33(int) 2
-              35:             TypePointer Input 34(ivec2)
-        36(inI2):     35(ptr) Variable Input
-              38:     33(int) Constant 28
+               7:             TypePointer Function 6(float)
+               8:             TypeVector 6(float) 2
+               9:             TypePointer Function 8(fvec2)
+              10:             TypeVector 6(float) 3
+              11:             TypePointer Function 10(fvec3)
+              12:             TypeVector 6(float) 4
+              13:             TypePointer Function 12(fvec4)
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 2
+              16:             TypePointer Function 15(ivec2)
+              17:             TypeFunction 2 7(ptr) 9(ptr) 11(ptr) 13(ptr) 16(ptr)
+              25:    6(float) Constant 3204448256
+              26:    6(float) Constant 3179282432
+              27:    8(fvec2) ConstantComposite 25 26
+              29:    6(float) Constant 0
+              30:    6(float) Constant 1031798784
+              31:    8(fvec2) ConstantComposite 29 30
+              33:    6(float) Constant 1044381696
+              34:    6(float) Constant 3200253952
+              35:    8(fvec2) ConstantComposite 33 34
+              37:    6(float) Constant 1054867456
+              38:    8(fvec2) ConstantComposite 37 25
+              41:     14(int) Constant 28
+              50:             TypePointer Input 6(float)
+        51(inF1):     50(ptr) Variable Input
+              54:             TypePointer Input 8(fvec2)
+        55(inF2):     54(ptr) Variable Input
+              58:             TypePointer Input 10(fvec3)
+        59(inF3):     58(ptr) Variable Input
+              62:             TypePointer Input 12(fvec4)
+        63(inF4):     62(ptr) Variable Input
+              66:             TypePointer Input 15(ivec2)
+        67(inI2):     66(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-              13:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 8(inF1) 12
-              19:    9(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 15(inF2) 18
-              26:   20(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 22(inF3) 25
-              32:   27(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 29(inF4) 31
-              37:   34(ivec2) Load 36(inI2)
-              39:   34(ivec2) CompositeConstruct 38 38
-              40:   34(ivec2) ShiftLeftLogical 37 39
-              41:   34(ivec2) CompositeConstruct 38 38
-              42:   34(ivec2) ShiftRightArithmetic 40 41
-              43:    9(fvec2) ConvertSToF 42
-              44:    9(fvec2) VectorTimesScalar 43 17
-              45:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 8(inF1) 44
+        49(inF1):      7(ptr) Variable Function
+        53(inF2):      9(ptr) Variable Function
+        57(inF3):     11(ptr) Variable Function
+        61(inF4):     13(ptr) Variable Function
+        65(inI2):     16(ptr) Variable Function
+       69(param):      7(ptr) Variable Function
+       71(param):      9(ptr) Variable Function
+       73(param):     11(ptr) Variable Function
+       75(param):     13(ptr) Variable Function
+       77(param):     16(ptr) Variable Function
+              52:    6(float) Load 51(inF1)
+                              Store 49(inF1) 52
+              56:    8(fvec2) Load 55(inF2)
+                              Store 53(inF2) 56
+              60:   10(fvec3) Load 59(inF3)
+                              Store 57(inF3) 60
+              64:   12(fvec4) Load 63(inF4)
+                              Store 61(inF4) 64
+              68:   15(ivec2) Load 67(inI2)
+                              Store 65(inI2) 68
+              70:    6(float) Load 49(inF1)
+                              Store 69(param) 70
+              72:    8(fvec2) Load 53(inF2)
+                              Store 71(param) 72
+              74:   10(fvec3) Load 57(inF3)
+                              Store 73(param) 74
+              76:   12(fvec4) Load 61(inF4)
+                              Store 75(param) 76
+              78:   15(ivec2) Load 65(inI2)
+                              Store 77(param) 78
+              79:           2 FunctionCall 23(@main(f1;vf2;vf3;vf4;vi2;) 69(param) 71(param) 73(param) 75(param) 77(param)
+                              Return
+                              FunctionEnd
+23(@main(f1;vf2;vf3;vf4;vi2;):           2 Function None 17
+        18(inF1):      7(ptr) FunctionParameter
+        19(inF2):      9(ptr) FunctionParameter
+        20(inF3):     11(ptr) FunctionParameter
+        21(inF4):     13(ptr) FunctionParameter
+        22(inI2):     16(ptr) FunctionParameter
+              24:             Label
+              28:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 27
+              32:    8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 19(inF2) 31
+              36:   10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 20(inF3) 35
+              39:   12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 21(inF4) 38
+              40:   15(ivec2) Load 22(inI2)
+              42:   15(ivec2) CompositeConstruct 41 41
+              43:   15(ivec2) ShiftLeftLogical 40 42
+              44:   15(ivec2) CompositeConstruct 41 41
+              45:   15(ivec2) ShiftRightArithmetic 43 44
+              46:    8(fvec2) ConvertSToF 45
+              47:    8(fvec2) VectorTimesScalar 46 30
+              48:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 47
                               Return
                               FunctionEnd

+ 38 - 24
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out

@@ -49,22 +49,29 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:29  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:29  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:29    Function Parameters: 
-0:29      'inF0' (layout(location=0 ) in 4-component vector of float)
+0:29      'inF0' (in 4-component vector of float)
 0:?     Sequence
 0:30      ERROR: Bad unary op
  (temp 4-component vector of uint)
-0:30        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:32      Sequence
-0:32        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:32        Branch: Return
+0:30        'inF0' (in 4-component vector of float)
+0:32      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:29  Function Definition: PixelShaderFunction( (temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:29      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:29        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
@@ -116,22 +123,29 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:29  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:29  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:29    Function Parameters: 
-0:29      'inF0' (layout(location=0 ) in 4-component vector of float)
+0:29      'inF0' (in 4-component vector of float)
 0:?     Sequence
 0:30      ERROR: Bad unary op
  (temp 4-component vector of uint)
-0:30        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:32      Sequence
-0:32        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:32        Branch: Return
+0:30        'inF0' (in 4-component vector of float)
+0:32      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:29  Function Definition: PixelShaderFunction( (temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:29      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:29        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'inF0' (layout(location=0 ) in 4-component vector of float)

File diff ditekan karena terlalu besar
+ 485 - 478
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out


+ 129 - 60
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out

@@ -2,11 +2,11 @@ hlsl.intrinsics.lit.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1;f1;f1; (temp void)
+0:2  Function Definition: @PixelShaderFunction(f1;f1;f1; (temp void)
 0:2    Function Parameters: 
-0:2      'n_dot_l' (layout(location=0 ) in float)
-0:2      'n_dot_h' (layout(location=1 ) in float)
-0:2      'm' (layout(location=2 ) in float)
+0:2      'n_dot_l' (in float)
+0:2      'n_dot_h' (in float)
+0:2      'm' (in float)
 0:?     Sequence
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
@@ -15,15 +15,15 @@ gl_FragCoord origin is upper left
 0:3            Constant:
 0:3              1.000000
 0:3            max (temp float)
-0:3              'n_dot_l' (layout(location=0 ) in float)
+0:3              'n_dot_l' (in float)
 0:3              Constant:
 0:3                0.000000
 0:3            Test condition and select (temp float)
 0:3              Condition
 0:3              Compare Less Than (temp bool)
 0:3                min (temp float)
-0:3                  'n_dot_l' (layout(location=0 ) in float)
-0:3                  'n_dot_h' (layout(location=1 ) in float)
+0:3                  'n_dot_l' (in float)
+0:3                  'n_dot_h' (in float)
 0:3                Constant:
 0:3                  0.000000
 0:3              true case
@@ -31,10 +31,26 @@ gl_FragCoord origin is upper left
 0:3                0.000000
 0:3              false case
 0:3              component-wise multiply (temp float)
-0:3                'n_dot_h' (layout(location=1 ) in float)
-0:3                'm' (layout(location=2 ) in float)
+0:3                'n_dot_h' (in float)
+0:3                'm' (in float)
 0:3            Constant:
 0:3              1.000000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         'n_dot_l' (temp float)
+0:?         'n_dot_l' (layout(location=0 ) in float)
+0:2      move second child to first child (temp float)
+0:?         'n_dot_h' (temp float)
+0:?         'n_dot_h' (layout(location=1 ) in float)
+0:2      move second child to first child (temp float)
+0:?         'm' (temp float)
+0:?         'm' (layout(location=2 ) in float)
+0:2      Function Call: @PixelShaderFunction(f1;f1;f1; (temp void)
+0:?         'n_dot_l' (temp float)
+0:?         'n_dot_h' (temp float)
+0:?         'm' (temp float)
 0:?   Linker Objects
 0:?     'n_dot_l' (layout(location=0 ) in float)
 0:?     'n_dot_h' (layout(location=1 ) in float)
@@ -47,11 +63,11 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1;f1;f1; (temp void)
+0:2  Function Definition: @PixelShaderFunction(f1;f1;f1; (temp void)
 0:2    Function Parameters: 
-0:2      'n_dot_l' (layout(location=0 ) in float)
-0:2      'n_dot_h' (layout(location=1 ) in float)
-0:2      'm' (layout(location=2 ) in float)
+0:2      'n_dot_l' (in float)
+0:2      'n_dot_h' (in float)
+0:2      'm' (in float)
 0:?     Sequence
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
@@ -60,15 +76,15 @@ gl_FragCoord origin is upper left
 0:3            Constant:
 0:3              1.000000
 0:3            max (temp float)
-0:3              'n_dot_l' (layout(location=0 ) in float)
+0:3              'n_dot_l' (in float)
 0:3              Constant:
 0:3                0.000000
 0:3            Test condition and select (temp float)
 0:3              Condition
 0:3              Compare Less Than (temp bool)
 0:3                min (temp float)
-0:3                  'n_dot_l' (layout(location=0 ) in float)
-0:3                  'n_dot_h' (layout(location=1 ) in float)
+0:3                  'n_dot_l' (in float)
+0:3                  'n_dot_h' (in float)
 0:3                Constant:
 0:3                  0.000000
 0:3              true case
@@ -76,10 +92,26 @@ gl_FragCoord origin is upper left
 0:3                0.000000
 0:3              false case
 0:3              component-wise multiply (temp float)
-0:3                'n_dot_h' (layout(location=1 ) in float)
-0:3                'm' (layout(location=2 ) in float)
+0:3                'n_dot_h' (in float)
+0:3                'm' (in float)
 0:3            Constant:
 0:3              1.000000
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         'n_dot_l' (temp float)
+0:?         'n_dot_l' (layout(location=0 ) in float)
+0:2      move second child to first child (temp float)
+0:?         'n_dot_h' (temp float)
+0:?         'n_dot_h' (layout(location=1 ) in float)
+0:2      move second child to first child (temp float)
+0:?         'm' (temp float)
+0:?         'm' (layout(location=2 ) in float)
+0:2      Function Call: @PixelShaderFunction(f1;f1;f1; (temp void)
+0:?         'n_dot_l' (temp float)
+0:?         'n_dot_h' (temp float)
+0:?         'm' (temp float)
 0:?   Linker Objects
 0:?     'n_dot_l' (layout(location=0 ) in float)
 0:?     'n_dot_h' (layout(location=1 ) in float)
@@ -87,58 +119,95 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 33
+// Id's are bound by 52
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 12 19 28
+                              EntryPoint Fragment 4  "PixelShaderFunction" 37 40 43
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "r0"
-                              Name 12  "n_dot_l"
-                              Name 19  "n_dot_h"
-                              Name 28  "m"
-                              Decorate 12(n_dot_l) Location 0
-                              Decorate 19(n_dot_h) Location 1
-                              Decorate 28(m) Location 2
+                              Name 12  "@PixelShaderFunction(f1;f1;f1;"
+                              Name 9  "n_dot_l"
+                              Name 10  "n_dot_h"
+                              Name 11  "m"
+                              Name 16  "r0"
+                              Name 35  "n_dot_l"
+                              Name 37  "n_dot_l"
+                              Name 39  "n_dot_h"
+                              Name 40  "n_dot_h"
+                              Name 42  "m"
+                              Name 43  "m"
+                              Name 45  "param"
+                              Name 47  "param"
+                              Name 49  "param"
+                              Decorate 37(n_dot_l) Location 0
+                              Decorate 40(n_dot_h) Location 1
+                              Decorate 43(m) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:    6(float) Constant 1065353216
-              11:             TypePointer Input 6(float)
-     12(n_dot_l):     11(ptr) Variable Input
-              14:    6(float) Constant 0
-              16:             TypePointer Function 6(float)
-     19(n_dot_h):     11(ptr) Variable Input
-              22:             TypeBool
-           28(m):     11(ptr) Variable Input
+               7:             TypePointer Function 6(float)
+               8:             TypeFunction 2 7(ptr) 7(ptr) 7(ptr)
+              14:             TypeVector 6(float) 4
+              15:             TypePointer Function 14(fvec4)
+              17:    6(float) Constant 1065353216
+              19:    6(float) Constant 0
+              25:             TypeBool
+              36:             TypePointer Input 6(float)
+     37(n_dot_l):     36(ptr) Variable Input
+     40(n_dot_h):     36(ptr) Variable Input
+           43(m):     36(ptr) Variable Input
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           9(r0):      8(ptr) Variable Function
-              17:     16(ptr) Variable Function
-              13:    6(float) Load 12(n_dot_l)
-              15:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 13 14
-              18:    6(float) Load 12(n_dot_l)
-              20:    6(float) Load 19(n_dot_h)
-              21:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 18 20
-              23:    22(bool) FOrdLessThan 21 14
-                              SelectionMerge 25 None
-                              BranchConditional 23 24 26
-              24:               Label
-                                Store 17 14
-                                Branch 25
-              26:               Label
-              27:    6(float)   Load 19(n_dot_h)
-              29:    6(float)   Load 28(m)
-              30:    6(float)   FMul 27 29
-                                Store 17 30
-                                Branch 25
-              25:             Label
-              31:    6(float) Load 17
-              32:    7(fvec4) CompositeConstruct 10 15 31 10
-                              Store 9(r0) 32
+     35(n_dot_l):      7(ptr) Variable Function
+     39(n_dot_h):      7(ptr) Variable Function
+           42(m):      7(ptr) Variable Function
+       45(param):      7(ptr) Variable Function
+       47(param):      7(ptr) Variable Function
+       49(param):      7(ptr) Variable Function
+              38:    6(float) Load 37(n_dot_l)
+                              Store 35(n_dot_l) 38
+              41:    6(float) Load 40(n_dot_h)
+                              Store 39(n_dot_h) 41
+              44:    6(float) Load 43(m)
+                              Store 42(m) 44
+              46:    6(float) Load 35(n_dot_l)
+                              Store 45(param) 46
+              48:    6(float) Load 39(n_dot_h)
+                              Store 47(param) 48
+              50:    6(float) Load 42(m)
+                              Store 49(param) 50
+              51:           2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 45(param) 47(param) 49(param)
+                              Return
+                              FunctionEnd
+12(@PixelShaderFunction(f1;f1;f1;):           2 Function None 8
+      9(n_dot_l):      7(ptr) FunctionParameter
+     10(n_dot_h):      7(ptr) FunctionParameter
+           11(m):      7(ptr) FunctionParameter
+              13:             Label
+          16(r0):     15(ptr) Variable Function
+              21:      7(ptr) Variable Function
+              18:    6(float) Load 9(n_dot_l)
+              20:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 18 19
+              22:    6(float) Load 9(n_dot_l)
+              23:    6(float) Load 10(n_dot_h)
+              24:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 22 23
+              26:    25(bool) FOrdLessThan 24 19
+                              SelectionMerge 28 None
+                              BranchConditional 26 27 29
+              27:               Label
+                                Store 21 19
+                                Branch 28
+              29:               Label
+              30:    6(float)   Load 10(n_dot_h)
+              31:    6(float)   Load 11(m)
+              32:    6(float)   FMul 30 31
+                                Store 21 32
+                                Branch 28
+              28:             Label
+              33:    6(float) Load 21
+              34:   14(fvec4) CompositeConstruct 17 20 33 17
+                              Store 16(r0) 34
                               Return
                               FunctionEnd

+ 150 - 63
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out

@@ -45,22 +45,41 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:158  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:158  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
 0:158    Function Parameters: 
-0:158      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:158      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:158      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:158      'inI0' (layout(location=3 ) in 4-component vector of int)
+0:158      'inF0' (in 4-component vector of float)
+0:158      'inF1' (in 4-component vector of float)
+0:158      'inF2' (in 4-component vector of float)
+0:158      'inI0' (in 4-component vector of int)
 0:?     Sequence
-0:199      Sequence
-0:199        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:199        Branch: Return
+0:199      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:158  Function Definition: ComputeShaderFunction( (temp void)
+0:158    Function Parameters: 
+0:?     Sequence
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:158        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
@@ -118,22 +137,41 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:158  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:158  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:158    Function Parameters: 
+0:158      'inF0' (in 4-component vector of float)
+0:158      'inF1' (in 4-component vector of float)
+0:158      'inF2' (in 4-component vector of float)
+0:158      'inI0' (in 4-component vector of int)
+0:?     Sequence
+0:199      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:158  Function Definition: ComputeShaderFunction( (temp void)
 0:158    Function Parameters: 
-0:158      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:158      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:158      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:158      'inI0' (layout(location=3 ) in 4-component vector of int)
 0:?     Sequence
-0:199      Sequence
-0:199        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:199        Branch: Return
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:158      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:158      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:158        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
@@ -143,12 +181,12 @@ local_size = (1, 1, 1)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 72
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 61 66 67 68 71
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 76 79 82 86 89
                               ExecutionMode 4 LocalSize 1 1 1
                               Name 4  "ComputeShaderFunction"
                               Name 15  "ComputeShaderFunctionS(f1;f1;f1;i1;"
@@ -171,16 +209,29 @@ local_size = (1, 1, 1)
                               Name 40  "inF1"
                               Name 41  "inF2"
                               Name 42  "inI0"
-                              Name 61  "@entryPointOutput"
-                              Name 66  "inF0"
-                              Name 67  "inF1"
-                              Name 68  "inF2"
-                              Name 71  "inI0"
-                              Decorate 61(@entryPointOutput) Location 0
-                              Decorate 66(inF0) Location 0
-                              Decorate 67(inF1) Location 1
-                              Decorate 68(inF2) Location 2
-                              Decorate 71(inI0) Location 3
+                              Name 54  "@ComputeShaderFunction(vf4;vf4;vf4;vi4;"
+                              Name 50  "inF0"
+                              Name 51  "inF1"
+                              Name 52  "inF2"
+                              Name 53  "inI0"
+                              Name 74  "inF0"
+                              Name 76  "inF0"
+                              Name 78  "inF1"
+                              Name 79  "inF1"
+                              Name 81  "inF2"
+                              Name 82  "inF2"
+                              Name 84  "inI0"
+                              Name 86  "inI0"
+                              Name 89  "@entryPointOutput"
+                              Name 90  "param"
+                              Name 92  "param"
+                              Name 94  "param"
+                              Name 96  "param"
+                              Decorate 76(inF0) Location 0
+                              Decorate 79(inF1) Location 1
+                              Decorate 82(inF2) Location 2
+                              Decorate 86(inI0) Location 3
+                              Decorate 89(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -198,27 +249,55 @@ local_size = (1, 1, 1)
               36:             TypeVector 8(int) 3
               37:             TypePointer Function 36(ivec3)
               38:             TypeFunction 34(fvec3) 35(ptr) 35(ptr) 35(ptr) 37(ptr)
-              45:    6(float) Constant 0
-              50:    6(float) Constant 1065353216
-              51:    6(float) Constant 1073741824
-              52:   23(fvec2) ConstantComposite 50 51
-              55:    6(float) Constant 1077936128
-              56:   34(fvec3) ConstantComposite 50 51 55
-              59:             TypeVector 6(float) 4
-              60:             TypePointer Output 59(fvec4)
-61(@entryPointOutput):     60(ptr) Variable Output
-              62:    6(float) Constant 1082130432
-              63:   59(fvec4) ConstantComposite 50 51 55 62
-              65:             TypePointer Input 59(fvec4)
-        66(inF0):     65(ptr) Variable Input
-        67(inF1):     65(ptr) Variable Input
-        68(inF2):     65(ptr) Variable Input
-              69:             TypeVector 8(int) 4
-              70:             TypePointer Input 69(ivec4)
-        71(inI0):     70(ptr) Variable Input
+              45:             TypeVector 6(float) 4
+              46:             TypePointer Function 45(fvec4)
+              47:             TypeVector 8(int) 4
+              48:             TypePointer Function 47(ivec4)
+              49:             TypeFunction 45(fvec4) 46(ptr) 46(ptr) 46(ptr) 48(ptr)
+              56:    6(float) Constant 0
+              61:    6(float) Constant 1065353216
+              62:    6(float) Constant 1073741824
+              63:   23(fvec2) ConstantComposite 61 62
+              66:    6(float) Constant 1077936128
+              67:   34(fvec3) ConstantComposite 61 62 66
+              70:    6(float) Constant 1082130432
+              71:   45(fvec4) ConstantComposite 61 62 66 70
+              75:             TypePointer Input 45(fvec4)
+        76(inF0):     75(ptr) Variable Input
+        79(inF1):     75(ptr) Variable Input
+        82(inF2):     75(ptr) Variable Input
+              85:             TypePointer Input 47(ivec4)
+        86(inI0):     85(ptr) Variable Input
+              88:             TypePointer Output 45(fvec4)
+89(@entryPointOutput):     88(ptr) Variable Output
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-                              Store 61(@entryPointOutput) 63
+        74(inF0):     46(ptr) Variable Function
+        78(inF1):     46(ptr) Variable Function
+        81(inF2):     46(ptr) Variable Function
+        84(inI0):     48(ptr) Variable Function
+       90(param):     46(ptr) Variable Function
+       92(param):     46(ptr) Variable Function
+       94(param):     46(ptr) Variable Function
+       96(param):     48(ptr) Variable Function
+              77:   45(fvec4) Load 76(inF0)
+                              Store 74(inF0) 77
+              80:   45(fvec4) Load 79(inF1)
+                              Store 78(inF1) 80
+              83:   45(fvec4) Load 82(inF2)
+                              Store 81(inF2) 83
+              87:   47(ivec4) Load 86(inI0)
+                              Store 84(inI0) 87
+              91:   45(fvec4) Load 74(inF0)
+                              Store 90(param) 91
+              93:   45(fvec4) Load 78(inF1)
+                              Store 92(param) 93
+              95:   45(fvec4) Load 81(inF2)
+                              Store 94(param) 95
+              97:   47(ivec4) Load 84(inI0)
+                              Store 96(param) 97
+              98:   45(fvec4) FunctionCall 54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;) 90(param) 92(param) 94(param) 96(param)
+                              Store 89(@entryPointOutput) 98
                               Return
                               FunctionEnd
 15(ComputeShaderFunctionS(f1;f1;f1;i1;):    6(float) Function None 10
@@ -227,7 +306,7 @@ local_size = (1, 1, 1)
         13(inF2):      7(ptr) FunctionParameter
         14(inI0):      9(ptr) FunctionParameter
               16:             Label
-                              ReturnValue 45
+                              ReturnValue 56
                               FunctionEnd
 21(ComputeShaderFunction1(vf1;vf1;vf1;vi1;):    6(float) Function None 10
         17(inF0):      7(ptr) FunctionParameter
@@ -235,7 +314,7 @@ local_size = (1, 1, 1)
         19(inF2):      7(ptr) FunctionParameter
         20(inI0):      9(ptr) FunctionParameter
               22:             Label
-                              ReturnValue 45
+                              ReturnValue 56
                               FunctionEnd
 32(ComputeShaderFunction2(vf2;vf2;vf2;vi2;):   23(fvec2) Function None 27
         28(inF0):     24(ptr) FunctionParameter
@@ -243,7 +322,7 @@ local_size = (1, 1, 1)
         30(inF2):     24(ptr) FunctionParameter
         31(inI0):     26(ptr) FunctionParameter
               33:             Label
-                              ReturnValue 52
+                              ReturnValue 63
                               FunctionEnd
 43(ComputeShaderFunction3(vf3;vf3;vf3;vi3;):   34(fvec3) Function None 38
         39(inF0):     35(ptr) FunctionParameter
@@ -251,5 +330,13 @@ local_size = (1, 1, 1)
         41(inF2):     35(ptr) FunctionParameter
         42(inI0):     37(ptr) FunctionParameter
               44:             Label
-                              ReturnValue 56
+                              ReturnValue 67
+                              FunctionEnd
+54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;):   45(fvec4) Function None 49
+        50(inF0):     46(ptr) FunctionParameter
+        51(inF1):     46(ptr) FunctionParameter
+        52(inF2):     46(ptr) FunctionParameter
+        53(inI0):     48(ptr) FunctionParameter
+              55:             Label
+                              ReturnValue 71
                               FunctionEnd

+ 80 - 42
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out

@@ -250,49 +250,68 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:80  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:80  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
 0:80    Function Parameters: 
-0:80      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:80      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:80      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:80      'inI0' (layout(location=3 ) in 4-component vector of int)
+0:80      'inF0' (in 4-component vector of float)
+0:80      'inF1' (in 4-component vector of float)
+0:80      'inF2' (in 4-component vector of float)
+0:80      'inI0' (in 4-component vector of int)
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
 0:82      bitCount (temp 4-component vector of uint)
 0:82        Convert float to uint (temp 4-component vector of uint)
-0:82          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:82          'inF0' (in 4-component vector of float)
 0:83      cross-product (temp 3-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
-0:83          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:83          'inF0' (in 4-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
-0:83          'inF1' (layout(location=1 ) in 4-component vector of float)
+0:83          'inF1' (in 4-component vector of float)
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
  (temp 4-component vector of float)
 0:85        Convert float to uint (temp 4-component vector of uint)
-0:85          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:85          'inF0' (in 4-component vector of float)
 0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
-0:86          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:86          'inF0' (in 4-component vector of float)
 0:87      findLSB (temp 4-component vector of uint)
 0:87        Convert float to uint (temp 4-component vector of uint)
-0:87          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:87          'inF0' (in 4-component vector of float)
 0:89      bitFieldReverse (temp 4-component vector of uint)
 0:89        Convert float to uint (temp 4-component vector of uint)
-0:89          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:89          'inF0' (in 4-component vector of float)
 0:90      Constant:
 0:90        0.000000
-0:92      Sequence
-0:92        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:92        Branch: Return
+0:92      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:80  Function Definition: PixelShaderFunction( (temp void)
+0:80    Function Parameters: 
+0:?     Sequence
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:80        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:115  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:115    Function Parameters: 
 0:115      'inF0' (in 2X2 matrix of float)
@@ -619,49 +638,68 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:80  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:80  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
 0:80    Function Parameters: 
-0:80      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:80      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:80      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:80      'inI0' (layout(location=3 ) in 4-component vector of int)
+0:80      'inF0' (in 4-component vector of float)
+0:80      'inF1' (in 4-component vector of float)
+0:80      'inF2' (in 4-component vector of float)
+0:80      'inI0' (in 4-component vector of int)
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
 0:82      bitCount (temp 4-component vector of uint)
 0:82        Convert float to uint (temp 4-component vector of uint)
-0:82          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:82          'inF0' (in 4-component vector of float)
 0:83      cross-product (temp 3-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
-0:83          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:83          'inF0' (in 4-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
-0:83          'inF1' (layout(location=1 ) in 4-component vector of float)
+0:83          'inF1' (in 4-component vector of float)
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
  (temp 4-component vector of float)
 0:85        Convert float to uint (temp 4-component vector of uint)
-0:85          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:85          'inF0' (in 4-component vector of float)
 0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
-0:86          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:86          'inF0' (in 4-component vector of float)
 0:87      findLSB (temp 4-component vector of uint)
 0:87        Convert float to uint (temp 4-component vector of uint)
-0:87          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:87          'inF0' (in 4-component vector of float)
 0:89      bitFieldReverse (temp 4-component vector of uint)
 0:89        Convert float to uint (temp 4-component vector of uint)
-0:89          'inF0' (layout(location=0 ) in 4-component vector of float)
+0:89          'inF0' (in 4-component vector of float)
 0:90      Constant:
 0:90        0.000000
-0:92      Sequence
-0:92        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:92        Branch: Return
+0:92      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:80  Function Definition: PixelShaderFunction( (temp void)
+0:80    Function Parameters: 
+0:?     Sequence
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:80      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:80      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:80        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:115  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:115    Function Parameters: 
 0:115      'inF0' (in 2X2 matrix of float)

+ 235 - 148
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out

@@ -44,22 +44,41 @@ Shader version: 450
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:176  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:176  Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
 0:176    Function Parameters: 
-0:176      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:176      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:176      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:176      'inI0' (layout(location=3 ) in 4-component vector of int)
+0:176      'inF0' (in 4-component vector of float)
+0:176      'inF1' (in 4-component vector of float)
+0:176      'inF2' (in 4-component vector of float)
+0:176      'inI0' (in 4-component vector of int)
 0:?     Sequence
-0:217      Sequence
-0:217        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:217        Branch: Return
+0:217      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:176  Function Definition: VertexShaderFunction( (temp void)
+0:176    Function Parameters: 
+0:?     Sequence
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:176        Function Call: @VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:226  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:226    Function Parameters: 
 0:226      'inF0' (in 2X2 matrix of float)
@@ -114,11 +133,6 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
 0:?     'gs_uc' (global uint)
@@ -131,6 +145,11 @@ Shader version: 450
 0:?     'gs_ua4' (global 4-component vector of uint)
 0:?     'gs_ub4' (global 4-component vector of uint)
 0:?     'gs_uc4' (global 4-component vector of uint)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 
 
 Linked vertex stage:
@@ -181,22 +200,41 @@ Shader version: 450
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:176  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:176  Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
 0:176    Function Parameters: 
-0:176      'inF0' (layout(location=0 ) in 4-component vector of float)
-0:176      'inF1' (layout(location=1 ) in 4-component vector of float)
-0:176      'inF2' (layout(location=2 ) in 4-component vector of float)
-0:176      'inI0' (layout(location=3 ) in 4-component vector of int)
+0:176      'inF0' (in 4-component vector of float)
+0:176      'inF1' (in 4-component vector of float)
+0:176      'inF2' (in 4-component vector of float)
+0:176      'inI0' (in 4-component vector of int)
 0:?     Sequence
-0:217      Sequence
-0:217        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             1.000000
-0:?             2.000000
-0:?             3.000000
-0:?             4.000000
-0:217        Branch: Return
+0:217      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:176  Function Definition: VertexShaderFunction( (temp void)
+0:176    Function Parameters: 
+0:?     Sequence
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF0' (temp 4-component vector of float)
+0:?         'inF0' (layout(location=0 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF1' (temp 4-component vector of float)
+0:?         'inF1' (layout(location=1 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         'inF2' (temp 4-component vector of float)
+0:?         'inF2' (layout(location=2 ) in 4-component vector of float)
+0:176      move second child to first child (temp 4-component vector of int)
+0:?         'inI0' (temp 4-component vector of int)
+0:?         'inI0' (layout(location=3 ) in 4-component vector of int)
+0:176      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:176        Function Call: @VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:?           'inF0' (temp 4-component vector of float)
+0:?           'inF1' (temp 4-component vector of float)
+0:?           'inF2' (temp 4-component vector of float)
+0:?           'inI0' (temp 4-component vector of int)
 0:226  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:226    Function Parameters: 
 0:226      'inF0' (in 2X2 matrix of float)
@@ -251,11 +289,6 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
 0:?     'gs_uc' (global uint)
@@ -268,15 +301,20 @@ Shader version: 450
 0:?     'gs_ua4' (global 4-component vector of uint)
 0:?     'gs_ub4' (global 4-component vector of uint)
 0:?     'gs_uc4' (global 4-component vector of uint)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 128
+// Id's are bound by 155
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "VertexShaderFunction" 85 102 103 104 107
+                              EntryPoint Vertex 4  "VertexShaderFunction" 100 103 106 110 113
                               Name 4  "VertexShaderFunction"
                               Name 15  "VertexShaderFunctionS(f1;f1;f1;i1;"
                               Name 11  "inF0"
@@ -298,40 +336,53 @@ Shader version: 450
                               Name 40  "inF1"
                               Name 41  "inF2"
                               Name 42  "inI0"
-                              Name 51  "VertexShaderFunction2x2(mf22;mf22;mf22;"
-                              Name 48  "inF0"
-                              Name 49  "inF1"
-                              Name 50  "inF2"
-                              Name 59  "VertexShaderFunction3x3(mf33;mf33;mf33;"
-                              Name 56  "inF0"
-                              Name 57  "inF1"
-                              Name 58  "inF2"
-                              Name 68  "VertexShaderFunction4x4(mf44;mf44;mf44;"
-                              Name 65  "inF0"
-                              Name 66  "inF1"
-                              Name 67  "inF2"
-                              Name 85  "@entryPointOutput"
-                              Name 102  "inF0"
+                              Name 54  "@VertexShaderFunction(vf4;vf4;vf4;vi4;"
+                              Name 50  "inF0"
+                              Name 51  "inF1"
+                              Name 52  "inF2"
+                              Name 53  "inI0"
+                              Name 62  "VertexShaderFunction2x2(mf22;mf22;mf22;"
+                              Name 59  "inF0"
+                              Name 60  "inF1"
+                              Name 61  "inF2"
+                              Name 70  "VertexShaderFunction3x3(mf33;mf33;mf33;"
+                              Name 67  "inF0"
+                              Name 68  "inF1"
+                              Name 69  "inF2"
+                              Name 78  "VertexShaderFunction4x4(mf44;mf44;mf44;"
+                              Name 75  "inF0"
+                              Name 76  "inF1"
+                              Name 77  "inF2"
+                              Name 98  "inF0"
+                              Name 100  "inF0"
+                              Name 102  "inF1"
                               Name 103  "inF1"
-                              Name 104  "inF2"
-                              Name 107  "inI0"
-                              Name 110  "gs_ua"
-                              Name 111  "gs_ub"
-                              Name 112  "gs_uc"
-                              Name 115  "gs_ua2"
-                              Name 116  "gs_ub2"
-                              Name 117  "gs_uc2"
-                              Name 120  "gs_ua3"
-                              Name 121  "gs_ub3"
-                              Name 122  "gs_uc3"
-                              Name 125  "gs_ua4"
-                              Name 126  "gs_ub4"
-                              Name 127  "gs_uc4"
-                              Decorate 85(@entryPointOutput) Location 0
-                              Decorate 102(inF0) Location 0
+                              Name 105  "inF2"
+                              Name 106  "inF2"
+                              Name 108  "inI0"
+                              Name 110  "inI0"
+                              Name 113  "@entryPointOutput"
+                              Name 114  "param"
+                              Name 116  "param"
+                              Name 118  "param"
+                              Name 120  "param"
+                              Name 137  "gs_ua"
+                              Name 138  "gs_ub"
+                              Name 139  "gs_uc"
+                              Name 142  "gs_ua2"
+                              Name 143  "gs_ub2"
+                              Name 144  "gs_uc2"
+                              Name 147  "gs_ua3"
+                              Name 148  "gs_ub3"
+                              Name 149  "gs_uc3"
+                              Name 152  "gs_ua4"
+                              Name 153  "gs_ub4"
+                              Name 154  "gs_uc4"
+                              Decorate 100(inF0) Location 0
                               Decorate 103(inF1) Location 1
-                              Decorate 104(inF2) Location 2
-                              Decorate 107(inI0) Location 3
+                              Decorate 106(inF2) Location 2
+                              Decorate 110(inI0) Location 3
+                              Decorate 113(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -349,62 +400,90 @@ Shader version: 450
               36:             TypeVector 8(int) 3
               37:             TypePointer Function 36(ivec3)
               38:             TypeFunction 34(fvec3) 35(ptr) 35(ptr) 35(ptr) 37(ptr)
-              45:             TypeMatrix 23(fvec2) 2
-              46:             TypePointer Function 45
-              47:             TypeFunction 45 46(ptr) 46(ptr) 46(ptr)
-              53:             TypeMatrix 34(fvec3) 3
-              54:             TypePointer Function 53
-              55:             TypeFunction 53 54(ptr) 54(ptr) 54(ptr)
-              61:             TypeVector 6(float) 4
-              62:             TypeMatrix 61(fvec4) 4
-              63:             TypePointer Function 62
-              64:             TypeFunction 62 63(ptr) 63(ptr) 63(ptr)
-              70:    6(float) Constant 0
-              75:    6(float) Constant 1065353216
-              76:    6(float) Constant 1073741824
-              77:   23(fvec2) ConstantComposite 75 76
-              80:    6(float) Constant 1077936128
-              81:   34(fvec3) ConstantComposite 75 76 80
-              84:             TypePointer Output 61(fvec4)
-85(@entryPointOutput):     84(ptr) Variable Output
-              86:    6(float) Constant 1082130432
-              87:   61(fvec4) ConstantComposite 75 76 80 86
-              89:   23(fvec2) ConstantComposite 76 76
-              90:          45 ConstantComposite 89 89
-              93:   34(fvec3) ConstantComposite 80 80 80
-              94:          53 ConstantComposite 93 93 93
-              97:   61(fvec4) ConstantComposite 86 86 86 86
-              98:          62 ConstantComposite 97 97 97 97
-             101:             TypePointer Input 61(fvec4)
-       102(inF0):    101(ptr) Variable Input
-       103(inF1):    101(ptr) Variable Input
-       104(inF2):    101(ptr) Variable Input
-             105:             TypeVector 8(int) 4
-             106:             TypePointer Input 105(ivec4)
-       107(inI0):    106(ptr) Variable Input
-             108:             TypeInt 32 0
-             109:             TypePointer Private 108(int)
-      110(gs_ua):    109(ptr) Variable Private
-      111(gs_ub):    109(ptr) Variable Private
-      112(gs_uc):    109(ptr) Variable Private
-             113:             TypeVector 108(int) 2
-             114:             TypePointer Private 113(ivec2)
-     115(gs_ua2):    114(ptr) Variable Private
-     116(gs_ub2):    114(ptr) Variable Private
-     117(gs_uc2):    114(ptr) Variable Private
-             118:             TypeVector 108(int) 3
-             119:             TypePointer Private 118(ivec3)
-     120(gs_ua3):    119(ptr) Variable Private
-     121(gs_ub3):    119(ptr) Variable Private
-     122(gs_uc3):    119(ptr) Variable Private
-             123:             TypeVector 108(int) 4
-             124:             TypePointer Private 123(ivec4)
-     125(gs_ua4):    124(ptr) Variable Private
-     126(gs_ub4):    124(ptr) Variable Private
-     127(gs_uc4):    124(ptr) Variable Private
+              45:             TypeVector 6(float) 4
+              46:             TypePointer Function 45(fvec4)
+              47:             TypeVector 8(int) 4
+              48:             TypePointer Function 47(ivec4)
+              49:             TypeFunction 45(fvec4) 46(ptr) 46(ptr) 46(ptr) 48(ptr)
+              56:             TypeMatrix 23(fvec2) 2
+              57:             TypePointer Function 56
+              58:             TypeFunction 56 57(ptr) 57(ptr) 57(ptr)
+              64:             TypeMatrix 34(fvec3) 3
+              65:             TypePointer Function 64
+              66:             TypeFunction 64 65(ptr) 65(ptr) 65(ptr)
+              72:             TypeMatrix 45(fvec4) 4
+              73:             TypePointer Function 72
+              74:             TypeFunction 72 73(ptr) 73(ptr) 73(ptr)
+              80:    6(float) Constant 0
+              85:    6(float) Constant 1065353216
+              86:    6(float) Constant 1073741824
+              87:   23(fvec2) ConstantComposite 85 86
+              90:    6(float) Constant 1077936128
+              91:   34(fvec3) ConstantComposite 85 86 90
+              94:    6(float) Constant 1082130432
+              95:   45(fvec4) ConstantComposite 85 86 90 94
+              99:             TypePointer Input 45(fvec4)
+       100(inF0):     99(ptr) Variable Input
+       103(inF1):     99(ptr) Variable Input
+       106(inF2):     99(ptr) Variable Input
+             109:             TypePointer Input 47(ivec4)
+       110(inI0):    109(ptr) Variable Input
+             112:             TypePointer Output 45(fvec4)
+113(@entryPointOutput):    112(ptr) Variable Output
+             123:   23(fvec2) ConstantComposite 86 86
+             124:          56 ConstantComposite 123 123
+             127:   34(fvec3) ConstantComposite 90 90 90
+             128:          64 ConstantComposite 127 127 127
+             131:   45(fvec4) ConstantComposite 94 94 94 94
+             132:          72 ConstantComposite 131 131 131 131
+             135:             TypeInt 32 0
+             136:             TypePointer Private 135(int)
+      137(gs_ua):    136(ptr) Variable Private
+      138(gs_ub):    136(ptr) Variable Private
+      139(gs_uc):    136(ptr) Variable Private
+             140:             TypeVector 135(int) 2
+             141:             TypePointer Private 140(ivec2)
+     142(gs_ua2):    141(ptr) Variable Private
+     143(gs_ub2):    141(ptr) Variable Private
+     144(gs_uc2):    141(ptr) Variable Private
+             145:             TypeVector 135(int) 3
+             146:             TypePointer Private 145(ivec3)
+     147(gs_ua3):    146(ptr) Variable Private
+     148(gs_ub3):    146(ptr) Variable Private
+     149(gs_uc3):    146(ptr) Variable Private
+             150:             TypeVector 135(int) 4
+             151:             TypePointer Private 150(ivec4)
+     152(gs_ua4):    151(ptr) Variable Private
+     153(gs_ub4):    151(ptr) Variable Private
+     154(gs_uc4):    151(ptr) Variable Private
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
-                              Store 85(@entryPointOutput) 87
+        98(inF0):     46(ptr) Variable Function
+       102(inF1):     46(ptr) Variable Function
+       105(inF2):     46(ptr) Variable Function
+       108(inI0):     48(ptr) Variable Function
+      114(param):     46(ptr) Variable Function
+      116(param):     46(ptr) Variable Function
+      118(param):     46(ptr) Variable Function
+      120(param):     48(ptr) Variable Function
+             101:   45(fvec4) Load 100(inF0)
+                              Store 98(inF0) 101
+             104:   45(fvec4) Load 103(inF1)
+                              Store 102(inF1) 104
+             107:   45(fvec4) Load 106(inF2)
+                              Store 105(inF2) 107
+             111:   47(ivec4) Load 110(inI0)
+                              Store 108(inI0) 111
+             115:   45(fvec4) Load 98(inF0)
+                              Store 114(param) 115
+             117:   45(fvec4) Load 102(inF1)
+                              Store 116(param) 117
+             119:   45(fvec4) Load 105(inF2)
+                              Store 118(param) 119
+             121:   47(ivec4) Load 108(inI0)
+                              Store 120(param) 121
+             122:   45(fvec4) FunctionCall 54(@VertexShaderFunction(vf4;vf4;vf4;vi4;) 114(param) 116(param) 118(param) 120(param)
+                              Store 113(@entryPointOutput) 122
                               Return
                               FunctionEnd
 15(VertexShaderFunctionS(f1;f1;f1;i1;):    6(float) Function None 10
@@ -413,7 +492,7 @@ Shader version: 450
         13(inF2):      7(ptr) FunctionParameter
         14(inI0):      9(ptr) FunctionParameter
               16:             Label
-                              ReturnValue 70
+                              ReturnValue 80
                               FunctionEnd
 21(VertexShaderFunction1(vf1;vf1;vf1;vi1;):    6(float) Function None 10
         17(inF0):      7(ptr) FunctionParameter
@@ -421,7 +500,7 @@ Shader version: 450
         19(inF2):      7(ptr) FunctionParameter
         20(inI0):      9(ptr) FunctionParameter
               22:             Label
-                              ReturnValue 70
+                              ReturnValue 80
                               FunctionEnd
 32(VertexShaderFunction2(vf2;vf2;vf2;vi2;):   23(fvec2) Function None 27
         28(inF0):     24(ptr) FunctionParameter
@@ -429,7 +508,7 @@ Shader version: 450
         30(inF2):     24(ptr) FunctionParameter
         31(inI0):     26(ptr) FunctionParameter
               33:             Label
-                              ReturnValue 77
+                              ReturnValue 87
                               FunctionEnd
 43(VertexShaderFunction3(vf3;vf3;vf3;vi3;):   34(fvec3) Function None 38
         39(inF0):     35(ptr) FunctionParameter
@@ -437,26 +516,34 @@ Shader version: 450
         41(inF2):     35(ptr) FunctionParameter
         42(inI0):     37(ptr) FunctionParameter
               44:             Label
-                              ReturnValue 81
+                              ReturnValue 91
+                              FunctionEnd
+54(@VertexShaderFunction(vf4;vf4;vf4;vi4;):   45(fvec4) Function None 49
+        50(inF0):     46(ptr) FunctionParameter
+        51(inF1):     46(ptr) FunctionParameter
+        52(inF2):     46(ptr) FunctionParameter
+        53(inI0):     48(ptr) FunctionParameter
+              55:             Label
+                              ReturnValue 95
                               FunctionEnd
-51(VertexShaderFunction2x2(mf22;mf22;mf22;):          45 Function None 47
-        48(inF0):     46(ptr) FunctionParameter
-        49(inF1):     46(ptr) FunctionParameter
-        50(inF2):     46(ptr) FunctionParameter
-              52:             Label
-                              ReturnValue 90
+62(VertexShaderFunction2x2(mf22;mf22;mf22;):          56 Function None 58
+        59(inF0):     57(ptr) FunctionParameter
+        60(inF1):     57(ptr) FunctionParameter
+        61(inF2):     57(ptr) FunctionParameter
+              63:             Label
+                              ReturnValue 124
                               FunctionEnd
-59(VertexShaderFunction3x3(mf33;mf33;mf33;):          53 Function None 55
-        56(inF0):     54(ptr) FunctionParameter
-        57(inF1):     54(ptr) FunctionParameter
-        58(inF2):     54(ptr) FunctionParameter
-              60:             Label
-                              ReturnValue 94
+70(VertexShaderFunction3x3(mf33;mf33;mf33;):          64 Function None 66
+        67(inF0):     65(ptr) FunctionParameter
+        68(inF1):     65(ptr) FunctionParameter
+        69(inF2):     65(ptr) FunctionParameter
+              71:             Label
+                              ReturnValue 128
                               FunctionEnd
-68(VertexShaderFunction4x4(mf44;mf44;mf44;):          62 Function None 64
-        65(inF0):     63(ptr) FunctionParameter
-        66(inF1):     63(ptr) FunctionParameter
-        67(inF2):     63(ptr) FunctionParameter
-              69:             Label
-                              ReturnValue 98
+78(VertexShaderFunction4x4(mf44;mf44;mf44;):          72 Function None 74
+        75(inF0):     73(ptr) FunctionParameter
+        76(inF1):     73(ptr) FunctionParameter
+        77(inF2):     73(ptr) FunctionParameter
+              79:             Label
+                              ReturnValue 132
                               FunctionEnd

+ 104 - 91
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out

@@ -2,7 +2,7 @@ hlsl.intrinsics.promote.down.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:15  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:15  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:15    Function Parameters: 
 0:?     Sequence
 0:16      Sequence
@@ -33,15 +33,18 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:21      Sequence
-0:21        Sequence
-0:21          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:21            color: direct index for structure (temp 4-component vector of float)
-0:21              'ps_output' (temp structure{temp 4-component vector of float color})
-0:21              Constant:
-0:21                0 (const int)
-0:21        Branch: Return
+0:21      Branch: Return with expression
+0:21        'ps_output' (temp structure{temp 4-component vector of float color})
+0:15  Function Definition: main( (temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:15          color: direct index for structure (temp 4-component vector of float)
+0:15            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:15            Constant:
+0:15              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
@@ -53,7 +56,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:15  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:15  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:15    Function Parameters: 
 0:?     Sequence
 0:16      Sequence
@@ -84,101 +87,111 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:21      Sequence
-0:21        Sequence
-0:21          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:21            color: direct index for structure (temp 4-component vector of float)
-0:21              'ps_output' (temp structure{temp 4-component vector of float color})
-0:21              Constant:
-0:21                0 (const int)
-0:21        Branch: Return
+0:21      Branch: Return with expression
+0:21        'ps_output' (temp structure{temp 4-component vector of float color})
+0:15  Function Definition: main( (temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:15          color: direct index for structure (temp 4-component vector of float)
+0:15            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:15            Constant:
+0:15              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 45
+// Id's are bound by 50
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 41
+                              EntryPoint Fragment 4  "main" 47
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "r00"
-                              Name 14  "$Global"
-                              MemberName 14($Global) 0  "i"
-                              MemberName 14($Global) 1  "u"
-                              MemberName 14($Global) 2  "f"
-                              MemberName 14($Global) 3  "b"
-                              MemberName 14($Global) 4  "i2"
-                              MemberName 14($Global) 5  "u2"
-                              MemberName 14($Global) 6  "f2"
-                              MemberName 14($Global) 7  "b2"
-                              Name 16  ""
-                              Name 24  "r01"
-                              Name 32  "PS_OUTPUT"
-                              MemberName 32(PS_OUTPUT) 0  "color"
-                              Name 34  "ps_output"
-                              Name 41  "color"
-                              MemberDecorate 14($Global) 0 Offset 0
-                              MemberDecorate 14($Global) 1 Offset 4
-                              MemberDecorate 14($Global) 2 Offset 8
-                              MemberDecorate 14($Global) 3 Offset 12
-                              MemberDecorate 14($Global) 4 Offset 16
-                              MemberDecorate 14($Global) 5 Offset 24
-                              MemberDecorate 14($Global) 6 Offset 32
-                              MemberDecorate 14($Global) 7 Offset 40
-                              Decorate 14($Global) Block
-                              Decorate 16 DescriptorSet 0
-                              Decorate 41(color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 10  "@main("
+                              Name 14  "r00"
+                              Name 19  "$Global"
+                              MemberName 19($Global) 0  "i"
+                              MemberName 19($Global) 1  "u"
+                              MemberName 19($Global) 2  "f"
+                              MemberName 19($Global) 3  "b"
+                              MemberName 19($Global) 4  "i2"
+                              MemberName 19($Global) 5  "u2"
+                              MemberName 19($Global) 6  "f2"
+                              MemberName 19($Global) 7  "b2"
+                              Name 21  ""
+                              Name 29  "r01"
+                              Name 37  "ps_output"
+                              Name 47  "color"
+                              MemberDecorate 19($Global) 0 Offset 0
+                              MemberDecorate 19($Global) 1 Offset 4
+                              MemberDecorate 19($Global) 2 Offset 8
+                              MemberDecorate 19($Global) 3 Offset 12
+                              MemberDecorate 19($Global) 4 Offset 16
+                              MemberDecorate 19($Global) 5 Offset 24
+                              MemberDecorate 19($Global) 6 Offset 32
+                              MemberDecorate 19($Global) 7 Offset 40
+                              Decorate 19($Global) Block
+                              Decorate 21 DescriptorSet 0
+                              Decorate 47(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:             TypePointer Function 6(int)
-               9:             TypeInt 32 1
-              10:             TypeFloat 32
-              11:             TypeVector 9(int) 2
-              12:             TypeVector 6(int) 2
-              13:             TypeVector 10(float) 2
-     14($Global):             TypeStruct 9(int) 6(int) 10(float) 6(int) 11(ivec2) 12(ivec2) 13(fvec2) 12(ivec2)
-              15:             TypePointer Uniform 14($Global)
-              16:     15(ptr) Variable Uniform
-              17:      9(int) Constant 2
-              18:             TypePointer Uniform 10(float)
-              23:             TypePointer Function 12(ivec2)
-              25:      9(int) Constant 6
-              26:             TypePointer Uniform 13(fvec2)
-              31:             TypeVector 10(float) 4
-   32(PS_OUTPUT):             TypeStruct 31(fvec4)
-              33:             TypePointer Function 32(PS_OUTPUT)
-              35:      9(int) Constant 0
-              36:   10(float) Constant 0
-              37:   31(fvec4) ConstantComposite 36 36 36 36
-              38:             TypePointer Function 31(fvec4)
-              40:             TypePointer Output 31(fvec4)
-       41(color):     40(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              15:             TypeInt 32 1
+              16:             TypeVector 15(int) 2
+              17:             TypeVector 12(int) 2
+              18:             TypeVector 6(float) 2
+     19($Global):             TypeStruct 15(int) 12(int) 6(float) 12(int) 16(ivec2) 17(ivec2) 18(fvec2) 17(ivec2)
+              20:             TypePointer Uniform 19($Global)
+              21:     20(ptr) Variable Uniform
+              22:     15(int) Constant 2
+              23:             TypePointer Uniform 6(float)
+              28:             TypePointer Function 17(ivec2)
+              30:     15(int) Constant 6
+              31:             TypePointer Uniform 18(fvec2)
+              36:             TypePointer Function 8(PS_OUTPUT)
+              38:     15(int) Constant 0
+              39:    6(float) Constant 0
+              40:    7(fvec4) ConstantComposite 39 39 39 39
+              41:             TypePointer Function 7(fvec4)
+              46:             TypePointer Output 7(fvec4)
+       47(color):     46(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-          8(r00):      7(ptr) Variable Function
-         24(r01):     23(ptr) Variable Function
-   34(ps_output):     33(ptr) Variable Function
-              19:     18(ptr) AccessChain 16 17
-              20:   10(float) Load 19
-              21:      6(int) ConvertFToU 20
-              22:      6(int) BitCount 21
-                              Store 8(r00) 22
-              27:     26(ptr) AccessChain 16 25
-              28:   13(fvec2) Load 27
-              29:   12(ivec2) ConvertFToU 28
-              30:   12(ivec2) BitReverse 29
-                              Store 24(r01) 30
-              39:     38(ptr) AccessChain 34(ps_output) 35
-                              Store 39 37
-              42:     38(ptr) AccessChain 34(ps_output) 35
-              43:   31(fvec4) Load 42
-                              Store 41(color) 43
+              48:8(PS_OUTPUT) FunctionCall 10(@main()
+              49:    7(fvec4) CompositeExtract 48 0
+                              Store 47(color) 49
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         14(r00):     13(ptr) Variable Function
+         29(r01):     28(ptr) Variable Function
+   37(ps_output):     36(ptr) Variable Function
+              24:     23(ptr) AccessChain 21 22
+              25:    6(float) Load 24
+              26:     12(int) ConvertFToU 25
+              27:     12(int) BitCount 26
+                              Store 14(r00) 27
+              32:     31(ptr) AccessChain 21 30
+              33:   18(fvec2) Load 32
+              34:   17(ivec2) ConvertFToU 33
+              35:   17(ivec2) BitReverse 34
+                              Store 29(r01) 35
+              42:     41(ptr) AccessChain 37(ps_output) 38
+                              Store 42 40
+              43:8(PS_OUTPUT) Load 37(ps_output)
+                              ReturnValue 43
+                              FunctionEnd

+ 451 - 438
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out

@@ -2,7 +2,7 @@ hlsl.intrinsics.promote.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:20    Function Parameters: 
 0:?     Sequence
 0:23      Sequence
@@ -421,19 +421,22 @@ gl_FragCoord origin is upper left
 0:77            0 (const int)
 0:77        Construct vec4 (temp 4-component vector of float)
 0:77          'r00' (temp float)
-0:78      Sequence
-0:78        Sequence
-0:78          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:78            color: direct index for structure (temp 4-component vector of float)
-0:78              'ps_output' (temp structure{temp 4-component vector of float color})
-0:78              Constant:
-0:78                0 (const int)
-0:78        Branch: Return
+0:78      Branch: Return with expression
+0:78        'ps_output' (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:20          color: direct index for structure (temp 4-component vector of float)
+0:20            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:20            Constant:
+0:20              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
 
 
@@ -443,7 +446,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:20    Function Parameters: 
 0:?     Sequence
 0:23      Sequence
@@ -862,24 +865,27 @@ gl_FragCoord origin is upper left
 0:77            0 (const int)
 0:77        Construct vec4 (temp 4-component vector of float)
 0:77          'r00' (temp float)
-0:78      Sequence
-0:78        Sequence
-0:78          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:78            color: direct index for structure (temp 4-component vector of float)
-0:78              'ps_output' (temp structure{temp 4-component vector of float color})
-0:78              Constant:
-0:78                0 (const int)
-0:78        Branch: Return
+0:78      Branch: Return with expression
+0:78        'ps_output' (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:20          color: direct index for structure (temp 4-component vector of float)
+0:20            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:20            Constant:
+0:20              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 320
+// Id's are bound by 325
 
                               Capability Shader
                               Capability Sampled1D
@@ -887,427 +893,434 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 316
+                              EntryPoint Fragment 4  "main" 322
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "r00"
-                              Name 14  "$Global"
-                              MemberName 14($Global) 0  "i"
-                              MemberName 14($Global) 1  "u"
-                              MemberName 14($Global) 2  "f"
-                              MemberName 14($Global) 3  "b"
-                              MemberName 14($Global) 4  "i2"
-                              MemberName 14($Global) 5  "u2"
-                              MemberName 14($Global) 6  "f2"
-                              MemberName 14($Global) 7  "b2"
-                              MemberName 14($Global) 8  "upos"
-                              MemberName 14($Global) 9  "fpos"
-                              Name 16  ""
-                              Name 33  "r01"
-                              Name 44  "r02"
-                              Name 54  "r03"
-                              Name 61  "r04"
-                              Name 69  "r10"
-                              Name 86  "r11"
-                              Name 97  "r12"
-                              Name 109  "r13"
-                              Name 116  "r14"
-                              Name 123  "r20"
-                              Name 133  "r21"
-                              Name 145  "r22"
-                              Name 157  "r30"
-                              Name 166  "r31"
-                              Name 175  "r32"
-                              Name 184  "r33"
-                              Name 192  "r34"
-                              Name 200  "r40"
-                              Name 211  "r41"
-                              Name 224  "r42"
-                              Name 238  "r43"
-                              Name 250  "r50"
-                              Name 254  "g_tTexbfs"
-                              Name 264  "r51"
-                              Name 273  "sizeQueryTemp"
-                              Name 276  "g_tTex1df4"
-                              Name 279  "WidthI"
-                              Name 282  "sizeQueryTemp"
-                              Name 288  "NumberOfLevelsU"
-                              Name 291  "sizeQueryTemp"
-                              Name 294  "WidthU"
-                              Name 296  "NumberOfLevelsI"
-                              Name 300  "sizeQueryTemp"
-                              Name 308  "PS_OUTPUT"
-                              MemberName 308(PS_OUTPUT) 0  "color"
-                              Name 310  "ps_output"
-                              Name 316  "color"
-                              MemberDecorate 14($Global) 0 Offset 0
-                              MemberDecorate 14($Global) 1 Offset 4
-                              MemberDecorate 14($Global) 2 Offset 8
-                              MemberDecorate 14($Global) 3 Offset 12
-                              MemberDecorate 14($Global) 4 Offset 16
-                              MemberDecorate 14($Global) 5 Offset 24
-                              MemberDecorate 14($Global) 6 Offset 32
-                              MemberDecorate 14($Global) 7 Offset 40
-                              MemberDecorate 14($Global) 8 Offset 48
-                              MemberDecorate 14($Global) 9 Offset 52
-                              Decorate 14($Global) Block
-                              Decorate 16 DescriptorSet 0
-                              Decorate 254(g_tTexbfs) DescriptorSet 0
-                              Decorate 276(g_tTex1df4) DescriptorSet 0
-                              Decorate 316(color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 10  "@main("
+                              Name 13  "r00"
+                              Name 19  "$Global"
+                              MemberName 19($Global) 0  "i"
+                              MemberName 19($Global) 1  "u"
+                              MemberName 19($Global) 2  "f"
+                              MemberName 19($Global) 3  "b"
+                              MemberName 19($Global) 4  "i2"
+                              MemberName 19($Global) 5  "u2"
+                              MemberName 19($Global) 6  "f2"
+                              MemberName 19($Global) 7  "b2"
+                              MemberName 19($Global) 8  "upos"
+                              MemberName 19($Global) 9  "fpos"
+                              Name 21  ""
+                              Name 38  "r01"
+                              Name 49  "r02"
+                              Name 59  "r03"
+                              Name 66  "r04"
+                              Name 74  "r10"
+                              Name 91  "r11"
+                              Name 102  "r12"
+                              Name 114  "r13"
+                              Name 121  "r14"
+                              Name 128  "r20"
+                              Name 138  "r21"
+                              Name 150  "r22"
+                              Name 162  "r30"
+                              Name 171  "r31"
+                              Name 180  "r32"
+                              Name 189  "r33"
+                              Name 197  "r34"
+                              Name 205  "r40"
+                              Name 216  "r41"
+                              Name 229  "r42"
+                              Name 243  "r43"
+                              Name 255  "r50"
+                              Name 259  "g_tTexbfs"
+                              Name 268  "r51"
+                              Name 277  "sizeQueryTemp"
+                              Name 280  "g_tTex1df4"
+                              Name 283  "WidthI"
+                              Name 286  "sizeQueryTemp"
+                              Name 292  "NumberOfLevelsU"
+                              Name 295  "sizeQueryTemp"
+                              Name 298  "WidthU"
+                              Name 300  "NumberOfLevelsI"
+                              Name 304  "sizeQueryTemp"
+                              Name 313  "ps_output"
+                              Name 322  "color"
+                              MemberDecorate 19($Global) 0 Offset 0
+                              MemberDecorate 19($Global) 1 Offset 4
+                              MemberDecorate 19($Global) 2 Offset 8
+                              MemberDecorate 19($Global) 3 Offset 12
+                              MemberDecorate 19($Global) 4 Offset 16
+                              MemberDecorate 19($Global) 5 Offset 24
+                              MemberDecorate 19($Global) 6 Offset 32
+                              MemberDecorate 19($Global) 7 Offset 40
+                              MemberDecorate 19($Global) 8 Offset 48
+                              MemberDecorate 19($Global) 9 Offset 52
+                              Decorate 19($Global) Block
+                              Decorate 21 DescriptorSet 0
+                              Decorate 259(g_tTexbfs) DescriptorSet 0
+                              Decorate 280(g_tTex1df4) DescriptorSet 0
+                              Decorate 322(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               9:             TypeInt 32 1
-              10:             TypeInt 32 0
-              11:             TypeVector 9(int) 2
-              12:             TypeVector 10(int) 2
-              13:             TypeVector 6(float) 2
-     14($Global):             TypeStruct 9(int) 10(int) 6(float) 10(int) 11(ivec2) 12(ivec2) 13(fvec2) 12(ivec2) 10(int) 6(float)
-              15:             TypePointer Uniform 14($Global)
-              16:     15(ptr) Variable Uniform
-              17:      9(int) Constant 3
-              18:             TypePointer Uniform 10(int)
-              21:             TypeBool
-              22:     10(int) Constant 0
-              24:    6(float) Constant 0
-              25:    6(float) Constant 1065353216
-              27:      9(int) Constant 2
-              28:             TypePointer Uniform 6(float)
-              32:             TypePointer Function 10(int)
-              37:     10(int) Constant 1
-              39:      9(int) Constant 1
-              43:             TypePointer Function 9(int)
-              48:      9(int) Constant 0
-              50:             TypePointer Uniform 9(int)
-              68:             TypePointer Function 13(fvec2)
-              70:      9(int) Constant 7
-              71:             TypePointer Uniform 12(ivec2)
-              74:             TypeVector 21(bool) 2
-              75:   12(ivec2) ConstantComposite 22 22
-              77:   13(fvec2) ConstantComposite 24 24
-              78:   13(fvec2) ConstantComposite 25 25
-              80:      9(int) Constant 6
-              81:             TypePointer Uniform 13(fvec2)
-              85:             TypePointer Function 12(ivec2)
-              90:   12(ivec2) ConstantComposite 37 37
-              92:      9(int) Constant 5
-              96:             TypePointer Function 11(ivec2)
-             101:   11(ivec2) ConstantComposite 48 48
-             102:   11(ivec2) ConstantComposite 39 39
-             104:      9(int) Constant 4
-             105:             TypePointer Uniform 11(ivec2)
-             251:             TypeImage 6(float) Buffer sampled format:R32f
-             252:             TypeSampledImage 251
-             253:             TypePointer UniformConstant 252
-  254(g_tTexbfs):    253(ptr) Variable UniformConstant
-             256:      9(int) Constant 8
-             261:             TypeVector 6(float) 4
-             266:      9(int) Constant 9
-             274:             TypeImage 6(float) 1D sampled format:Unknown
-             275:             TypePointer UniformConstant 274
- 276(g_tTex1df4):    275(ptr) Variable UniformConstant
-             284:     10(int) Constant 6
-  308(PS_OUTPUT):             TypeStruct 261(fvec4)
-             309:             TypePointer Function 308(PS_OUTPUT)
-             313:             TypePointer Function 261(fvec4)
-             315:             TypePointer Output 261(fvec4)
-      316(color):    315(ptr) Variable Output
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 6(float)
+              14:             TypeInt 32 1
+              15:             TypeInt 32 0
+              16:             TypeVector 14(int) 2
+              17:             TypeVector 15(int) 2
+              18:             TypeVector 6(float) 2
+     19($Global):             TypeStruct 14(int) 15(int) 6(float) 15(int) 16(ivec2) 17(ivec2) 18(fvec2) 17(ivec2) 15(int) 6(float)
+              20:             TypePointer Uniform 19($Global)
+              21:     20(ptr) Variable Uniform
+              22:     14(int) Constant 3
+              23:             TypePointer Uniform 15(int)
+              26:             TypeBool
+              27:     15(int) Constant 0
+              29:    6(float) Constant 0
+              30:    6(float) Constant 1065353216
+              32:     14(int) Constant 2
+              33:             TypePointer Uniform 6(float)
+              37:             TypePointer Function 15(int)
+              42:     15(int) Constant 1
+              44:     14(int) Constant 1
+              48:             TypePointer Function 14(int)
+              53:     14(int) Constant 0
+              55:             TypePointer Uniform 14(int)
+              73:             TypePointer Function 18(fvec2)
+              75:     14(int) Constant 7
+              76:             TypePointer Uniform 17(ivec2)
+              79:             TypeVector 26(bool) 2
+              80:   17(ivec2) ConstantComposite 27 27
+              82:   18(fvec2) ConstantComposite 29 29
+              83:   18(fvec2) ConstantComposite 30 30
+              85:     14(int) Constant 6
+              86:             TypePointer Uniform 18(fvec2)
+              90:             TypePointer Function 17(ivec2)
+              95:   17(ivec2) ConstantComposite 42 42
+              97:     14(int) Constant 5
+             101:             TypePointer Function 16(ivec2)
+             106:   16(ivec2) ConstantComposite 53 53
+             107:   16(ivec2) ConstantComposite 44 44
+             109:     14(int) Constant 4
+             110:             TypePointer Uniform 16(ivec2)
+             256:             TypeImage 6(float) Buffer sampled format:R32f
+             257:             TypeSampledImage 256
+             258:             TypePointer UniformConstant 257
+  259(g_tTexbfs):    258(ptr) Variable UniformConstant
+             261:     14(int) Constant 8
+             270:     14(int) Constant 9
+             278:             TypeImage 6(float) 1D sampled format:Unknown
+             279:             TypePointer UniformConstant 278
+ 280(g_tTex1df4):    279(ptr) Variable UniformConstant
+             288:     15(int) Constant 6
+             312:             TypePointer Function 8(PS_OUTPUT)
+             316:             TypePointer Function 7(fvec4)
+             321:             TypePointer Output 7(fvec4)
+      322(color):    321(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-          8(r00):      7(ptr) Variable Function
-         33(r01):     32(ptr) Variable Function
-         44(r02):     43(ptr) Variable Function
-         54(r03):      7(ptr) Variable Function
-         61(r04):      7(ptr) Variable Function
-         69(r10):     68(ptr) Variable Function
-         86(r11):     85(ptr) Variable Function
-         97(r12):     96(ptr) Variable Function
-        109(r13):     68(ptr) Variable Function
-        116(r14):     68(ptr) Variable Function
-        123(r20):     68(ptr) Variable Function
-        133(r21):     85(ptr) Variable Function
-        145(r22):     68(ptr) Variable Function
-        157(r30):     68(ptr) Variable Function
-        166(r31):     85(ptr) Variable Function
-        175(r32):     96(ptr) Variable Function
-        184(r33):     68(ptr) Variable Function
-        192(r34):     68(ptr) Variable Function
-        200(r40):     68(ptr) Variable Function
-        211(r41):     85(ptr) Variable Function
-        224(r42):     68(ptr) Variable Function
-        238(r43):     96(ptr) Variable Function
-        250(r50):      7(ptr) Variable Function
-        264(r51):      7(ptr) Variable Function
-273(sizeQueryTemp):     32(ptr) Variable Function
-     279(WidthI):     43(ptr) Variable Function
-282(sizeQueryTemp):     32(ptr) Variable Function
-288(NumberOfLevelsU):     32(ptr) Variable Function
-291(sizeQueryTemp):     32(ptr) Variable Function
-     294(WidthU):     32(ptr) Variable Function
-296(NumberOfLevelsI):     43(ptr) Variable Function
-300(sizeQueryTemp):     32(ptr) Variable Function
-  310(ps_output):    309(ptr) Variable Function
-              19:     18(ptr) AccessChain 16 17
-              20:     10(int) Load 19
-              23:    21(bool) INotEqual 20 22
-              26:    6(float) Select 23 25 24
-              29:     28(ptr) AccessChain 16 27
-              30:    6(float) Load 29
-              31:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 26 30
-                              Store 8(r00) 31
-              34:     18(ptr) AccessChain 16 17
-              35:     10(int) Load 34
-              36:    21(bool) INotEqual 35 22
-              38:     10(int) Select 36 37 22
-              40:     18(ptr) AccessChain 16 39
-              41:     10(int) Load 40
-              42:     10(int) ExtInst 1(GLSL.std.450) 41(UMax) 38 41
-                              Store 33(r01) 42
-              45:     18(ptr) AccessChain 16 17
-              46:     10(int) Load 45
-              47:    21(bool) INotEqual 46 22
-              49:      9(int) Select 47 39 48
-              51:     50(ptr) AccessChain 16 48
-              52:      9(int) Load 51
-              53:      9(int) ExtInst 1(GLSL.std.450) 42(SMax) 49 52
-                              Store 44(r02) 53
-              55:     50(ptr) AccessChain 16 48
-              56:      9(int) Load 55
-              57:    6(float) ConvertSToF 56
-              58:     28(ptr) AccessChain 16 27
-              59:    6(float) Load 58
-              60:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 57 59
-                              Store 54(r03) 60
-              62:     18(ptr) AccessChain 16 39
-              63:     10(int) Load 62
-              64:    6(float) ConvertUToF 63
-              65:     28(ptr) AccessChain 16 27
-              66:    6(float) Load 65
-              67:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 64 66
-                              Store 61(r04) 67
-              72:     71(ptr) AccessChain 16 70
-              73:   12(ivec2) Load 72
-              76:   74(bvec2) INotEqual 73 75
-              79:   13(fvec2) Select 76 78 77
-              82:     81(ptr) AccessChain 16 80
-              83:   13(fvec2) Load 82
-              84:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 79 83
-                              Store 69(r10) 84
-              87:     71(ptr) AccessChain 16 70
-              88:   12(ivec2) Load 87
-              89:   74(bvec2) INotEqual 88 75
-              91:   12(ivec2) Select 89 90 75
-              93:     71(ptr) AccessChain 16 92
-              94:   12(ivec2) Load 93
-              95:   12(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 91 94
-                              Store 86(r11) 95
-              98:     71(ptr) AccessChain 16 70
-              99:   12(ivec2) Load 98
-             100:   74(bvec2) INotEqual 99 75
-             103:   11(ivec2) Select 100 102 101
-             106:    105(ptr) AccessChain 16 104
-             107:   11(ivec2) Load 106
-             108:   11(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 103 107
-                              Store 97(r12) 108
-             110:    105(ptr) AccessChain 16 104
-             111:   11(ivec2) Load 110
-             112:   13(fvec2) ConvertSToF 111
-             113:     81(ptr) AccessChain 16 80
-             114:   13(fvec2) Load 113
-             115:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 112 114
-                              Store 109(r13) 115
-             117:     71(ptr) AccessChain 16 92
-             118:   12(ivec2) Load 117
-             119:   13(fvec2) ConvertUToF 118
-             120:     81(ptr) AccessChain 16 80
-             121:   13(fvec2) Load 120
-             122:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 119 121
-                              Store 116(r14) 122
-             124:    105(ptr) AccessChain 16 104
-             125:   11(ivec2) Load 124
-             126:   13(fvec2) ConvertSToF 125
-             127:     71(ptr) AccessChain 16 92
-             128:   12(ivec2) Load 127
-             129:   13(fvec2) ConvertUToF 128
-             130:     81(ptr) AccessChain 16 80
-             131:   13(fvec2) Load 130
-             132:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 126 129 131
-                              Store 123(r20) 132
-             134:     71(ptr) AccessChain 16 70
-             135:   12(ivec2) Load 134
-             136:   74(bvec2) INotEqual 135 75
-             137:   12(ivec2) Select 136 90 75
-             138:     71(ptr) AccessChain 16 92
-             139:   12(ivec2) Load 138
-             140:     71(ptr) AccessChain 16 70
-             141:   12(ivec2) Load 140
-             142:   74(bvec2) INotEqual 141 75
-             143:   12(ivec2) Select 142 90 75
-             144:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 137 139 143
-                              Store 133(r21) 144
-             146:     71(ptr) AccessChain 16 70
-             147:   12(ivec2) Load 146
-             148:   74(bvec2) INotEqual 147 75
-             149:   13(fvec2) Select 148 78 77
-             150:     81(ptr) AccessChain 16 80
-             151:   13(fvec2) Load 150
-             152:     71(ptr) AccessChain 16 70
-             153:   12(ivec2) Load 152
-             154:   74(bvec2) INotEqual 153 75
-             155:   13(fvec2) Select 154 78 77
-             156:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 149 151 155
-                              Store 145(r22) 156
-             158:     18(ptr) AccessChain 16 17
-             159:     10(int) Load 158
-             160:    21(bool) INotEqual 159 22
-             161:    6(float) Select 160 25 24
-             162:   13(fvec2) CompositeConstruct 161 161
-             163:     81(ptr) AccessChain 16 80
-             164:   13(fvec2) Load 163
-             165:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 162 164
-                              Store 157(r30) 165
-             167:     18(ptr) AccessChain 16 17
-             168:     10(int) Load 167
-             169:    21(bool) INotEqual 168 22
-             170:     10(int) Select 169 37 22
-             171:   12(ivec2) CompositeConstruct 170 170
-             172:     71(ptr) AccessChain 16 92
-             173:   12(ivec2) Load 172
-             174:   12(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 171 173
-                              Store 166(r31) 174
-             176:     18(ptr) AccessChain 16 17
-             177:     10(int) Load 176
-             178:    21(bool) INotEqual 177 22
-             179:      9(int) Select 178 39 48
-             180:   11(ivec2) CompositeConstruct 179 179
-             181:    105(ptr) AccessChain 16 104
-             182:   11(ivec2) Load 181
-             183:   11(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 180 182
-                              Store 175(r32) 183
-             185:     50(ptr) AccessChain 16 48
-             186:      9(int) Load 185
-             187:    6(float) ConvertSToF 186
-             188:   13(fvec2) CompositeConstruct 187 187
-             189:     81(ptr) AccessChain 16 80
-             190:   13(fvec2) Load 189
-             191:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 188 190
-                              Store 184(r33) 191
-             193:     18(ptr) AccessChain 16 39
-             194:     10(int) Load 193
-             195:    6(float) ConvertUToF 194
-             196:   13(fvec2) CompositeConstruct 195 195
-             197:     81(ptr) AccessChain 16 80
-             198:   13(fvec2) Load 197
-             199:   13(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 196 198
-                              Store 192(r34) 199
-             201:     50(ptr) AccessChain 16 48
-             202:      9(int) Load 201
-             203:    6(float) ConvertSToF 202
-             204:   13(fvec2) CompositeConstruct 203 203
-             205:     71(ptr) AccessChain 16 92
-             206:   12(ivec2) Load 205
-             207:   13(fvec2) ConvertUToF 206
-             208:     81(ptr) AccessChain 16 80
-             209:   13(fvec2) Load 208
-             210:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 204 207 209
-                              Store 200(r40) 210
-             212:     71(ptr) AccessChain 16 70
-             213:   12(ivec2) Load 212
-             214:   74(bvec2) INotEqual 213 75
-             215:   12(ivec2) Select 214 90 75
-             216:     18(ptr) AccessChain 16 39
-             217:     10(int) Load 216
-             218:   12(ivec2) CompositeConstruct 217 217
-             219:     71(ptr) AccessChain 16 70
-             220:   12(ivec2) Load 219
-             221:   74(bvec2) INotEqual 220 75
-             222:   12(ivec2) Select 221 90 75
-             223:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 215 218 222
-                              Store 211(r41) 223
-             225:     71(ptr) AccessChain 16 70
-             226:   12(ivec2) Load 225
-             227:   74(bvec2) INotEqual 226 75
-             228:   13(fvec2) Select 227 78 77
-             229:     28(ptr) AccessChain 16 27
-             230:    6(float) Load 229
-             231:   13(fvec2) CompositeConstruct 230 230
-             232:     18(ptr) AccessChain 16 17
-             233:     10(int) Load 232
-             234:    21(bool) INotEqual 233 22
-             235:    6(float) Select 234 25 24
-             236:   13(fvec2) CompositeConstruct 235 235
-             237:   13(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 228 231 236
-                              Store 224(r42) 237
-             239:     50(ptr) AccessChain 16 48
-             240:      9(int) Load 239
-             241:     10(int) Bitcast 240
-             242:   12(ivec2) CompositeConstruct 241 241
-             243:    105(ptr) AccessChain 16 104
-             244:   11(ivec2) Load 243
-             245:   12(ivec2) Bitcast 244
-             246:     71(ptr) AccessChain 16 92
-             247:   12(ivec2) Load 246
-             248:   12(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 242 245 247
-             249:   11(ivec2) Bitcast 248
-                              Store 238(r43) 249
-             255:         252 Load 254(g_tTexbfs)
-             257:     18(ptr) AccessChain 16 256
-             258:     10(int) Load 257
-             259:      9(int) Bitcast 258
-             260:         251 Image 255
-             262:  261(fvec4) ImageFetch 260 259
-             263:    6(float) CompositeExtract 262 0
-                              Store 250(r50) 263
-             265:         252 Load 254(g_tTexbfs)
-             267:     28(ptr) AccessChain 16 266
-             268:    6(float) Load 267
-             269:      9(int) ConvertFToS 268
-             270:         251 Image 265
-             271:  261(fvec4) ImageFetch 270 269
-             272:    6(float) CompositeExtract 271 0
-                              Store 264(r51) 272
-             277:         274 Load 276(g_tTex1df4)
-             278:      9(int) ImageQuerySize 277
-                              Store 273(sizeQueryTemp) 278
-             280:     10(int) Load 273(sizeQueryTemp)
-             281:      9(int) Bitcast 280
-                              Store 279(WidthI) 281
-             283:         274 Load 276(g_tTex1df4)
-             285:      9(int) ImageQuerySizeLod 283 284
-                              Store 282(sizeQueryTemp) 285
-             286:     10(int) Load 282(sizeQueryTemp)
-             287:      9(int) Bitcast 286
-                              Store 279(WidthI) 287
-             289:         274 Load 276(g_tTex1df4)
-             290:      9(int) ImageQueryLevels 289
-                              Store 288(NumberOfLevelsU) 290
-             292:         274 Load 276(g_tTex1df4)
-             293:      9(int) ImageQuerySizeLod 292 284
-                              Store 291(sizeQueryTemp) 293
-             295:     10(int) Load 291(sizeQueryTemp)
-                              Store 294(WidthU) 295
-             297:         274 Load 276(g_tTex1df4)
-             298:      9(int) ImageQueryLevels 297
-             299:      9(int) Bitcast 298
-                              Store 296(NumberOfLevelsI) 299
-             301:         274 Load 276(g_tTex1df4)
-             302:      9(int) ImageQuerySizeLod 301 284
-                              Store 300(sizeQueryTemp) 302
-             303:     10(int) Load 300(sizeQueryTemp)
-             304:      9(int) Bitcast 303
-                              Store 279(WidthI) 304
-             305:         274 Load 276(g_tTex1df4)
-             306:      9(int) ImageQueryLevels 305
-             307:      9(int) Bitcast 306
-                              Store 296(NumberOfLevelsI) 307
-             311:    6(float) Load 8(r00)
-             312:  261(fvec4) CompositeConstruct 311 311 311 311
-             314:    313(ptr) AccessChain 310(ps_output) 48
-                              Store 314 312
-             317:    313(ptr) AccessChain 310(ps_output) 48
-             318:  261(fvec4) Load 317
-                              Store 316(color) 318
+             323:8(PS_OUTPUT) FunctionCall 10(@main()
+             324:    7(fvec4) CompositeExtract 323 0
+                              Store 322(color) 324
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         13(r00):     12(ptr) Variable Function
+         38(r01):     37(ptr) Variable Function
+         49(r02):     48(ptr) Variable Function
+         59(r03):     12(ptr) Variable Function
+         66(r04):     12(ptr) Variable Function
+         74(r10):     73(ptr) Variable Function
+         91(r11):     90(ptr) Variable Function
+        102(r12):    101(ptr) Variable Function
+        114(r13):     73(ptr) Variable Function
+        121(r14):     73(ptr) Variable Function
+        128(r20):     73(ptr) Variable Function
+        138(r21):     90(ptr) Variable Function
+        150(r22):     73(ptr) Variable Function
+        162(r30):     73(ptr) Variable Function
+        171(r31):     90(ptr) Variable Function
+        180(r32):    101(ptr) Variable Function
+        189(r33):     73(ptr) Variable Function
+        197(r34):     73(ptr) Variable Function
+        205(r40):     73(ptr) Variable Function
+        216(r41):     90(ptr) Variable Function
+        229(r42):     73(ptr) Variable Function
+        243(r43):    101(ptr) Variable Function
+        255(r50):     12(ptr) Variable Function
+        268(r51):     12(ptr) Variable Function
+277(sizeQueryTemp):     37(ptr) Variable Function
+     283(WidthI):     48(ptr) Variable Function
+286(sizeQueryTemp):     37(ptr) Variable Function
+292(NumberOfLevelsU):     37(ptr) Variable Function
+295(sizeQueryTemp):     37(ptr) Variable Function
+     298(WidthU):     37(ptr) Variable Function
+300(NumberOfLevelsI):     48(ptr) Variable Function
+304(sizeQueryTemp):     37(ptr) Variable Function
+  313(ps_output):    312(ptr) Variable Function
+              24:     23(ptr) AccessChain 21 22
+              25:     15(int) Load 24
+              28:    26(bool) INotEqual 25 27
+              31:    6(float) Select 28 30 29
+              34:     33(ptr) AccessChain 21 32
+              35:    6(float) Load 34
+              36:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 31 35
+                              Store 13(r00) 36
+              39:     23(ptr) AccessChain 21 22
+              40:     15(int) Load 39
+              41:    26(bool) INotEqual 40 27
+              43:     15(int) Select 41 42 27
+              45:     23(ptr) AccessChain 21 44
+              46:     15(int) Load 45
+              47:     15(int) ExtInst 1(GLSL.std.450) 41(UMax) 43 46
+                              Store 38(r01) 47
+              50:     23(ptr) AccessChain 21 22
+              51:     15(int) Load 50
+              52:    26(bool) INotEqual 51 27
+              54:     14(int) Select 52 44 53
+              56:     55(ptr) AccessChain 21 53
+              57:     14(int) Load 56
+              58:     14(int) ExtInst 1(GLSL.std.450) 42(SMax) 54 57
+                              Store 49(r02) 58
+              60:     55(ptr) AccessChain 21 53
+              61:     14(int) Load 60
+              62:    6(float) ConvertSToF 61
+              63:     33(ptr) AccessChain 21 32
+              64:    6(float) Load 63
+              65:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 62 64
+                              Store 59(r03) 65
+              67:     23(ptr) AccessChain 21 44
+              68:     15(int) Load 67
+              69:    6(float) ConvertUToF 68
+              70:     33(ptr) AccessChain 21 32
+              71:    6(float) Load 70
+              72:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 69 71
+                              Store 66(r04) 72
+              77:     76(ptr) AccessChain 21 75
+              78:   17(ivec2) Load 77
+              81:   79(bvec2) INotEqual 78 80
+              84:   18(fvec2) Select 81 83 82
+              87:     86(ptr) AccessChain 21 85
+              88:   18(fvec2) Load 87
+              89:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 84 88
+                              Store 74(r10) 89
+              92:     76(ptr) AccessChain 21 75
+              93:   17(ivec2) Load 92
+              94:   79(bvec2) INotEqual 93 80
+              96:   17(ivec2) Select 94 95 80
+              98:     76(ptr) AccessChain 21 97
+              99:   17(ivec2) Load 98
+             100:   17(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 96 99
+                              Store 91(r11) 100
+             103:     76(ptr) AccessChain 21 75
+             104:   17(ivec2) Load 103
+             105:   79(bvec2) INotEqual 104 80
+             108:   16(ivec2) Select 105 107 106
+             111:    110(ptr) AccessChain 21 109
+             112:   16(ivec2) Load 111
+             113:   16(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 108 112
+                              Store 102(r12) 113
+             115:    110(ptr) AccessChain 21 109
+             116:   16(ivec2) Load 115
+             117:   18(fvec2) ConvertSToF 116
+             118:     86(ptr) AccessChain 21 85
+             119:   18(fvec2) Load 118
+             120:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 117 119
+                              Store 114(r13) 120
+             122:     76(ptr) AccessChain 21 97
+             123:   17(ivec2) Load 122
+             124:   18(fvec2) ConvertUToF 123
+             125:     86(ptr) AccessChain 21 85
+             126:   18(fvec2) Load 125
+             127:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 124 126
+                              Store 121(r14) 127
+             129:    110(ptr) AccessChain 21 109
+             130:   16(ivec2) Load 129
+             131:   18(fvec2) ConvertSToF 130
+             132:     76(ptr) AccessChain 21 97
+             133:   17(ivec2) Load 132
+             134:   18(fvec2) ConvertUToF 133
+             135:     86(ptr) AccessChain 21 85
+             136:   18(fvec2) Load 135
+             137:   18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 131 134 136
+                              Store 128(r20) 137
+             139:     76(ptr) AccessChain 21 75
+             140:   17(ivec2) Load 139
+             141:   79(bvec2) INotEqual 140 80
+             142:   17(ivec2) Select 141 95 80
+             143:     76(ptr) AccessChain 21 97
+             144:   17(ivec2) Load 143
+             145:     76(ptr) AccessChain 21 75
+             146:   17(ivec2) Load 145
+             147:   79(bvec2) INotEqual 146 80
+             148:   17(ivec2) Select 147 95 80
+             149:   17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 142 144 148
+                              Store 138(r21) 149
+             151:     76(ptr) AccessChain 21 75
+             152:   17(ivec2) Load 151
+             153:   79(bvec2) INotEqual 152 80
+             154:   18(fvec2) Select 153 83 82
+             155:     86(ptr) AccessChain 21 85
+             156:   18(fvec2) Load 155
+             157:     76(ptr) AccessChain 21 75
+             158:   17(ivec2) Load 157
+             159:   79(bvec2) INotEqual 158 80
+             160:   18(fvec2) Select 159 83 82
+             161:   18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 154 156 160
+                              Store 150(r22) 161
+             163:     23(ptr) AccessChain 21 22
+             164:     15(int) Load 163
+             165:    26(bool) INotEqual 164 27
+             166:    6(float) Select 165 30 29
+             167:   18(fvec2) CompositeConstruct 166 166
+             168:     86(ptr) AccessChain 21 85
+             169:   18(fvec2) Load 168
+             170:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 167 169
+                              Store 162(r30) 170
+             172:     23(ptr) AccessChain 21 22
+             173:     15(int) Load 172
+             174:    26(bool) INotEqual 173 27
+             175:     15(int) Select 174 42 27
+             176:   17(ivec2) CompositeConstruct 175 175
+             177:     76(ptr) AccessChain 21 97
+             178:   17(ivec2) Load 177
+             179:   17(ivec2) ExtInst 1(GLSL.std.450) 41(UMax) 176 178
+                              Store 171(r31) 179
+             181:     23(ptr) AccessChain 21 22
+             182:     15(int) Load 181
+             183:    26(bool) INotEqual 182 27
+             184:     14(int) Select 183 44 53
+             185:   16(ivec2) CompositeConstruct 184 184
+             186:    110(ptr) AccessChain 21 109
+             187:   16(ivec2) Load 186
+             188:   16(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 185 187
+                              Store 180(r32) 188
+             190:     55(ptr) AccessChain 21 53
+             191:     14(int) Load 190
+             192:    6(float) ConvertSToF 191
+             193:   18(fvec2) CompositeConstruct 192 192
+             194:     86(ptr) AccessChain 21 85
+             195:   18(fvec2) Load 194
+             196:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 193 195
+                              Store 189(r33) 196
+             198:     23(ptr) AccessChain 21 44
+             199:     15(int) Load 198
+             200:    6(float) ConvertUToF 199
+             201:   18(fvec2) CompositeConstruct 200 200
+             202:     86(ptr) AccessChain 21 85
+             203:   18(fvec2) Load 202
+             204:   18(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 201 203
+                              Store 197(r34) 204
+             206:     55(ptr) AccessChain 21 53
+             207:     14(int) Load 206
+             208:    6(float) ConvertSToF 207
+             209:   18(fvec2) CompositeConstruct 208 208
+             210:     76(ptr) AccessChain 21 97
+             211:   17(ivec2) Load 210
+             212:   18(fvec2) ConvertUToF 211
+             213:     86(ptr) AccessChain 21 85
+             214:   18(fvec2) Load 213
+             215:   18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 209 212 214
+                              Store 205(r40) 215
+             217:     76(ptr) AccessChain 21 75
+             218:   17(ivec2) Load 217
+             219:   79(bvec2) INotEqual 218 80
+             220:   17(ivec2) Select 219 95 80
+             221:     23(ptr) AccessChain 21 44
+             222:     15(int) Load 221
+             223:   17(ivec2) CompositeConstruct 222 222
+             224:     76(ptr) AccessChain 21 75
+             225:   17(ivec2) Load 224
+             226:   79(bvec2) INotEqual 225 80
+             227:   17(ivec2) Select 226 95 80
+             228:   17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 220 223 227
+                              Store 216(r41) 228
+             230:     76(ptr) AccessChain 21 75
+             231:   17(ivec2) Load 230
+             232:   79(bvec2) INotEqual 231 80
+             233:   18(fvec2) Select 232 83 82
+             234:     33(ptr) AccessChain 21 32
+             235:    6(float) Load 234
+             236:   18(fvec2) CompositeConstruct 235 235
+             237:     23(ptr) AccessChain 21 22
+             238:     15(int) Load 237
+             239:    26(bool) INotEqual 238 27
+             240:    6(float) Select 239 30 29
+             241:   18(fvec2) CompositeConstruct 240 240
+             242:   18(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 233 236 241
+                              Store 229(r42) 242
+             244:     55(ptr) AccessChain 21 53
+             245:     14(int) Load 244
+             246:     15(int) Bitcast 245
+             247:   17(ivec2) CompositeConstruct 246 246
+             248:    110(ptr) AccessChain 21 109
+             249:   16(ivec2) Load 248
+             250:   17(ivec2) Bitcast 249
+             251:     76(ptr) AccessChain 21 97
+             252:   17(ivec2) Load 251
+             253:   17(ivec2) ExtInst 1(GLSL.std.450) 44(UClamp) 247 250 252
+             254:   16(ivec2) Bitcast 253
+                              Store 243(r43) 254
+             260:         257 Load 259(g_tTexbfs)
+             262:     23(ptr) AccessChain 21 261
+             263:     15(int) Load 262
+             264:     14(int) Bitcast 263
+             265:         256 Image 260
+             266:    7(fvec4) ImageFetch 265 264
+             267:    6(float) CompositeExtract 266 0
+                              Store 255(r50) 267
+             269:         257 Load 259(g_tTexbfs)
+             271:     33(ptr) AccessChain 21 270
+             272:    6(float) Load 271
+             273:     14(int) ConvertFToS 272
+             274:         256 Image 269
+             275:    7(fvec4) ImageFetch 274 273
+             276:    6(float) CompositeExtract 275 0
+                              Store 268(r51) 276
+             281:         278 Load 280(g_tTex1df4)
+             282:     14(int) ImageQuerySize 281
+                              Store 277(sizeQueryTemp) 282
+             284:     15(int) Load 277(sizeQueryTemp)
+             285:     14(int) Bitcast 284
+                              Store 283(WidthI) 285
+             287:         278 Load 280(g_tTex1df4)
+             289:     14(int) ImageQuerySizeLod 287 288
+                              Store 286(sizeQueryTemp) 289
+             290:     15(int) Load 286(sizeQueryTemp)
+             291:     14(int) Bitcast 290
+                              Store 283(WidthI) 291
+             293:         278 Load 280(g_tTex1df4)
+             294:     14(int) ImageQueryLevels 293
+                              Store 292(NumberOfLevelsU) 294
+             296:         278 Load 280(g_tTex1df4)
+             297:     14(int) ImageQuerySizeLod 296 288
+                              Store 295(sizeQueryTemp) 297
+             299:     15(int) Load 295(sizeQueryTemp)
+                              Store 298(WidthU) 299
+             301:         278 Load 280(g_tTex1df4)
+             302:     14(int) ImageQueryLevels 301
+             303:     14(int) Bitcast 302
+                              Store 300(NumberOfLevelsI) 303
+             305:         278 Load 280(g_tTex1df4)
+             306:     14(int) ImageQuerySizeLod 305 288
+                              Store 304(sizeQueryTemp) 306
+             307:     15(int) Load 304(sizeQueryTemp)
+             308:     14(int) Bitcast 307
+                              Store 283(WidthI) 308
+             309:         278 Load 280(g_tTex1df4)
+             310:     14(int) ImageQueryLevels 309
+             311:     14(int) Bitcast 310
+                              Store 300(NumberOfLevelsI) 311
+             314:    6(float) Load 13(r00)
+             315:    7(fvec4) CompositeConstruct 314 314 314 314
+             317:    316(ptr) AccessChain 313(ps_output) 53
+                              Store 317 315
+             318:8(PS_OUTPUT) Load 313(ps_output)
+                              ReturnValue 318
+                              FunctionEnd

+ 160 - 147
3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out

@@ -2,7 +2,7 @@ hlsl.intrinsics.promote.outputs.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:20    Function Parameters: 
 0:?     Sequence
 0:37      clamp (temp float)
@@ -79,19 +79,22 @@ gl_FragCoord origin is upper left
 0:47          0.000000
 0:47          0.000000
 0:47          0.000000
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:48            color: direct index for structure (temp 4-component vector of float)
-0:48              'ps_output' (temp structure{temp 4-component vector of float color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'ps_output' (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:20          color: direct index for structure (temp 4-component vector of float)
+0:20            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:20            Constant:
+0:20              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
 
 
@@ -101,7 +104,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:20    Function Parameters: 
 0:?     Sequence
 0:37      clamp (temp float)
@@ -178,24 +181,27 @@ gl_FragCoord origin is upper left
 0:47          0.000000
 0:47          0.000000
 0:47          0.000000
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:48            color: direct index for structure (temp 4-component vector of float)
-0:48              'ps_output' (temp structure{temp 4-component vector of float color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'ps_output' (temp structure{temp 4-component vector of float color})
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:20          color: direct index for structure (temp 4-component vector of float)
+0:20            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:20            Constant:
+0:20              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int i, layout(offset=4 ) uniform uint u, layout(offset=8 ) uniform float f, layout(offset=12 ) uniform bool b, layout(offset=16 ) uniform 2-component vector of int i2, layout(offset=24 ) uniform 2-component vector of uint u2, layout(offset=32 ) uniform 2-component vector of float f2, layout(offset=40 ) uniform 2-component vector of bool b2, layout(offset=48 ) uniform uint upos, layout(offset=52 ) uniform float fpos})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 76
+// Id's are bound by 81
 
                               Capability Shader
                               Capability Sampled1D
@@ -203,135 +209,142 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 68
+                              EntryPoint Fragment 4  "main" 74
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 12  "$Global"
-                              MemberName 12($Global) 0  "i"
-                              MemberName 12($Global) 1  "u"
-                              MemberName 12($Global) 2  "f"
-                              MemberName 12($Global) 3  "b"
-                              MemberName 12($Global) 4  "i2"
-                              MemberName 12($Global) 5  "u2"
-                              MemberName 12($Global) 6  "f2"
-                              MemberName 12($Global) 7  "b2"
-                              MemberName 12($Global) 8  "upos"
-                              MemberName 12($Global) 9  "fpos"
-                              Name 14  ""
-                              Name 23  "sizeQueryTemp"
-                              Name 26  "g_tTex1df4"
-                              Name 30  "WidthI"
-                              Name 33  "sizeQueryTemp"
-                              Name 39  "NumberOfLevelsU"
-                              Name 42  "sizeQueryTemp"
-                              Name 45  "WidthU"
-                              Name 47  "NumberOfLevelsI"
-                              Name 51  "sizeQueryTemp"
-                              Name 60  "PS_OUTPUT"
-                              MemberName 60(PS_OUTPUT) 0  "color"
-                              Name 62  "ps_output"
-                              Name 68  "color"
-                              Name 75  "g_tTexbfs"
-                              MemberDecorate 12($Global) 0 Offset 0
-                              MemberDecorate 12($Global) 1 Offset 4
-                              MemberDecorate 12($Global) 2 Offset 8
-                              MemberDecorate 12($Global) 3 Offset 12
-                              MemberDecorate 12($Global) 4 Offset 16
-                              MemberDecorate 12($Global) 5 Offset 24
-                              MemberDecorate 12($Global) 6 Offset 32
-                              MemberDecorate 12($Global) 7 Offset 40
-                              MemberDecorate 12($Global) 8 Offset 48
-                              MemberDecorate 12($Global) 9 Offset 52
-                              Decorate 12($Global) Block
-                              Decorate 14 DescriptorSet 0
-                              Decorate 26(g_tTex1df4) DescriptorSet 0
-                              Decorate 68(color) Location 0
-                              Decorate 75(g_tTexbfs) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 10  "@main("
+                              Name 17  "$Global"
+                              MemberName 17($Global) 0  "i"
+                              MemberName 17($Global) 1  "u"
+                              MemberName 17($Global) 2  "f"
+                              MemberName 17($Global) 3  "b"
+                              MemberName 17($Global) 4  "i2"
+                              MemberName 17($Global) 5  "u2"
+                              MemberName 17($Global) 6  "f2"
+                              MemberName 17($Global) 7  "b2"
+                              MemberName 17($Global) 8  "upos"
+                              MemberName 17($Global) 9  "fpos"
+                              Name 19  ""
+                              Name 28  "sizeQueryTemp"
+                              Name 31  "g_tTex1df4"
+                              Name 35  "WidthI"
+                              Name 38  "sizeQueryTemp"
+                              Name 44  "NumberOfLevelsU"
+                              Name 47  "sizeQueryTemp"
+                              Name 50  "WidthU"
+                              Name 52  "NumberOfLevelsI"
+                              Name 56  "sizeQueryTemp"
+                              Name 65  "ps_output"
+                              Name 74  "color"
+                              Name 80  "g_tTexbfs"
+                              MemberDecorate 17($Global) 0 Offset 0
+                              MemberDecorate 17($Global) 1 Offset 4
+                              MemberDecorate 17($Global) 2 Offset 8
+                              MemberDecorate 17($Global) 3 Offset 12
+                              MemberDecorate 17($Global) 4 Offset 16
+                              MemberDecorate 17($Global) 5 Offset 24
+                              MemberDecorate 17($Global) 6 Offset 32
+                              MemberDecorate 17($Global) 7 Offset 40
+                              MemberDecorate 17($Global) 8 Offset 48
+                              MemberDecorate 17($Global) 9 Offset 52
+                              Decorate 17($Global) Block
+                              Decorate 19 DescriptorSet 0
+                              Decorate 31(g_tTex1df4) DescriptorSet 0
+                              Decorate 74(color) Location 0
+                              Decorate 80(g_tTexbfs) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypeInt 32 0
-               8:             TypeFloat 32
-               9:             TypeVector 6(int) 2
-              10:             TypeVector 7(int) 2
-              11:             TypeVector 8(float) 2
-     12($Global):             TypeStruct 6(int) 7(int) 8(float) 7(int) 9(ivec2) 10(ivec2) 11(fvec2) 10(ivec2) 7(int) 8(float)
-              13:             TypePointer Uniform 12($Global)
-              14:     13(ptr) Variable Uniform
-              15:      6(int) Constant 9
-              16:             TypePointer Uniform 8(float)
-              19:    8(float) Constant 0
-              20:    8(float) Constant 1065353216
-              22:             TypePointer Function 7(int)
-              24:             TypeImage 8(float) 1D sampled format:Unknown
-              25:             TypePointer UniformConstant 24
-  26(g_tTex1df4):     25(ptr) Variable UniformConstant
-              29:             TypePointer Function 6(int)
-              35:      7(int) Constant 6
-              59:             TypeVector 8(float) 4
-   60(PS_OUTPUT):             TypeStruct 59(fvec4)
-              61:             TypePointer Function 60(PS_OUTPUT)
-              63:      6(int) Constant 0
-              64:   59(fvec4) ConstantComposite 19 19 19 19
-              65:             TypePointer Function 59(fvec4)
-              67:             TypePointer Output 59(fvec4)
-       68(color):     67(ptr) Variable Output
-              72:             TypeImage 8(float) Buffer sampled format:R32f
-              73:             TypeSampledImage 72
-              74:             TypePointer UniformConstant 73
-   75(g_tTexbfs):     74(ptr) Variable UniformConstant
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 1
+              13:             TypeInt 32 0
+              14:             TypeVector 12(int) 2
+              15:             TypeVector 13(int) 2
+              16:             TypeVector 6(float) 2
+     17($Global):             TypeStruct 12(int) 13(int) 6(float) 13(int) 14(ivec2) 15(ivec2) 16(fvec2) 15(ivec2) 13(int) 6(float)
+              18:             TypePointer Uniform 17($Global)
+              19:     18(ptr) Variable Uniform
+              20:     12(int) Constant 9
+              21:             TypePointer Uniform 6(float)
+              24:    6(float) Constant 0
+              25:    6(float) Constant 1065353216
+              27:             TypePointer Function 13(int)
+              29:             TypeImage 6(float) 1D sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+  31(g_tTex1df4):     30(ptr) Variable UniformConstant
+              34:             TypePointer Function 12(int)
+              40:     13(int) Constant 6
+              64:             TypePointer Function 8(PS_OUTPUT)
+              66:     12(int) Constant 0
+              67:    7(fvec4) ConstantComposite 24 24 24 24
+              68:             TypePointer Function 7(fvec4)
+              73:             TypePointer Output 7(fvec4)
+       74(color):     73(ptr) Variable Output
+              77:             TypeImage 6(float) Buffer sampled format:R32f
+              78:             TypeSampledImage 77
+              79:             TypePointer UniformConstant 78
+   80(g_tTexbfs):     79(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-23(sizeQueryTemp):     22(ptr) Variable Function
-      30(WidthI):     29(ptr) Variable Function
-33(sizeQueryTemp):     22(ptr) Variable Function
-39(NumberOfLevelsU):     22(ptr) Variable Function
-42(sizeQueryTemp):     22(ptr) Variable Function
-      45(WidthU):     22(ptr) Variable Function
-47(NumberOfLevelsI):     29(ptr) Variable Function
-51(sizeQueryTemp):     22(ptr) Variable Function
-   62(ps_output):     61(ptr) Variable Function
-              17:     16(ptr) AccessChain 14 15
-              18:    8(float) Load 17
-              21:    8(float) ExtInst 1(GLSL.std.450) 43(FClamp) 18 19 20
-              27:          24 Load 26(g_tTex1df4)
-              28:      6(int) ImageQuerySize 27
-                              Store 23(sizeQueryTemp) 28
-              31:      7(int) Load 23(sizeQueryTemp)
-              32:      6(int) Bitcast 31
-                              Store 30(WidthI) 32
-              34:          24 Load 26(g_tTex1df4)
-              36:      6(int) ImageQuerySizeLod 34 35
-                              Store 33(sizeQueryTemp) 36
-              37:      7(int) Load 33(sizeQueryTemp)
-              38:      6(int) Bitcast 37
-                              Store 30(WidthI) 38
-              40:          24 Load 26(g_tTex1df4)
-              41:      6(int) ImageQueryLevels 40
-                              Store 39(NumberOfLevelsU) 41
-              43:          24 Load 26(g_tTex1df4)
-              44:      6(int) ImageQuerySizeLod 43 35
-                              Store 42(sizeQueryTemp) 44
-              46:      7(int) Load 42(sizeQueryTemp)
-                              Store 45(WidthU) 46
-              48:          24 Load 26(g_tTex1df4)
-              49:      6(int) ImageQueryLevels 48
-              50:      6(int) Bitcast 49
-                              Store 47(NumberOfLevelsI) 50
-              52:          24 Load 26(g_tTex1df4)
-              53:      6(int) ImageQuerySizeLod 52 35
-                              Store 51(sizeQueryTemp) 53
-              54:      7(int) Load 51(sizeQueryTemp)
-              55:      6(int) Bitcast 54
-                              Store 30(WidthI) 55
-              56:          24 Load 26(g_tTex1df4)
-              57:      6(int) ImageQueryLevels 56
-              58:      6(int) Bitcast 57
-                              Store 47(NumberOfLevelsI) 58
-              66:     65(ptr) AccessChain 62(ps_output) 63
-                              Store 66 64
-              69:     65(ptr) AccessChain 62(ps_output) 63
-              70:   59(fvec4) Load 69
-                              Store 68(color) 70
+              75:8(PS_OUTPUT) FunctionCall 10(@main()
+              76:    7(fvec4) CompositeExtract 75 0
+                              Store 74(color) 76
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+28(sizeQueryTemp):     27(ptr) Variable Function
+      35(WidthI):     34(ptr) Variable Function
+38(sizeQueryTemp):     27(ptr) Variable Function
+44(NumberOfLevelsU):     27(ptr) Variable Function
+47(sizeQueryTemp):     27(ptr) Variable Function
+      50(WidthU):     27(ptr) Variable Function
+52(NumberOfLevelsI):     34(ptr) Variable Function
+56(sizeQueryTemp):     27(ptr) Variable Function
+   65(ps_output):     64(ptr) Variable Function
+              22:     21(ptr) AccessChain 19 20
+              23:    6(float) Load 22
+              26:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 23 24 25
+              32:          29 Load 31(g_tTex1df4)
+              33:     12(int) ImageQuerySize 32
+                              Store 28(sizeQueryTemp) 33
+              36:     13(int) Load 28(sizeQueryTemp)
+              37:     12(int) Bitcast 36
+                              Store 35(WidthI) 37
+              39:          29 Load 31(g_tTex1df4)
+              41:     12(int) ImageQuerySizeLod 39 40
+                              Store 38(sizeQueryTemp) 41
+              42:     13(int) Load 38(sizeQueryTemp)
+              43:     12(int) Bitcast 42
+                              Store 35(WidthI) 43
+              45:          29 Load 31(g_tTex1df4)
+              46:     12(int) ImageQueryLevels 45
+                              Store 44(NumberOfLevelsU) 46
+              48:          29 Load 31(g_tTex1df4)
+              49:     12(int) ImageQuerySizeLod 48 40
+                              Store 47(sizeQueryTemp) 49
+              51:     13(int) Load 47(sizeQueryTemp)
+                              Store 50(WidthU) 51
+              53:          29 Load 31(g_tTex1df4)
+              54:     12(int) ImageQueryLevels 53
+              55:     12(int) Bitcast 54
+                              Store 52(NumberOfLevelsI) 55
+              57:          29 Load 31(g_tTex1df4)
+              58:     12(int) ImageQuerySizeLod 57 40
+                              Store 56(sizeQueryTemp) 58
+              59:     13(int) Load 56(sizeQueryTemp)
+              60:     12(int) Bitcast 59
+                              Store 35(WidthI) 60
+              61:          29 Load 31(g_tTex1df4)
+              62:     12(int) ImageQueryLevels 61
+              63:     12(int) Bitcast 62
+                              Store 52(NumberOfLevelsI) 63
+              69:     68(ptr) AccessChain 65(ps_output) 66
+                              Store 69 67
+              70:8(PS_OUTPUT) Load 65(ps_output)
+                              ReturnValue 70
+                              FunctionEnd

+ 223 - 200
3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.2dms.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:32      textureFetch (temp 4-component vector of float)
@@ -142,24 +142,28 @@ gl_FragCoord origin is upper left
 0:52            1 (const int)
 0:52        Constant:
 0:52          1.000000
-0:54      Sequence
-0:54        Sequence
-0:54          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:54            Color: direct index for structure (temp 4-component vector of float)
-0:54              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:54              Constant:
-0:54                0 (const int)
-0:54          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:54            Depth: direct index for structure (temp float)
-0:54              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:54              Constant:
-0:54                1 (const int)
-0:54        Branch: Return
+0:54      Branch: Return with expression
+0:54        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
@@ -167,6 +171,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -176,7 +182,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:28    Function Parameters: 
 0:?     Sequence
 0:32      textureFetch (temp 4-component vector of float)
@@ -316,24 +322,28 @@ gl_FragCoord origin is upper left
 0:52            1 (const int)
 0:52        Constant:
 0:52          1.000000
-0:54      Sequence
-0:54        Sequence
-0:54          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:54            Color: direct index for structure (temp 4-component vector of float)
-0:54              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:54              Constant:
-0:54                0 (const int)
-0:54          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:54            Depth: direct index for structure (temp float)
-0:54              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:54              Constant:
-0:54                1 (const int)
-0:54        Branch: Return
+0:54      Branch: Return with expression
+0:54        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28  Function Definition: main( (temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:28          Color: direct index for structure (temp 4-component vector of float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              0 (const int)
+0:28        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:28          Depth: direct index for structure (temp float)
+0:28            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:28            Constant:
+0:28              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
@@ -341,186 +351,199 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 123
+// Id's are bound by 130
 
                               Capability Shader
                               Capability ImageGatherExtended
                               Capability ImageMSArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 112 116
+                              EntryPoint Fragment 4  "main" 120 124
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex2dmsf4"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 27  "g_tTex2dmsi4"
-                              Name 35  "g_tTex2dmsu4"
-                              Name 62  "g_tTex2dmsf4a"
-                              Name 71  "g_tTex2dmsi4a"
-                              Name 78  "g_tTex2dmsu4a"
-                              Name 101  "PS_OUTPUT"
-                              MemberName 101(PS_OUTPUT) 0  "Color"
-                              MemberName 101(PS_OUTPUT) 1  "Depth"
-                              Name 103  "psout"
-                              Name 112  "Color"
-                              Name 116  "Depth"
-                              Name 122  "g_sSamp"
-                              Decorate 9(g_tTex2dmsf4) DescriptorSet 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 27(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 35(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 62(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 71(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 78(g_tTex2dmsu4a) DescriptorSet 0
-                              Decorate 112(Color) Location 0
-                              Decorate 116(Depth) BuiltIn FragDepth
-                              Decorate 122(g_sSamp) DescriptorSet 0
-                              Decorate 122(g_sSamp) Binding 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex2dmsf4"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 31  "g_tTex2dmsi4"
+                              Name 39  "g_tTex2dmsu4"
+                              Name 66  "g_tTex2dmsf4a"
+                              Name 75  "g_tTex2dmsi4a"
+                              Name 82  "g_tTex2dmsu4a"
+                              Name 106  "psout"
+                              Name 117  "flattenTemp"
+                              Name 120  "Color"
+                              Name 124  "Depth"
+                              Name 129  "g_sSamp"
+                              Decorate 14(g_tTex2dmsf4) DescriptorSet 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 31(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 39(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 66(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 75(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 82(g_tTex2dmsu4a) DescriptorSet 0
+                              Decorate 120(Color) Location 0
+                              Decorate 124(Depth) BuiltIn FragDepth
+                              Decorate 129(g_sSamp) DescriptorSet 0
+                              Decorate 129(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
-               8:             TypePointer UniformConstant 7
- 9(g_tTex2dmsf4):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 1
-              19:             TypePointer Uniform 12(ivec2)
-              22:     11(int) Constant 3
-              23:             TypeVector 6(float) 4
-              25:             TypeImage 11(int) 2D multi-sampled sampled format:Unknown
-              26:             TypePointer UniformConstant 25
-27(g_tTex2dmsi4):     26(ptr) Variable UniformConstant
-              32:             TypeInt 32 0
-              33:             TypeImage 32(int) 2D multi-sampled sampled format:Unknown
-              34:             TypePointer UniformConstant 33
-35(g_tTex2dmsu4):     34(ptr) Variable UniformConstant
-              39:             TypeVector 32(int) 4
-              44:     11(int) Constant 5
-              60:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
-              61:             TypePointer UniformConstant 60
-62(g_tTex2dmsf4a):     61(ptr) Variable UniformConstant
-              64:     11(int) Constant 2
-              65:             TypePointer Uniform 13(ivec3)
-              69:             TypeImage 11(int) 2D array multi-sampled sampled format:Unknown
-              70:             TypePointer UniformConstant 69
-71(g_tTex2dmsi4a):     70(ptr) Variable UniformConstant
-              76:             TypeImage 32(int) 2D array multi-sampled sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-78(g_tTex2dmsu4a):     77(ptr) Variable UniformConstant
-  101(PS_OUTPUT):             TypeStruct 23(fvec4) 6(float)
-             102:             TypePointer Function 101(PS_OUTPUT)
-             104:     11(int) Constant 0
-             105:    6(float) Constant 1065353216
-             106:   23(fvec4) ConstantComposite 105 105 105 105
-             107:             TypePointer Function 23(fvec4)
-             109:             TypePointer Function 6(float)
-             111:             TypePointer Output 23(fvec4)
-      112(Color):    111(ptr) Variable Output
-             115:             TypePointer Output 6(float)
-      116(Depth):    115(ptr) Variable Output
-             120:             TypeSampler
-             121:             TypePointer UniformConstant 120
-    122(g_sSamp):    121(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+14(g_tTex2dmsf4):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 1
+              24:             TypePointer Uniform 17(ivec2)
+              27:     16(int) Constant 3
+              29:             TypeImage 16(int) 2D multi-sampled sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+31(g_tTex2dmsi4):     30(ptr) Variable UniformConstant
+              36:             TypeInt 32 0
+              37:             TypeImage 36(int) 2D multi-sampled sampled format:Unknown
+              38:             TypePointer UniformConstant 37
+39(g_tTex2dmsu4):     38(ptr) Variable UniformConstant
+              43:             TypeVector 36(int) 4
+              48:     16(int) Constant 5
+              64:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
+              65:             TypePointer UniformConstant 64
+66(g_tTex2dmsf4a):     65(ptr) Variable UniformConstant
+              68:     16(int) Constant 2
+              69:             TypePointer Uniform 18(ivec3)
+              73:             TypeImage 16(int) 2D array multi-sampled sampled format:Unknown
+              74:             TypePointer UniformConstant 73
+75(g_tTex2dmsi4a):     74(ptr) Variable UniformConstant
+              80:             TypeImage 36(int) 2D array multi-sampled sampled format:Unknown
+              81:             TypePointer UniformConstant 80
+82(g_tTex2dmsu4a):     81(ptr) Variable UniformConstant
+             105:             TypePointer Function 8(PS_OUTPUT)
+             107:     16(int) Constant 0
+             108:    6(float) Constant 1065353216
+             109:    7(fvec4) ConstantComposite 108 108 108 108
+             110:             TypePointer Function 7(fvec4)
+             112:             TypePointer Function 6(float)
+             119:             TypePointer Output 7(fvec4)
+      120(Color):    119(ptr) Variable Output
+             123:             TypePointer Output 6(float)
+      124(Depth):    123(ptr) Variable Output
+             127:             TypeSampler
+             128:             TypePointer UniformConstant 127
+    129(g_sSamp):    128(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      103(psout):    102(ptr) Variable Function
-              10:           7 Load 9(g_tTex2dmsf4)
-              20:     19(ptr) AccessChain 17 18
-              21:   12(ivec2) Load 20
-              24:   23(fvec4) ImageFetch 10 21 Sample 22
-              28:          25 Load 27(g_tTex2dmsi4)
-              29:     19(ptr) AccessChain 17 18
-              30:   12(ivec2) Load 29
-              31:   14(ivec4) ImageFetch 28 30 Sample 22
-              36:          33 Load 35(g_tTex2dmsu4)
-              37:     19(ptr) AccessChain 17 18
-              38:   12(ivec2) Load 37
-              40:   39(ivec4) ImageFetch 36 38 Sample 22
-              41:           7 Load 9(g_tTex2dmsf4)
-              42:     19(ptr) AccessChain 17 18
-              43:   12(ivec2) Load 42
-              45:     19(ptr) AccessChain 17 44
-              46:   12(ivec2) Load 45
-              47:   23(fvec4) ImageFetch 41 43 Offset Sample 46 22
-              48:          25 Load 27(g_tTex2dmsi4)
-              49:     19(ptr) AccessChain 17 18
-              50:   12(ivec2) Load 49
-              51:     19(ptr) AccessChain 17 44
-              52:   12(ivec2) Load 51
-              53:   14(ivec4) ImageFetch 48 50 Offset Sample 52 22
-              54:          33 Load 35(g_tTex2dmsu4)
-              55:     19(ptr) AccessChain 17 18
-              56:   12(ivec2) Load 55
-              57:     19(ptr) AccessChain 17 44
-              58:   12(ivec2) Load 57
-              59:   39(ivec4) ImageFetch 54 56 Offset Sample 58 22
-              63:          60 Load 62(g_tTex2dmsf4a)
-              66:     65(ptr) AccessChain 17 64
-              67:   13(ivec3) Load 66
-              68:   23(fvec4) ImageFetch 63 67 Sample 22
-              72:          69 Load 71(g_tTex2dmsi4a)
-              73:     65(ptr) AccessChain 17 64
-              74:   13(ivec3) Load 73
-              75:   14(ivec4) ImageFetch 72 74 Sample 22
-              79:          76 Load 78(g_tTex2dmsu4a)
-              80:     65(ptr) AccessChain 17 64
-              81:   13(ivec3) Load 80
-              82:   39(ivec4) ImageFetch 79 81 Sample 22
-              83:          60 Load 62(g_tTex2dmsf4a)
-              84:     65(ptr) AccessChain 17 64
-              85:   13(ivec3) Load 84
-              86:     19(ptr) AccessChain 17 44
-              87:   12(ivec2) Load 86
-              88:   23(fvec4) ImageFetch 83 85 Offset Sample 87 22
-              89:          69 Load 71(g_tTex2dmsi4a)
-              90:     65(ptr) AccessChain 17 64
-              91:   13(ivec3) Load 90
-              92:     19(ptr) AccessChain 17 44
-              93:   12(ivec2) Load 92
-              94:   14(ivec4) ImageFetch 89 91 Offset Sample 93 22
-              95:          76 Load 78(g_tTex2dmsu4a)
-              96:     65(ptr) AccessChain 17 64
-              97:   13(ivec3) Load 96
-              98:     19(ptr) AccessChain 17 44
-              99:   12(ivec2) Load 98
-             100:   39(ivec4) ImageFetch 95 97 Offset Sample 99 22
-             108:    107(ptr) AccessChain 103(psout) 104
-                              Store 108 106
-             110:    109(ptr) AccessChain 103(psout) 18
-                              Store 110 105
-             113:    107(ptr) AccessChain 103(psout) 104
-             114:   23(fvec4) Load 113
-                              Store 112(Color) 114
-             117:    109(ptr) AccessChain 103(psout) 18
-             118:    6(float) Load 117
-                              Store 116(Depth) 118
+117(flattenTemp):    105(ptr) Variable Function
+             118:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 117(flattenTemp) 118
+             121:    110(ptr) AccessChain 117(flattenTemp) 107
+             122:    7(fvec4) Load 121
+                              Store 120(Color) 122
+             125:    112(ptr) AccessChain 117(flattenTemp) 23
+             126:    6(float) Load 125
+                              Store 124(Depth) 126
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+      106(psout):    105(ptr) Variable Function
+              15:          12 Load 14(g_tTex2dmsf4)
+              25:     24(ptr) AccessChain 22 23
+              26:   17(ivec2) Load 25
+              28:    7(fvec4) ImageFetch 15 26 Sample 27
+              32:          29 Load 31(g_tTex2dmsi4)
+              33:     24(ptr) AccessChain 22 23
+              34:   17(ivec2) Load 33
+              35:   19(ivec4) ImageFetch 32 34 Sample 27
+              40:          37 Load 39(g_tTex2dmsu4)
+              41:     24(ptr) AccessChain 22 23
+              42:   17(ivec2) Load 41
+              44:   43(ivec4) ImageFetch 40 42 Sample 27
+              45:          12 Load 14(g_tTex2dmsf4)
+              46:     24(ptr) AccessChain 22 23
+              47:   17(ivec2) Load 46
+              49:     24(ptr) AccessChain 22 48
+              50:   17(ivec2) Load 49
+              51:    7(fvec4) ImageFetch 45 47 Offset Sample 50 27
+              52:          29 Load 31(g_tTex2dmsi4)
+              53:     24(ptr) AccessChain 22 23
+              54:   17(ivec2) Load 53
+              55:     24(ptr) AccessChain 22 48
+              56:   17(ivec2) Load 55
+              57:   19(ivec4) ImageFetch 52 54 Offset Sample 56 27
+              58:          37 Load 39(g_tTex2dmsu4)
+              59:     24(ptr) AccessChain 22 23
+              60:   17(ivec2) Load 59
+              61:     24(ptr) AccessChain 22 48
+              62:   17(ivec2) Load 61
+              63:   43(ivec4) ImageFetch 58 60 Offset Sample 62 27
+              67:          64 Load 66(g_tTex2dmsf4a)
+              70:     69(ptr) AccessChain 22 68
+              71:   18(ivec3) Load 70
+              72:    7(fvec4) ImageFetch 67 71 Sample 27
+              76:          73 Load 75(g_tTex2dmsi4a)
+              77:     69(ptr) AccessChain 22 68
+              78:   18(ivec3) Load 77
+              79:   19(ivec4) ImageFetch 76 78 Sample 27
+              83:          80 Load 82(g_tTex2dmsu4a)
+              84:     69(ptr) AccessChain 22 68
+              85:   18(ivec3) Load 84
+              86:   43(ivec4) ImageFetch 83 85 Sample 27
+              87:          64 Load 66(g_tTex2dmsf4a)
+              88:     69(ptr) AccessChain 22 68
+              89:   18(ivec3) Load 88
+              90:     24(ptr) AccessChain 22 48
+              91:   17(ivec2) Load 90
+              92:    7(fvec4) ImageFetch 87 89 Offset Sample 91 27
+              93:          73 Load 75(g_tTex2dmsi4a)
+              94:     69(ptr) AccessChain 22 68
+              95:   18(ivec3) Load 94
+              96:     24(ptr) AccessChain 22 48
+              97:   17(ivec2) Load 96
+              98:   19(ivec4) ImageFetch 93 95 Offset Sample 97 27
+              99:          80 Load 82(g_tTex2dmsu4a)
+             100:     69(ptr) AccessChain 22 68
+             101:   18(ivec3) Load 100
+             102:     24(ptr) AccessChain 22 48
+             103:   17(ivec2) Load 102
+             104:   43(ivec4) ImageFetch 99 101 Offset Sample 103 27
+             111:    110(ptr) AccessChain 106(psout) 107
+                              Store 111 109
+             113:    112(ptr) AccessChain 106(psout) 23
+                              Store 113 108
+             114:8(PS_OUTPUT) Load 106(psout)
+                              ReturnValue 114
+                              FunctionEnd

+ 283 - 260
3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetch (temp 4-component vector of float)
@@ -142,24 +142,28 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:70      Sequence
-0:70        Sequence
-0:70          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:70            Color: direct index for structure (temp 4-component vector of float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                0 (const int)
-0:70          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:70            Depth: direct index for structure (temp float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                1 (const int)
-0:70        Branch: Return
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -182,6 +186,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -191,7 +197,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetch (temp 4-component vector of float)
@@ -331,24 +337,28 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:70      Sequence
-0:70        Sequence
-0:70          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:70            Color: direct index for structure (temp 4-component vector of float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                0 (const int)
-0:70          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:70            Depth: direct index for structure (temp float)
-0:70              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:70              Constant:
-0:70                1 (const int)
-0:70        Branch: Return
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -371,246 +381,259 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 152
+// Id's are bound by 159
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 96 100
+                              EntryPoint Fragment 4  "main" 104 108
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4a"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 32  "g_tTex1di4a"
-                              Name 42  "g_tTex1du4a"
-                              Name 53  "g_tTex2df4a"
-                              Name 66  "g_tTex2di4a"
-                              Name 76  "g_tTex2du4a"
-                              Name 84  "PS_OUTPUT"
-                              MemberName 84(PS_OUTPUT) 0  "Color"
-                              MemberName 84(PS_OUTPUT) 1  "Depth"
-                              Name 86  "psout"
-                              Name 96  "Color"
-                              Name 100  "Depth"
-                              Name 106  "g_sSamp"
-                              Name 109  "g_tTex1df4"
-                              Name 112  "g_tTex1di4"
-                              Name 115  "g_tTex1du4"
-                              Name 118  "g_tTex2df4"
-                              Name 121  "g_tTex2di4"
-                              Name 124  "g_tTex2du4"
-                              Name 127  "g_tTex3df4"
-                              Name 130  "g_tTex3di4"
-                              Name 133  "g_tTex3du4"
-                              Name 136  "g_tTexcdf4"
-                              Name 139  "g_tTexcdi4"
-                              Name 142  "g_tTexcdu4"
-                              Name 145  "g_tTexcdf4a"
-                              Name 148  "g_tTexcdi4a"
-                              Name 151  "g_tTexcdu4a"
-                              Decorate 9(g_tTex1df4a) DescriptorSet 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 32(g_tTex1di4a) DescriptorSet 0
-                              Decorate 42(g_tTex1du4a) DescriptorSet 0
-                              Decorate 53(g_tTex2df4a) DescriptorSet 0
-                              Decorate 66(g_tTex2di4a) DescriptorSet 0
-                              Decorate 76(g_tTex2du4a) DescriptorSet 0
-                              Decorate 96(Color) Location 0
-                              Decorate 100(Depth) BuiltIn FragDepth
-                              Decorate 106(g_sSamp) DescriptorSet 0
-                              Decorate 106(g_sSamp) Binding 0
-                              Decorate 109(g_tTex1df4) DescriptorSet 0
-                              Decorate 109(g_tTex1df4) Binding 0
-                              Decorate 112(g_tTex1di4) DescriptorSet 0
-                              Decorate 115(g_tTex1du4) DescriptorSet 0
-                              Decorate 118(g_tTex2df4) DescriptorSet 0
-                              Decorate 121(g_tTex2di4) DescriptorSet 0
-                              Decorate 124(g_tTex2du4) DescriptorSet 0
-                              Decorate 127(g_tTex3df4) DescriptorSet 0
-                              Decorate 130(g_tTex3di4) DescriptorSet 0
-                              Decorate 133(g_tTex3du4) DescriptorSet 0
-                              Decorate 136(g_tTexcdf4) DescriptorSet 0
-                              Decorate 139(g_tTexcdi4) DescriptorSet 0
-                              Decorate 142(g_tTexcdu4) DescriptorSet 0
-                              Decorate 145(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 148(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 151(g_tTexcdu4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4a"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 36  "g_tTex1di4a"
+                              Name 46  "g_tTex1du4a"
+                              Name 57  "g_tTex2df4a"
+                              Name 70  "g_tTex2di4a"
+                              Name 80  "g_tTex2du4a"
+                              Name 89  "psout"
+                              Name 101  "flattenTemp"
+                              Name 104  "Color"
+                              Name 108  "Depth"
+                              Name 113  "g_sSamp"
+                              Name 116  "g_tTex1df4"
+                              Name 119  "g_tTex1di4"
+                              Name 122  "g_tTex1du4"
+                              Name 125  "g_tTex2df4"
+                              Name 128  "g_tTex2di4"
+                              Name 131  "g_tTex2du4"
+                              Name 134  "g_tTex3df4"
+                              Name 137  "g_tTex3di4"
+                              Name 140  "g_tTex3du4"
+                              Name 143  "g_tTexcdf4"
+                              Name 146  "g_tTexcdi4"
+                              Name 149  "g_tTexcdu4"
+                              Name 152  "g_tTexcdf4a"
+                              Name 155  "g_tTexcdi4a"
+                              Name 158  "g_tTexcdu4a"
+                              Decorate 14(g_tTex1df4a) DescriptorSet 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 46(g_tTex1du4a) DescriptorSet 0
+                              Decorate 57(g_tTex2df4a) DescriptorSet 0
+                              Decorate 70(g_tTex2di4a) DescriptorSet 0
+                              Decorate 80(g_tTex2du4a) DescriptorSet 0
+                              Decorate 104(Color) Location 0
+                              Decorate 108(Depth) BuiltIn FragDepth
+                              Decorate 113(g_sSamp) DescriptorSet 0
+                              Decorate 113(g_sSamp) Binding 0
+                              Decorate 116(g_tTex1df4) DescriptorSet 0
+                              Decorate 116(g_tTex1df4) Binding 0
+                              Decorate 119(g_tTex1di4) DescriptorSet 0
+                              Decorate 122(g_tTex1du4) DescriptorSet 0
+                              Decorate 125(g_tTex2df4) DescriptorSet 0
+                              Decorate 128(g_tTex2di4) DescriptorSet 0
+                              Decorate 131(g_tTex2du4) DescriptorSet 0
+                              Decorate 134(g_tTex3df4) DescriptorSet 0
+                              Decorate 137(g_tTex3di4) DescriptorSet 0
+                              Decorate 140(g_tTex3du4) DescriptorSet 0
+                              Decorate 143(g_tTexcdf4) DescriptorSet 0
+                              Decorate 146(g_tTexcdi4) DescriptorSet 0
+                              Decorate 149(g_tTexcdu4) DescriptorSet 0
+                              Decorate 152(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 155(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 158(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D array sampled format:Unknown
-               8:             TypePointer UniformConstant 7
-  9(g_tTex1df4a):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 2
-              19:             TypePointer Uniform 13(ivec3)
-              23:             TypeInt 32 0
-              24:     23(int) Constant 2
-              25:             TypePointer Uniform 11(int)
-              28:             TypeVector 6(float) 4
-              30:             TypeImage 11(int) 1D array sampled format:Unknown
-              31:             TypePointer UniformConstant 30
- 32(g_tTex1di4a):     31(ptr) Variable UniformConstant
-              40:             TypeImage 23(int) 1D array sampled format:Unknown
-              41:             TypePointer UniformConstant 40
- 42(g_tTex1du4a):     41(ptr) Variable UniformConstant
-              49:             TypeVector 23(int) 4
-              51:             TypeImage 6(float) 2D array sampled format:Unknown
-              52:             TypePointer UniformConstant 51
- 53(g_tTex2df4a):     52(ptr) Variable UniformConstant
-              55:     11(int) Constant 3
-              56:             TypePointer Uniform 14(ivec4)
-              60:     23(int) Constant 3
-              64:             TypeImage 11(int) 2D array sampled format:Unknown
-              65:             TypePointer UniformConstant 64
- 66(g_tTex2di4a):     65(ptr) Variable UniformConstant
-              74:             TypeImage 23(int) 2D array sampled format:Unknown
-              75:             TypePointer UniformConstant 74
- 76(g_tTex2du4a):     75(ptr) Variable UniformConstant
-   84(PS_OUTPUT):             TypeStruct 28(fvec4) 6(float)
-              85:             TypePointer Function 84(PS_OUTPUT)
-              87:     11(int) Constant 0
-              88:    6(float) Constant 1065353216
-              89:   28(fvec4) ConstantComposite 88 88 88 88
-              90:             TypePointer Function 28(fvec4)
-              92:     11(int) Constant 1
-              93:             TypePointer Function 6(float)
-              95:             TypePointer Output 28(fvec4)
-       96(Color):     95(ptr) Variable Output
-              99:             TypePointer Output 6(float)
-      100(Depth):     99(ptr) Variable Output
-             104:             TypeSampler
-             105:             TypePointer UniformConstant 104
-    106(g_sSamp):    105(ptr) Variable UniformConstant
-             107:             TypeImage 6(float) 1D sampled format:Unknown
-             108:             TypePointer UniformConstant 107
- 109(g_tTex1df4):    108(ptr) Variable UniformConstant
-             110:             TypeImage 11(int) 1D sampled format:Unknown
-             111:             TypePointer UniformConstant 110
- 112(g_tTex1di4):    111(ptr) Variable UniformConstant
-             113:             TypeImage 23(int) 1D sampled format:Unknown
-             114:             TypePointer UniformConstant 113
- 115(g_tTex1du4):    114(ptr) Variable UniformConstant
-             116:             TypeImage 6(float) 2D sampled format:Unknown
-             117:             TypePointer UniformConstant 116
- 118(g_tTex2df4):    117(ptr) Variable UniformConstant
-             119:             TypeImage 11(int) 2D sampled format:Unknown
-             120:             TypePointer UniformConstant 119
- 121(g_tTex2di4):    120(ptr) Variable UniformConstant
-             122:             TypeImage 23(int) 2D sampled format:Unknown
-             123:             TypePointer UniformConstant 122
- 124(g_tTex2du4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 6(float) 3D sampled format:Unknown
-             126:             TypePointer UniformConstant 125
- 127(g_tTex3df4):    126(ptr) Variable UniformConstant
-             128:             TypeImage 11(int) 3D sampled format:Unknown
-             129:             TypePointer UniformConstant 128
- 130(g_tTex3di4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 23(int) 3D sampled format:Unknown
-             132:             TypePointer UniformConstant 131
- 133(g_tTex3du4):    132(ptr) Variable UniformConstant
-             134:             TypeImage 6(float) Cube sampled format:Unknown
-             135:             TypePointer UniformConstant 134
- 136(g_tTexcdf4):    135(ptr) Variable UniformConstant
-             137:             TypeImage 11(int) Cube sampled format:Unknown
-             138:             TypePointer UniformConstant 137
- 139(g_tTexcdi4):    138(ptr) Variable UniformConstant
-             140:             TypeImage 23(int) Cube sampled format:Unknown
-             141:             TypePointer UniformConstant 140
- 142(g_tTexcdu4):    141(ptr) Variable UniformConstant
-             143:             TypeImage 6(float) Cube array sampled format:Unknown
-             144:             TypePointer UniformConstant 143
-145(g_tTexcdf4a):    144(ptr) Variable UniformConstant
-             146:             TypeImage 11(int) Cube array sampled format:Unknown
-             147:             TypePointer UniformConstant 146
-148(g_tTexcdi4a):    147(ptr) Variable UniformConstant
-             149:             TypeImage 23(int) Cube array sampled format:Unknown
-             150:             TypePointer UniformConstant 149
-151(g_tTexcdu4a):    150(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D array sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+ 14(g_tTex1df4a):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 2
+              24:             TypePointer Uniform 18(ivec3)
+              28:             TypeInt 32 0
+              29:     28(int) Constant 2
+              30:             TypePointer Uniform 16(int)
+              34:             TypeImage 16(int) 1D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+ 36(g_tTex1di4a):     35(ptr) Variable UniformConstant
+              44:             TypeImage 28(int) 1D array sampled format:Unknown
+              45:             TypePointer UniformConstant 44
+ 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
+              53:             TypeVector 28(int) 4
+              55:             TypeImage 6(float) 2D array sampled format:Unknown
+              56:             TypePointer UniformConstant 55
+ 57(g_tTex2df4a):     56(ptr) Variable UniformConstant
+              59:     16(int) Constant 3
+              60:             TypePointer Uniform 19(ivec4)
+              64:     28(int) Constant 3
+              68:             TypeImage 16(int) 2D array sampled format:Unknown
+              69:             TypePointer UniformConstant 68
+ 70(g_tTex2di4a):     69(ptr) Variable UniformConstant
+              78:             TypeImage 28(int) 2D array sampled format:Unknown
+              79:             TypePointer UniformConstant 78
+ 80(g_tTex2du4a):     79(ptr) Variable UniformConstant
+              88:             TypePointer Function 8(PS_OUTPUT)
+              90:     16(int) Constant 0
+              91:    6(float) Constant 1065353216
+              92:    7(fvec4) ConstantComposite 91 91 91 91
+              93:             TypePointer Function 7(fvec4)
+              95:     16(int) Constant 1
+              96:             TypePointer Function 6(float)
+             103:             TypePointer Output 7(fvec4)
+      104(Color):    103(ptr) Variable Output
+             107:             TypePointer Output 6(float)
+      108(Depth):    107(ptr) Variable Output
+             111:             TypeSampler
+             112:             TypePointer UniformConstant 111
+    113(g_sSamp):    112(ptr) Variable UniformConstant
+             114:             TypeImage 6(float) 1D sampled format:Unknown
+             115:             TypePointer UniformConstant 114
+ 116(g_tTex1df4):    115(ptr) Variable UniformConstant
+             117:             TypeImage 16(int) 1D sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTex1di4):    118(ptr) Variable UniformConstant
+             120:             TypeImage 28(int) 1D sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+ 122(g_tTex1du4):    121(ptr) Variable UniformConstant
+             123:             TypeImage 6(float) 2D sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex2df4):    124(ptr) Variable UniformConstant
+             126:             TypeImage 16(int) 2D sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+ 128(g_tTex2di4):    127(ptr) Variable UniformConstant
+             129:             TypeImage 28(int) 2D sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+ 131(g_tTex2du4):    130(ptr) Variable UniformConstant
+             132:             TypeImage 6(float) 3D sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTex3df4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 16(int) 3D sampled format:Unknown
+             136:             TypePointer UniformConstant 135
+ 137(g_tTex3di4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 28(int) 3D sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTex3du4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 6(float) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdf4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 16(int) Cube sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTexcdi4):    145(ptr) Variable UniformConstant
+             147:             TypeImage 28(int) Cube sampled format:Unknown
+             148:             TypePointer UniformConstant 147
+ 149(g_tTexcdu4):    148(ptr) Variable UniformConstant
+             150:             TypeImage 6(float) Cube array sampled format:Unknown
+             151:             TypePointer UniformConstant 150
+152(g_tTexcdf4a):    151(ptr) Variable UniformConstant
+             153:             TypeImage 16(int) Cube array sampled format:Unknown
+             154:             TypePointer UniformConstant 153
+155(g_tTexcdi4a):    154(ptr) Variable UniformConstant
+             156:             TypeImage 28(int) Cube array sampled format:Unknown
+             157:             TypePointer UniformConstant 156
+158(g_tTexcdu4a):    157(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-       86(psout):     85(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4a)
-              20:     19(ptr) AccessChain 17 18
-              21:   13(ivec3) Load 20
-              22:   12(ivec2) VectorShuffle 21 21 0 1
-              26:     25(ptr) AccessChain 17 18 24
-              27:     11(int) Load 26
-              29:   28(fvec4) ImageFetch 10 22 Lod 27
-              33:          30 Load 32(g_tTex1di4a)
-              34:     19(ptr) AccessChain 17 18
-              35:   13(ivec3) Load 34
-              36:   12(ivec2) VectorShuffle 35 35 0 1
-              37:     25(ptr) AccessChain 17 18 24
-              38:     11(int) Load 37
-              39:   14(ivec4) ImageFetch 33 36 Lod 38
-              43:          40 Load 42(g_tTex1du4a)
-              44:     19(ptr) AccessChain 17 18
-              45:   13(ivec3) Load 44
-              46:   12(ivec2) VectorShuffle 45 45 0 1
-              47:     25(ptr) AccessChain 17 18 24
-              48:     11(int) Load 47
-              50:   49(ivec4) ImageFetch 43 46 Lod 48
-              54:          51 Load 53(g_tTex2df4a)
-              57:     56(ptr) AccessChain 17 55
-              58:   14(ivec4) Load 57
-              59:   13(ivec3) VectorShuffle 58 58 0 1 2
-              61:     25(ptr) AccessChain 17 55 60
-              62:     11(int) Load 61
-              63:   28(fvec4) ImageFetch 54 59 Lod 62
-              67:          64 Load 66(g_tTex2di4a)
-              68:     56(ptr) AccessChain 17 55
-              69:   14(ivec4) Load 68
-              70:   13(ivec3) VectorShuffle 69 69 0 1 2
-              71:     25(ptr) AccessChain 17 55 60
-              72:     11(int) Load 71
-              73:   14(ivec4) ImageFetch 67 70 Lod 72
-              77:          74 Load 76(g_tTex2du4a)
-              78:     56(ptr) AccessChain 17 55
-              79:   14(ivec4) Load 78
-              80:   13(ivec3) VectorShuffle 79 79 0 1 2
-              81:     25(ptr) AccessChain 17 55 60
-              82:     11(int) Load 81
-              83:   49(ivec4) ImageFetch 77 80 Lod 82
-              91:     90(ptr) AccessChain 86(psout) 87
-                              Store 91 89
-              94:     93(ptr) AccessChain 86(psout) 92
-                              Store 94 88
-              97:     90(ptr) AccessChain 86(psout) 87
-              98:   28(fvec4) Load 97
-                              Store 96(Color) 98
-             101:     93(ptr) AccessChain 86(psout) 92
-             102:    6(float) Load 101
-                              Store 100(Depth) 102
+101(flattenTemp):     88(ptr) Variable Function
+             102:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 101(flattenTemp) 102
+             105:     93(ptr) AccessChain 101(flattenTemp) 90
+             106:    7(fvec4) Load 105
+                              Store 104(Color) 106
+             109:     96(ptr) AccessChain 101(flattenTemp) 95
+             110:    6(float) Load 109
+                              Store 108(Depth) 110
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       89(psout):     88(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4a)
+              25:     24(ptr) AccessChain 22 23
+              26:   18(ivec3) Load 25
+              27:   17(ivec2) VectorShuffle 26 26 0 1
+              31:     30(ptr) AccessChain 22 23 29
+              32:     16(int) Load 31
+              33:    7(fvec4) ImageFetch 15 27 Lod 32
+              37:          34 Load 36(g_tTex1di4a)
+              38:     24(ptr) AccessChain 22 23
+              39:   18(ivec3) Load 38
+              40:   17(ivec2) VectorShuffle 39 39 0 1
+              41:     30(ptr) AccessChain 22 23 29
+              42:     16(int) Load 41
+              43:   19(ivec4) ImageFetch 37 40 Lod 42
+              47:          44 Load 46(g_tTex1du4a)
+              48:     24(ptr) AccessChain 22 23
+              49:   18(ivec3) Load 48
+              50:   17(ivec2) VectorShuffle 49 49 0 1
+              51:     30(ptr) AccessChain 22 23 29
+              52:     16(int) Load 51
+              54:   53(ivec4) ImageFetch 47 50 Lod 52
+              58:          55 Load 57(g_tTex2df4a)
+              61:     60(ptr) AccessChain 22 59
+              62:   19(ivec4) Load 61
+              63:   18(ivec3) VectorShuffle 62 62 0 1 2
+              65:     30(ptr) AccessChain 22 59 64
+              66:     16(int) Load 65
+              67:    7(fvec4) ImageFetch 58 63 Lod 66
+              71:          68 Load 70(g_tTex2di4a)
+              72:     60(ptr) AccessChain 22 59
+              73:   19(ivec4) Load 72
+              74:   18(ivec3) VectorShuffle 73 73 0 1 2
+              75:     30(ptr) AccessChain 22 59 64
+              76:     16(int) Load 75
+              77:   19(ivec4) ImageFetch 71 74 Lod 76
+              81:          78 Load 80(g_tTex2du4a)
+              82:     60(ptr) AccessChain 22 59
+              83:   19(ivec4) Load 82
+              84:   18(ivec3) VectorShuffle 83 83 0 1 2
+              85:     30(ptr) AccessChain 22 59 64
+              86:     16(int) Load 85
+              87:   53(ivec4) ImageFetch 81 84 Lod 86
+              94:     93(ptr) AccessChain 89(psout) 90
+                              Store 94 92
+              97:     96(ptr) AccessChain 89(psout) 95
+                              Store 97 91
+              98:8(PS_OUTPUT) Load 89(psout)
+                              ReturnValue 98
+                              FunctionEnd

+ 303 - 280
3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetch (temp 4-component vector of float)
@@ -193,24 +193,28 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:75      Sequence
-0:75        Sequence
-0:75          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:75            Color: direct index for structure (temp 4-component vector of float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                0 (const int)
-0:75          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:75            Depth: direct index for structure (temp float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                1 (const int)
-0:75        Branch: Return
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -233,6 +237,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -242,7 +248,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetch (temp 4-component vector of float)
@@ -433,24 +439,28 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:75      Sequence
-0:75        Sequence
-0:75          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:75            Color: direct index for structure (temp 4-component vector of float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                0 (const int)
-0:75          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:75            Depth: direct index for structure (temp float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                1 (const int)
-0:75        Branch: Return
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -473,266 +483,279 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 172
+// Id's are bound by 179
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 125 129
+                              EntryPoint Fragment 4  "main" 133 137
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 31  "g_tTex1di4"
-                              Name 40  "g_tTex1du4"
-                              Name 50  "g_tTex2df4"
-                              Name 63  "g_tTex2di4"
-                              Name 73  "g_tTex2du4"
-                              Name 83  "g_tTex3df4"
-                              Name 96  "g_tTex3di4"
-                              Name 106  "g_tTex3du4"
-                              Name 114  "PS_OUTPUT"
-                              MemberName 114(PS_OUTPUT) 0  "Color"
-                              MemberName 114(PS_OUTPUT) 1  "Depth"
-                              Name 116  "psout"
-                              Name 125  "Color"
-                              Name 129  "Depth"
-                              Name 135  "g_sSamp"
-                              Name 138  "g_tTexcdf4"
-                              Name 141  "g_tTexcdi4"
-                              Name 144  "g_tTexcdu4"
-                              Name 147  "g_tTex1df4a"
-                              Name 150  "g_tTex1di4a"
-                              Name 153  "g_tTex1du4a"
-                              Name 156  "g_tTex2df4a"
-                              Name 159  "g_tTex2di4a"
-                              Name 162  "g_tTex2du4a"
-                              Name 165  "g_tTexcdf4a"
-                              Name 168  "g_tTexcdi4a"
-                              Name 171  "g_tTexcdu4a"
-                              Decorate 9(g_tTex1df4) DescriptorSet 0
-                              Decorate 9(g_tTex1df4) Binding 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 31(g_tTex1di4) DescriptorSet 0
-                              Decorate 40(g_tTex1du4) DescriptorSet 0
-                              Decorate 50(g_tTex2df4) DescriptorSet 0
-                              Decorate 63(g_tTex2di4) DescriptorSet 0
-                              Decorate 73(g_tTex2du4) DescriptorSet 0
-                              Decorate 83(g_tTex3df4) DescriptorSet 0
-                              Decorate 96(g_tTex3di4) DescriptorSet 0
-                              Decorate 106(g_tTex3du4) DescriptorSet 0
-                              Decorate 125(Color) Location 0
-                              Decorate 129(Depth) BuiltIn FragDepth
-                              Decorate 135(g_sSamp) DescriptorSet 0
-                              Decorate 135(g_sSamp) Binding 0
-                              Decorate 138(g_tTexcdf4) DescriptorSet 0
-                              Decorate 141(g_tTexcdi4) DescriptorSet 0
-                              Decorate 144(g_tTexcdu4) DescriptorSet 0
-                              Decorate 147(g_tTex1df4a) DescriptorSet 0
-                              Decorate 150(g_tTex1di4a) DescriptorSet 0
-                              Decorate 153(g_tTex1du4a) DescriptorSet 0
-                              Decorate 156(g_tTex2df4a) DescriptorSet 0
-                              Decorate 159(g_tTex2di4a) DescriptorSet 0
-                              Decorate 162(g_tTex2du4a) DescriptorSet 0
-                              Decorate 165(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 168(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 171(g_tTexcdu4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 35  "g_tTex1di4"
+                              Name 44  "g_tTex1du4"
+                              Name 54  "g_tTex2df4"
+                              Name 67  "g_tTex2di4"
+                              Name 77  "g_tTex2du4"
+                              Name 87  "g_tTex3df4"
+                              Name 100  "g_tTex3di4"
+                              Name 110  "g_tTex3du4"
+                              Name 119  "psout"
+                              Name 130  "flattenTemp"
+                              Name 133  "Color"
+                              Name 137  "Depth"
+                              Name 142  "g_sSamp"
+                              Name 145  "g_tTexcdf4"
+                              Name 148  "g_tTexcdi4"
+                              Name 151  "g_tTexcdu4"
+                              Name 154  "g_tTex1df4a"
+                              Name 157  "g_tTex1di4a"
+                              Name 160  "g_tTex1du4a"
+                              Name 163  "g_tTex2df4a"
+                              Name 166  "g_tTex2di4a"
+                              Name 169  "g_tTex2du4a"
+                              Name 172  "g_tTexcdf4a"
+                              Name 175  "g_tTexcdi4a"
+                              Name 178  "g_tTexcdu4a"
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 14(g_tTex1df4) Binding 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 54(g_tTex2df4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 77(g_tTex2du4) DescriptorSet 0
+                              Decorate 87(g_tTex3df4) DescriptorSet 0
+                              Decorate 100(g_tTex3di4) DescriptorSet 0
+                              Decorate 110(g_tTex3du4) DescriptorSet 0
+                              Decorate 133(Color) Location 0
+                              Decorate 137(Depth) BuiltIn FragDepth
+                              Decorate 142(g_sSamp) DescriptorSet 0
+                              Decorate 142(g_sSamp) Binding 0
+                              Decorate 145(g_tTexcdf4) DescriptorSet 0
+                              Decorate 148(g_tTexcdi4) DescriptorSet 0
+                              Decorate 151(g_tTexcdu4) DescriptorSet 0
+                              Decorate 154(g_tTex1df4a) DescriptorSet 0
+                              Decorate 157(g_tTex1di4a) DescriptorSet 0
+                              Decorate 160(g_tTex1du4a) DescriptorSet 0
+                              Decorate 163(g_tTex2df4a) DescriptorSet 0
+                              Decorate 166(g_tTex2di4a) DescriptorSet 0
+                              Decorate 169(g_tTex2du4a) DescriptorSet 0
+                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D sampled format:Unknown
-               8:             TypePointer UniformConstant 7
-   9(g_tTex1df4):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 1
-              19:             TypeInt 32 0
-              20:     19(int) Constant 0
-              21:             TypePointer Uniform 11(int)
-              24:     19(int) Constant 1
-              27:             TypeVector 6(float) 4
-              29:             TypeImage 11(int) 1D sampled format:Unknown
-              30:             TypePointer UniformConstant 29
-  31(g_tTex1di4):     30(ptr) Variable UniformConstant
-              38:             TypeImage 19(int) 1D sampled format:Unknown
-              39:             TypePointer UniformConstant 38
-  40(g_tTex1du4):     39(ptr) Variable UniformConstant
-              46:             TypeVector 19(int) 4
-              48:             TypeImage 6(float) 2D sampled format:Unknown
-              49:             TypePointer UniformConstant 48
-  50(g_tTex2df4):     49(ptr) Variable UniformConstant
-              52:     11(int) Constant 2
-              53:             TypePointer Uniform 13(ivec3)
-              57:     19(int) Constant 2
-              61:             TypeImage 11(int) 2D sampled format:Unknown
-              62:             TypePointer UniformConstant 61
-  63(g_tTex2di4):     62(ptr) Variable UniformConstant
-              71:             TypeImage 19(int) 2D sampled format:Unknown
-              72:             TypePointer UniformConstant 71
-  73(g_tTex2du4):     72(ptr) Variable UniformConstant
-              81:             TypeImage 6(float) 3D sampled format:Unknown
-              82:             TypePointer UniformConstant 81
-  83(g_tTex3df4):     82(ptr) Variable UniformConstant
-              85:     11(int) Constant 3
-              86:             TypePointer Uniform 14(ivec4)
-              90:     19(int) Constant 3
-              94:             TypeImage 11(int) 3D sampled format:Unknown
-              95:             TypePointer UniformConstant 94
-  96(g_tTex3di4):     95(ptr) Variable UniformConstant
-             104:             TypeImage 19(int) 3D sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTex3du4):    105(ptr) Variable UniformConstant
-  114(PS_OUTPUT):             TypeStruct 27(fvec4) 6(float)
-             115:             TypePointer Function 114(PS_OUTPUT)
-             117:     11(int) Constant 0
-             118:    6(float) Constant 1065353216
-             119:   27(fvec4) ConstantComposite 118 118 118 118
-             120:             TypePointer Function 27(fvec4)
-             122:             TypePointer Function 6(float)
-             124:             TypePointer Output 27(fvec4)
-      125(Color):    124(ptr) Variable Output
-             128:             TypePointer Output 6(float)
-      129(Depth):    128(ptr) Variable Output
-             133:             TypeSampler
-             134:             TypePointer UniformConstant 133
-    135(g_sSamp):    134(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) Cube sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTexcdf4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 11(int) Cube sampled format:Unknown
-             140:             TypePointer UniformConstant 139
- 141(g_tTexcdi4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 19(int) Cube sampled format:Unknown
-             143:             TypePointer UniformConstant 142
- 144(g_tTexcdu4):    143(ptr) Variable UniformConstant
-             145:             TypeImage 6(float) 1D array sampled format:Unknown
-             146:             TypePointer UniformConstant 145
-147(g_tTex1df4a):    146(ptr) Variable UniformConstant
-             148:             TypeImage 11(int) 1D array sampled format:Unknown
-             149:             TypePointer UniformConstant 148
-150(g_tTex1di4a):    149(ptr) Variable UniformConstant
-             151:             TypeImage 19(int) 1D array sampled format:Unknown
-             152:             TypePointer UniformConstant 151
-153(g_tTex1du4a):    152(ptr) Variable UniformConstant
-             154:             TypeImage 6(float) 2D array sampled format:Unknown
-             155:             TypePointer UniformConstant 154
-156(g_tTex2df4a):    155(ptr) Variable UniformConstant
-             157:             TypeImage 11(int) 2D array sampled format:Unknown
-             158:             TypePointer UniformConstant 157
-159(g_tTex2di4a):    158(ptr) Variable UniformConstant
-             160:             TypeImage 19(int) 2D array sampled format:Unknown
-             161:             TypePointer UniformConstant 160
-162(g_tTex2du4a):    161(ptr) Variable UniformConstant
-             163:             TypeImage 6(float) Cube array sampled format:Unknown
-             164:             TypePointer UniformConstant 163
-165(g_tTexcdf4a):    164(ptr) Variable UniformConstant
-             166:             TypeImage 11(int) Cube array sampled format:Unknown
-             167:             TypePointer UniformConstant 166
-168(g_tTexcdi4a):    167(ptr) Variable UniformConstant
-             169:             TypeImage 19(int) Cube array sampled format:Unknown
-             170:             TypePointer UniformConstant 169
-171(g_tTexcdu4a):    170(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+  14(g_tTex1df4):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 1
+              24:             TypeInt 32 0
+              25:     24(int) Constant 0
+              26:             TypePointer Uniform 16(int)
+              29:     24(int) Constant 1
+              33:             TypeImage 16(int) 1D sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex1di4):     34(ptr) Variable UniformConstant
+              42:             TypeImage 24(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              50:             TypeVector 24(int) 4
+              52:             TypeImage 6(float) 2D sampled format:Unknown
+              53:             TypePointer UniformConstant 52
+  54(g_tTex2df4):     53(ptr) Variable UniformConstant
+              56:     16(int) Constant 2
+              57:             TypePointer Uniform 18(ivec3)
+              61:     24(int) Constant 2
+              65:             TypeImage 16(int) 2D sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+  67(g_tTex2di4):     66(ptr) Variable UniformConstant
+              75:             TypeImage 24(int) 2D sampled format:Unknown
+              76:             TypePointer UniformConstant 75
+  77(g_tTex2du4):     76(ptr) Variable UniformConstant
+              85:             TypeImage 6(float) 3D sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex3df4):     86(ptr) Variable UniformConstant
+              89:     16(int) Constant 3
+              90:             TypePointer Uniform 19(ivec4)
+              94:     24(int) Constant 3
+              98:             TypeImage 16(int) 3D sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+ 100(g_tTex3di4):     99(ptr) Variable UniformConstant
+             108:             TypeImage 24(int) 3D sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+ 110(g_tTex3du4):    109(ptr) Variable UniformConstant
+             118:             TypePointer Function 8(PS_OUTPUT)
+             120:     16(int) Constant 0
+             121:    6(float) Constant 1065353216
+             122:    7(fvec4) ConstantComposite 121 121 121 121
+             123:             TypePointer Function 7(fvec4)
+             125:             TypePointer Function 6(float)
+             132:             TypePointer Output 7(fvec4)
+      133(Color):    132(ptr) Variable Output
+             136:             TypePointer Output 6(float)
+      137(Depth):    136(ptr) Variable Output
+             140:             TypeSampler
+             141:             TypePointer UniformConstant 140
+    142(g_sSamp):    141(ptr) Variable UniformConstant
+             143:             TypeImage 6(float) Cube sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+ 145(g_tTexcdf4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 16(int) Cube sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+ 148(g_tTexcdi4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 24(int) Cube sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+ 151(g_tTexcdu4):    150(ptr) Variable UniformConstant
+             152:             TypeImage 6(float) 1D array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTex1df4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 16(int) 1D array sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+157(g_tTex1di4a):    156(ptr) Variable UniformConstant
+             158:             TypeImage 24(int) 1D array sampled format:Unknown
+             159:             TypePointer UniformConstant 158
+160(g_tTex1du4a):    159(ptr) Variable UniformConstant
+             161:             TypeImage 6(float) 2D array sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+163(g_tTex2df4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 16(int) 2D array sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+166(g_tTex2di4a):    165(ptr) Variable UniformConstant
+             167:             TypeImage 24(int) 2D array sampled format:Unknown
+             168:             TypePointer UniformConstant 167
+169(g_tTex2du4a):    168(ptr) Variable UniformConstant
+             170:             TypeImage 6(float) Cube array sampled format:Unknown
+             171:             TypePointer UniformConstant 170
+172(g_tTexcdf4a):    171(ptr) Variable UniformConstant
+             173:             TypeImage 16(int) Cube array sampled format:Unknown
+             174:             TypePointer UniformConstant 173
+175(g_tTexcdi4a):    174(ptr) Variable UniformConstant
+             176:             TypeImage 24(int) Cube array sampled format:Unknown
+             177:             TypePointer UniformConstant 176
+178(g_tTexcdu4a):    177(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      116(psout):    115(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4)
-              22:     21(ptr) AccessChain 17 18 20
-              23:     11(int) Load 22
-              25:     21(ptr) AccessChain 17 18 24
-              26:     11(int) Load 25
-              28:   27(fvec4) ImageFetch 10 23 Lod 26
-              32:          29 Load 31(g_tTex1di4)
-              33:     21(ptr) AccessChain 17 18 20
-              34:     11(int) Load 33
-              35:     21(ptr) AccessChain 17 18 24
-              36:     11(int) Load 35
-              37:   14(ivec4) ImageFetch 32 34 Lod 36
-              41:          38 Load 40(g_tTex1du4)
-              42:     21(ptr) AccessChain 17 18 20
-              43:     11(int) Load 42
-              44:     21(ptr) AccessChain 17 18 24
-              45:     11(int) Load 44
-              47:   46(ivec4) ImageFetch 41 43 Lod 45
-              51:          48 Load 50(g_tTex2df4)
-              54:     53(ptr) AccessChain 17 52
-              55:   13(ivec3) Load 54
-              56:   12(ivec2) VectorShuffle 55 55 0 1
-              58:     21(ptr) AccessChain 17 52 57
-              59:     11(int) Load 58
-              60:   27(fvec4) ImageFetch 51 56 Lod 59
-              64:          61 Load 63(g_tTex2di4)
-              65:     53(ptr) AccessChain 17 52
-              66:   13(ivec3) Load 65
-              67:   12(ivec2) VectorShuffle 66 66 0 1
-              68:     21(ptr) AccessChain 17 52 57
-              69:     11(int) Load 68
-              70:   14(ivec4) ImageFetch 64 67 Lod 69
-              74:          71 Load 73(g_tTex2du4)
-              75:     53(ptr) AccessChain 17 52
-              76:   13(ivec3) Load 75
-              77:   12(ivec2) VectorShuffle 76 76 0 1
-              78:     21(ptr) AccessChain 17 52 57
-              79:     11(int) Load 78
-              80:   46(ivec4) ImageFetch 74 77 Lod 79
-              84:          81 Load 83(g_tTex3df4)
-              87:     86(ptr) AccessChain 17 85
-              88:   14(ivec4) Load 87
-              89:   13(ivec3) VectorShuffle 88 88 0 1 2
-              91:     21(ptr) AccessChain 17 85 90
-              92:     11(int) Load 91
-              93:   27(fvec4) ImageFetch 84 89 Lod 92
-              97:          94 Load 96(g_tTex3di4)
-              98:     86(ptr) AccessChain 17 85
-              99:   14(ivec4) Load 98
-             100:   13(ivec3) VectorShuffle 99 99 0 1 2
-             101:     21(ptr) AccessChain 17 85 90
-             102:     11(int) Load 101
-             103:   14(ivec4) ImageFetch 97 100 Lod 102
-             107:         104 Load 106(g_tTex3du4)
-             108:     86(ptr) AccessChain 17 85
-             109:   14(ivec4) Load 108
-             110:   13(ivec3) VectorShuffle 109 109 0 1 2
-             111:     21(ptr) AccessChain 17 85 90
-             112:     11(int) Load 111
-             113:   46(ivec4) ImageFetch 107 110 Lod 112
-             121:    120(ptr) AccessChain 116(psout) 117
-                              Store 121 119
-             123:    122(ptr) AccessChain 116(psout) 18
-                              Store 123 118
-             126:    120(ptr) AccessChain 116(psout) 117
-             127:   27(fvec4) Load 126
-                              Store 125(Color) 127
-             130:    122(ptr) AccessChain 116(psout) 18
-             131:    6(float) Load 130
-                              Store 129(Depth) 131
+130(flattenTemp):    118(ptr) Variable Function
+             131:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 130(flattenTemp) 131
+             134:    123(ptr) AccessChain 130(flattenTemp) 120
+             135:    7(fvec4) Load 134
+                              Store 133(Color) 135
+             138:    125(ptr) AccessChain 130(flattenTemp) 23
+             139:    6(float) Load 138
+                              Store 137(Depth) 139
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+      119(psout):    118(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4)
+              27:     26(ptr) AccessChain 22 23 25
+              28:     16(int) Load 27
+              30:     26(ptr) AccessChain 22 23 29
+              31:     16(int) Load 30
+              32:    7(fvec4) ImageFetch 15 28 Lod 31
+              36:          33 Load 35(g_tTex1di4)
+              37:     26(ptr) AccessChain 22 23 25
+              38:     16(int) Load 37
+              39:     26(ptr) AccessChain 22 23 29
+              40:     16(int) Load 39
+              41:   19(ivec4) ImageFetch 36 38 Lod 40
+              45:          42 Load 44(g_tTex1du4)
+              46:     26(ptr) AccessChain 22 23 25
+              47:     16(int) Load 46
+              48:     26(ptr) AccessChain 22 23 29
+              49:     16(int) Load 48
+              51:   50(ivec4) ImageFetch 45 47 Lod 49
+              55:          52 Load 54(g_tTex2df4)
+              58:     57(ptr) AccessChain 22 56
+              59:   18(ivec3) Load 58
+              60:   17(ivec2) VectorShuffle 59 59 0 1
+              62:     26(ptr) AccessChain 22 56 61
+              63:     16(int) Load 62
+              64:    7(fvec4) ImageFetch 55 60 Lod 63
+              68:          65 Load 67(g_tTex2di4)
+              69:     57(ptr) AccessChain 22 56
+              70:   18(ivec3) Load 69
+              71:   17(ivec2) VectorShuffle 70 70 0 1
+              72:     26(ptr) AccessChain 22 56 61
+              73:     16(int) Load 72
+              74:   19(ivec4) ImageFetch 68 71 Lod 73
+              78:          75 Load 77(g_tTex2du4)
+              79:     57(ptr) AccessChain 22 56
+              80:   18(ivec3) Load 79
+              81:   17(ivec2) VectorShuffle 80 80 0 1
+              82:     26(ptr) AccessChain 22 56 61
+              83:     16(int) Load 82
+              84:   50(ivec4) ImageFetch 78 81 Lod 83
+              88:          85 Load 87(g_tTex3df4)
+              91:     90(ptr) AccessChain 22 89
+              92:   19(ivec4) Load 91
+              93:   18(ivec3) VectorShuffle 92 92 0 1 2
+              95:     26(ptr) AccessChain 22 89 94
+              96:     16(int) Load 95
+              97:    7(fvec4) ImageFetch 88 93 Lod 96
+             101:          98 Load 100(g_tTex3di4)
+             102:     90(ptr) AccessChain 22 89
+             103:   19(ivec4) Load 102
+             104:   18(ivec3) VectorShuffle 103 103 0 1 2
+             105:     26(ptr) AccessChain 22 89 94
+             106:     16(int) Load 105
+             107:   19(ivec4) ImageFetch 101 104 Lod 106
+             111:         108 Load 110(g_tTex3du4)
+             112:     90(ptr) AccessChain 22 89
+             113:   19(ivec4) Load 112
+             114:   18(ivec3) VectorShuffle 113 113 0 1 2
+             115:     26(ptr) AccessChain 22 89 94
+             116:     16(int) Load 115
+             117:   50(ivec4) ImageFetch 111 114 Lod 116
+             124:    123(ptr) AccessChain 119(psout) 120
+                              Store 124 122
+             126:    125(ptr) AccessChain 119(psout) 23
+                              Store 126 121
+             127:8(PS_OUTPUT) Load 119(psout)
+                              ReturnValue 127
+                              FunctionEnd

+ 266 - 263
3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out

@@ -1,7 +1,7 @@
 hlsl.load.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:47  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:47  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:47    Function Parameters: 
 0:?     Sequence
 0:51      textureFetch (temp 4-component vector of float)
@@ -185,15 +185,18 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:69      Sequence
-0:69        Sequence
-0:69          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:69            Pos: direct index for structure (temp 4-component vector of float)
-0:69              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:69              Constant:
-0:69                0 (const int)
-0:69        Branch: Return
+0:69      Branch: Return with expression
+0:69        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:47  Function Definition: main( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:47      Sequence
+0:47        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:47          Pos: direct index for structure (temp 4-component vector of float)
+0:47            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:47            Constant:
+0:47              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -218,7 +221,6 @@ Shader version: 450
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 
 Linked vertex stage:
@@ -226,7 +228,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:47  Function Definition: main( (temp structure{temp 4-component vector of float Position Pos})
+0:47  Function Definition: @main( (temp structure{temp 4-component vector of float Pos})
 0:47    Function Parameters: 
 0:?     Sequence
 0:51      textureFetch (temp 4-component vector of float)
@@ -410,15 +412,18 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:69      Sequence
-0:69        Sequence
-0:69          move second child to first child (temp 4-component vector of float)
-0:?             'Pos' (out 4-component vector of float Position)
-0:69            Pos: direct index for structure (temp 4-component vector of float)
-0:69              'vsout' (temp structure{temp 4-component vector of float Pos})
-0:69              Constant:
-0:69                0 (const int)
-0:69        Branch: Return
+0:69      Branch: Return with expression
+0:69        'vsout' (temp structure{temp 4-component vector of float Pos})
+0:47  Function Definition: main( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:47      Sequence
+0:47        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput_Pos' (out 4-component vector of float Position)
+0:47          Pos: direct index for structure (temp 4-component vector of float)
+0:47            Function Call: @main( (temp structure{temp 4-component vector of float Pos})
+0:47            Constant:
+0:47              0 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -443,262 +448,260 @@ Shader version: 450
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
-0:?     'PerVertex_out' (out block{out 4-component vector of float Position Pos})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 169
+// Id's are bound by 171
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 123 168
+                              EntryPoint Vertex 4  "main" 129
                               Name 4  "main"
-                              Name 9  "g_tTex1df4"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 31  "g_tTex1di4"
-                              Name 40  "g_tTex1du4"
-                              Name 50  "g_tTex2df4"
-                              Name 63  "g_tTex2di4"
-                              Name 73  "g_tTex2du4"
-                              Name 83  "g_tTex3df4"
-                              Name 96  "g_tTex3di4"
-                              Name 106  "g_tTex3du4"
-                              Name 114  "VS_OUTPUT"
-                              MemberName 114(VS_OUTPUT) 0  "Pos"
-                              Name 116  "vsout"
-                              Name 123  "Pos"
-                              Name 129  "g_sSamp"
-                              Name 132  "g_tTexcdf4"
-                              Name 135  "g_tTexcdi4"
-                              Name 138  "g_tTexcdu4"
-                              Name 141  "g_tTex1df4a"
-                              Name 144  "g_tTex1di4a"
-                              Name 147  "g_tTex1du4a"
-                              Name 150  "g_tTex2df4a"
-                              Name 153  "g_tTex2di4a"
-                              Name 156  "g_tTex2du4a"
-                              Name 159  "g_tTexcdf4a"
-                              Name 162  "g_tTexcdi4a"
-                              Name 165  "g_tTexcdu4a"
-                              Name 166  "PerVertex_out"
-                              MemberName 166(PerVertex_out) 0  "Pos"
-                              Name 168  "PerVertex_out"
-                              Decorate 9(g_tTex1df4) DescriptorSet 0
-                              Decorate 9(g_tTex1df4) Binding 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 31(g_tTex1di4) DescriptorSet 0
-                              Decorate 40(g_tTex1du4) DescriptorSet 0
-                              Decorate 50(g_tTex2df4) DescriptorSet 0
-                              Decorate 63(g_tTex2di4) DescriptorSet 0
-                              Decorate 73(g_tTex2du4) DescriptorSet 0
-                              Decorate 83(g_tTex3df4) DescriptorSet 0
-                              Decorate 96(g_tTex3di4) DescriptorSet 0
-                              Decorate 106(g_tTex3du4) DescriptorSet 0
-                              Decorate 123(Pos) BuiltIn Position
-                              Decorate 129(g_sSamp) DescriptorSet 0
-                              Decorate 129(g_sSamp) Binding 0
-                              Decorate 132(g_tTexcdf4) DescriptorSet 0
-                              Decorate 135(g_tTexcdi4) DescriptorSet 0
-                              Decorate 138(g_tTexcdu4) DescriptorSet 0
-                              Decorate 141(g_tTex1df4a) DescriptorSet 0
-                              Decorate 144(g_tTex1di4a) DescriptorSet 0
-                              Decorate 147(g_tTex1du4a) DescriptorSet 0
-                              Decorate 150(g_tTex2df4a) DescriptorSet 0
-                              Decorate 153(g_tTex2di4a) DescriptorSet 0
-                              Decorate 156(g_tTex2du4a) DescriptorSet 0
-                              Decorate 159(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 162(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 165(g_tTexcdu4a) DescriptorSet 0
-                              MemberDecorate 166(PerVertex_out) 0 BuiltIn Position
-                              Decorate 166(PerVertex_out) Block
+                              Name 8  "VS_OUTPUT"
+                              MemberName 8(VS_OUTPUT) 0  "Pos"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 35  "g_tTex1di4"
+                              Name 44  "g_tTex1du4"
+                              Name 54  "g_tTex2df4"
+                              Name 67  "g_tTex2di4"
+                              Name 77  "g_tTex2du4"
+                              Name 87  "g_tTex3df4"
+                              Name 100  "g_tTex3di4"
+                              Name 110  "g_tTex3du4"
+                              Name 119  "vsout"
+                              Name 129  "@entryPointOutput_Pos"
+                              Name 134  "g_sSamp"
+                              Name 137  "g_tTexcdf4"
+                              Name 140  "g_tTexcdi4"
+                              Name 143  "g_tTexcdu4"
+                              Name 146  "g_tTex1df4a"
+                              Name 149  "g_tTex1di4a"
+                              Name 152  "g_tTex1du4a"
+                              Name 155  "g_tTex2df4a"
+                              Name 158  "g_tTex2di4a"
+                              Name 161  "g_tTex2du4a"
+                              Name 164  "g_tTexcdf4a"
+                              Name 167  "g_tTexcdi4a"
+                              Name 170  "g_tTexcdu4a"
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 14(g_tTex1df4) Binding 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 54(g_tTex2df4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 77(g_tTex2du4) DescriptorSet 0
+                              Decorate 87(g_tTex3df4) DescriptorSet 0
+                              Decorate 100(g_tTex3di4) DescriptorSet 0
+                              Decorate 110(g_tTex3du4) DescriptorSet 0
+                              Decorate 129(@entryPointOutput_Pos) BuiltIn Position
+                              Decorate 134(g_sSamp) DescriptorSet 0
+                              Decorate 134(g_sSamp) Binding 0
+                              Decorate 137(g_tTexcdf4) DescriptorSet 0
+                              Decorate 140(g_tTexcdi4) DescriptorSet 0
+                              Decorate 143(g_tTexcdu4) DescriptorSet 0
+                              Decorate 146(g_tTex1df4a) DescriptorSet 0
+                              Decorate 149(g_tTex1di4a) DescriptorSet 0
+                              Decorate 152(g_tTex1du4a) DescriptorSet 0
+                              Decorate 155(g_tTex2df4a) DescriptorSet 0
+                              Decorate 158(g_tTex2di4a) DescriptorSet 0
+                              Decorate 161(g_tTex2du4a) DescriptorSet 0
+                              Decorate 164(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 167(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 170(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D sampled format:Unknown
-               8:             TypePointer UniformConstant 7
-   9(g_tTex1df4):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 1
-              19:             TypeInt 32 0
-              20:     19(int) Constant 0
-              21:             TypePointer Uniform 11(int)
-              24:     19(int) Constant 1
-              27:             TypeVector 6(float) 4
-              29:             TypeImage 11(int) 1D sampled format:Unknown
-              30:             TypePointer UniformConstant 29
-  31(g_tTex1di4):     30(ptr) Variable UniformConstant
-              38:             TypeImage 19(int) 1D sampled format:Unknown
-              39:             TypePointer UniformConstant 38
-  40(g_tTex1du4):     39(ptr) Variable UniformConstant
-              46:             TypeVector 19(int) 4
-              48:             TypeImage 6(float) 2D sampled format:Unknown
-              49:             TypePointer UniformConstant 48
-  50(g_tTex2df4):     49(ptr) Variable UniformConstant
-              52:     11(int) Constant 2
-              53:             TypePointer Uniform 13(ivec3)
-              57:     19(int) Constant 2
-              61:             TypeImage 11(int) 2D sampled format:Unknown
-              62:             TypePointer UniformConstant 61
-  63(g_tTex2di4):     62(ptr) Variable UniformConstant
-              71:             TypeImage 19(int) 2D sampled format:Unknown
-              72:             TypePointer UniformConstant 71
-  73(g_tTex2du4):     72(ptr) Variable UniformConstant
-              81:             TypeImage 6(float) 3D sampled format:Unknown
-              82:             TypePointer UniformConstant 81
-  83(g_tTex3df4):     82(ptr) Variable UniformConstant
-              85:     11(int) Constant 3
-              86:             TypePointer Uniform 14(ivec4)
-              90:     19(int) Constant 3
-              94:             TypeImage 11(int) 3D sampled format:Unknown
-              95:             TypePointer UniformConstant 94
-  96(g_tTex3di4):     95(ptr) Variable UniformConstant
-             104:             TypeImage 19(int) 3D sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTex3du4):    105(ptr) Variable UniformConstant
-  114(VS_OUTPUT):             TypeStruct 27(fvec4)
-             115:             TypePointer Function 114(VS_OUTPUT)
-             117:     11(int) Constant 0
-             118:    6(float) Constant 0
-             119:   27(fvec4) ConstantComposite 118 118 118 118
-             120:             TypePointer Function 27(fvec4)
-             122:             TypePointer Output 27(fvec4)
-        123(Pos):    122(ptr) Variable Output
-             127:             TypeSampler
-             128:             TypePointer UniformConstant 127
-    129(g_sSamp):    128(ptr) Variable UniformConstant
-             130:             TypeImage 6(float) Cube sampled format:Unknown
-             131:             TypePointer UniformConstant 130
- 132(g_tTexcdf4):    131(ptr) Variable UniformConstant
-             133:             TypeImage 11(int) Cube sampled format:Unknown
-             134:             TypePointer UniformConstant 133
- 135(g_tTexcdi4):    134(ptr) Variable UniformConstant
-             136:             TypeImage 19(int) Cube sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTexcdu4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 6(float) 1D array sampled format:Unknown
-             140:             TypePointer UniformConstant 139
-141(g_tTex1df4a):    140(ptr) Variable UniformConstant
-             142:             TypeImage 11(int) 1D array sampled format:Unknown
-             143:             TypePointer UniformConstant 142
-144(g_tTex1di4a):    143(ptr) Variable UniformConstant
-             145:             TypeImage 19(int) 1D array sampled format:Unknown
-             146:             TypePointer UniformConstant 145
-147(g_tTex1du4a):    146(ptr) Variable UniformConstant
-             148:             TypeImage 6(float) 2D array sampled format:Unknown
-             149:             TypePointer UniformConstant 148
-150(g_tTex2df4a):    149(ptr) Variable UniformConstant
-             151:             TypeImage 11(int) 2D array sampled format:Unknown
-             152:             TypePointer UniformConstant 151
-153(g_tTex2di4a):    152(ptr) Variable UniformConstant
-             154:             TypeImage 19(int) 2D array sampled format:Unknown
-             155:             TypePointer UniformConstant 154
-156(g_tTex2du4a):    155(ptr) Variable UniformConstant
-             157:             TypeImage 6(float) Cube array sampled format:Unknown
-             158:             TypePointer UniformConstant 157
-159(g_tTexcdf4a):    158(ptr) Variable UniformConstant
-             160:             TypeImage 11(int) Cube array sampled format:Unknown
-             161:             TypePointer UniformConstant 160
-162(g_tTexcdi4a):    161(ptr) Variable UniformConstant
-             163:             TypeImage 19(int) Cube array sampled format:Unknown
-             164:             TypePointer UniformConstant 163
-165(g_tTexcdu4a):    164(ptr) Variable UniformConstant
-166(PerVertex_out):             TypeStruct 27(fvec4)
-             167:             TypePointer Output 166(PerVertex_out)
-168(PerVertex_out):    167(ptr) Variable Output
+               7:             TypeVector 6(float) 4
+    8(VS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(VS_OUTPUT)
+              12:             TypeImage 6(float) 1D sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+  14(g_tTex1df4):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 1
+              24:             TypeInt 32 0
+              25:     24(int) Constant 0
+              26:             TypePointer Uniform 16(int)
+              29:     24(int) Constant 1
+              33:             TypeImage 16(int) 1D sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex1di4):     34(ptr) Variable UniformConstant
+              42:             TypeImage 24(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              50:             TypeVector 24(int) 4
+              52:             TypeImage 6(float) 2D sampled format:Unknown
+              53:             TypePointer UniformConstant 52
+  54(g_tTex2df4):     53(ptr) Variable UniformConstant
+              56:     16(int) Constant 2
+              57:             TypePointer Uniform 18(ivec3)
+              61:     24(int) Constant 2
+              65:             TypeImage 16(int) 2D sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+  67(g_tTex2di4):     66(ptr) Variable UniformConstant
+              75:             TypeImage 24(int) 2D sampled format:Unknown
+              76:             TypePointer UniformConstant 75
+  77(g_tTex2du4):     76(ptr) Variable UniformConstant
+              85:             TypeImage 6(float) 3D sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex3df4):     86(ptr) Variable UniformConstant
+              89:     16(int) Constant 3
+              90:             TypePointer Uniform 19(ivec4)
+              94:     24(int) Constant 3
+              98:             TypeImage 16(int) 3D sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+ 100(g_tTex3di4):     99(ptr) Variable UniformConstant
+             108:             TypeImage 24(int) 3D sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+ 110(g_tTex3du4):    109(ptr) Variable UniformConstant
+             118:             TypePointer Function 8(VS_OUTPUT)
+             120:     16(int) Constant 0
+             121:    6(float) Constant 0
+             122:    7(fvec4) ConstantComposite 121 121 121 121
+             123:             TypePointer Function 7(fvec4)
+             128:             TypePointer Output 7(fvec4)
+129(@entryPointOutput_Pos):    128(ptr) Variable Output
+             132:             TypeSampler
+             133:             TypePointer UniformConstant 132
+    134(g_sSamp):    133(ptr) Variable UniformConstant
+             135:             TypeImage 6(float) Cube sampled format:Unknown
+             136:             TypePointer UniformConstant 135
+ 137(g_tTexcdf4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 16(int) Cube sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTexcdi4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 24(int) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdu4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 6(float) 1D array sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+146(g_tTex1df4a):    145(ptr) Variable UniformConstant
+             147:             TypeImage 16(int) 1D array sampled format:Unknown
+             148:             TypePointer UniformConstant 147
+149(g_tTex1di4a):    148(ptr) Variable UniformConstant
+             150:             TypeImage 24(int) 1D array sampled format:Unknown
+             151:             TypePointer UniformConstant 150
+152(g_tTex1du4a):    151(ptr) Variable UniformConstant
+             153:             TypeImage 6(float) 2D array sampled format:Unknown
+             154:             TypePointer UniformConstant 153
+155(g_tTex2df4a):    154(ptr) Variable UniformConstant
+             156:             TypeImage 16(int) 2D array sampled format:Unknown
+             157:             TypePointer UniformConstant 156
+158(g_tTex2di4a):    157(ptr) Variable UniformConstant
+             159:             TypeImage 24(int) 2D array sampled format:Unknown
+             160:             TypePointer UniformConstant 159
+161(g_tTex2du4a):    160(ptr) Variable UniformConstant
+             162:             TypeImage 6(float) Cube array sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+164(g_tTexcdf4a):    163(ptr) Variable UniformConstant
+             165:             TypeImage 16(int) Cube array sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+167(g_tTexcdi4a):    166(ptr) Variable UniformConstant
+             168:             TypeImage 24(int) Cube array sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+170(g_tTexcdu4a):    169(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      116(vsout):    115(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4)
-              22:     21(ptr) AccessChain 17 18 20
-              23:     11(int) Load 22
-              25:     21(ptr) AccessChain 17 18 24
-              26:     11(int) Load 25
-              28:   27(fvec4) ImageFetch 10 23 Lod 26
-              32:          29 Load 31(g_tTex1di4)
-              33:     21(ptr) AccessChain 17 18 20
-              34:     11(int) Load 33
-              35:     21(ptr) AccessChain 17 18 24
-              36:     11(int) Load 35
-              37:   14(ivec4) ImageFetch 32 34 Lod 36
-              41:          38 Load 40(g_tTex1du4)
-              42:     21(ptr) AccessChain 17 18 20
-              43:     11(int) Load 42
-              44:     21(ptr) AccessChain 17 18 24
-              45:     11(int) Load 44
-              47:   46(ivec4) ImageFetch 41 43 Lod 45
-              51:          48 Load 50(g_tTex2df4)
-              54:     53(ptr) AccessChain 17 52
-              55:   13(ivec3) Load 54
-              56:   12(ivec2) VectorShuffle 55 55 0 1
-              58:     21(ptr) AccessChain 17 52 57
-              59:     11(int) Load 58
-              60:   27(fvec4) ImageFetch 51 56 Lod 59
-              64:          61 Load 63(g_tTex2di4)
-              65:     53(ptr) AccessChain 17 52
-              66:   13(ivec3) Load 65
-              67:   12(ivec2) VectorShuffle 66 66 0 1
-              68:     21(ptr) AccessChain 17 52 57
-              69:     11(int) Load 68
-              70:   14(ivec4) ImageFetch 64 67 Lod 69
-              74:          71 Load 73(g_tTex2du4)
-              75:     53(ptr) AccessChain 17 52
-              76:   13(ivec3) Load 75
-              77:   12(ivec2) VectorShuffle 76 76 0 1
-              78:     21(ptr) AccessChain 17 52 57
-              79:     11(int) Load 78
-              80:   46(ivec4) ImageFetch 74 77 Lod 79
-              84:          81 Load 83(g_tTex3df4)
-              87:     86(ptr) AccessChain 17 85
-              88:   14(ivec4) Load 87
-              89:   13(ivec3) VectorShuffle 88 88 0 1 2
-              91:     21(ptr) AccessChain 17 85 90
-              92:     11(int) Load 91
-              93:   27(fvec4) ImageFetch 84 89 Lod 92
-              97:          94 Load 96(g_tTex3di4)
-              98:     86(ptr) AccessChain 17 85
-              99:   14(ivec4) Load 98
-             100:   13(ivec3) VectorShuffle 99 99 0 1 2
-             101:     21(ptr) AccessChain 17 85 90
-             102:     11(int) Load 101
-             103:   14(ivec4) ImageFetch 97 100 Lod 102
-             107:         104 Load 106(g_tTex3du4)
-             108:     86(ptr) AccessChain 17 85
-             109:   14(ivec4) Load 108
-             110:   13(ivec3) VectorShuffle 109 109 0 1 2
-             111:     21(ptr) AccessChain 17 85 90
-             112:     11(int) Load 111
-             113:   46(ivec4) ImageFetch 107 110 Lod 112
-             121:    120(ptr) AccessChain 116(vsout) 117
-                              Store 121 119
-             124:    120(ptr) AccessChain 116(vsout) 117
-             125:   27(fvec4) Load 124
-                              Store 123(Pos) 125
+             130:8(VS_OUTPUT) FunctionCall 10(@main()
+             131:    7(fvec4) CompositeExtract 130 0
+                              Store 129(@entryPointOutput_Pos) 131
                               Return
                               FunctionEnd
+      10(@main():8(VS_OUTPUT) Function None 9
+              11:             Label
+      119(vsout):    118(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4)
+              27:     26(ptr) AccessChain 22 23 25
+              28:     16(int) Load 27
+              30:     26(ptr) AccessChain 22 23 29
+              31:     16(int) Load 30
+              32:    7(fvec4) ImageFetch 15 28 Lod 31
+              36:          33 Load 35(g_tTex1di4)
+              37:     26(ptr) AccessChain 22 23 25
+              38:     16(int) Load 37
+              39:     26(ptr) AccessChain 22 23 29
+              40:     16(int) Load 39
+              41:   19(ivec4) ImageFetch 36 38 Lod 40
+              45:          42 Load 44(g_tTex1du4)
+              46:     26(ptr) AccessChain 22 23 25
+              47:     16(int) Load 46
+              48:     26(ptr) AccessChain 22 23 29
+              49:     16(int) Load 48
+              51:   50(ivec4) ImageFetch 45 47 Lod 49
+              55:          52 Load 54(g_tTex2df4)
+              58:     57(ptr) AccessChain 22 56
+              59:   18(ivec3) Load 58
+              60:   17(ivec2) VectorShuffle 59 59 0 1
+              62:     26(ptr) AccessChain 22 56 61
+              63:     16(int) Load 62
+              64:    7(fvec4) ImageFetch 55 60 Lod 63
+              68:          65 Load 67(g_tTex2di4)
+              69:     57(ptr) AccessChain 22 56
+              70:   18(ivec3) Load 69
+              71:   17(ivec2) VectorShuffle 70 70 0 1
+              72:     26(ptr) AccessChain 22 56 61
+              73:     16(int) Load 72
+              74:   19(ivec4) ImageFetch 68 71 Lod 73
+              78:          75 Load 77(g_tTex2du4)
+              79:     57(ptr) AccessChain 22 56
+              80:   18(ivec3) Load 79
+              81:   17(ivec2) VectorShuffle 80 80 0 1
+              82:     26(ptr) AccessChain 22 56 61
+              83:     16(int) Load 82
+              84:   50(ivec4) ImageFetch 78 81 Lod 83
+              88:          85 Load 87(g_tTex3df4)
+              91:     90(ptr) AccessChain 22 89
+              92:   19(ivec4) Load 91
+              93:   18(ivec3) VectorShuffle 92 92 0 1 2
+              95:     26(ptr) AccessChain 22 89 94
+              96:     16(int) Load 95
+              97:    7(fvec4) ImageFetch 88 93 Lod 96
+             101:          98 Load 100(g_tTex3di4)
+             102:     90(ptr) AccessChain 22 89
+             103:   19(ivec4) Load 102
+             104:   18(ivec3) VectorShuffle 103 103 0 1 2
+             105:     26(ptr) AccessChain 22 89 94
+             106:     16(int) Load 105
+             107:   19(ivec4) ImageFetch 101 104 Lod 106
+             111:         108 Load 110(g_tTex3du4)
+             112:     90(ptr) AccessChain 22 89
+             113:   19(ivec4) Load 112
+             114:   18(ivec3) VectorShuffle 113 113 0 1 2
+             115:     26(ptr) AccessChain 22 89 94
+             116:     16(int) Load 115
+             117:   50(ivec4) ImageFetch 111 114 Lod 116
+             124:    123(ptr) AccessChain 119(vsout) 120
+                              Store 124 122
+             125:8(VS_OUTPUT) Load 119(vsout)
+                              ReturnValue 125
+                              FunctionEnd

+ 170 - 147
3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.buffer.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -49,28 +49,34 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:37      Sequence
-0:37        Sequence
-0:37          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:37            Color: direct index for structure (temp 4-component vector of float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                0 (const int)
-0:37          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:37            Depth: direct index for structure (temp float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                1 (const int)
-0:37        Branch: Return
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbf4_test' (layout(binding=0 rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
 0:?     'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -80,7 +86,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -127,155 +133,172 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:37      Sequence
-0:37        Sequence
-0:37          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:37            Color: direct index for structure (temp 4-component vector of float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                0 (const int)
-0:37          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:37            Depth: direct index for structure (temp float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                1 (const int)
-0:37        Branch: Return
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbf4_test' (layout(binding=0 rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
 0:?     'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 71
+// Id's are bound by 78
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 62 66
+                              EntryPoint Fragment 4  "main" 70 74
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "r00"
-                              Name 13  "g_tTexbf4"
-                              Name 19  "$Global"
-                              MemberName 19($Global) 0  "c1"
-                              MemberName 19($Global) 1  "c2"
-                              MemberName 19($Global) 2  "c3"
-                              MemberName 19($Global) 3  "c4"
-                              MemberName 19($Global) 4  "o1"
-                              MemberName 19($Global) 5  "o2"
-                              MemberName 19($Global) 6  "o3"
-                              MemberName 19($Global) 7  "o4"
-                              Name 21  ""
-                              Name 29  "r01"
-                              Name 33  "g_tTexbi4"
-                              Name 42  "r02"
-                              Name 46  "g_tTexbu4"
-                              Name 52  "PS_OUTPUT"
-                              MemberName 52(PS_OUTPUT) 0  "Color"
-                              MemberName 52(PS_OUTPUT) 1  "Depth"
-                              Name 54  "psout"
-                              Name 62  "Color"
-                              Name 66  "Depth"
-                              Name 70  "g_tTexbf4_test"
-                              Decorate 13(g_tTexbf4) DescriptorSet 0
-                              MemberDecorate 19($Global) 0 Offset 0
-                              MemberDecorate 19($Global) 1 Offset 8
-                              MemberDecorate 19($Global) 2 Offset 16
-                              MemberDecorate 19($Global) 3 Offset 32
-                              MemberDecorate 19($Global) 4 Offset 48
-                              MemberDecorate 19($Global) 5 Offset 56
-                              MemberDecorate 19($Global) 6 Offset 64
-                              MemberDecorate 19($Global) 7 Offset 80
-                              Decorate 19($Global) Block
-                              Decorate 21 DescriptorSet 0
-                              Decorate 33(g_tTexbi4) DescriptorSet 0
-                              Decorate 46(g_tTexbu4) DescriptorSet 0
-                              Decorate 62(Color) Location 0
-                              Decorate 66(Depth) BuiltIn FragDepth
-                              Decorate 70(g_tTexbf4_test) DescriptorSet 0
-                              Decorate 70(g_tTexbf4_test) Binding 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "r00"
+                              Name 17  "g_tTexbf4"
+                              Name 23  "$Global"
+                              MemberName 23($Global) 0  "c1"
+                              MemberName 23($Global) 1  "c2"
+                              MemberName 23($Global) 2  "c3"
+                              MemberName 23($Global) 3  "c4"
+                              MemberName 23($Global) 4  "o1"
+                              MemberName 23($Global) 5  "o2"
+                              MemberName 23($Global) 6  "o3"
+                              MemberName 23($Global) 7  "o4"
+                              Name 25  ""
+                              Name 33  "r01"
+                              Name 37  "g_tTexbi4"
+                              Name 46  "r02"
+                              Name 50  "g_tTexbu4"
+                              Name 57  "psout"
+                              Name 67  "flattenTemp"
+                              Name 70  "Color"
+                              Name 74  "Depth"
+                              Name 77  "g_tTexbf4_test"
+                              Decorate 17(g_tTexbf4) DescriptorSet 0
+                              MemberDecorate 23($Global) 0 Offset 0
+                              MemberDecorate 23($Global) 1 Offset 8
+                              MemberDecorate 23($Global) 2 Offset 16
+                              MemberDecorate 23($Global) 3 Offset 32
+                              MemberDecorate 23($Global) 4 Offset 48
+                              MemberDecorate 23($Global) 5 Offset 56
+                              MemberDecorate 23($Global) 6 Offset 64
+                              MemberDecorate 23($Global) 7 Offset 80
+                              Decorate 23($Global) Block
+                              Decorate 25 DescriptorSet 0
+                              Decorate 37(g_tTexbi4) DescriptorSet 0
+                              Decorate 50(g_tTexbu4) DescriptorSet 0
+                              Decorate 70(Color) Location 0
+                              Decorate 74(Depth) BuiltIn FragDepth
+                              Decorate 77(g_tTexbf4_test) DescriptorSet 0
+                              Decorate 77(g_tTexbf4_test) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-              10:             TypeImage 6(float) Buffer sampled format:Rgba32f
-              11:             TypeSampledImage 10
-              12:             TypePointer UniformConstant 11
-   13(g_tTexbf4):     12(ptr) Variable UniformConstant
-              15:             TypeInt 32 1
-              16:             TypeVector 15(int) 2
-              17:             TypeVector 15(int) 3
-              18:             TypeVector 15(int) 4
-     19($Global):             TypeStruct 15(int) 16(ivec2) 17(ivec3) 18(ivec4) 15(int) 16(ivec2) 17(ivec3) 18(ivec4)
-              20:             TypePointer Uniform 19($Global)
-              21:     20(ptr) Variable Uniform
-              22:     15(int) Constant 0
-              23:             TypePointer Uniform 15(int)
-              28:             TypePointer Function 18(ivec4)
-              30:             TypeImage 15(int) Buffer sampled format:Rgba32i
-              31:             TypeSampledImage 30
-              32:             TypePointer UniformConstant 31
-   33(g_tTexbi4):     32(ptr) Variable UniformConstant
-              39:             TypeInt 32 0
-              40:             TypeVector 39(int) 4
-              41:             TypePointer Function 40(ivec4)
-              43:             TypeImage 39(int) Buffer sampled format:Rgba32ui
-              44:             TypeSampledImage 43
-              45:             TypePointer UniformConstant 44
-   46(g_tTexbu4):     45(ptr) Variable UniformConstant
-   52(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              53:             TypePointer Function 52(PS_OUTPUT)
-              55:    6(float) Constant 1065353216
-              56:    7(fvec4) ConstantComposite 55 55 55 55
-              58:     15(int) Constant 1
-              59:             TypePointer Function 6(float)
-              61:             TypePointer Output 7(fvec4)
-       62(Color):     61(ptr) Variable Output
-              65:             TypePointer Output 6(float)
-       66(Depth):     65(ptr) Variable Output
-70(g_tTexbf4_test):     12(ptr) Variable UniformConstant
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 7(fvec4)
+              14:             TypeImage 6(float) Buffer sampled format:Rgba32f
+              15:             TypeSampledImage 14
+              16:             TypePointer UniformConstant 15
+   17(g_tTexbf4):     16(ptr) Variable UniformConstant
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 2
+              21:             TypeVector 19(int) 3
+              22:             TypeVector 19(int) 4
+     23($Global):             TypeStruct 19(int) 20(ivec2) 21(ivec3) 22(ivec4) 19(int) 20(ivec2) 21(ivec3) 22(ivec4)
+              24:             TypePointer Uniform 23($Global)
+              25:     24(ptr) Variable Uniform
+              26:     19(int) Constant 0
+              27:             TypePointer Uniform 19(int)
+              32:             TypePointer Function 22(ivec4)
+              34:             TypeImage 19(int) Buffer sampled format:Rgba32i
+              35:             TypeSampledImage 34
+              36:             TypePointer UniformConstant 35
+   37(g_tTexbi4):     36(ptr) Variable UniformConstant
+              43:             TypeInt 32 0
+              44:             TypeVector 43(int) 4
+              45:             TypePointer Function 44(ivec4)
+              47:             TypeImage 43(int) Buffer sampled format:Rgba32ui
+              48:             TypeSampledImage 47
+              49:             TypePointer UniformConstant 48
+   50(g_tTexbu4):     49(ptr) Variable UniformConstant
+              56:             TypePointer Function 8(PS_OUTPUT)
+              58:    6(float) Constant 1065353216
+              59:    7(fvec4) ConstantComposite 58 58 58 58
+              61:     19(int) Constant 1
+              62:             TypePointer Function 6(float)
+              69:             TypePointer Output 7(fvec4)
+       70(Color):     69(ptr) Variable Output
+              73:             TypePointer Output 6(float)
+       74(Depth):     73(ptr) Variable Output
+77(g_tTexbf4_test):     16(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-          9(r00):      8(ptr) Variable Function
-         29(r01):     28(ptr) Variable Function
-         42(r02):     41(ptr) Variable Function
-       54(psout):     53(ptr) Variable Function
-              14:          11 Load 13(g_tTexbf4)
-              24:     23(ptr) AccessChain 21 22
-              25:     15(int) Load 24
-              26:          10 Image 14
-              27:    7(fvec4) ImageFetch 26 25
-                              Store 9(r00) 27
-              34:          31 Load 33(g_tTexbi4)
-              35:     23(ptr) AccessChain 21 22
-              36:     15(int) Load 35
-              37:          30 Image 34
-              38:   18(ivec4) ImageFetch 37 36
-                              Store 29(r01) 38
-              47:          44 Load 46(g_tTexbu4)
-              48:     23(ptr) AccessChain 21 22
-              49:     15(int) Load 48
-              50:          43 Image 47
-              51:   40(ivec4) ImageFetch 50 49
-                              Store 42(r02) 51
-              57:      8(ptr) AccessChain 54(psout) 22
-                              Store 57 56
-              60:     59(ptr) AccessChain 54(psout) 58
-                              Store 60 55
-              63:      8(ptr) AccessChain 54(psout) 22
-              64:    7(fvec4) Load 63
-                              Store 62(Color) 64
-              67:     59(ptr) AccessChain 54(psout) 58
-              68:    6(float) Load 67
-                              Store 66(Depth) 68
+ 67(flattenTemp):     56(ptr) Variable Function
+              68:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 67(flattenTemp) 68
+              71:     12(ptr) AccessChain 67(flattenTemp) 26
+              72:    7(fvec4) Load 71
+                              Store 70(Color) 72
+              75:     62(ptr) AccessChain 67(flattenTemp) 61
+              76:    6(float) Load 75
+                              Store 74(Depth) 76
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         13(r00):     12(ptr) Variable Function
+         33(r01):     32(ptr) Variable Function
+         46(r02):     45(ptr) Variable Function
+       57(psout):     56(ptr) Variable Function
+              18:          15 Load 17(g_tTexbf4)
+              28:     27(ptr) AccessChain 25 26
+              29:     19(int) Load 28
+              30:          14 Image 18
+              31:    7(fvec4) ImageFetch 30 29
+                              Store 13(r00) 31
+              38:          35 Load 37(g_tTexbi4)
+              39:     27(ptr) AccessChain 25 26
+              40:     19(int) Load 39
+              41:          34 Image 38
+              42:   22(ivec4) ImageFetch 41 40
+                              Store 33(r01) 42
+              51:          48 Load 50(g_tTexbu4)
+              52:     27(ptr) AccessChain 25 26
+              53:     19(int) Load 52
+              54:          47 Image 51
+              55:   44(ivec4) ImageFetch 54 53
+                              Store 46(r02) 55
+              60:     12(ptr) AccessChain 57(psout) 26
+                              Store 60 59
+              63:     62(ptr) AccessChain 57(psout) 61
+                              Store 63 58
+              64:8(PS_OUTPUT) Load 57(psout)
+                              ReturnValue 64
+                              FunctionEnd

+ 174 - 151
3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.buffer.float.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -52,28 +52,34 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:37      Sequence
-0:37        Sequence
-0:37          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:37            Color: direct index for structure (temp 4-component vector of float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                0 (const int)
-0:37          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:37            Depth: direct index for structure (temp float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                1 (const int)
-0:37        Branch: Return
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbfs_test' (layout(binding=0 r32f ) uniform samplerBuffer)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
 0:?     'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -83,7 +89,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:24    Function Parameters: 
 0:?     Sequence
 0:28      Sequence
@@ -133,158 +139,175 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:37      Sequence
-0:37        Sequence
-0:37          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:37            Color: direct index for structure (temp 4-component vector of float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                0 (const int)
-0:37          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:37            Depth: direct index for structure (temp float)
-0:37              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:37              Constant:
-0:37                1 (const int)
-0:37        Branch: Return
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24  Function Definition: main( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Sequence
+0:24        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:24          Color: direct index for structure (temp 4-component vector of float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              0 (const int)
+0:24        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:24          Depth: direct index for structure (temp float)
+0:24            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:24            Constant:
+0:24              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbfs_test' (layout(binding=0 r32f ) uniform samplerBuffer)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
 0:?     'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 74
+// Id's are bound by 81
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 65 69
+                              EntryPoint Fragment 4  "main" 73 77
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "r00"
-                              Name 12  "g_tTexbfs"
-                              Name 18  "$Global"
-                              MemberName 18($Global) 0  "c1"
-                              MemberName 18($Global) 1  "c2"
-                              MemberName 18($Global) 2  "c3"
-                              MemberName 18($Global) 3  "c4"
-                              MemberName 18($Global) 4  "o1"
-                              MemberName 18($Global) 5  "o2"
-                              MemberName 18($Global) 6  "o3"
-                              MemberName 18($Global) 7  "o4"
-                              Name 20  ""
-                              Name 30  "r01"
-                              Name 34  "g_tTexbis"
-                              Name 43  "r02"
-                              Name 47  "g_tTexbus"
-                              Name 55  "PS_OUTPUT"
-                              MemberName 55(PS_OUTPUT) 0  "Color"
-                              MemberName 55(PS_OUTPUT) 1  "Depth"
-                              Name 57  "psout"
-                              Name 65  "Color"
-                              Name 69  "Depth"
-                              Name 73  "g_tTexbfs_test"
-                              Decorate 12(g_tTexbfs) DescriptorSet 0
-                              MemberDecorate 18($Global) 0 Offset 0
-                              MemberDecorate 18($Global) 1 Offset 8
-                              MemberDecorate 18($Global) 2 Offset 16
-                              MemberDecorate 18($Global) 3 Offset 32
-                              MemberDecorate 18($Global) 4 Offset 48
-                              MemberDecorate 18($Global) 5 Offset 56
-                              MemberDecorate 18($Global) 6 Offset 64
-                              MemberDecorate 18($Global) 7 Offset 80
-                              Decorate 18($Global) Block
-                              Decorate 20 DescriptorSet 0
-                              Decorate 34(g_tTexbis) DescriptorSet 0
-                              Decorate 47(g_tTexbus) DescriptorSet 0
-                              Decorate 65(Color) Location 0
-                              Decorate 69(Depth) BuiltIn FragDepth
-                              Decorate 73(g_tTexbfs_test) DescriptorSet 0
-                              Decorate 73(g_tTexbfs_test) Binding 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "r00"
+                              Name 17  "g_tTexbfs"
+                              Name 23  "$Global"
+                              MemberName 23($Global) 0  "c1"
+                              MemberName 23($Global) 1  "c2"
+                              MemberName 23($Global) 2  "c3"
+                              MemberName 23($Global) 3  "c4"
+                              MemberName 23($Global) 4  "o1"
+                              MemberName 23($Global) 5  "o2"
+                              MemberName 23($Global) 6  "o3"
+                              MemberName 23($Global) 7  "o4"
+                              Name 25  ""
+                              Name 34  "r01"
+                              Name 38  "g_tTexbis"
+                              Name 47  "r02"
+                              Name 51  "g_tTexbus"
+                              Name 60  "psout"
+                              Name 70  "flattenTemp"
+                              Name 73  "Color"
+                              Name 77  "Depth"
+                              Name 80  "g_tTexbfs_test"
+                              Decorate 17(g_tTexbfs) DescriptorSet 0
+                              MemberDecorate 23($Global) 0 Offset 0
+                              MemberDecorate 23($Global) 1 Offset 8
+                              MemberDecorate 23($Global) 2 Offset 16
+                              MemberDecorate 23($Global) 3 Offset 32
+                              MemberDecorate 23($Global) 4 Offset 48
+                              MemberDecorate 23($Global) 5 Offset 56
+                              MemberDecorate 23($Global) 6 Offset 64
+                              MemberDecorate 23($Global) 7 Offset 80
+                              Decorate 23($Global) Block
+                              Decorate 25 DescriptorSet 0
+                              Decorate 38(g_tTexbis) DescriptorSet 0
+                              Decorate 51(g_tTexbus) DescriptorSet 0
+                              Decorate 73(Color) Location 0
+                              Decorate 77(Depth) BuiltIn FragDepth
+                              Decorate 80(g_tTexbfs_test) DescriptorSet 0
+                              Decorate 80(g_tTexbfs_test) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               9:             TypeImage 6(float) Buffer sampled format:R32f
-              10:             TypeSampledImage 9
-              11:             TypePointer UniformConstant 10
-   12(g_tTexbfs):     11(ptr) Variable UniformConstant
-              14:             TypeInt 32 1
-              15:             TypeVector 14(int) 2
-              16:             TypeVector 14(int) 3
-              17:             TypeVector 14(int) 4
-     18($Global):             TypeStruct 14(int) 15(ivec2) 16(ivec3) 17(ivec4) 14(int) 15(ivec2) 16(ivec3) 17(ivec4)
-              19:             TypePointer Uniform 18($Global)
-              20:     19(ptr) Variable Uniform
-              21:     14(int) Constant 0
-              22:             TypePointer Uniform 14(int)
-              26:             TypeVector 6(float) 4
-              29:             TypePointer Function 14(int)
-              31:             TypeImage 14(int) Buffer sampled format:R32i
-              32:             TypeSampledImage 31
-              33:             TypePointer UniformConstant 32
-   34(g_tTexbis):     33(ptr) Variable UniformConstant
-              41:             TypeInt 32 0
-              42:             TypePointer Function 41(int)
-              44:             TypeImage 41(int) Buffer sampled format:R32ui
-              45:             TypeSampledImage 44
-              46:             TypePointer UniformConstant 45
-   47(g_tTexbus):     46(ptr) Variable UniformConstant
-              52:             TypeVector 41(int) 4
-   55(PS_OUTPUT):             TypeStruct 26(fvec4) 6(float)
-              56:             TypePointer Function 55(PS_OUTPUT)
-              58:    6(float) Constant 1065353216
-              59:   26(fvec4) ConstantComposite 58 58 58 58
-              60:             TypePointer Function 26(fvec4)
-              62:     14(int) Constant 1
-              64:             TypePointer Output 26(fvec4)
-       65(Color):     64(ptr) Variable Output
-              68:             TypePointer Output 6(float)
-       69(Depth):     68(ptr) Variable Output
-73(g_tTexbfs_test):     11(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 6(float)
+              14:             TypeImage 6(float) Buffer sampled format:R32f
+              15:             TypeSampledImage 14
+              16:             TypePointer UniformConstant 15
+   17(g_tTexbfs):     16(ptr) Variable UniformConstant
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 2
+              21:             TypeVector 19(int) 3
+              22:             TypeVector 19(int) 4
+     23($Global):             TypeStruct 19(int) 20(ivec2) 21(ivec3) 22(ivec4) 19(int) 20(ivec2) 21(ivec3) 22(ivec4)
+              24:             TypePointer Uniform 23($Global)
+              25:     24(ptr) Variable Uniform
+              26:     19(int) Constant 0
+              27:             TypePointer Uniform 19(int)
+              33:             TypePointer Function 19(int)
+              35:             TypeImage 19(int) Buffer sampled format:R32i
+              36:             TypeSampledImage 35
+              37:             TypePointer UniformConstant 36
+   38(g_tTexbis):     37(ptr) Variable UniformConstant
+              45:             TypeInt 32 0
+              46:             TypePointer Function 45(int)
+              48:             TypeImage 45(int) Buffer sampled format:R32ui
+              49:             TypeSampledImage 48
+              50:             TypePointer UniformConstant 49
+   51(g_tTexbus):     50(ptr) Variable UniformConstant
+              56:             TypeVector 45(int) 4
+              59:             TypePointer Function 8(PS_OUTPUT)
+              61:    6(float) Constant 1065353216
+              62:    7(fvec4) ConstantComposite 61 61 61 61
+              63:             TypePointer Function 7(fvec4)
+              65:     19(int) Constant 1
+              72:             TypePointer Output 7(fvec4)
+       73(Color):     72(ptr) Variable Output
+              76:             TypePointer Output 6(float)
+       77(Depth):     76(ptr) Variable Output
+80(g_tTexbfs_test):     16(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-          8(r00):      7(ptr) Variable Function
-         30(r01):     29(ptr) Variable Function
-         43(r02):     42(ptr) Variable Function
-       57(psout):     56(ptr) Variable Function
-              13:          10 Load 12(g_tTexbfs)
-              23:     22(ptr) AccessChain 20 21
-              24:     14(int) Load 23
-              25:           9 Image 13
-              27:   26(fvec4) ImageFetch 25 24
-              28:    6(float) CompositeExtract 27 0
-                              Store 8(r00) 28
-              35:          32 Load 34(g_tTexbis)
-              36:     22(ptr) AccessChain 20 21
-              37:     14(int) Load 36
-              38:          31 Image 35
-              39:   17(ivec4) ImageFetch 38 37
-              40:     14(int) CompositeExtract 39 0
-                              Store 30(r01) 40
-              48:          45 Load 47(g_tTexbus)
-              49:     22(ptr) AccessChain 20 21
-              50:     14(int) Load 49
-              51:          44 Image 48
-              53:   52(ivec4) ImageFetch 51 50
-              54:     41(int) CompositeExtract 53 0
-                              Store 43(r02) 54
-              61:     60(ptr) AccessChain 57(psout) 21
-                              Store 61 59
-              63:      7(ptr) AccessChain 57(psout) 62
-                              Store 63 58
-              66:     60(ptr) AccessChain 57(psout) 21
-              67:   26(fvec4) Load 66
-                              Store 65(Color) 67
-              70:      7(ptr) AccessChain 57(psout) 62
-              71:    6(float) Load 70
-                              Store 69(Depth) 71
+ 70(flattenTemp):     59(ptr) Variable Function
+              71:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 70(flattenTemp) 71
+              74:     63(ptr) AccessChain 70(flattenTemp) 26
+              75:    7(fvec4) Load 74
+                              Store 73(Color) 75
+              78:     12(ptr) AccessChain 70(flattenTemp) 65
+              79:    6(float) Load 78
+                              Store 77(Depth) 79
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         13(r00):     12(ptr) Variable Function
+         34(r01):     33(ptr) Variable Function
+         47(r02):     46(ptr) Variable Function
+       60(psout):     59(ptr) Variable Function
+              18:          15 Load 17(g_tTexbfs)
+              28:     27(ptr) AccessChain 25 26
+              29:     19(int) Load 28
+              30:          14 Image 18
+              31:    7(fvec4) ImageFetch 30 29
+              32:    6(float) CompositeExtract 31 0
+                              Store 13(r00) 32
+              39:          36 Load 38(g_tTexbis)
+              40:     27(ptr) AccessChain 25 26
+              41:     19(int) Load 40
+              42:          35 Image 39
+              43:   22(ivec4) ImageFetch 42 41
+              44:     19(int) CompositeExtract 43 0
+                              Store 34(r01) 44
+              52:          49 Load 51(g_tTexbus)
+              53:     27(ptr) AccessChain 25 26
+              54:     19(int) Load 53
+              55:          48 Image 52
+              57:   56(ivec4) ImageFetch 55 54
+              58:     45(int) CompositeExtract 57 0
+                              Store 47(r02) 58
+              64:     63(ptr) AccessChain 60(psout) 26
+                              Store 64 62
+              66:     12(ptr) AccessChain 60(psout) 65
+                              Store 66 61
+              67:8(PS_OUTPUT) Load 60(psout)
+                              ReturnValue 67
+                              FunctionEnd

+ 325 - 302
3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetchOffset (temp 4-component vector of float)
@@ -229,24 +229,28 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:75      Sequence
-0:75        Sequence
-0:75          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:75            Color: direct index for structure (temp 4-component vector of float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                0 (const int)
-0:75          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:75            Depth: direct index for structure (temp float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                1 (const int)
-0:75        Branch: Return
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -269,6 +273,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -278,7 +284,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetchOffset (temp 4-component vector of float)
@@ -505,24 +511,28 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:75      Sequence
-0:75        Sequence
-0:75          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:75            Color: direct index for structure (temp 4-component vector of float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                0 (const int)
-0:75          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:75            Depth: direct index for structure (temp float)
-0:75              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:75              Constant:
-0:75                1 (const int)
-0:75        Branch: Return
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -545,11 +555,13 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 194
+// Id's are bound by 201
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -557,277 +569,288 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 147 151
+                              EntryPoint Fragment 4  "main" 155 159
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 34  "g_tTex1di4"
-                              Name 45  "g_tTex1du4"
-                              Name 57  "g_tTex2df4"
-                              Name 74  "g_tTex2di4"
-                              Name 86  "g_tTex2du4"
-                              Name 98  "g_tTex3df4"
-                              Name 114  "g_tTex3di4"
-                              Name 126  "g_tTex3du4"
-                              Name 136  "PS_OUTPUT"
-                              MemberName 136(PS_OUTPUT) 0  "Color"
-                              MemberName 136(PS_OUTPUT) 1  "Depth"
-                              Name 138  "psout"
-                              Name 147  "Color"
-                              Name 151  "Depth"
-                              Name 157  "g_sSamp"
-                              Name 160  "g_tTexcdf4"
-                              Name 163  "g_tTexcdi4"
-                              Name 166  "g_tTexcdu4"
-                              Name 169  "g_tTex1df4a"
-                              Name 172  "g_tTex1di4a"
-                              Name 175  "g_tTex1du4a"
-                              Name 178  "g_tTex2df4a"
-                              Name 181  "g_tTex2di4a"
-                              Name 184  "g_tTex2du4a"
-                              Name 187  "g_tTexcdf4a"
-                              Name 190  "g_tTexcdi4a"
-                              Name 193  "g_tTexcdu4a"
-                              Decorate 9(g_tTex1df4) DescriptorSet 0
-                              Decorate 9(g_tTex1df4) Binding 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 45(g_tTex1du4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 74(g_tTex2di4) DescriptorSet 0
-                              Decorate 86(g_tTex2du4) DescriptorSet 0
-                              Decorate 98(g_tTex3df4) DescriptorSet 0
-                              Decorate 114(g_tTex3di4) DescriptorSet 0
-                              Decorate 126(g_tTex3du4) DescriptorSet 0
-                              Decorate 147(Color) Location 0
-                              Decorate 151(Depth) BuiltIn FragDepth
-                              Decorate 157(g_sSamp) DescriptorSet 0
-                              Decorate 157(g_sSamp) Binding 0
-                              Decorate 160(g_tTexcdf4) DescriptorSet 0
-                              Decorate 163(g_tTexcdi4) DescriptorSet 0
-                              Decorate 166(g_tTexcdu4) DescriptorSet 0
-                              Decorate 169(g_tTex1df4a) DescriptorSet 0
-                              Decorate 172(g_tTex1di4a) DescriptorSet 0
-                              Decorate 175(g_tTex1du4a) DescriptorSet 0
-                              Decorate 178(g_tTex2df4a) DescriptorSet 0
-                              Decorate 181(g_tTex2di4a) DescriptorSet 0
-                              Decorate 184(g_tTex2du4a) DescriptorSet 0
-                              Decorate 187(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 190(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 193(g_tTexcdu4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 38  "g_tTex1di4"
+                              Name 49  "g_tTex1du4"
+                              Name 61  "g_tTex2df4"
+                              Name 78  "g_tTex2di4"
+                              Name 90  "g_tTex2du4"
+                              Name 102  "g_tTex3df4"
+                              Name 118  "g_tTex3di4"
+                              Name 130  "g_tTex3du4"
+                              Name 141  "psout"
+                              Name 152  "flattenTemp"
+                              Name 155  "Color"
+                              Name 159  "Depth"
+                              Name 164  "g_sSamp"
+                              Name 167  "g_tTexcdf4"
+                              Name 170  "g_tTexcdi4"
+                              Name 173  "g_tTexcdu4"
+                              Name 176  "g_tTex1df4a"
+                              Name 179  "g_tTex1di4a"
+                              Name 182  "g_tTex1du4a"
+                              Name 185  "g_tTex2df4a"
+                              Name 188  "g_tTex2di4a"
+                              Name 191  "g_tTex2du4a"
+                              Name 194  "g_tTexcdf4a"
+                              Name 197  "g_tTexcdi4a"
+                              Name 200  "g_tTexcdu4a"
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 14(g_tTex1df4) Binding 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 38(g_tTex1di4) DescriptorSet 0
+                              Decorate 49(g_tTex1du4) DescriptorSet 0
+                              Decorate 61(g_tTex2df4) DescriptorSet 0
+                              Decorate 78(g_tTex2di4) DescriptorSet 0
+                              Decorate 90(g_tTex2du4) DescriptorSet 0
+                              Decorate 102(g_tTex3df4) DescriptorSet 0
+                              Decorate 118(g_tTex3di4) DescriptorSet 0
+                              Decorate 130(g_tTex3du4) DescriptorSet 0
+                              Decorate 155(Color) Location 0
+                              Decorate 159(Depth) BuiltIn FragDepth
+                              Decorate 164(g_sSamp) DescriptorSet 0
+                              Decorate 164(g_sSamp) Binding 0
+                              Decorate 167(g_tTexcdf4) DescriptorSet 0
+                              Decorate 170(g_tTexcdi4) DescriptorSet 0
+                              Decorate 173(g_tTexcdu4) DescriptorSet 0
+                              Decorate 176(g_tTex1df4a) DescriptorSet 0
+                              Decorate 179(g_tTex1di4a) DescriptorSet 0
+                              Decorate 182(g_tTex1du4a) DescriptorSet 0
+                              Decorate 185(g_tTex2df4a) DescriptorSet 0
+                              Decorate 188(g_tTex2di4a) DescriptorSet 0
+                              Decorate 191(g_tTex2du4a) DescriptorSet 0
+                              Decorate 194(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 197(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 200(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D sampled format:Unknown
-               8:             TypePointer UniformConstant 7
-   9(g_tTex1df4):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 1
-              19:             TypeInt 32 0
-              20:     19(int) Constant 0
-              21:             TypePointer Uniform 11(int)
-              24:     19(int) Constant 1
-              27:     11(int) Constant 4
-              30:             TypeVector 6(float) 4
-              32:             TypeImage 11(int) 1D sampled format:Unknown
-              33:             TypePointer UniformConstant 32
-  34(g_tTex1di4):     33(ptr) Variable UniformConstant
-              43:             TypeImage 19(int) 1D sampled format:Unknown
-              44:             TypePointer UniformConstant 43
-  45(g_tTex1du4):     44(ptr) Variable UniformConstant
-              53:             TypeVector 19(int) 4
-              55:             TypeImage 6(float) 2D sampled format:Unknown
-              56:             TypePointer UniformConstant 55
-  57(g_tTex2df4):     56(ptr) Variable UniformConstant
-              59:     11(int) Constant 2
-              60:             TypePointer Uniform 13(ivec3)
-              64:     19(int) Constant 2
-              67:     11(int) Constant 5
-              68:             TypePointer Uniform 12(ivec2)
-              72:             TypeImage 11(int) 2D sampled format:Unknown
-              73:             TypePointer UniformConstant 72
-  74(g_tTex2di4):     73(ptr) Variable UniformConstant
-              84:             TypeImage 19(int) 2D sampled format:Unknown
-              85:             TypePointer UniformConstant 84
-  86(g_tTex2du4):     85(ptr) Variable UniformConstant
-              96:             TypeImage 6(float) 3D sampled format:Unknown
-              97:             TypePointer UniformConstant 96
-  98(g_tTex3df4):     97(ptr) Variable UniformConstant
-             100:     11(int) Constant 3
-             101:             TypePointer Uniform 14(ivec4)
-             105:     19(int) Constant 3
-             108:     11(int) Constant 6
-             112:             TypeImage 11(int) 3D sampled format:Unknown
-             113:             TypePointer UniformConstant 112
- 114(g_tTex3di4):    113(ptr) Variable UniformConstant
-             124:             TypeImage 19(int) 3D sampled format:Unknown
-             125:             TypePointer UniformConstant 124
- 126(g_tTex3du4):    125(ptr) Variable UniformConstant
-  136(PS_OUTPUT):             TypeStruct 30(fvec4) 6(float)
-             137:             TypePointer Function 136(PS_OUTPUT)
-             139:     11(int) Constant 0
-             140:    6(float) Constant 1065353216
-             141:   30(fvec4) ConstantComposite 140 140 140 140
-             142:             TypePointer Function 30(fvec4)
-             144:             TypePointer Function 6(float)
-             146:             TypePointer Output 30(fvec4)
-      147(Color):    146(ptr) Variable Output
-             150:             TypePointer Output 6(float)
-      151(Depth):    150(ptr) Variable Output
-             155:             TypeSampler
-             156:             TypePointer UniformConstant 155
-    157(g_sSamp):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) Cube sampled format:Unknown
-             159:             TypePointer UniformConstant 158
- 160(g_tTexcdf4):    159(ptr) Variable UniformConstant
-             161:             TypeImage 11(int) Cube sampled format:Unknown
-             162:             TypePointer UniformConstant 161
- 163(g_tTexcdi4):    162(ptr) Variable UniformConstant
-             164:             TypeImage 19(int) Cube sampled format:Unknown
-             165:             TypePointer UniformConstant 164
- 166(g_tTexcdu4):    165(ptr) Variable UniformConstant
-             167:             TypeImage 6(float) 1D array sampled format:Unknown
-             168:             TypePointer UniformConstant 167
-169(g_tTex1df4a):    168(ptr) Variable UniformConstant
-             170:             TypeImage 11(int) 1D array sampled format:Unknown
-             171:             TypePointer UniformConstant 170
-172(g_tTex1di4a):    171(ptr) Variable UniformConstant
-             173:             TypeImage 19(int) 1D array sampled format:Unknown
-             174:             TypePointer UniformConstant 173
-175(g_tTex1du4a):    174(ptr) Variable UniformConstant
-             176:             TypeImage 6(float) 2D array sampled format:Unknown
-             177:             TypePointer UniformConstant 176
-178(g_tTex2df4a):    177(ptr) Variable UniformConstant
-             179:             TypeImage 11(int) 2D array sampled format:Unknown
-             180:             TypePointer UniformConstant 179
-181(g_tTex2di4a):    180(ptr) Variable UniformConstant
-             182:             TypeImage 19(int) 2D array sampled format:Unknown
-             183:             TypePointer UniformConstant 182
-184(g_tTex2du4a):    183(ptr) Variable UniformConstant
-             185:             TypeImage 6(float) Cube array sampled format:Unknown
-             186:             TypePointer UniformConstant 185
-187(g_tTexcdf4a):    186(ptr) Variable UniformConstant
-             188:             TypeImage 11(int) Cube array sampled format:Unknown
-             189:             TypePointer UniformConstant 188
-190(g_tTexcdi4a):    189(ptr) Variable UniformConstant
-             191:             TypeImage 19(int) Cube array sampled format:Unknown
-             192:             TypePointer UniformConstant 191
-193(g_tTexcdu4a):    192(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+  14(g_tTex1df4):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 1
+              24:             TypeInt 32 0
+              25:     24(int) Constant 0
+              26:             TypePointer Uniform 16(int)
+              29:     24(int) Constant 1
+              32:     16(int) Constant 4
+              36:             TypeImage 16(int) 1D sampled format:Unknown
+              37:             TypePointer UniformConstant 36
+  38(g_tTex1di4):     37(ptr) Variable UniformConstant
+              47:             TypeImage 24(int) 1D sampled format:Unknown
+              48:             TypePointer UniformConstant 47
+  49(g_tTex1du4):     48(ptr) Variable UniformConstant
+              57:             TypeVector 24(int) 4
+              59:             TypeImage 6(float) 2D sampled format:Unknown
+              60:             TypePointer UniformConstant 59
+  61(g_tTex2df4):     60(ptr) Variable UniformConstant
+              63:     16(int) Constant 2
+              64:             TypePointer Uniform 18(ivec3)
+              68:     24(int) Constant 2
+              71:     16(int) Constant 5
+              72:             TypePointer Uniform 17(ivec2)
+              76:             TypeImage 16(int) 2D sampled format:Unknown
+              77:             TypePointer UniformConstant 76
+  78(g_tTex2di4):     77(ptr) Variable UniformConstant
+              88:             TypeImage 24(int) 2D sampled format:Unknown
+              89:             TypePointer UniformConstant 88
+  90(g_tTex2du4):     89(ptr) Variable UniformConstant
+             100:             TypeImage 6(float) 3D sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+ 102(g_tTex3df4):    101(ptr) Variable UniformConstant
+             104:     16(int) Constant 3
+             105:             TypePointer Uniform 19(ivec4)
+             109:     24(int) Constant 3
+             112:     16(int) Constant 6
+             116:             TypeImage 16(int) 3D sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+ 118(g_tTex3di4):    117(ptr) Variable UniformConstant
+             128:             TypeImage 24(int) 3D sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+ 130(g_tTex3du4):    129(ptr) Variable UniformConstant
+             140:             TypePointer Function 8(PS_OUTPUT)
+             142:     16(int) Constant 0
+             143:    6(float) Constant 1065353216
+             144:    7(fvec4) ConstantComposite 143 143 143 143
+             145:             TypePointer Function 7(fvec4)
+             147:             TypePointer Function 6(float)
+             154:             TypePointer Output 7(fvec4)
+      155(Color):    154(ptr) Variable Output
+             158:             TypePointer Output 6(float)
+      159(Depth):    158(ptr) Variable Output
+             162:             TypeSampler
+             163:             TypePointer UniformConstant 162
+    164(g_sSamp):    163(ptr) Variable UniformConstant
+             165:             TypeImage 6(float) Cube sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTexcdf4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 16(int) Cube sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+ 170(g_tTexcdi4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 24(int) Cube sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+ 173(g_tTexcdu4):    172(ptr) Variable UniformConstant
+             174:             TypeImage 6(float) 1D array sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+176(g_tTex1df4a):    175(ptr) Variable UniformConstant
+             177:             TypeImage 16(int) 1D array sampled format:Unknown
+             178:             TypePointer UniformConstant 177
+179(g_tTex1di4a):    178(ptr) Variable UniformConstant
+             180:             TypeImage 24(int) 1D array sampled format:Unknown
+             181:             TypePointer UniformConstant 180
+182(g_tTex1du4a):    181(ptr) Variable UniformConstant
+             183:             TypeImage 6(float) 2D array sampled format:Unknown
+             184:             TypePointer UniformConstant 183
+185(g_tTex2df4a):    184(ptr) Variable UniformConstant
+             186:             TypeImage 16(int) 2D array sampled format:Unknown
+             187:             TypePointer UniformConstant 186
+188(g_tTex2di4a):    187(ptr) Variable UniformConstant
+             189:             TypeImage 24(int) 2D array sampled format:Unknown
+             190:             TypePointer UniformConstant 189
+191(g_tTex2du4a):    190(ptr) Variable UniformConstant
+             192:             TypeImage 6(float) Cube array sampled format:Unknown
+             193:             TypePointer UniformConstant 192
+194(g_tTexcdf4a):    193(ptr) Variable UniformConstant
+             195:             TypeImage 16(int) Cube array sampled format:Unknown
+             196:             TypePointer UniformConstant 195
+197(g_tTexcdi4a):    196(ptr) Variable UniformConstant
+             198:             TypeImage 24(int) Cube array sampled format:Unknown
+             199:             TypePointer UniformConstant 198
+200(g_tTexcdu4a):    199(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      138(psout):    137(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4)
-              22:     21(ptr) AccessChain 17 18 20
-              23:     11(int) Load 22
-              25:     21(ptr) AccessChain 17 18 24
-              26:     11(int) Load 25
-              28:     21(ptr) AccessChain 17 27
-              29:     11(int) Load 28
-              31:   30(fvec4) ImageFetch 10 23 Lod Offset 26 29
-              35:          32 Load 34(g_tTex1di4)
-              36:     21(ptr) AccessChain 17 18 20
-              37:     11(int) Load 36
-              38:     21(ptr) AccessChain 17 18 24
-              39:     11(int) Load 38
-              40:     21(ptr) AccessChain 17 27
-              41:     11(int) Load 40
-              42:   14(ivec4) ImageFetch 35 37 Lod Offset 39 41
-              46:          43 Load 45(g_tTex1du4)
-              47:     21(ptr) AccessChain 17 18 20
-              48:     11(int) Load 47
-              49:     21(ptr) AccessChain 17 18 24
-              50:     11(int) Load 49
-              51:     21(ptr) AccessChain 17 27
-              52:     11(int) Load 51
-              54:   53(ivec4) ImageFetch 46 48 Lod Offset 50 52
-              58:          55 Load 57(g_tTex2df4)
-              61:     60(ptr) AccessChain 17 59
-              62:   13(ivec3) Load 61
-              63:   12(ivec2) VectorShuffle 62 62 0 1
-              65:     21(ptr) AccessChain 17 59 64
-              66:     11(int) Load 65
-              69:     68(ptr) AccessChain 17 67
-              70:   12(ivec2) Load 69
-              71:   30(fvec4) ImageFetch 58 63 Lod Offset 66 70
-              75:          72 Load 74(g_tTex2di4)
-              76:     60(ptr) AccessChain 17 59
-              77:   13(ivec3) Load 76
-              78:   12(ivec2) VectorShuffle 77 77 0 1
-              79:     21(ptr) AccessChain 17 59 64
-              80:     11(int) Load 79
-              81:     68(ptr) AccessChain 17 67
-              82:   12(ivec2) Load 81
-              83:   14(ivec4) ImageFetch 75 78 Lod Offset 80 82
-              87:          84 Load 86(g_tTex2du4)
-              88:     60(ptr) AccessChain 17 59
-              89:   13(ivec3) Load 88
-              90:   12(ivec2) VectorShuffle 89 89 0 1
-              91:     21(ptr) AccessChain 17 59 64
-              92:     11(int) Load 91
-              93:     68(ptr) AccessChain 17 67
-              94:   12(ivec2) Load 93
-              95:   53(ivec4) ImageFetch 87 90 Lod Offset 92 94
-              99:          96 Load 98(g_tTex3df4)
-             102:    101(ptr) AccessChain 17 100
-             103:   14(ivec4) Load 102
-             104:   13(ivec3) VectorShuffle 103 103 0 1 2
-             106:     21(ptr) AccessChain 17 100 105
-             107:     11(int) Load 106
-             109:     60(ptr) AccessChain 17 108
-             110:   13(ivec3) Load 109
-             111:   30(fvec4) ImageFetch 99 104 Lod Offset 107 110
-             115:         112 Load 114(g_tTex3di4)
-             116:    101(ptr) AccessChain 17 100
-             117:   14(ivec4) Load 116
-             118:   13(ivec3) VectorShuffle 117 117 0 1 2
-             119:     21(ptr) AccessChain 17 100 105
-             120:     11(int) Load 119
-             121:     60(ptr) AccessChain 17 108
-             122:   13(ivec3) Load 121
-             123:   14(ivec4) ImageFetch 115 118 Lod Offset 120 122
-             127:         124 Load 126(g_tTex3du4)
-             128:    101(ptr) AccessChain 17 100
-             129:   14(ivec4) Load 128
-             130:   13(ivec3) VectorShuffle 129 129 0 1 2
-             131:     21(ptr) AccessChain 17 100 105
-             132:     11(int) Load 131
-             133:     60(ptr) AccessChain 17 108
-             134:   13(ivec3) Load 133
-             135:   53(ivec4) ImageFetch 127 130 Lod Offset 132 134
-             143:    142(ptr) AccessChain 138(psout) 139
-                              Store 143 141
-             145:    144(ptr) AccessChain 138(psout) 18
-                              Store 145 140
-             148:    142(ptr) AccessChain 138(psout) 139
-             149:   30(fvec4) Load 148
-                              Store 147(Color) 149
-             152:    144(ptr) AccessChain 138(psout) 18
-             153:    6(float) Load 152
-                              Store 151(Depth) 153
+152(flattenTemp):    140(ptr) Variable Function
+             153:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 152(flattenTemp) 153
+             156:    145(ptr) AccessChain 152(flattenTemp) 142
+             157:    7(fvec4) Load 156
+                              Store 155(Color) 157
+             160:    147(ptr) AccessChain 152(flattenTemp) 23
+             161:    6(float) Load 160
+                              Store 159(Depth) 161
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+      141(psout):    140(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4)
+              27:     26(ptr) AccessChain 22 23 25
+              28:     16(int) Load 27
+              30:     26(ptr) AccessChain 22 23 29
+              31:     16(int) Load 30
+              33:     26(ptr) AccessChain 22 32
+              34:     16(int) Load 33
+              35:    7(fvec4) ImageFetch 15 28 Lod Offset 31 34
+              39:          36 Load 38(g_tTex1di4)
+              40:     26(ptr) AccessChain 22 23 25
+              41:     16(int) Load 40
+              42:     26(ptr) AccessChain 22 23 29
+              43:     16(int) Load 42
+              44:     26(ptr) AccessChain 22 32
+              45:     16(int) Load 44
+              46:   19(ivec4) ImageFetch 39 41 Lod Offset 43 45
+              50:          47 Load 49(g_tTex1du4)
+              51:     26(ptr) AccessChain 22 23 25
+              52:     16(int) Load 51
+              53:     26(ptr) AccessChain 22 23 29
+              54:     16(int) Load 53
+              55:     26(ptr) AccessChain 22 32
+              56:     16(int) Load 55
+              58:   57(ivec4) ImageFetch 50 52 Lod Offset 54 56
+              62:          59 Load 61(g_tTex2df4)
+              65:     64(ptr) AccessChain 22 63
+              66:   18(ivec3) Load 65
+              67:   17(ivec2) VectorShuffle 66 66 0 1
+              69:     26(ptr) AccessChain 22 63 68
+              70:     16(int) Load 69
+              73:     72(ptr) AccessChain 22 71
+              74:   17(ivec2) Load 73
+              75:    7(fvec4) ImageFetch 62 67 Lod Offset 70 74
+              79:          76 Load 78(g_tTex2di4)
+              80:     64(ptr) AccessChain 22 63
+              81:   18(ivec3) Load 80
+              82:   17(ivec2) VectorShuffle 81 81 0 1
+              83:     26(ptr) AccessChain 22 63 68
+              84:     16(int) Load 83
+              85:     72(ptr) AccessChain 22 71
+              86:   17(ivec2) Load 85
+              87:   19(ivec4) ImageFetch 79 82 Lod Offset 84 86
+              91:          88 Load 90(g_tTex2du4)
+              92:     64(ptr) AccessChain 22 63
+              93:   18(ivec3) Load 92
+              94:   17(ivec2) VectorShuffle 93 93 0 1
+              95:     26(ptr) AccessChain 22 63 68
+              96:     16(int) Load 95
+              97:     72(ptr) AccessChain 22 71
+              98:   17(ivec2) Load 97
+              99:   57(ivec4) ImageFetch 91 94 Lod Offset 96 98
+             103:         100 Load 102(g_tTex3df4)
+             106:    105(ptr) AccessChain 22 104
+             107:   19(ivec4) Load 106
+             108:   18(ivec3) VectorShuffle 107 107 0 1 2
+             110:     26(ptr) AccessChain 22 104 109
+             111:     16(int) Load 110
+             113:     64(ptr) AccessChain 22 112
+             114:   18(ivec3) Load 113
+             115:    7(fvec4) ImageFetch 103 108 Lod Offset 111 114
+             119:         116 Load 118(g_tTex3di4)
+             120:    105(ptr) AccessChain 22 104
+             121:   19(ivec4) Load 120
+             122:   18(ivec3) VectorShuffle 121 121 0 1 2
+             123:     26(ptr) AccessChain 22 104 109
+             124:     16(int) Load 123
+             125:     64(ptr) AccessChain 22 112
+             126:   18(ivec3) Load 125
+             127:   19(ivec4) ImageFetch 119 122 Lod Offset 124 126
+             131:         128 Load 130(g_tTex3du4)
+             132:    105(ptr) AccessChain 22 104
+             133:   19(ivec4) Load 132
+             134:   18(ivec3) VectorShuffle 133 133 0 1 2
+             135:     26(ptr) AccessChain 22 104 109
+             136:     16(int) Load 135
+             137:     64(ptr) AccessChain 22 112
+             138:   18(ivec3) Load 137
+             139:   57(ivec4) ImageFetch 131 134 Lod Offset 136 138
+             146:    145(ptr) AccessChain 141(psout) 142
+                              Store 146 144
+             148:    147(ptr) AccessChain 141(psout) 23
+                              Store 148 143
+             149:8(PS_OUTPUT) Load 141(psout)
+                              ReturnValue 149
+                              FunctionEnd

+ 298 - 275
3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetchOffset (temp 4-component vector of float)
@@ -166,24 +166,28 @@ gl_FragCoord origin is upper left
 0:66            1 (const int)
 0:66        Constant:
 0:66          1.000000
-0:68      Sequence
-0:68        Sequence
-0:68          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:68            Color: direct index for structure (temp 4-component vector of float)
-0:68              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:68              Constant:
-0:68                0 (const int)
-0:68          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:68            Depth: direct index for structure (temp float)
-0:68              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:68              Constant:
-0:68                1 (const int)
-0:68        Branch: Return
+0:68      Branch: Return with expression
+0:68        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -206,6 +210,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -215,7 +221,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:48    Function Parameters: 
 0:?     Sequence
 0:52      textureFetchOffset (temp 4-component vector of float)
@@ -379,24 +385,28 @@ gl_FragCoord origin is upper left
 0:66            1 (const int)
 0:66        Constant:
 0:66          1.000000
-0:68      Sequence
-0:68        Sequence
-0:68          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:68            Color: direct index for structure (temp 4-component vector of float)
-0:68              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:68              Constant:
-0:68                0 (const int)
-0:68          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:68            Depth: direct index for structure (temp float)
-0:68              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:68              Constant:
-0:68                1 (const int)
-0:68        Branch: Return
+0:68      Branch: Return with expression
+0:68        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48  Function Definition: main( (temp void)
+0:48    Function Parameters: 
+0:?     Sequence
+0:48      Sequence
+0:48        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:48          Color: direct index for structure (temp 4-component vector of float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              0 (const int)
+0:48        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:48          Depth: direct index for structure (temp float)
+0:48            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:48            Constant:
+0:48              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -419,11 +429,13 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 167
+// Id's are bound by 174
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -431,250 +443,261 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 111 115
+                              EntryPoint Fragment 4  "main" 119 123
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4a"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 35  "g_tTex1di4a"
-                              Name 47  "g_tTex1du4a"
-                              Name 60  "g_tTex2df4a"
-                              Name 77  "g_tTex2di4a"
-                              Name 89  "g_tTex2du4a"
-                              Name 99  "PS_OUTPUT"
-                              MemberName 99(PS_OUTPUT) 0  "Color"
-                              MemberName 99(PS_OUTPUT) 1  "Depth"
-                              Name 101  "psout"
-                              Name 111  "Color"
-                              Name 115  "Depth"
-                              Name 121  "g_sSamp"
-                              Name 124  "g_tTex1df4"
-                              Name 127  "g_tTex1di4"
-                              Name 130  "g_tTex1du4"
-                              Name 133  "g_tTex2df4"
-                              Name 136  "g_tTex2di4"
-                              Name 139  "g_tTex2du4"
-                              Name 142  "g_tTex3df4"
-                              Name 145  "g_tTex3di4"
-                              Name 148  "g_tTex3du4"
-                              Name 151  "g_tTexcdf4"
-                              Name 154  "g_tTexcdi4"
-                              Name 157  "g_tTexcdu4"
-                              Name 160  "g_tTexcdf4a"
-                              Name 163  "g_tTexcdi4a"
-                              Name 166  "g_tTexcdu4a"
-                              Decorate 9(g_tTex1df4a) DescriptorSet 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 35(g_tTex1di4a) DescriptorSet 0
-                              Decorate 47(g_tTex1du4a) DescriptorSet 0
-                              Decorate 60(g_tTex2df4a) DescriptorSet 0
-                              Decorate 77(g_tTex2di4a) DescriptorSet 0
-                              Decorate 89(g_tTex2du4a) DescriptorSet 0
-                              Decorate 111(Color) Location 0
-                              Decorate 115(Depth) BuiltIn FragDepth
-                              Decorate 121(g_sSamp) DescriptorSet 0
-                              Decorate 121(g_sSamp) Binding 0
-                              Decorate 124(g_tTex1df4) DescriptorSet 0
-                              Decorate 124(g_tTex1df4) Binding 0
-                              Decorate 127(g_tTex1di4) DescriptorSet 0
-                              Decorate 130(g_tTex1du4) DescriptorSet 0
-                              Decorate 133(g_tTex2df4) DescriptorSet 0
-                              Decorate 136(g_tTex2di4) DescriptorSet 0
-                              Decorate 139(g_tTex2du4) DescriptorSet 0
-                              Decorate 142(g_tTex3df4) DescriptorSet 0
-                              Decorate 145(g_tTex3di4) DescriptorSet 0
-                              Decorate 148(g_tTex3du4) DescriptorSet 0
-                              Decorate 151(g_tTexcdf4) DescriptorSet 0
-                              Decorate 154(g_tTexcdi4) DescriptorSet 0
-                              Decorate 157(g_tTexcdu4) DescriptorSet 0
-                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4a"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 39  "g_tTex1di4a"
+                              Name 51  "g_tTex1du4a"
+                              Name 64  "g_tTex2df4a"
+                              Name 81  "g_tTex2di4a"
+                              Name 93  "g_tTex2du4a"
+                              Name 104  "psout"
+                              Name 116  "flattenTemp"
+                              Name 119  "Color"
+                              Name 123  "Depth"
+                              Name 128  "g_sSamp"
+                              Name 131  "g_tTex1df4"
+                              Name 134  "g_tTex1di4"
+                              Name 137  "g_tTex1du4"
+                              Name 140  "g_tTex2df4"
+                              Name 143  "g_tTex2di4"
+                              Name 146  "g_tTex2du4"
+                              Name 149  "g_tTex3df4"
+                              Name 152  "g_tTex3di4"
+                              Name 155  "g_tTex3du4"
+                              Name 158  "g_tTexcdf4"
+                              Name 161  "g_tTexcdi4"
+                              Name 164  "g_tTexcdu4"
+                              Name 167  "g_tTexcdf4a"
+                              Name 170  "g_tTexcdi4a"
+                              Name 173  "g_tTexcdu4a"
+                              Decorate 14(g_tTex1df4a) DescriptorSet 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 39(g_tTex1di4a) DescriptorSet 0
+                              Decorate 51(g_tTex1du4a) DescriptorSet 0
+                              Decorate 64(g_tTex2df4a) DescriptorSet 0
+                              Decorate 81(g_tTex2di4a) DescriptorSet 0
+                              Decorate 93(g_tTex2du4a) DescriptorSet 0
+                              Decorate 119(Color) Location 0
+                              Decorate 123(Depth) BuiltIn FragDepth
+                              Decorate 128(g_sSamp) DescriptorSet 0
+                              Decorate 128(g_sSamp) Binding 0
+                              Decorate 131(g_tTex1df4) DescriptorSet 0
+                              Decorate 131(g_tTex1df4) Binding 0
+                              Decorate 134(g_tTex1di4) DescriptorSet 0
+                              Decorate 137(g_tTex1du4) DescriptorSet 0
+                              Decorate 140(g_tTex2df4) DescriptorSet 0
+                              Decorate 143(g_tTex2di4) DescriptorSet 0
+                              Decorate 146(g_tTex2du4) DescriptorSet 0
+                              Decorate 149(g_tTex3df4) DescriptorSet 0
+                              Decorate 152(g_tTex3di4) DescriptorSet 0
+                              Decorate 155(g_tTex3du4) DescriptorSet 0
+                              Decorate 158(g_tTexcdf4) DescriptorSet 0
+                              Decorate 161(g_tTexcdi4) DescriptorSet 0
+                              Decorate 164(g_tTexcdu4) DescriptorSet 0
+                              Decorate 167(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 170(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 173(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D array sampled format:Unknown
-               8:             TypePointer UniformConstant 7
-  9(g_tTex1df4a):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 2
-              19:             TypePointer Uniform 13(ivec3)
-              23:             TypeInt 32 0
-              24:     23(int) Constant 2
-              25:             TypePointer Uniform 11(int)
-              28:     11(int) Constant 4
-              31:             TypeVector 6(float) 4
-              33:             TypeImage 11(int) 1D array sampled format:Unknown
-              34:             TypePointer UniformConstant 33
- 35(g_tTex1di4a):     34(ptr) Variable UniformConstant
-              45:             TypeImage 23(int) 1D array sampled format:Unknown
-              46:             TypePointer UniformConstant 45
- 47(g_tTex1du4a):     46(ptr) Variable UniformConstant
-              56:             TypeVector 23(int) 4
-              58:             TypeImage 6(float) 2D array sampled format:Unknown
-              59:             TypePointer UniformConstant 58
- 60(g_tTex2df4a):     59(ptr) Variable UniformConstant
-              62:     11(int) Constant 3
-              63:             TypePointer Uniform 14(ivec4)
-              67:     23(int) Constant 3
-              70:     11(int) Constant 5
-              71:             TypePointer Uniform 12(ivec2)
-              75:             TypeImage 11(int) 2D array sampled format:Unknown
-              76:             TypePointer UniformConstant 75
- 77(g_tTex2di4a):     76(ptr) Variable UniformConstant
-              87:             TypeImage 23(int) 2D array sampled format:Unknown
-              88:             TypePointer UniformConstant 87
- 89(g_tTex2du4a):     88(ptr) Variable UniformConstant
-   99(PS_OUTPUT):             TypeStruct 31(fvec4) 6(float)
-             100:             TypePointer Function 99(PS_OUTPUT)
-             102:     11(int) Constant 0
-             103:    6(float) Constant 1065353216
-             104:   31(fvec4) ConstantComposite 103 103 103 103
-             105:             TypePointer Function 31(fvec4)
-             107:     11(int) Constant 1
-             108:             TypePointer Function 6(float)
-             110:             TypePointer Output 31(fvec4)
-      111(Color):    110(ptr) Variable Output
-             114:             TypePointer Output 6(float)
-      115(Depth):    114(ptr) Variable Output
-             119:             TypeSampler
-             120:             TypePointer UniformConstant 119
-    121(g_sSamp):    120(ptr) Variable UniformConstant
-             122:             TypeImage 6(float) 1D sampled format:Unknown
-             123:             TypePointer UniformConstant 122
- 124(g_tTex1df4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 11(int) 1D sampled format:Unknown
-             126:             TypePointer UniformConstant 125
- 127(g_tTex1di4):    126(ptr) Variable UniformConstant
-             128:             TypeImage 23(int) 1D sampled format:Unknown
-             129:             TypePointer UniformConstant 128
- 130(g_tTex1du4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 6(float) 2D sampled format:Unknown
-             132:             TypePointer UniformConstant 131
- 133(g_tTex2df4):    132(ptr) Variable UniformConstant
-             134:             TypeImage 11(int) 2D sampled format:Unknown
-             135:             TypePointer UniformConstant 134
- 136(g_tTex2di4):    135(ptr) Variable UniformConstant
-             137:             TypeImage 23(int) 2D sampled format:Unknown
-             138:             TypePointer UniformConstant 137
- 139(g_tTex2du4):    138(ptr) Variable UniformConstant
-             140:             TypeImage 6(float) 3D sampled format:Unknown
-             141:             TypePointer UniformConstant 140
- 142(g_tTex3df4):    141(ptr) Variable UniformConstant
-             143:             TypeImage 11(int) 3D sampled format:Unknown
-             144:             TypePointer UniformConstant 143
- 145(g_tTex3di4):    144(ptr) Variable UniformConstant
-             146:             TypeImage 23(int) 3D sampled format:Unknown
-             147:             TypePointer UniformConstant 146
- 148(g_tTex3du4):    147(ptr) Variable UniformConstant
-             149:             TypeImage 6(float) Cube sampled format:Unknown
-             150:             TypePointer UniformConstant 149
- 151(g_tTexcdf4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 11(int) Cube sampled format:Unknown
-             153:             TypePointer UniformConstant 152
- 154(g_tTexcdi4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 23(int) Cube sampled format:Unknown
-             156:             TypePointer UniformConstant 155
- 157(g_tTexcdu4):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) Cube array sampled format:Unknown
-             159:             TypePointer UniformConstant 158
-160(g_tTexcdf4a):    159(ptr) Variable UniformConstant
-             161:             TypeImage 11(int) Cube array sampled format:Unknown
-             162:             TypePointer UniformConstant 161
-163(g_tTexcdi4a):    162(ptr) Variable UniformConstant
-             164:             TypeImage 23(int) Cube array sampled format:Unknown
-             165:             TypePointer UniformConstant 164
-166(g_tTexcdu4a):    165(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D array sampled format:Unknown
+              13:             TypePointer UniformConstant 12
+ 14(g_tTex1df4a):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 2
+              24:             TypePointer Uniform 18(ivec3)
+              28:             TypeInt 32 0
+              29:     28(int) Constant 2
+              30:             TypePointer Uniform 16(int)
+              33:     16(int) Constant 4
+              37:             TypeImage 16(int) 1D array sampled format:Unknown
+              38:             TypePointer UniformConstant 37
+ 39(g_tTex1di4a):     38(ptr) Variable UniformConstant
+              49:             TypeImage 28(int) 1D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+ 51(g_tTex1du4a):     50(ptr) Variable UniformConstant
+              60:             TypeVector 28(int) 4
+              62:             TypeImage 6(float) 2D array sampled format:Unknown
+              63:             TypePointer UniformConstant 62
+ 64(g_tTex2df4a):     63(ptr) Variable UniformConstant
+              66:     16(int) Constant 3
+              67:             TypePointer Uniform 19(ivec4)
+              71:     28(int) Constant 3
+              74:     16(int) Constant 5
+              75:             TypePointer Uniform 17(ivec2)
+              79:             TypeImage 16(int) 2D array sampled format:Unknown
+              80:             TypePointer UniformConstant 79
+ 81(g_tTex2di4a):     80(ptr) Variable UniformConstant
+              91:             TypeImage 28(int) 2D array sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+ 93(g_tTex2du4a):     92(ptr) Variable UniformConstant
+             103:             TypePointer Function 8(PS_OUTPUT)
+             105:     16(int) Constant 0
+             106:    6(float) Constant 1065353216
+             107:    7(fvec4) ConstantComposite 106 106 106 106
+             108:             TypePointer Function 7(fvec4)
+             110:     16(int) Constant 1
+             111:             TypePointer Function 6(float)
+             118:             TypePointer Output 7(fvec4)
+      119(Color):    118(ptr) Variable Output
+             122:             TypePointer Output 6(float)
+      123(Depth):    122(ptr) Variable Output
+             126:             TypeSampler
+             127:             TypePointer UniformConstant 126
+    128(g_sSamp):    127(ptr) Variable UniformConstant
+             129:             TypeImage 6(float) 1D sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+ 131(g_tTex1df4):    130(ptr) Variable UniformConstant
+             132:             TypeImage 16(int) 1D sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTex1di4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 28(int) 1D sampled format:Unknown
+             136:             TypePointer UniformConstant 135
+ 137(g_tTex1du4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 6(float) 2D sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTex2df4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 16(int) 2D sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTex2di4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 28(int) 2D sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTex2du4):    145(ptr) Variable UniformConstant
+             147:             TypeImage 6(float) 3D sampled format:Unknown
+             148:             TypePointer UniformConstant 147
+ 149(g_tTex3df4):    148(ptr) Variable UniformConstant
+             150:             TypeImage 16(int) 3D sampled format:Unknown
+             151:             TypePointer UniformConstant 150
+ 152(g_tTex3di4):    151(ptr) Variable UniformConstant
+             153:             TypeImage 28(int) 3D sampled format:Unknown
+             154:             TypePointer UniformConstant 153
+ 155(g_tTex3du4):    154(ptr) Variable UniformConstant
+             156:             TypeImage 6(float) Cube sampled format:Unknown
+             157:             TypePointer UniformConstant 156
+ 158(g_tTexcdf4):    157(ptr) Variable UniformConstant
+             159:             TypeImage 16(int) Cube sampled format:Unknown
+             160:             TypePointer UniformConstant 159
+ 161(g_tTexcdi4):    160(ptr) Variable UniformConstant
+             162:             TypeImage 28(int) Cube sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTexcdu4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 6(float) Cube array sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+167(g_tTexcdf4a):    166(ptr) Variable UniformConstant
+             168:             TypeImage 16(int) Cube array sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+170(g_tTexcdi4a):    169(ptr) Variable UniformConstant
+             171:             TypeImage 28(int) Cube array sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+173(g_tTexcdu4a):    172(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-      101(psout):    100(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4a)
-              20:     19(ptr) AccessChain 17 18
-              21:   13(ivec3) Load 20
-              22:   12(ivec2) VectorShuffle 21 21 0 1
-              26:     25(ptr) AccessChain 17 18 24
-              27:     11(int) Load 26
-              29:     25(ptr) AccessChain 17 28
-              30:     11(int) Load 29
-              32:   31(fvec4) ImageFetch 10 22 Lod Offset 27 30
-              36:          33 Load 35(g_tTex1di4a)
-              37:     19(ptr) AccessChain 17 18
-              38:   13(ivec3) Load 37
-              39:   12(ivec2) VectorShuffle 38 38 0 1
-              40:     25(ptr) AccessChain 17 18 24
-              41:     11(int) Load 40
-              42:     25(ptr) AccessChain 17 28
-              43:     11(int) Load 42
-              44:   14(ivec4) ImageFetch 36 39 Lod Offset 41 43
-              48:          45 Load 47(g_tTex1du4a)
-              49:     19(ptr) AccessChain 17 18
-              50:   13(ivec3) Load 49
-              51:   12(ivec2) VectorShuffle 50 50 0 1
-              52:     25(ptr) AccessChain 17 18 24
-              53:     11(int) Load 52
-              54:     25(ptr) AccessChain 17 28
-              55:     11(int) Load 54
-              57:   56(ivec4) ImageFetch 48 51 Lod Offset 53 55
-              61:          58 Load 60(g_tTex2df4a)
-              64:     63(ptr) AccessChain 17 62
-              65:   14(ivec4) Load 64
-              66:   13(ivec3) VectorShuffle 65 65 0 1 2
-              68:     25(ptr) AccessChain 17 62 67
-              69:     11(int) Load 68
-              72:     71(ptr) AccessChain 17 70
-              73:   12(ivec2) Load 72
-              74:   31(fvec4) ImageFetch 61 66 Lod Offset 69 73
-              78:          75 Load 77(g_tTex2di4a)
-              79:     63(ptr) AccessChain 17 62
-              80:   14(ivec4) Load 79
-              81:   13(ivec3) VectorShuffle 80 80 0 1 2
-              82:     25(ptr) AccessChain 17 62 67
-              83:     11(int) Load 82
-              84:     71(ptr) AccessChain 17 70
-              85:   12(ivec2) Load 84
-              86:   14(ivec4) ImageFetch 78 81 Lod Offset 83 85
-              90:          87 Load 89(g_tTex2du4a)
-              91:     63(ptr) AccessChain 17 62
-              92:   14(ivec4) Load 91
-              93:   13(ivec3) VectorShuffle 92 92 0 1 2
-              94:     25(ptr) AccessChain 17 62 67
-              95:     11(int) Load 94
-              96:     71(ptr) AccessChain 17 70
-              97:   12(ivec2) Load 96
-              98:   56(ivec4) ImageFetch 90 93 Lod Offset 95 97
-             106:    105(ptr) AccessChain 101(psout) 102
-                              Store 106 104
-             109:    108(ptr) AccessChain 101(psout) 107
-                              Store 109 103
-             112:    105(ptr) AccessChain 101(psout) 102
-             113:   31(fvec4) Load 112
-                              Store 111(Color) 113
-             116:    108(ptr) AccessChain 101(psout) 107
-             117:    6(float) Load 116
-                              Store 115(Depth) 117
+116(flattenTemp):    103(ptr) Variable Function
+             117:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 116(flattenTemp) 117
+             120:    108(ptr) AccessChain 116(flattenTemp) 105
+             121:    7(fvec4) Load 120
+                              Store 119(Color) 121
+             124:    111(ptr) AccessChain 116(flattenTemp) 110
+             125:    6(float) Load 124
+                              Store 123(Depth) 125
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+      104(psout):    103(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4a)
+              25:     24(ptr) AccessChain 22 23
+              26:   18(ivec3) Load 25
+              27:   17(ivec2) VectorShuffle 26 26 0 1
+              31:     30(ptr) AccessChain 22 23 29
+              32:     16(int) Load 31
+              34:     30(ptr) AccessChain 22 33
+              35:     16(int) Load 34
+              36:    7(fvec4) ImageFetch 15 27 Lod Offset 32 35
+              40:          37 Load 39(g_tTex1di4a)
+              41:     24(ptr) AccessChain 22 23
+              42:   18(ivec3) Load 41
+              43:   17(ivec2) VectorShuffle 42 42 0 1
+              44:     30(ptr) AccessChain 22 23 29
+              45:     16(int) Load 44
+              46:     30(ptr) AccessChain 22 33
+              47:     16(int) Load 46
+              48:   19(ivec4) ImageFetch 40 43 Lod Offset 45 47
+              52:          49 Load 51(g_tTex1du4a)
+              53:     24(ptr) AccessChain 22 23
+              54:   18(ivec3) Load 53
+              55:   17(ivec2) VectorShuffle 54 54 0 1
+              56:     30(ptr) AccessChain 22 23 29
+              57:     16(int) Load 56
+              58:     30(ptr) AccessChain 22 33
+              59:     16(int) Load 58
+              61:   60(ivec4) ImageFetch 52 55 Lod Offset 57 59
+              65:          62 Load 64(g_tTex2df4a)
+              68:     67(ptr) AccessChain 22 66
+              69:   19(ivec4) Load 68
+              70:   18(ivec3) VectorShuffle 69 69 0 1 2
+              72:     30(ptr) AccessChain 22 66 71
+              73:     16(int) Load 72
+              76:     75(ptr) AccessChain 22 74
+              77:   17(ivec2) Load 76
+              78:    7(fvec4) ImageFetch 65 70 Lod Offset 73 77
+              82:          79 Load 81(g_tTex2di4a)
+              83:     67(ptr) AccessChain 22 66
+              84:   19(ivec4) Load 83
+              85:   18(ivec3) VectorShuffle 84 84 0 1 2
+              86:     30(ptr) AccessChain 22 66 71
+              87:     16(int) Load 86
+              88:     75(ptr) AccessChain 22 74
+              89:   17(ivec2) Load 88
+              90:   19(ivec4) ImageFetch 82 85 Lod Offset 87 89
+              94:          91 Load 93(g_tTex2du4a)
+              95:     67(ptr) AccessChain 22 66
+              96:   19(ivec4) Load 95
+              97:   18(ivec3) VectorShuffle 96 96 0 1 2
+              98:     30(ptr) AccessChain 22 66 71
+              99:     16(int) Load 98
+             100:     75(ptr) AccessChain 22 74
+             101:   17(ivec2) Load 100
+             102:   60(ivec4) ImageFetch 94 97 Lod Offset 99 101
+             109:    108(ptr) AccessChain 104(psout) 105
+                              Store 109 107
+             112:    111(ptr) AccessChain 104(psout) 110
+                              Store 112 106
+             113:8(PS_OUTPUT) Load 104(psout)
+                              ReturnValue 113
+                              FunctionEnd

+ 114 - 101
3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.rwbuffer.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:22  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:22  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:22    Function Parameters: 
 0:?     Sequence
 0:25      imageLoad (temp 4-component vector of float)
@@ -33,20 +33,23 @@ gl_FragCoord origin is upper left
 0:29          1.000000
 0:29          1.000000
 0:29          1.000000
-0:31      Sequence
-0:31        Sequence
-0:31          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:31            Color: direct index for structure (temp 4-component vector of float)
-0:31              'psout' (temp structure{temp 4-component vector of float Color})
-0:31              Constant:
-0:31                0 (const int)
-0:31        Branch: Return
+0:31      Branch: Return with expression
+0:31        'psout' (temp structure{temp 4-component vector of float Color})
+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:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:22          Color: direct index for structure (temp 4-component vector of float)
+0:22            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:22            Constant:
+0:22              0 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -56,7 +59,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:22  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:22  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:22    Function Parameters: 
 0:?     Sequence
 0:25      imageLoad (temp 4-component vector of float)
@@ -87,114 +90,124 @@ gl_FragCoord origin is upper left
 0:29          1.000000
 0:29          1.000000
 0:29          1.000000
-0:31      Sequence
-0:31        Sequence
-0:31          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:31            Color: direct index for structure (temp 4-component vector of float)
-0:31              'psout' (temp structure{temp 4-component vector of float Color})
-0:31              Constant:
-0:31                0 (const int)
-0:31        Branch: Return
+0:31      Branch: Return with expression
+0:31        'psout' (temp structure{temp 4-component vector of float Color})
+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:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:22          Color: direct index for structure (temp 4-component vector of float)
+0:22            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:22            Constant:
+0:22              0 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 52
+// Id's are bound by 57
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 48
+                              EntryPoint Fragment 4  "main" 54
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tBuffF"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 27  "g_tBuffU"
-                              Name 35  "g_tBuffI"
-                              Name 40  "PS_OUTPUT"
-                              MemberName 40(PS_OUTPUT) 0  "Color"
-                              Name 42  "psout"
-                              Name 48  "Color"
-                              Decorate 9(g_tBuffF) DescriptorSet 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 27(g_tBuffU) DescriptorSet 0
-                              Decorate 35(g_tBuffI) DescriptorSet 0
-                              Decorate 48(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 14  "g_tBuffF"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 31  "g_tBuffU"
+                              Name 39  "g_tBuffI"
+                              Name 45  "psout"
+                              Name 54  "Color"
+                              Decorate 14(g_tBuffF) DescriptorSet 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 31(g_tBuffU) DescriptorSet 0
+                              Decorate 39(g_tBuffI) DescriptorSet 0
+                              Decorate 54(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) Buffer nonsampled format:Rgba32f
-               8:             TypePointer UniformConstant 7
-     9(g_tBuffF):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 0
-              19:             TypePointer Uniform 11(int)
-              22:             TypeVector 6(float) 4
-              24:             TypeInt 32 0
-              25:             TypeImage 24(int) Buffer nonsampled format:Rgba32ui
-              26:             TypePointer UniformConstant 25
-    27(g_tBuffU):     26(ptr) Variable UniformConstant
-              31:             TypeVector 24(int) 4
-              33:             TypeImage 11(int) Buffer nonsampled format:Rgba32i
-              34:             TypePointer UniformConstant 33
-    35(g_tBuffI):     34(ptr) Variable UniformConstant
-   40(PS_OUTPUT):             TypeStruct 22(fvec4)
-              41:             TypePointer Function 40(PS_OUTPUT)
-              43:    6(float) Constant 1065353216
-              44:   22(fvec4) ConstantComposite 43 43 43 43
-              45:             TypePointer Function 22(fvec4)
-              47:             TypePointer Output 22(fvec4)
-       48(Color):     47(ptr) Variable Output
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) Buffer nonsampled format:Rgba32f
+              13:             TypePointer UniformConstant 12
+    14(g_tBuffF):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 0
+              24:             TypePointer Uniform 16(int)
+              28:             TypeInt 32 0
+              29:             TypeImage 28(int) Buffer nonsampled format:Rgba32ui
+              30:             TypePointer UniformConstant 29
+    31(g_tBuffU):     30(ptr) Variable UniformConstant
+              35:             TypeVector 28(int) 4
+              37:             TypeImage 16(int) Buffer nonsampled format:Rgba32i
+              38:             TypePointer UniformConstant 37
+    39(g_tBuffI):     38(ptr) Variable UniformConstant
+              44:             TypePointer Function 8(PS_OUTPUT)
+              46:    6(float) Constant 1065353216
+              47:    7(fvec4) ConstantComposite 46 46 46 46
+              48:             TypePointer Function 7(fvec4)
+              53:             TypePointer Output 7(fvec4)
+       54(Color):     53(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-       42(psout):     41(ptr) Variable Function
-              10:           7 Load 9(g_tBuffF)
-              20:     19(ptr) AccessChain 17 18
-              21:     11(int) Load 20
-              23:   22(fvec4) ImageRead 10 21
-              28:          25 Load 27(g_tBuffU)
-              29:     19(ptr) AccessChain 17 18
-              30:     11(int) Load 29
-              32:   31(ivec4) ImageRead 28 30
-              36:          33 Load 35(g_tBuffI)
-              37:     19(ptr) AccessChain 17 18
-              38:     11(int) Load 37
-              39:   14(ivec4) ImageRead 36 38
-              46:     45(ptr) AccessChain 42(psout) 18
-                              Store 46 44
-              49:     45(ptr) AccessChain 42(psout) 18
-              50:   22(fvec4) Load 49
-                              Store 48(Color) 50
+              55:8(PS_OUTPUT) FunctionCall 10(@main()
+              56:    7(fvec4) CompositeExtract 55 0
+                              Store 54(Color) 56
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       45(psout):     44(ptr) Variable Function
+              15:          12 Load 14(g_tBuffF)
+              25:     24(ptr) AccessChain 22 23
+              26:     16(int) Load 25
+              27:    7(fvec4) ImageRead 15 26
+              32:          29 Load 31(g_tBuffU)
+              33:     24(ptr) AccessChain 22 23
+              34:     16(int) Load 33
+              36:   35(ivec4) ImageRead 32 34
+              40:          37 Load 39(g_tBuffI)
+              41:     24(ptr) AccessChain 22 23
+              42:     16(int) Load 41
+              43:   19(ivec4) ImageRead 40 42
+              49:     48(ptr) AccessChain 45(psout) 23
+                              Store 49 47
+              50:8(PS_OUTPUT) Load 45(psout)
+                              ReturnValue 50
+                              FunctionEnd

+ 231 - 208
3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.rwtexture.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:40    Function Parameters: 
 0:?     Sequence
 0:44      imageLoad (temp 4-component vector of float)
@@ -58,24 +58,28 @@ gl_FragCoord origin is upper left
 0:54            1 (const int)
 0:54        Constant:
 0:54          1.000000
-0:56      Sequence
-0:56        Sequence
-0:56          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:56            Color: direct index for structure (temp 4-component vector of float)
-0:56              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:56              Constant:
-0:56                0 (const int)
-0:56          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:56            Depth: direct index for structure (temp float)
-0:56              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:56              Constant:
-0:56                1 (const int)
-0:56        Branch: Return
+0:56      Branch: Return with expression
+0:56        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: main( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:40          Color: direct index for structure (temp 4-component vector of float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:40          Depth: direct index for structure (temp float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -92,6 +96,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -101,7 +107,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:40    Function Parameters: 
 0:?     Sequence
 0:44      imageLoad (temp 4-component vector of float)
@@ -157,24 +163,28 @@ gl_FragCoord origin is upper left
 0:54            1 (const int)
 0:54        Constant:
 0:54          1.000000
-0:56      Sequence
-0:56        Sequence
-0:56          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:56            Color: direct index for structure (temp 4-component vector of float)
-0:56              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:56              Constant:
-0:56                0 (const int)
-0:56          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:56            Depth: direct index for structure (temp float)
-0:56              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:56              Constant:
-0:56                1 (const int)
-0:56        Branch: Return
+0:56      Branch: Return with expression
+0:56        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: main( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:40          Color: direct index for structure (temp 4-component vector of float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:40          Depth: direct index for structure (temp float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -191,193 +201,206 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 112
+// Id's are bound by 119
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 74 78
+                              EntryPoint Fragment 4  "main" 82 86
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4a"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 26  "g_tTex1di4a"
-                              Name 34  "g_tTex1du4a"
-                              Name 42  "g_tTex2df4a"
-                              Name 51  "g_tTex2di4a"
-                              Name 58  "g_tTex2du4a"
-                              Name 63  "PS_OUTPUT"
-                              MemberName 63(PS_OUTPUT) 0  "Color"
-                              MemberName 63(PS_OUTPUT) 1  "Depth"
-                              Name 65  "psout"
-                              Name 74  "Color"
-                              Name 78  "Depth"
-                              Name 84  "g_sSamp"
-                              Name 87  "g_tTex1df4"
-                              Name 90  "g_tTex1di4"
-                              Name 93  "g_tTex1du4"
-                              Name 96  "g_tTex2df4"
-                              Name 99  "g_tTex2di4"
-                              Name 102  "g_tTex2du4"
-                              Name 105  "g_tTex3df4"
-                              Name 108  "g_tTex3di4"
-                              Name 111  "g_tTex3du4"
-                              Decorate 9(g_tTex1df4a) DescriptorSet 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 26(g_tTex1di4a) DescriptorSet 0
-                              Decorate 34(g_tTex1du4a) DescriptorSet 0
-                              Decorate 42(g_tTex2df4a) DescriptorSet 0
-                              Decorate 51(g_tTex2di4a) DescriptorSet 0
-                              Decorate 58(g_tTex2du4a) DescriptorSet 0
-                              Decorate 74(Color) Location 0
-                              Decorate 78(Depth) BuiltIn FragDepth
-                              Decorate 84(g_sSamp) DescriptorSet 0
-                              Decorate 84(g_sSamp) Binding 0
-                              Decorate 87(g_tTex1df4) DescriptorSet 0
-                              Decorate 87(g_tTex1df4) Binding 0
-                              Decorate 90(g_tTex1di4) DescriptorSet 0
-                              Decorate 93(g_tTex1du4) DescriptorSet 0
-                              Decorate 96(g_tTex2df4) DescriptorSet 0
-                              Decorate 99(g_tTex2di4) DescriptorSet 0
-                              Decorate 102(g_tTex2du4) DescriptorSet 0
-                              Decorate 105(g_tTex3df4) DescriptorSet 0
-                              Decorate 108(g_tTex3di4) DescriptorSet 0
-                              Decorate 111(g_tTex3du4) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4a"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 30  "g_tTex1di4a"
+                              Name 38  "g_tTex1du4a"
+                              Name 46  "g_tTex2df4a"
+                              Name 55  "g_tTex2di4a"
+                              Name 62  "g_tTex2du4a"
+                              Name 68  "psout"
+                              Name 79  "flattenTemp"
+                              Name 82  "Color"
+                              Name 86  "Depth"
+                              Name 91  "g_sSamp"
+                              Name 94  "g_tTex1df4"
+                              Name 97  "g_tTex1di4"
+                              Name 100  "g_tTex1du4"
+                              Name 103  "g_tTex2df4"
+                              Name 106  "g_tTex2di4"
+                              Name 109  "g_tTex2du4"
+                              Name 112  "g_tTex3df4"
+                              Name 115  "g_tTex3di4"
+                              Name 118  "g_tTex3du4"
+                              Decorate 14(g_tTex1df4a) DescriptorSet 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 30(g_tTex1di4a) DescriptorSet 0
+                              Decorate 38(g_tTex1du4a) DescriptorSet 0
+                              Decorate 46(g_tTex2df4a) DescriptorSet 0
+                              Decorate 55(g_tTex2di4a) DescriptorSet 0
+                              Decorate 62(g_tTex2du4a) DescriptorSet 0
+                              Decorate 82(Color) Location 0
+                              Decorate 86(Depth) BuiltIn FragDepth
+                              Decorate 91(g_sSamp) DescriptorSet 0
+                              Decorate 91(g_sSamp) Binding 0
+                              Decorate 94(g_tTex1df4) DescriptorSet 0
+                              Decorate 94(g_tTex1df4) Binding 0
+                              Decorate 97(g_tTex1di4) DescriptorSet 0
+                              Decorate 100(g_tTex1du4) DescriptorSet 0
+                              Decorate 103(g_tTex2df4) DescriptorSet 0
+                              Decorate 106(g_tTex2di4) DescriptorSet 0
+                              Decorate 109(g_tTex2du4) DescriptorSet 0
+                              Decorate 112(g_tTex3df4) DescriptorSet 0
+                              Decorate 115(g_tTex3di4) DescriptorSet 0
+                              Decorate 118(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D array nonsampled format:Rgba32f
-               8:             TypePointer UniformConstant 7
-  9(g_tTex1df4a):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 1
-              19:             TypePointer Uniform 12(ivec2)
-              22:             TypeVector 6(float) 4
-              24:             TypeImage 11(int) 1D array nonsampled format:Rgba32i
-              25:             TypePointer UniformConstant 24
- 26(g_tTex1di4a):     25(ptr) Variable UniformConstant
-              31:             TypeInt 32 0
-              32:             TypeImage 31(int) 1D array nonsampled format:Rgba32ui
-              33:             TypePointer UniformConstant 32
- 34(g_tTex1du4a):     33(ptr) Variable UniformConstant
-              38:             TypeVector 31(int) 4
-              40:             TypeImage 6(float) 2D array nonsampled format:Rgba32f
-              41:             TypePointer UniformConstant 40
- 42(g_tTex2df4a):     41(ptr) Variable UniformConstant
-              44:     11(int) Constant 2
-              45:             TypePointer Uniform 13(ivec3)
-              49:             TypeImage 11(int) 2D array nonsampled format:Rgba32i
-              50:             TypePointer UniformConstant 49
- 51(g_tTex2di4a):     50(ptr) Variable UniformConstant
-              56:             TypeImage 31(int) 2D array nonsampled format:Rgba32ui
-              57:             TypePointer UniformConstant 56
- 58(g_tTex2du4a):     57(ptr) Variable UniformConstant
-   63(PS_OUTPUT):             TypeStruct 22(fvec4) 6(float)
-              64:             TypePointer Function 63(PS_OUTPUT)
-              66:     11(int) Constant 0
-              67:    6(float) Constant 1065353216
-              68:   22(fvec4) ConstantComposite 67 67 67 67
-              69:             TypePointer Function 22(fvec4)
-              71:             TypePointer Function 6(float)
-              73:             TypePointer Output 22(fvec4)
-       74(Color):     73(ptr) Variable Output
-              77:             TypePointer Output 6(float)
-       78(Depth):     77(ptr) Variable Output
-              82:             TypeSampler
-              83:             TypePointer UniformConstant 82
-     84(g_sSamp):     83(ptr) Variable UniformConstant
-              85:             TypeImage 6(float) 1D nonsampled format:Rgba32f
-              86:             TypePointer UniformConstant 85
-  87(g_tTex1df4):     86(ptr) Variable UniformConstant
-              88:             TypeImage 11(int) 1D nonsampled format:Rgba32i
-              89:             TypePointer UniformConstant 88
-  90(g_tTex1di4):     89(ptr) Variable UniformConstant
-              91:             TypeImage 31(int) 1D nonsampled format:Rgba32ui
-              92:             TypePointer UniformConstant 91
-  93(g_tTex1du4):     92(ptr) Variable UniformConstant
-              94:             TypeImage 6(float) 2D nonsampled format:Rgba32f
-              95:             TypePointer UniformConstant 94
-  96(g_tTex2df4):     95(ptr) Variable UniformConstant
-              97:             TypeImage 11(int) 2D nonsampled format:Rgba32i
-              98:             TypePointer UniformConstant 97
-  99(g_tTex2di4):     98(ptr) Variable UniformConstant
-             100:             TypeImage 31(int) 2D nonsampled format:Rgba32ui
-             101:             TypePointer UniformConstant 100
- 102(g_tTex2du4):    101(ptr) Variable UniformConstant
-             103:             TypeImage 6(float) 3D nonsampled format:Rgba32f
-             104:             TypePointer UniformConstant 103
- 105(g_tTex3df4):    104(ptr) Variable UniformConstant
-             106:             TypeImage 11(int) 3D nonsampled format:Rgba32i
-             107:             TypePointer UniformConstant 106
- 108(g_tTex3di4):    107(ptr) Variable UniformConstant
-             109:             TypeImage 31(int) 3D nonsampled format:Rgba32ui
-             110:             TypePointer UniformConstant 109
- 111(g_tTex3du4):    110(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D array nonsampled format:Rgba32f
+              13:             TypePointer UniformConstant 12
+ 14(g_tTex1df4a):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 1
+              24:             TypePointer Uniform 17(ivec2)
+              28:             TypeImage 16(int) 1D array nonsampled format:Rgba32i
+              29:             TypePointer UniformConstant 28
+ 30(g_tTex1di4a):     29(ptr) Variable UniformConstant
+              35:             TypeInt 32 0
+              36:             TypeImage 35(int) 1D array nonsampled format:Rgba32ui
+              37:             TypePointer UniformConstant 36
+ 38(g_tTex1du4a):     37(ptr) Variable UniformConstant
+              42:             TypeVector 35(int) 4
+              44:             TypeImage 6(float) 2D array nonsampled format:Rgba32f
+              45:             TypePointer UniformConstant 44
+ 46(g_tTex2df4a):     45(ptr) Variable UniformConstant
+              48:     16(int) Constant 2
+              49:             TypePointer Uniform 18(ivec3)
+              53:             TypeImage 16(int) 2D array nonsampled format:Rgba32i
+              54:             TypePointer UniformConstant 53
+ 55(g_tTex2di4a):     54(ptr) Variable UniformConstant
+              60:             TypeImage 35(int) 2D array nonsampled format:Rgba32ui
+              61:             TypePointer UniformConstant 60
+ 62(g_tTex2du4a):     61(ptr) Variable UniformConstant
+              67:             TypePointer Function 8(PS_OUTPUT)
+              69:     16(int) Constant 0
+              70:    6(float) Constant 1065353216
+              71:    7(fvec4) ConstantComposite 70 70 70 70
+              72:             TypePointer Function 7(fvec4)
+              74:             TypePointer Function 6(float)
+              81:             TypePointer Output 7(fvec4)
+       82(Color):     81(ptr) Variable Output
+              85:             TypePointer Output 6(float)
+       86(Depth):     85(ptr) Variable Output
+              89:             TypeSampler
+              90:             TypePointer UniformConstant 89
+     91(g_sSamp):     90(ptr) Variable UniformConstant
+              92:             TypeImage 6(float) 1D nonsampled format:Rgba32f
+              93:             TypePointer UniformConstant 92
+  94(g_tTex1df4):     93(ptr) Variable UniformConstant
+              95:             TypeImage 16(int) 1D nonsampled format:Rgba32i
+              96:             TypePointer UniformConstant 95
+  97(g_tTex1di4):     96(ptr) Variable UniformConstant
+              98:             TypeImage 35(int) 1D nonsampled format:Rgba32ui
+              99:             TypePointer UniformConstant 98
+ 100(g_tTex1du4):     99(ptr) Variable UniformConstant
+             101:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+             102:             TypePointer UniformConstant 101
+ 103(g_tTex2df4):    102(ptr) Variable UniformConstant
+             104:             TypeImage 16(int) 2D nonsampled format:Rgba32i
+             105:             TypePointer UniformConstant 104
+ 106(g_tTex2di4):    105(ptr) Variable UniformConstant
+             107:             TypeImage 35(int) 2D nonsampled format:Rgba32ui
+             108:             TypePointer UniformConstant 107
+ 109(g_tTex2du4):    108(ptr) Variable UniformConstant
+             110:             TypeImage 6(float) 3D nonsampled format:Rgba32f
+             111:             TypePointer UniformConstant 110
+ 112(g_tTex3df4):    111(ptr) Variable UniformConstant
+             113:             TypeImage 16(int) 3D nonsampled format:Rgba32i
+             114:             TypePointer UniformConstant 113
+ 115(g_tTex3di4):    114(ptr) Variable UniformConstant
+             116:             TypeImage 35(int) 3D nonsampled format:Rgba32ui
+             117:             TypePointer UniformConstant 116
+ 118(g_tTex3du4):    117(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-       65(psout):     64(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4a)
-              20:     19(ptr) AccessChain 17 18
-              21:   12(ivec2) Load 20
-              23:   22(fvec4) ImageRead 10 21
-              27:          24 Load 26(g_tTex1di4a)
-              28:     19(ptr) AccessChain 17 18
-              29:   12(ivec2) Load 28
-              30:   14(ivec4) ImageRead 27 29
-              35:          32 Load 34(g_tTex1du4a)
-              36:     19(ptr) AccessChain 17 18
-              37:   12(ivec2) Load 36
-              39:   38(ivec4) ImageRead 35 37
-              43:          40 Load 42(g_tTex2df4a)
-              46:     45(ptr) AccessChain 17 44
-              47:   13(ivec3) Load 46
-              48:   22(fvec4) ImageRead 43 47
-              52:          49 Load 51(g_tTex2di4a)
-              53:     45(ptr) AccessChain 17 44
-              54:   13(ivec3) Load 53
-              55:   14(ivec4) ImageRead 52 54
-              59:          56 Load 58(g_tTex2du4a)
-              60:     45(ptr) AccessChain 17 44
-              61:   13(ivec3) Load 60
-              62:   38(ivec4) ImageRead 59 61
-              70:     69(ptr) AccessChain 65(psout) 66
-                              Store 70 68
-              72:     71(ptr) AccessChain 65(psout) 18
-                              Store 72 67
-              75:     69(ptr) AccessChain 65(psout) 66
-              76:   22(fvec4) Load 75
-                              Store 74(Color) 76
-              79:     71(ptr) AccessChain 65(psout) 18
-              80:    6(float) Load 79
-                              Store 78(Depth) 80
+ 79(flattenTemp):     67(ptr) Variable Function
+              80:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 79(flattenTemp) 80
+              83:     72(ptr) AccessChain 79(flattenTemp) 69
+              84:    7(fvec4) Load 83
+                              Store 82(Color) 84
+              87:     74(ptr) AccessChain 79(flattenTemp) 23
+              88:    6(float) Load 87
+                              Store 86(Depth) 88
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       68(psout):     67(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4a)
+              25:     24(ptr) AccessChain 22 23
+              26:   17(ivec2) Load 25
+              27:    7(fvec4) ImageRead 15 26
+              31:          28 Load 30(g_tTex1di4a)
+              32:     24(ptr) AccessChain 22 23
+              33:   17(ivec2) Load 32
+              34:   19(ivec4) ImageRead 31 33
+              39:          36 Load 38(g_tTex1du4a)
+              40:     24(ptr) AccessChain 22 23
+              41:   17(ivec2) Load 40
+              43:   42(ivec4) ImageRead 39 41
+              47:          44 Load 46(g_tTex2df4a)
+              50:     49(ptr) AccessChain 22 48
+              51:   18(ivec3) Load 50
+              52:    7(fvec4) ImageRead 47 51
+              56:          53 Load 55(g_tTex2di4a)
+              57:     49(ptr) AccessChain 22 48
+              58:   18(ivec3) Load 57
+              59:   19(ivec4) ImageRead 56 58
+              63:          60 Load 62(g_tTex2du4a)
+              64:     49(ptr) AccessChain 22 48
+              65:   18(ivec3) Load 64
+              66:   42(ivec4) ImageRead 63 65
+              73:     72(ptr) AccessChain 68(psout) 69
+                              Store 73 71
+              75:     74(ptr) AccessChain 68(psout) 23
+                              Store 75 70
+              76:8(PS_OUTPUT) Load 68(psout)
+                              ReturnValue 76
+                              FunctionEnd

+ 244 - 221
3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out

@@ -2,7 +2,7 @@ hlsl.load.rwtexture.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:40    Function Parameters: 
 0:?     Sequence
 0:44      imageLoad (temp 4-component vector of float)
@@ -76,24 +76,28 @@ gl_FragCoord origin is upper left
 0:59            1 (const int)
 0:59        Constant:
 0:59          1.000000
-0:61      Sequence
-0:61        Sequence
-0:61          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:61            Color: direct index for structure (temp 4-component vector of float)
-0:61              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:61              Constant:
-0:61                0 (const int)
-0:61          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:61            Depth: direct index for structure (temp float)
-0:61              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:61              Constant:
-0:61                1 (const int)
-0:61        Branch: Return
+0:61      Branch: Return with expression
+0:61        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: main( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:40          Color: direct index for structure (temp 4-component vector of float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:40          Depth: direct index for structure (temp float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -110,6 +114,8 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
@@ -119,7 +125,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:40    Function Parameters: 
 0:?     Sequence
 0:44      imageLoad (temp 4-component vector of float)
@@ -193,24 +199,28 @@ gl_FragCoord origin is upper left
 0:59            1 (const int)
 0:59        Constant:
 0:59          1.000000
-0:61      Sequence
-0:61        Sequence
-0:61          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:61            Color: direct index for structure (temp 4-component vector of float)
-0:61              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:61              Constant:
-0:61                0 (const int)
-0:61          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:61            Depth: direct index for structure (temp float)
-0:61              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:61              Constant:
-0:61                1 (const int)
-0:61        Branch: Return
+0:61      Branch: Return with expression
+0:61        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40  Function Definition: main( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:40          Color: direct index for structure (temp 4-component vector of float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:40          Depth: direct index for structure (temp float)
+0:40            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:40            Constant:
+0:40              1 (const int)
 0:?   Linker Objects
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -227,206 +237,219 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 125
+// Id's are bound by 132
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 96 100
+                              EntryPoint Fragment 4  "main" 104 108
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "g_tTex1df4"
-                              Name 15  "$Global"
-                              MemberName 15($Global) 0  "c1"
-                              MemberName 15($Global) 1  "c2"
-                              MemberName 15($Global) 2  "c3"
-                              MemberName 15($Global) 3  "c4"
-                              MemberName 15($Global) 4  "o1"
-                              MemberName 15($Global) 5  "o2"
-                              MemberName 15($Global) 6  "o3"
-                              MemberName 15($Global) 7  "o4"
-                              Name 17  ""
-                              Name 26  "g_tTex1di4"
-                              Name 34  "g_tTex1du4"
-                              Name 42  "g_tTex2df4"
-                              Name 51  "g_tTex2di4"
-                              Name 58  "g_tTex2du4"
-                              Name 65  "g_tTex3df4"
-                              Name 74  "g_tTex3di4"
-                              Name 81  "g_tTex3du4"
-                              Name 86  "PS_OUTPUT"
-                              MemberName 86(PS_OUTPUT) 0  "Color"
-                              MemberName 86(PS_OUTPUT) 1  "Depth"
-                              Name 88  "psout"
-                              Name 96  "Color"
-                              Name 100  "Depth"
-                              Name 106  "g_sSamp"
-                              Name 109  "g_tTex1df4a"
-                              Name 112  "g_tTex1di4a"
-                              Name 115  "g_tTex1du4a"
-                              Name 118  "g_tTex2df4a"
-                              Name 121  "g_tTex2di4a"
-                              Name 124  "g_tTex2du4a"
-                              Decorate 9(g_tTex1df4) DescriptorSet 0
-                              Decorate 9(g_tTex1df4) Binding 0
-                              MemberDecorate 15($Global) 0 Offset 0
-                              MemberDecorate 15($Global) 1 Offset 8
-                              MemberDecorate 15($Global) 2 Offset 16
-                              MemberDecorate 15($Global) 3 Offset 32
-                              MemberDecorate 15($Global) 4 Offset 48
-                              MemberDecorate 15($Global) 5 Offset 56
-                              MemberDecorate 15($Global) 6 Offset 64
-                              MemberDecorate 15($Global) 7 Offset 80
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
-                              Decorate 26(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1du4) DescriptorSet 0
-                              Decorate 42(g_tTex2df4) DescriptorSet 0
-                              Decorate 51(g_tTex2di4) DescriptorSet 0
-                              Decorate 58(g_tTex2du4) DescriptorSet 0
-                              Decorate 65(g_tTex3df4) DescriptorSet 0
-                              Decorate 74(g_tTex3di4) DescriptorSet 0
-                              Decorate 81(g_tTex3du4) DescriptorSet 0
-                              Decorate 96(Color) Location 0
-                              Decorate 100(Depth) BuiltIn FragDepth
-                              Decorate 106(g_sSamp) DescriptorSet 0
-                              Decorate 106(g_sSamp) Binding 0
-                              Decorate 109(g_tTex1df4a) DescriptorSet 0
-                              Decorate 112(g_tTex1di4a) DescriptorSet 0
-                              Decorate 115(g_tTex1du4a) DescriptorSet 0
-                              Decorate 118(g_tTex2df4a) DescriptorSet 0
-                              Decorate 121(g_tTex2di4a) DescriptorSet 0
-                              Decorate 124(g_tTex2du4a) DescriptorSet 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "g_tTex1df4"
+                              Name 20  "$Global"
+                              MemberName 20($Global) 0  "c1"
+                              MemberName 20($Global) 1  "c2"
+                              MemberName 20($Global) 2  "c3"
+                              MemberName 20($Global) 3  "c4"
+                              MemberName 20($Global) 4  "o1"
+                              MemberName 20($Global) 5  "o2"
+                              MemberName 20($Global) 6  "o3"
+                              MemberName 20($Global) 7  "o4"
+                              Name 22  ""
+                              Name 30  "g_tTex1di4"
+                              Name 38  "g_tTex1du4"
+                              Name 46  "g_tTex2df4"
+                              Name 55  "g_tTex2di4"
+                              Name 62  "g_tTex2du4"
+                              Name 69  "g_tTex3df4"
+                              Name 78  "g_tTex3di4"
+                              Name 85  "g_tTex3du4"
+                              Name 91  "psout"
+                              Name 101  "flattenTemp"
+                              Name 104  "Color"
+                              Name 108  "Depth"
+                              Name 113  "g_sSamp"
+                              Name 116  "g_tTex1df4a"
+                              Name 119  "g_tTex1di4a"
+                              Name 122  "g_tTex1du4a"
+                              Name 125  "g_tTex2df4a"
+                              Name 128  "g_tTex2di4a"
+                              Name 131  "g_tTex2du4a"
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 14(g_tTex1df4) Binding 0
+                              MemberDecorate 20($Global) 0 Offset 0
+                              MemberDecorate 20($Global) 1 Offset 8
+                              MemberDecorate 20($Global) 2 Offset 16
+                              MemberDecorate 20($Global) 3 Offset 32
+                              MemberDecorate 20($Global) 4 Offset 48
+                              MemberDecorate 20($Global) 5 Offset 56
+                              MemberDecorate 20($Global) 6 Offset 64
+                              MemberDecorate 20($Global) 7 Offset 80
+                              Decorate 20($Global) Block
+                              Decorate 22 DescriptorSet 0
+                              Decorate 30(g_tTex1di4) DescriptorSet 0
+                              Decorate 38(g_tTex1du4) DescriptorSet 0
+                              Decorate 46(g_tTex2df4) DescriptorSet 0
+                              Decorate 55(g_tTex2di4) DescriptorSet 0
+                              Decorate 62(g_tTex2du4) DescriptorSet 0
+                              Decorate 69(g_tTex3df4) DescriptorSet 0
+                              Decorate 78(g_tTex3di4) DescriptorSet 0
+                              Decorate 85(g_tTex3du4) DescriptorSet 0
+                              Decorate 104(Color) Location 0
+                              Decorate 108(Depth) BuiltIn FragDepth
+                              Decorate 113(g_sSamp) DescriptorSet 0
+                              Decorate 113(g_sSamp) Binding 0
+                              Decorate 116(g_tTex1df4a) DescriptorSet 0
+                              Decorate 119(g_tTex1di4a) DescriptorSet 0
+                              Decorate 122(g_tTex1du4a) DescriptorSet 0
+                              Decorate 125(g_tTex2df4a) DescriptorSet 0
+                              Decorate 128(g_tTex2di4a) DescriptorSet 0
+                              Decorate 131(g_tTex2du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeImage 6(float) 1D nonsampled format:Rgba32f
-               8:             TypePointer UniformConstant 7
-   9(g_tTex1df4):      8(ptr) Variable UniformConstant
-              11:             TypeInt 32 1
-              12:             TypeVector 11(int) 2
-              13:             TypeVector 11(int) 3
-              14:             TypeVector 11(int) 4
-     15($Global):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
-              16:             TypePointer Uniform 15($Global)
-              17:     16(ptr) Variable Uniform
-              18:     11(int) Constant 0
-              19:             TypePointer Uniform 11(int)
-              22:             TypeVector 6(float) 4
-              24:             TypeImage 11(int) 1D nonsampled format:Rgba32i
-              25:             TypePointer UniformConstant 24
-  26(g_tTex1di4):     25(ptr) Variable UniformConstant
-              31:             TypeInt 32 0
-              32:             TypeImage 31(int) 1D nonsampled format:Rgba32ui
-              33:             TypePointer UniformConstant 32
-  34(g_tTex1du4):     33(ptr) Variable UniformConstant
-              38:             TypeVector 31(int) 4
-              40:             TypeImage 6(float) 2D nonsampled format:Rgba32f
-              41:             TypePointer UniformConstant 40
-  42(g_tTex2df4):     41(ptr) Variable UniformConstant
-              44:     11(int) Constant 1
-              45:             TypePointer Uniform 12(ivec2)
-              49:             TypeImage 11(int) 2D nonsampled format:Rgba32i
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2di4):     50(ptr) Variable UniformConstant
-              56:             TypeImage 31(int) 2D nonsampled format:Rgba32ui
-              57:             TypePointer UniformConstant 56
-  58(g_tTex2du4):     57(ptr) Variable UniformConstant
-              63:             TypeImage 6(float) 3D nonsampled format:Rgba32f
-              64:             TypePointer UniformConstant 63
-  65(g_tTex3df4):     64(ptr) Variable UniformConstant
-              67:     11(int) Constant 2
-              68:             TypePointer Uniform 13(ivec3)
-              72:             TypeImage 11(int) 3D nonsampled format:Rgba32i
-              73:             TypePointer UniformConstant 72
-  74(g_tTex3di4):     73(ptr) Variable UniformConstant
-              79:             TypeImage 31(int) 3D nonsampled format:Rgba32ui
-              80:             TypePointer UniformConstant 79
-  81(g_tTex3du4):     80(ptr) Variable UniformConstant
-   86(PS_OUTPUT):             TypeStruct 22(fvec4) 6(float)
-              87:             TypePointer Function 86(PS_OUTPUT)
-              89:    6(float) Constant 1065353216
-              90:   22(fvec4) ConstantComposite 89 89 89 89
-              91:             TypePointer Function 22(fvec4)
-              93:             TypePointer Function 6(float)
-              95:             TypePointer Output 22(fvec4)
-       96(Color):     95(ptr) Variable Output
-              99:             TypePointer Output 6(float)
-      100(Depth):     99(ptr) Variable Output
-             104:             TypeSampler
-             105:             TypePointer UniformConstant 104
-    106(g_sSamp):    105(ptr) Variable UniformConstant
-             107:             TypeImage 6(float) 1D array nonsampled format:Rgba32f
-             108:             TypePointer UniformConstant 107
-109(g_tTex1df4a):    108(ptr) Variable UniformConstant
-             110:             TypeImage 11(int) 1D array nonsampled format:Rgba32i
-             111:             TypePointer UniformConstant 110
-112(g_tTex1di4a):    111(ptr) Variable UniformConstant
-             113:             TypeImage 31(int) 1D array nonsampled format:Rgba32ui
-             114:             TypePointer UniformConstant 113
-115(g_tTex1du4a):    114(ptr) Variable UniformConstant
-             116:             TypeImage 6(float) 2D array nonsampled format:Rgba32f
-             117:             TypePointer UniformConstant 116
-118(g_tTex2df4a):    117(ptr) Variable UniformConstant
-             119:             TypeImage 11(int) 2D array nonsampled format:Rgba32i
-             120:             TypePointer UniformConstant 119
-121(g_tTex2di4a):    120(ptr) Variable UniformConstant
-             122:             TypeImage 31(int) 2D array nonsampled format:Rgba32ui
-             123:             TypePointer UniformConstant 122
-124(g_tTex2du4a):    123(ptr) Variable UniformConstant
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeImage 6(float) 1D nonsampled format:Rgba32f
+              13:             TypePointer UniformConstant 12
+  14(g_tTex1df4):     13(ptr) Variable UniformConstant
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 2
+              18:             TypeVector 16(int) 3
+              19:             TypeVector 16(int) 4
+     20($Global):             TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4)
+              21:             TypePointer Uniform 20($Global)
+              22:     21(ptr) Variable Uniform
+              23:     16(int) Constant 0
+              24:             TypePointer Uniform 16(int)
+              28:             TypeImage 16(int) 1D nonsampled format:Rgba32i
+              29:             TypePointer UniformConstant 28
+  30(g_tTex1di4):     29(ptr) Variable UniformConstant
+              35:             TypeInt 32 0
+              36:             TypeImage 35(int) 1D nonsampled format:Rgba32ui
+              37:             TypePointer UniformConstant 36
+  38(g_tTex1du4):     37(ptr) Variable UniformConstant
+              42:             TypeVector 35(int) 4
+              44:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              45:             TypePointer UniformConstant 44
+  46(g_tTex2df4):     45(ptr) Variable UniformConstant
+              48:     16(int) Constant 1
+              49:             TypePointer Uniform 17(ivec2)
+              53:             TypeImage 16(int) 2D nonsampled format:Rgba32i
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2di4):     54(ptr) Variable UniformConstant
+              60:             TypeImage 35(int) 2D nonsampled format:Rgba32ui
+              61:             TypePointer UniformConstant 60
+  62(g_tTex2du4):     61(ptr) Variable UniformConstant
+              67:             TypeImage 6(float) 3D nonsampled format:Rgba32f
+              68:             TypePointer UniformConstant 67
+  69(g_tTex3df4):     68(ptr) Variable UniformConstant
+              71:     16(int) Constant 2
+              72:             TypePointer Uniform 18(ivec3)
+              76:             TypeImage 16(int) 3D nonsampled format:Rgba32i
+              77:             TypePointer UniformConstant 76
+  78(g_tTex3di4):     77(ptr) Variable UniformConstant
+              83:             TypeImage 35(int) 3D nonsampled format:Rgba32ui
+              84:             TypePointer UniformConstant 83
+  85(g_tTex3du4):     84(ptr) Variable UniformConstant
+              90:             TypePointer Function 8(PS_OUTPUT)
+              92:    6(float) Constant 1065353216
+              93:    7(fvec4) ConstantComposite 92 92 92 92
+              94:             TypePointer Function 7(fvec4)
+              96:             TypePointer Function 6(float)
+             103:             TypePointer Output 7(fvec4)
+      104(Color):    103(ptr) Variable Output
+             107:             TypePointer Output 6(float)
+      108(Depth):    107(ptr) Variable Output
+             111:             TypeSampler
+             112:             TypePointer UniformConstant 111
+    113(g_sSamp):    112(ptr) Variable UniformConstant
+             114:             TypeImage 6(float) 1D array nonsampled format:Rgba32f
+             115:             TypePointer UniformConstant 114
+116(g_tTex1df4a):    115(ptr) Variable UniformConstant
+             117:             TypeImage 16(int) 1D array nonsampled format:Rgba32i
+             118:             TypePointer UniformConstant 117
+119(g_tTex1di4a):    118(ptr) Variable UniformConstant
+             120:             TypeImage 35(int) 1D array nonsampled format:Rgba32ui
+             121:             TypePointer UniformConstant 120
+122(g_tTex1du4a):    121(ptr) Variable UniformConstant
+             123:             TypeImage 6(float) 2D array nonsampled format:Rgba32f
+             124:             TypePointer UniformConstant 123
+125(g_tTex2df4a):    124(ptr) Variable UniformConstant
+             126:             TypeImage 16(int) 2D array nonsampled format:Rgba32i
+             127:             TypePointer UniformConstant 126
+128(g_tTex2di4a):    127(ptr) Variable UniformConstant
+             129:             TypeImage 35(int) 2D array nonsampled format:Rgba32ui
+             130:             TypePointer UniformConstant 129
+131(g_tTex2du4a):    130(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-       88(psout):     87(ptr) Variable Function
-              10:           7 Load 9(g_tTex1df4)
-              20:     19(ptr) AccessChain 17 18
-              21:     11(int) Load 20
-              23:   22(fvec4) ImageRead 10 21
-              27:          24 Load 26(g_tTex1di4)
-              28:     19(ptr) AccessChain 17 18
-              29:     11(int) Load 28
-              30:   14(ivec4) ImageRead 27 29
-              35:          32 Load 34(g_tTex1du4)
-              36:     19(ptr) AccessChain 17 18
-              37:     11(int) Load 36
-              39:   38(ivec4) ImageRead 35 37
-              43:          40 Load 42(g_tTex2df4)
-              46:     45(ptr) AccessChain 17 44
-              47:   12(ivec2) Load 46
-              48:   22(fvec4) ImageRead 43 47
-              52:          49 Load 51(g_tTex2di4)
-              53:     45(ptr) AccessChain 17 44
-              54:   12(ivec2) Load 53
-              55:   14(ivec4) ImageRead 52 54
-              59:          56 Load 58(g_tTex2du4)
-              60:     45(ptr) AccessChain 17 44
-              61:   12(ivec2) Load 60
-              62:   38(ivec4) ImageRead 59 61
-              66:          63 Load 65(g_tTex3df4)
-              69:     68(ptr) AccessChain 17 67
-              70:   13(ivec3) Load 69
-              71:   22(fvec4) ImageRead 66 70
-              75:          72 Load 74(g_tTex3di4)
-              76:     68(ptr) AccessChain 17 67
-              77:   13(ivec3) Load 76
-              78:   14(ivec4) ImageRead 75 77
-              82:          79 Load 81(g_tTex3du4)
-              83:     68(ptr) AccessChain 17 67
-              84:   13(ivec3) Load 83
-              85:   38(ivec4) ImageRead 82 84
-              92:     91(ptr) AccessChain 88(psout) 18
-                              Store 92 90
-              94:     93(ptr) AccessChain 88(psout) 44
-                              Store 94 89
-              97:     91(ptr) AccessChain 88(psout) 18
-              98:   22(fvec4) Load 97
-                              Store 96(Color) 98
-             101:     93(ptr) AccessChain 88(psout) 44
-             102:    6(float) Load 101
-                              Store 100(Depth) 102
+101(flattenTemp):     90(ptr) Variable Function
+             102:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 101(flattenTemp) 102
+             105:     94(ptr) AccessChain 101(flattenTemp) 23
+             106:    7(fvec4) Load 105
+                              Store 104(Color) 106
+             109:     96(ptr) AccessChain 101(flattenTemp) 48
+             110:    6(float) Load 109
+                              Store 108(Depth) 110
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       91(psout):     90(ptr) Variable Function
+              15:          12 Load 14(g_tTex1df4)
+              25:     24(ptr) AccessChain 22 23
+              26:     16(int) Load 25
+              27:    7(fvec4) ImageRead 15 26
+              31:          28 Load 30(g_tTex1di4)
+              32:     24(ptr) AccessChain 22 23
+              33:     16(int) Load 32
+              34:   19(ivec4) ImageRead 31 33
+              39:          36 Load 38(g_tTex1du4)
+              40:     24(ptr) AccessChain 22 23
+              41:     16(int) Load 40
+              43:   42(ivec4) ImageRead 39 41
+              47:          44 Load 46(g_tTex2df4)
+              50:     49(ptr) AccessChain 22 48
+              51:   17(ivec2) Load 50
+              52:    7(fvec4) ImageRead 47 51
+              56:          53 Load 55(g_tTex2di4)
+              57:     49(ptr) AccessChain 22 48
+              58:   17(ivec2) Load 57
+              59:   19(ivec4) ImageRead 56 58
+              63:          60 Load 62(g_tTex2du4)
+              64:     49(ptr) AccessChain 22 48
+              65:   17(ivec2) Load 64
+              66:   42(ivec4) ImageRead 63 65
+              70:          67 Load 69(g_tTex3df4)
+              73:     72(ptr) AccessChain 22 71
+              74:   18(ivec3) Load 73
+              75:    7(fvec4) ImageRead 70 74
+              79:          76 Load 78(g_tTex3di4)
+              80:     72(ptr) AccessChain 22 71
+              81:   18(ivec3) Load 80
+              82:   19(ivec4) ImageRead 79 81
+              86:          83 Load 85(g_tTex3du4)
+              87:     72(ptr) AccessChain 22 71
+              88:   18(ivec3) Load 87
+              89:   42(ivec4) ImageRead 86 88
+              95:     94(ptr) AccessChain 91(psout) 23
+                              Store 95 93
+              97:     96(ptr) AccessChain 91(psout) 48
+                              Store 97 92
+              98:8(PS_OUTPUT) Load 91(psout)
+                              ReturnValue 98
+                              FunctionEnd

+ 116 - 103
3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out

@@ -2,7 +2,7 @@ hlsl.logical.binary.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:12    Function Parameters: 
 0:?     Sequence
 0:13      Test condition and select (temp void)
@@ -45,15 +45,18 @@ gl_FragCoord origin is upper left
 0:17          1.000000
 0:17          1.000000
 0:17          1.000000
-0:18      Sequence
-0:18        Sequence
-0:18          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:18            Color: direct index for structure (temp 4-component vector of float)
-0:18              'psout' (temp structure{temp 4-component vector of float Color})
-0:18              Constant:
-0:18                0 (const int)
-0:18        Branch: Return
+0:18      Branch: Return with expression
+0:18        'psout' (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:12          Color: direct index for structure (temp 4-component vector of float)
+0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:12            Constant:
+0:12              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
@@ -65,7 +68,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:12    Function Parameters: 
 0:?     Sequence
 0:13      Test condition and select (temp void)
@@ -108,113 +111,123 @@ gl_FragCoord origin is upper left
 0:17          1.000000
 0:17          1.000000
 0:17          1.000000
-0:18      Sequence
-0:18        Sequence
-0:18          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:18            Color: direct index for structure (temp 4-component vector of float)
-0:18              'psout' (temp structure{temp 4-component vector of float Color})
-0:18              Constant:
-0:18                0 (const int)
-0:18        Branch: Return
+0:18      Branch: Return with expression
+0:18        'psout' (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:12          Color: direct index for structure (temp 4-component vector of float)
+0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:12            Constant:
+0:12              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 57
+// Id's are bound by 62
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 53
+                              EntryPoint Fragment 4  "main" 59
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 11  "$Global"
-                              MemberName 11($Global) 0  "ival"
-                              MemberName 11($Global) 1  "ival4"
-                              MemberName 11($Global) 2  "fval"
-                              MemberName 11($Global) 3  "fval4"
-                              Name 13  ""
-                              Name 45  "PS_OUTPUT"
-                              MemberName 45(PS_OUTPUT) 0  "Color"
-                              Name 47  "psout"
-                              Name 53  "Color"
-                              MemberDecorate 11($Global) 0 Offset 0
-                              MemberDecorate 11($Global) 1 Offset 16
-                              MemberDecorate 11($Global) 2 Offset 32
-                              MemberDecorate 11($Global) 3 Offset 48
-                              Decorate 11($Global) Block
-                              Decorate 13 DescriptorSet 0
-                              Decorate 53(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 15  "$Global"
+                              MemberName 15($Global) 0  "ival"
+                              MemberName 15($Global) 1  "ival4"
+                              MemberName 15($Global) 2  "fval"
+                              MemberName 15($Global) 3  "fval4"
+                              Name 17  ""
+                              Name 50  "psout"
+                              Name 59  "Color"
+                              MemberDecorate 15($Global) 0 Offset 0
+                              MemberDecorate 15($Global) 1 Offset 16
+                              MemberDecorate 15($Global) 2 Offset 32
+                              MemberDecorate 15($Global) 3 Offset 48
+                              Decorate 15($Global) Block
+                              Decorate 17 DescriptorSet 0
+                              Decorate 59(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeBool
-               7:             TypeInt 32 1
-               8:             TypeVector 7(int) 4
-               9:             TypeFloat 32
-              10:             TypeVector 9(float) 4
-     11($Global):             TypeStruct 7(int) 8(ivec4) 9(float) 10(fvec4)
-              12:             TypePointer Uniform 11($Global)
-              13:     12(ptr) Variable Uniform
-              14:      7(int) Constant 0
-              15:             TypePointer Uniform 7(int)
-              18:             TypeInt 32 0
-              19:     18(int) Constant 0
-              23:      7(int) Constant 2
-              24:             TypePointer Uniform 9(float)
-   45(PS_OUTPUT):             TypeStruct 10(fvec4)
-              46:             TypePointer Function 45(PS_OUTPUT)
-              48:    9(float) Constant 1065353216
-              49:   10(fvec4) ConstantComposite 48 48 48 48
-              50:             TypePointer Function 10(fvec4)
-              52:             TypePointer Output 10(fvec4)
-       53(Color):     52(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeBool
+              13:             TypeInt 32 1
+              14:             TypeVector 13(int) 4
+     15($Global):             TypeStruct 13(int) 14(ivec4) 6(float) 7(fvec4)
+              16:             TypePointer Uniform 15($Global)
+              17:     16(ptr) Variable Uniform
+              18:     13(int) Constant 0
+              19:             TypePointer Uniform 13(int)
+              22:             TypeInt 32 0
+              23:     22(int) Constant 0
+              27:     13(int) Constant 2
+              28:             TypePointer Uniform 6(float)
+              49:             TypePointer Function 8(PS_OUTPUT)
+              51:    6(float) Constant 1065353216
+              52:    7(fvec4) ConstantComposite 51 51 51 51
+              53:             TypePointer Function 7(fvec4)
+              58:             TypePointer Output 7(fvec4)
+       59(Color):     58(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-       47(psout):     46(ptr) Variable Function
-              16:     15(ptr) AccessChain 13 14
-              17:      7(int) Load 16
-              20:     6(bool) INotEqual 17 19
-                              SelectionMerge 22 None
-                              BranchConditional 20 21 22
-              21:               Label
-              25:     24(ptr)   AccessChain 13 23
-              26:    9(float)   Load 25
-              27:      7(int)   ConvertFToS 26
-              28:     6(bool)   INotEqual 27 19
-                                Branch 22
-              22:             Label
-              29:     6(bool) Phi 20 5 28 21
-                              SelectionMerge 31 None
-                              BranchConditional 29 30 31
-              30:               Label
-                                Branch 31
-              31:             Label
-              32:     15(ptr) AccessChain 13 14
-              33:      7(int) Load 32
-              34:     6(bool) INotEqual 33 19
-              35:     6(bool) LogicalNot 34
-                              SelectionMerge 37 None
-                              BranchConditional 35 36 37
-              36:               Label
-              38:     24(ptr)   AccessChain 13 23
-              39:    9(float)   Load 38
-              40:      7(int)   ConvertFToS 39
-              41:     6(bool)   INotEqual 40 19
-                                Branch 37
-              37:             Label
-              42:     6(bool) Phi 34 31 41 36
-                              SelectionMerge 44 None
-                              BranchConditional 42 43 44
-              43:               Label
-                                Branch 44
-              44:             Label
-              51:     50(ptr) AccessChain 47(psout) 14
-                              Store 51 49
-              54:     50(ptr) AccessChain 47(psout) 14
-              55:   10(fvec4) Load 54
-                              Store 53(Color) 55
+              60:8(PS_OUTPUT) FunctionCall 10(@main()
+              61:    7(fvec4) CompositeExtract 60 0
+                              Store 59(Color) 61
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       50(psout):     49(ptr) Variable Function
+              20:     19(ptr) AccessChain 17 18
+              21:     13(int) Load 20
+              24:    12(bool) INotEqual 21 23
+                              SelectionMerge 26 None
+                              BranchConditional 24 25 26
+              25:               Label
+              29:     28(ptr)   AccessChain 17 27
+              30:    6(float)   Load 29
+              31:     13(int)   ConvertFToS 30
+              32:    12(bool)   INotEqual 31 23
+                                Branch 26
+              26:             Label
+              33:    12(bool) Phi 24 11 32 25
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 35
+              34:               Label
+                                Branch 35
+              35:             Label
+              36:     19(ptr) AccessChain 17 18
+              37:     13(int) Load 36
+              38:    12(bool) INotEqual 37 23
+              39:    12(bool) LogicalNot 38
+                              SelectionMerge 41 None
+                              BranchConditional 39 40 41
+              40:               Label
+              42:     28(ptr)   AccessChain 17 27
+              43:    6(float)   Load 42
+              44:     13(int)   ConvertFToS 43
+              45:    12(bool)   INotEqual 44 23
+                                Branch 41
+              41:             Label
+              46:    12(bool) Phi 38 35 45 40
+                              SelectionMerge 48 None
+                              BranchConditional 46 47 48
+              47:               Label
+                                Branch 48
+              48:             Label
+              54:     53(ptr) AccessChain 50(psout) 18
+                              Store 54 52
+              55:8(PS_OUTPUT) Load 50(psout)
+                              ReturnValue 55
+                              FunctionEnd

+ 182 - 169
3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out

@@ -2,7 +2,7 @@ hlsl.logical.binary.vec.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
@@ -108,15 +108,18 @@ gl_FragCoord origin is upper left
 0:22                'r11' (temp 4-component vector of bool)
 0:22              'r20' (temp 4-component vector of bool)
 0:22            'r21' (temp 4-component vector of bool)
-0:23      Sequence
-0:23        Sequence
-0:23          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:23            Color: direct index for structure (temp 4-component vector of float)
-0:23              'psout' (temp structure{temp 4-component vector of float Color})
-0:23              Constant:
-0:23                0 (const int)
-0:23        Branch: Return
+0:23      Branch: Return with expression
+0:23        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
@@ -128,7 +131,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
@@ -234,179 +237,189 @@ gl_FragCoord origin is upper left
 0:22                'r11' (temp 4-component vector of bool)
 0:22              'r20' (temp 4-component vector of bool)
 0:22            'r21' (temp 4-component vector of bool)
-0:23      Sequence
-0:23        Sequence
-0:23          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:23            Color: direct index for structure (temp 4-component vector of float)
-0:23              'psout' (temp structure{temp 4-component vector of float Color})
-0:23              Constant:
-0:23                0 (const int)
-0:23        Branch: Return
+0:23      Branch: Return with expression
+0:23        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 115
+// Id's are bound by 120
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 111
+                              EntryPoint Fragment 4  "main" 117
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "r00"
-                              Name 12  "$Global"
-                              MemberName 12($Global) 0  "b4a"
-                              MemberName 12($Global) 1  "b4b"
-                              MemberName 12($Global) 2  "b1a"
-                              MemberName 12($Global) 3  "b1b"
-                              Name 14  ""
-                              Name 24  "r01"
-                              Name 33  "r02"
-                              Name 41  "r10"
-                              Name 52  "r11"
-                              Name 61  "r20"
-                              Name 73  "r21"
-                              Name 87  "PS_OUTPUT"
-                              MemberName 87(PS_OUTPUT) 0  "Color"
-                              Name 89  "psout"
-                              Name 111  "Color"
-                              MemberDecorate 12($Global) 0 Offset 0
-                              MemberDecorate 12($Global) 1 Offset 16
-                              MemberDecorate 12($Global) 2 Offset 32
-                              MemberDecorate 12($Global) 3 Offset 36
-                              Decorate 12($Global) Block
-                              Decorate 14 DescriptorSet 0
-                              Decorate 111(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 15  "r00"
+                              Name 18  "$Global"
+                              MemberName 18($Global) 0  "b4a"
+                              MemberName 18($Global) 1  "b4b"
+                              MemberName 18($Global) 2  "b1a"
+                              MemberName 18($Global) 3  "b1b"
+                              Name 20  ""
+                              Name 30  "r01"
+                              Name 39  "r02"
+                              Name 47  "r10"
+                              Name 58  "r11"
+                              Name 67  "r20"
+                              Name 79  "r21"
+                              Name 92  "psout"
+                              Name 117  "Color"
+                              MemberDecorate 18($Global) 0 Offset 0
+                              MemberDecorate 18($Global) 1 Offset 16
+                              MemberDecorate 18($Global) 2 Offset 32
+                              MemberDecorate 18($Global) 3 Offset 36
+                              Decorate 18($Global) Block
+                              Decorate 20 DescriptorSet 0
+                              Decorate 117(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeBool
-               7:             TypeVector 6(bool) 4
-               8:             TypePointer Function 7(bvec4)
-              10:             TypeInt 32 0
-              11:             TypeVector 10(int) 4
-     12($Global):             TypeStruct 11(ivec4) 11(ivec4) 10(int) 10(int)
-              13:             TypePointer Uniform 12($Global)
-              14:     13(ptr) Variable Uniform
-              15:             TypeInt 32 1
-              16:     15(int) Constant 0
-              17:             TypePointer Uniform 11(ivec4)
-              20:     10(int) Constant 0
-              21:   11(ivec4) ConstantComposite 20 20 20 20
-              28:     15(int) Constant 1
-              42:     15(int) Constant 2
-              43:             TypePointer Uniform 10(int)
-              67:     15(int) Constant 3
-              85:             TypeFloat 32
-              86:             TypeVector 85(float) 4
-   87(PS_OUTPUT):             TypeStruct 86(fvec4)
-              88:             TypePointer Function 87(PS_OUTPUT)
-             103:   85(float) Constant 0
-             104:   85(float) Constant 1065353216
-             105:   86(fvec4) ConstantComposite 103 103 103 103
-             106:   86(fvec4) ConstantComposite 104 104 104 104
-             108:             TypePointer Function 86(fvec4)
-             110:             TypePointer Output 86(fvec4)
-      111(Color):    110(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeBool
+              13:             TypeVector 12(bool) 4
+              14:             TypePointer Function 13(bvec4)
+              16:             TypeInt 32 0
+              17:             TypeVector 16(int) 4
+     18($Global):             TypeStruct 17(ivec4) 17(ivec4) 16(int) 16(int)
+              19:             TypePointer Uniform 18($Global)
+              20:     19(ptr) Variable Uniform
+              21:             TypeInt 32 1
+              22:     21(int) Constant 0
+              23:             TypePointer Uniform 17(ivec4)
+              26:     16(int) Constant 0
+              27:   17(ivec4) ConstantComposite 26 26 26 26
+              34:     21(int) Constant 1
+              48:     21(int) Constant 2
+              49:             TypePointer Uniform 16(int)
+              73:     21(int) Constant 3
+              91:             TypePointer Function 8(PS_OUTPUT)
+             106:    6(float) Constant 0
+             107:    6(float) Constant 1065353216
+             108:    7(fvec4) ConstantComposite 106 106 106 106
+             109:    7(fvec4) ConstantComposite 107 107 107 107
+             111:             TypePointer Function 7(fvec4)
+             116:             TypePointer Output 7(fvec4)
+      117(Color):    116(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-          9(r00):      8(ptr) Variable Function
-         24(r01):      8(ptr) Variable Function
-         33(r02):      8(ptr) Variable Function
-         41(r10):      8(ptr) Variable Function
-         52(r11):      8(ptr) Variable Function
-         61(r20):      8(ptr) Variable Function
-         73(r21):      8(ptr) Variable Function
-       89(psout):     88(ptr) Variable Function
-              18:     17(ptr) AccessChain 14 16
-              19:   11(ivec4) Load 18
-              22:    7(bvec4) INotEqual 19 21
-              23:    7(bvec4) LogicalNot 22
-                              Store 9(r00) 23
-              25:     17(ptr) AccessChain 14 16
-              26:   11(ivec4) Load 25
-              27:    7(bvec4) INotEqual 26 21
-              29:     17(ptr) AccessChain 14 28
-              30:   11(ivec4) Load 29
-              31:    7(bvec4) INotEqual 30 21
-              32:    7(bvec4) LogicalAnd 27 31
-                              Store 24(r01) 32
-              34:     17(ptr) AccessChain 14 16
-              35:   11(ivec4) Load 34
-              36:    7(bvec4) INotEqual 35 21
-              37:     17(ptr) AccessChain 14 28
-              38:   11(ivec4) Load 37
-              39:    7(bvec4) INotEqual 38 21
-              40:    7(bvec4) LogicalOr 36 39
-                              Store 33(r02) 40
-              44:     43(ptr) AccessChain 14 42
-              45:     10(int) Load 44
-              46:     6(bool) INotEqual 45 20
-              47:    7(bvec4) CompositeConstruct 46 46 46 46
-              48:     17(ptr) AccessChain 14 28
-              49:   11(ivec4) Load 48
-              50:    7(bvec4) INotEqual 49 21
-              51:    7(bvec4) LogicalAnd 47 50
-                              Store 41(r10) 51
-              53:     43(ptr) AccessChain 14 42
-              54:     10(int) Load 53
-              55:     6(bool) INotEqual 54 20
-              56:    7(bvec4) CompositeConstruct 55 55 55 55
-              57:     17(ptr) AccessChain 14 28
-              58:   11(ivec4) Load 57
-              59:    7(bvec4) INotEqual 58 21
-              60:    7(bvec4) LogicalOr 56 59
-                              Store 52(r11) 60
-              62:     17(ptr) AccessChain 14 16
-              63:   11(ivec4) Load 62
-              64:    7(bvec4) INotEqual 63 21
-                              SelectionMerge 66 None
-                              BranchConditional 64 65 66
-              65:               Label
-              68:     43(ptr)   AccessChain 14 67
-              69:     10(int)   Load 68
-              70:     6(bool)   INotEqual 69 20
-              71:    7(bvec4)   CompositeConstruct 70 70 70 70
-                                Branch 66
-              66:             Label
-              72:     6(bool) Phi 64 5 71 65
-                              Store 61(r20) 72
-              74:     17(ptr) AccessChain 14 16
-              75:   11(ivec4) Load 74
-              76:    7(bvec4) INotEqual 75 21
-              77:     6(bool) LogicalNot 76
-                              SelectionMerge 79 None
-                              BranchConditional 77 78 79
-              78:               Label
-              80:     43(ptr)   AccessChain 14 67
-              81:     10(int)   Load 80
-              82:     6(bool)   INotEqual 81 20
-              83:    7(bvec4)   CompositeConstruct 82 82 82 82
-                                Branch 79
-              79:             Label
-              84:     6(bool) Phi 76 66 83 78
-                              Store 73(r21) 84
-              90:    7(bvec4) Load 9(r00)
-              91:    7(bvec4) Load 24(r01)
-              92:    7(bvec4) LogicalOr 90 91
-              93:    7(bvec4) Load 33(r02)
-              94:    7(bvec4) LogicalOr 92 93
-              95:    7(bvec4) Load 41(r10)
-              96:    7(bvec4) LogicalOr 94 95
-              97:    7(bvec4) Load 52(r11)
-              98:    7(bvec4) LogicalOr 96 97
-              99:    7(bvec4) Load 61(r20)
-             100:    7(bvec4) LogicalOr 98 99
-             101:    7(bvec4) Load 73(r21)
-             102:    7(bvec4) LogicalOr 100 101
-             107:   86(fvec4) Select 102 106 105
-             109:    108(ptr) AccessChain 89(psout) 16
-                              Store 109 107
-             112:    108(ptr) AccessChain 89(psout) 16
-             113:   86(fvec4) Load 112
-                              Store 111(Color) 113
+             118:8(PS_OUTPUT) FunctionCall 10(@main()
+             119:    7(fvec4) CompositeExtract 118 0
+                              Store 117(Color) 119
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         15(r00):     14(ptr) Variable Function
+         30(r01):     14(ptr) Variable Function
+         39(r02):     14(ptr) Variable Function
+         47(r10):     14(ptr) Variable Function
+         58(r11):     14(ptr) Variable Function
+         67(r20):     14(ptr) Variable Function
+         79(r21):     14(ptr) Variable Function
+       92(psout):     91(ptr) Variable Function
+              24:     23(ptr) AccessChain 20 22
+              25:   17(ivec4) Load 24
+              28:   13(bvec4) INotEqual 25 27
+              29:   13(bvec4) LogicalNot 28
+                              Store 15(r00) 29
+              31:     23(ptr) AccessChain 20 22
+              32:   17(ivec4) Load 31
+              33:   13(bvec4) INotEqual 32 27
+              35:     23(ptr) AccessChain 20 34
+              36:   17(ivec4) Load 35
+              37:   13(bvec4) INotEqual 36 27
+              38:   13(bvec4) LogicalAnd 33 37
+                              Store 30(r01) 38
+              40:     23(ptr) AccessChain 20 22
+              41:   17(ivec4) Load 40
+              42:   13(bvec4) INotEqual 41 27
+              43:     23(ptr) AccessChain 20 34
+              44:   17(ivec4) Load 43
+              45:   13(bvec4) INotEqual 44 27
+              46:   13(bvec4) LogicalOr 42 45
+                              Store 39(r02) 46
+              50:     49(ptr) AccessChain 20 48
+              51:     16(int) Load 50
+              52:    12(bool) INotEqual 51 26
+              53:   13(bvec4) CompositeConstruct 52 52 52 52
+              54:     23(ptr) AccessChain 20 34
+              55:   17(ivec4) Load 54
+              56:   13(bvec4) INotEqual 55 27
+              57:   13(bvec4) LogicalAnd 53 56
+                              Store 47(r10) 57
+              59:     49(ptr) AccessChain 20 48
+              60:     16(int) Load 59
+              61:    12(bool) INotEqual 60 26
+              62:   13(bvec4) CompositeConstruct 61 61 61 61
+              63:     23(ptr) AccessChain 20 34
+              64:   17(ivec4) Load 63
+              65:   13(bvec4) INotEqual 64 27
+              66:   13(bvec4) LogicalOr 62 65
+                              Store 58(r11) 66
+              68:     23(ptr) AccessChain 20 22
+              69:   17(ivec4) Load 68
+              70:   13(bvec4) INotEqual 69 27
+                              SelectionMerge 72 None
+                              BranchConditional 70 71 72
+              71:               Label
+              74:     49(ptr)   AccessChain 20 73
+              75:     16(int)   Load 74
+              76:    12(bool)   INotEqual 75 26
+              77:   13(bvec4)   CompositeConstruct 76 76 76 76
+                                Branch 72
+              72:             Label
+              78:    12(bool) Phi 70 11 77 71
+                              Store 67(r20) 78
+              80:     23(ptr) AccessChain 20 22
+              81:   17(ivec4) Load 80
+              82:   13(bvec4) INotEqual 81 27
+              83:    12(bool) LogicalNot 82
+                              SelectionMerge 85 None
+                              BranchConditional 83 84 85
+              84:               Label
+              86:     49(ptr)   AccessChain 20 73
+              87:     16(int)   Load 86
+              88:    12(bool)   INotEqual 87 26
+              89:   13(bvec4)   CompositeConstruct 88 88 88 88
+                                Branch 85
+              85:             Label
+              90:    12(bool) Phi 82 72 89 84
+                              Store 79(r21) 90
+              93:   13(bvec4) Load 15(r00)
+              94:   13(bvec4) Load 30(r01)
+              95:   13(bvec4) LogicalOr 93 94
+              96:   13(bvec4) Load 39(r02)
+              97:   13(bvec4) LogicalOr 95 96
+              98:   13(bvec4) Load 47(r10)
+              99:   13(bvec4) LogicalOr 97 98
+             100:   13(bvec4) Load 58(r11)
+             101:   13(bvec4) LogicalOr 99 100
+             102:   13(bvec4) Load 67(r20)
+             103:   13(bvec4) LogicalOr 101 102
+             104:   13(bvec4) Load 79(r21)
+             105:   13(bvec4) LogicalOr 103 104
+             110:    7(fvec4) Select 105 109 108
+             112:    111(ptr) AccessChain 92(psout) 22
+                              Store 112 110
+             113:8(PS_OUTPUT) Load 92(psout)
+                              ReturnValue 113
+                              FunctionEnd

+ 132 - 119
3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out

@@ -2,7 +2,7 @@ hlsl.logical.unary.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:12    Function Parameters: 
 0:?     Sequence
 0:13      Negate conditional (temp bool)
@@ -71,15 +71,18 @@ gl_FragCoord origin is upper left
 0:25          1.000000
 0:25          1.000000
 0:25          1.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:26            Color: direct index for structure (temp 4-component vector of float)
-0:26              'psout' (temp structure{temp 4-component vector of float Color})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'psout' (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:12          Color: direct index for structure (temp 4-component vector of float)
+0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:12            Constant:
+0:12              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
@@ -91,7 +94,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:12    Function Parameters: 
 0:?     Sequence
 0:13      Negate conditional (temp bool)
@@ -160,133 +163,143 @@ gl_FragCoord origin is upper left
 0:25          1.000000
 0:25          1.000000
 0:25          1.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:26            Color: direct index for structure (temp 4-component vector of float)
-0:26              'psout' (temp structure{temp 4-component vector of float Color})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'psout' (temp structure{temp 4-component vector of float Color})
+0:12  Function Definition: main( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:12          Color: direct index for structure (temp 4-component vector of float)
+0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:12            Constant:
+0:12              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 77
+// Id's are bound by 82
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 73
+                              EntryPoint Fragment 4  "main" 79
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 10  "$Global"
-                              MemberName 10($Global) 0  "ival"
-                              MemberName 10($Global) 1  "ival4"
-                              MemberName 10($Global) 2  "fval"
-                              MemberName 10($Global) 3  "fval4"
-                              Name 12  ""
-                              Name 65  "PS_OUTPUT"
-                              MemberName 65(PS_OUTPUT) 0  "Color"
-                              Name 67  "psout"
-                              Name 73  "Color"
-                              MemberDecorate 10($Global) 0 Offset 0
-                              MemberDecorate 10($Global) 1 Offset 16
-                              MemberDecorate 10($Global) 2 Offset 32
-                              MemberDecorate 10($Global) 3 Offset 48
-                              Decorate 10($Global) Block
-                              Decorate 12 DescriptorSet 0
-                              Decorate 73(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 14  "$Global"
+                              MemberName 14($Global) 0  "ival"
+                              MemberName 14($Global) 1  "ival4"
+                              MemberName 14($Global) 2  "fval"
+                              MemberName 14($Global) 3  "fval4"
+                              Name 16  ""
+                              Name 70  "psout"
+                              Name 79  "Color"
+                              MemberDecorate 14($Global) 0 Offset 0
+                              MemberDecorate 14($Global) 1 Offset 16
+                              MemberDecorate 14($Global) 2 Offset 32
+                              MemberDecorate 14($Global) 3 Offset 48
+                              Decorate 14($Global) Block
+                              Decorate 16 DescriptorSet 0
+                              Decorate 79(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypeVector 6(int) 4
-               8:             TypeFloat 32
-               9:             TypeVector 8(float) 4
-     10($Global):             TypeStruct 6(int) 7(ivec4) 8(float) 9(fvec4)
-              11:             TypePointer Uniform 10($Global)
-              12:     11(ptr) Variable Uniform
-              13:      6(int) Constant 0
-              14:             TypePointer Uniform 6(int)
-              17:             TypeBool
-              18:             TypeInt 32 0
-              19:     18(int) Constant 0
-              22:      6(int) Constant 1
-              23:             TypePointer Uniform 7(ivec4)
-              26:             TypeVector 17(bool) 4
-              27:             TypeVector 18(int) 4
-              28:   27(ivec4) ConstantComposite 19 19 19 19
-              31:      6(int) Constant 2
-              32:             TypePointer Uniform 8(float)
-              35:    8(float) Constant 0
-              38:      6(int) Constant 3
-              39:             TypePointer Uniform 9(fvec4)
-              42:    9(fvec4) ConstantComposite 35 35 35 35
-   65(PS_OUTPUT):             TypeStruct 9(fvec4)
-              66:             TypePointer Function 65(PS_OUTPUT)
-              68:    8(float) Constant 1065353216
-              69:    9(fvec4) ConstantComposite 68 68 68 68
-              70:             TypePointer Function 9(fvec4)
-              72:             TypePointer Output 9(fvec4)
-       73(Color):     72(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 1
+              13:             TypeVector 12(int) 4
+     14($Global):             TypeStruct 12(int) 13(ivec4) 6(float) 7(fvec4)
+              15:             TypePointer Uniform 14($Global)
+              16:     15(ptr) Variable Uniform
+              17:     12(int) Constant 0
+              18:             TypePointer Uniform 12(int)
+              21:             TypeBool
+              22:             TypeInt 32 0
+              23:     22(int) Constant 0
+              26:     12(int) Constant 1
+              27:             TypePointer Uniform 13(ivec4)
+              30:             TypeVector 21(bool) 4
+              31:             TypeVector 22(int) 4
+              32:   31(ivec4) ConstantComposite 23 23 23 23
+              35:     12(int) Constant 2
+              36:             TypePointer Uniform 6(float)
+              39:    6(float) Constant 0
+              42:     12(int) Constant 3
+              43:             TypePointer Uniform 7(fvec4)
+              46:    7(fvec4) ConstantComposite 39 39 39 39
+              69:             TypePointer Function 8(PS_OUTPUT)
+              71:    6(float) Constant 1065353216
+              72:    7(fvec4) ConstantComposite 71 71 71 71
+              73:             TypePointer Function 7(fvec4)
+              78:             TypePointer Output 7(fvec4)
+       79(Color):     78(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-       67(psout):     66(ptr) Variable Function
-              15:     14(ptr) AccessChain 12 13
-              16:      6(int) Load 15
-              20:    17(bool) INotEqual 16 19
-              21:    17(bool) LogicalNot 20
-              24:     23(ptr) AccessChain 12 22
-              25:    7(ivec4) Load 24
-              29:   26(bvec4) INotEqual 25 28
-              30:   26(bvec4) LogicalNot 29
-              33:     32(ptr) AccessChain 12 31
-              34:    8(float) Load 33
-              36:    17(bool) FOrdNotEqual 34 35
-              37:    17(bool) LogicalNot 36
-              40:     39(ptr) AccessChain 12 38
-              41:    9(fvec4) Load 40
-              43:   26(bvec4) FOrdNotEqual 41 42
-              44:   26(bvec4) LogicalNot 43
-              45:     14(ptr) AccessChain 12 13
-              46:      6(int) Load 45
-                              SelectionMerge 48 None
-                              BranchConditional 46 47 48
-              47:               Label
-                                Branch 48
-              48:             Label
-              49:     32(ptr) AccessChain 12 31
-              50:    8(float) Load 49
+              80:8(PS_OUTPUT) FunctionCall 10(@main()
+              81:    7(fvec4) CompositeExtract 80 0
+                              Store 79(Color) 81
+                              Return
+                              FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       70(psout):     69(ptr) Variable Function
+              19:     18(ptr) AccessChain 16 17
+              20:     12(int) Load 19
+              24:    21(bool) INotEqual 20 23
+              25:    21(bool) LogicalNot 24
+              28:     27(ptr) AccessChain 16 26
+              29:   13(ivec4) Load 28
+              33:   30(bvec4) INotEqual 29 32
+              34:   30(bvec4) LogicalNot 33
+              37:     36(ptr) AccessChain 16 35
+              38:    6(float) Load 37
+              40:    21(bool) FOrdNotEqual 38 39
+              41:    21(bool) LogicalNot 40
+              44:     43(ptr) AccessChain 16 42
+              45:    7(fvec4) Load 44
+              47:   30(bvec4) FOrdNotEqual 45 46
+              48:   30(bvec4) LogicalNot 47
+              49:     18(ptr) AccessChain 16 17
+              50:     12(int) Load 49
                               SelectionMerge 52 None
                               BranchConditional 50 51 52
               51:               Label
                                 Branch 52
               52:             Label
-              53:     14(ptr) AccessChain 12 13
-              54:      6(int) Load 53
-              55:    17(bool) INotEqual 54 19
-              56:    17(bool) LogicalNot 55
-                              SelectionMerge 58 None
-                              BranchConditional 56 57 58
-              57:               Label
-                                Branch 58
-              58:             Label
-              59:     32(ptr) AccessChain 12 31
-              60:    8(float) Load 59
-              61:    17(bool) FOrdNotEqual 60 35
-              62:    17(bool) LogicalNot 61
-                              SelectionMerge 64 None
-                              BranchConditional 62 63 64
-              63:               Label
-                                Branch 64
-              64:             Label
-              71:     70(ptr) AccessChain 67(psout) 13
-                              Store 71 69
-              74:     70(ptr) AccessChain 67(psout) 13
-              75:    9(fvec4) Load 74
-                              Store 73(Color) 75
-                              Return
+              53:     36(ptr) AccessChain 16 35
+              54:    6(float) Load 53
+                              SelectionMerge 56 None
+                              BranchConditional 54 55 56
+              55:               Label
+                                Branch 56
+              56:             Label
+              57:     18(ptr) AccessChain 16 17
+              58:     12(int) Load 57
+              59:    21(bool) INotEqual 58 23
+              60:    21(bool) LogicalNot 59
+                              SelectionMerge 62 None
+                              BranchConditional 60 61 62
+              61:               Label
+                                Branch 62
+              62:             Label
+              63:     36(ptr) AccessChain 16 35
+              64:    6(float) Load 63
+              65:    21(bool) FOrdNotEqual 64 39
+              66:    21(bool) LogicalNot 65
+                              SelectionMerge 68 None
+                              BranchConditional 66 67 68
+              67:               Label
+                                Branch 68
+              68:             Label
+              74:     73(ptr) AccessChain 70(psout) 17
+                              Store 74 72
+              75:8(PS_OUTPUT) Load 70(psout)
+                              ReturnValue 75
                               FunctionEnd

+ 127 - 114
3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out

@@ -45,7 +45,7 @@ gl_FragCoord origin is upper left
 0:21          'r13' (temp 4X1 matrix of float)
 0:21          transpose (temp 4X1 matrix of float)
 0:21            'f1x4' (temp 1X4 matrix of float)
-0:27  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:27  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:27    Function Parameters: 
 0:?     Sequence
 0:29      move second child to first child (temp 4-component vector of float)
@@ -58,15 +58,18 @@ gl_FragCoord origin is upper left
 0:29          1.000000
 0:29          1.000000
 0:29          1.000000
-0:30      Sequence
-0:30        Sequence
-0:30          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:30            color: direct index for structure (temp 4-component vector of float)
-0:30              'ps_output' (temp structure{temp 4-component vector of float color})
-0:30              Constant:
-0:30                0 (const int)
-0:30        Branch: Return
+0:30      Branch: Return with expression
+0:30        'ps_output' (temp structure{temp 4-component vector of float color})
+0:27  Function Definition: main( (temp void)
+0:27    Function Parameters: 
+0:?     Sequence
+0:27      Sequence
+0:27        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:27          color: direct index for structure (temp 4-component vector of float)
+0:27            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:27            Constant:
+0:27              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -120,7 +123,7 @@ gl_FragCoord origin is upper left
 0:21          'r13' (temp 4X1 matrix of float)
 0:21          transpose (temp 4X1 matrix of float)
 0:21            'f1x4' (temp 1X4 matrix of float)
-0:27  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:27  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:27    Function Parameters: 
 0:?     Sequence
 0:29      move second child to first child (temp 4-component vector of float)
@@ -133,129 +136,139 @@ gl_FragCoord origin is upper left
 0:29          1.000000
 0:29          1.000000
 0:29          1.000000
-0:30      Sequence
-0:30        Sequence
-0:30          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:30            color: direct index for structure (temp 4-component vector of float)
-0:30              'ps_output' (temp structure{temp 4-component vector of float color})
-0:30              Constant:
-0:30                0 (const int)
-0:30        Branch: Return
+0:30      Branch: Return with expression
+0:30        'ps_output' (temp structure{temp 4-component vector of float color})
+0:27  Function Definition: main( (temp void)
+0:27    Function Parameters: 
+0:?     Sequence
+0:27      Sequence
+0:27        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:27          color: direct index for structure (temp 4-component vector of float)
+0:27            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:27            Constant:
+0:27              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 72
+// Id's are bound by 77
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 68
+                              EntryPoint Fragment 4  "main" 74
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 6  "TestMatNx1("
-                              Name 12  "r00"
-                              Name 13  "f1x1"
-                              Name 19  "r01"
-                              Name 22  "f2x1"
-                              Name 28  "r02"
-                              Name 31  "f3x1"
-                              Name 37  "r03"
-                              Name 40  "f4x1"
-                              Name 43  "r10"
-                              Name 46  "r11"
-                              Name 47  "f1x2"
-                              Name 50  "r12"
-                              Name 51  "f1x3"
-                              Name 54  "r13"
-                              Name 55  "f1x4"
-                              Name 58  "PS_OUTPUT"
-                              MemberName 58(PS_OUTPUT) 0  "color"
-                              Name 60  "ps_output"
-                              Name 68  "color"
-                              Decorate 68(color) Location 0
+                              Name 10  "PS_OUTPUT"
+                              MemberName 10(PS_OUTPUT) 0  "color"
+                              Name 12  "@main("
+                              Name 17  "r00"
+                              Name 18  "f1x1"
+                              Name 24  "r01"
+                              Name 27  "f2x1"
+                              Name 33  "r02"
+                              Name 36  "f3x1"
+                              Name 41  "r03"
+                              Name 44  "f4x1"
+                              Name 47  "r10"
+                              Name 50  "r11"
+                              Name 51  "f1x2"
+                              Name 54  "r12"
+                              Name 55  "f1x3"
+                              Name 58  "r13"
+                              Name 59  "f1x4"
+                              Name 63  "ps_output"
+                              Name 74  "color"
+                              Decorate 74(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
-               9:             TypeVector 8(float) 1
-              10:             TypeMatrix 9(fvec) 1
-              11:             TypePointer Function 10
-              16:             TypeVector 8(float) 2
-              17:             TypeMatrix 16(fvec2) 1
-              18:             TypePointer Function 17
-              20:             TypeMatrix 9(fvec) 2
-              21:             TypePointer Function 20
-              25:             TypeVector 8(float) 3
-              26:             TypeMatrix 25(fvec3) 1
-              27:             TypePointer Function 26
-              29:             TypeMatrix 9(fvec) 3
-              30:             TypePointer Function 29
-              34:             TypeVector 8(float) 4
-              35:             TypeMatrix 34(fvec4) 1
-              36:             TypePointer Function 35
-              38:             TypeMatrix 9(fvec) 4
-              39:             TypePointer Function 38
-   58(PS_OUTPUT):             TypeStruct 34(fvec4)
-              59:             TypePointer Function 58(PS_OUTPUT)
-              61:             TypeInt 32 1
-              62:     61(int) Constant 0
-              63:    8(float) Constant 1065353216
-              64:   34(fvec4) ConstantComposite 63 63 63 63
-              65:             TypePointer Function 34(fvec4)
-              67:             TypePointer Output 34(fvec4)
-       68(color):     67(ptr) Variable Output
+               9:             TypeVector 8(float) 4
+   10(PS_OUTPUT):             TypeStruct 9(fvec4)
+              11:             TypeFunction 10(PS_OUTPUT)
+              14:             TypeVector 8(float) 1
+              15:             TypeMatrix 14(fvec) 1
+              16:             TypePointer Function 15
+              21:             TypeVector 8(float) 2
+              22:             TypeMatrix 21(fvec2) 1
+              23:             TypePointer Function 22
+              25:             TypeMatrix 14(fvec) 2
+              26:             TypePointer Function 25
+              30:             TypeVector 8(float) 3
+              31:             TypeMatrix 30(fvec3) 1
+              32:             TypePointer Function 31
+              34:             TypeMatrix 14(fvec) 3
+              35:             TypePointer Function 34
+              39:             TypeMatrix 9(fvec4) 1
+              40:             TypePointer Function 39
+              42:             TypeMatrix 14(fvec) 4
+              43:             TypePointer Function 42
+              62:             TypePointer Function 10(PS_OUTPUT)
+              64:             TypeInt 32 1
+              65:     64(int) Constant 0
+              66:    8(float) Constant 1065353216
+              67:    9(fvec4) ConstantComposite 66 66 66 66
+              68:             TypePointer Function 9(fvec4)
+              73:             TypePointer Output 9(fvec4)
+       74(color):     73(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-   60(ps_output):     59(ptr) Variable Function
-              66:     65(ptr) AccessChain 60(ps_output) 62
-                              Store 66 64
-              69:     65(ptr) AccessChain 60(ps_output) 62
-              70:   34(fvec4) Load 69
-                              Store 68(color) 70
+              75:10(PS_OUTPUT) FunctionCall 12(@main()
+              76:    9(fvec4) CompositeExtract 75 0
+                              Store 74(color) 76
                               Return
                               FunctionEnd
   6(TestMatNx1():           2 Function None 3
                7:             Label
-         12(r00):     11(ptr) Variable Function
-        13(f1x1):     11(ptr) Variable Function
-         19(r01):     18(ptr) Variable Function
-        22(f2x1):     21(ptr) Variable Function
-         28(r02):     27(ptr) Variable Function
-        31(f3x1):     30(ptr) Variable Function
-         37(r03):     36(ptr) Variable Function
-        40(f4x1):     39(ptr) Variable Function
-         43(r10):     11(ptr) Variable Function
-         46(r11):     21(ptr) Variable Function
-        47(f1x2):     18(ptr) Variable Function
-         50(r12):     30(ptr) Variable Function
-        51(f1x3):     27(ptr) Variable Function
-         54(r13):     39(ptr) Variable Function
-        55(f1x4):     36(ptr) Variable Function
-              14:          10 Load 13(f1x1)
-              15:          10 Transpose 14
-                              Store 12(r00) 15
-              23:          20 Load 22(f2x1)
-              24:          17 Transpose 23
-                              Store 19(r01) 24
-              32:          29 Load 31(f3x1)
-              33:          26 Transpose 32
-                              Store 28(r02) 33
-              41:          38 Load 40(f4x1)
-              42:          35 Transpose 41
-                              Store 37(r03) 42
-              44:          10 Load 13(f1x1)
-              45:          10 Transpose 44
-                              Store 43(r10) 45
-              48:          17 Load 47(f1x2)
-              49:          20 Transpose 48
-                              Store 46(r11) 49
-              52:          26 Load 51(f1x3)
-              53:          29 Transpose 52
-                              Store 50(r12) 53
-              56:          35 Load 55(f1x4)
-              57:          38 Transpose 56
-                              Store 54(r13) 57
+         17(r00):     16(ptr) Variable Function
+        18(f1x1):     16(ptr) Variable Function
+         24(r01):     23(ptr) Variable Function
+        27(f2x1):     26(ptr) Variable Function
+         33(r02):     32(ptr) Variable Function
+        36(f3x1):     35(ptr) Variable Function
+         41(r03):     40(ptr) Variable Function
+        44(f4x1):     43(ptr) Variable Function
+         47(r10):     16(ptr) Variable Function
+         50(r11):     26(ptr) Variable Function
+        51(f1x2):     23(ptr) Variable Function
+         54(r12):     35(ptr) Variable Function
+        55(f1x3):     32(ptr) Variable Function
+         58(r13):     43(ptr) Variable Function
+        59(f1x4):     40(ptr) Variable Function
+              19:          15 Load 18(f1x1)
+              20:          15 Transpose 19
+                              Store 17(r00) 20
+              28:          25 Load 27(f2x1)
+              29:          22 Transpose 28
+                              Store 24(r01) 29
+              37:          34 Load 36(f3x1)
+              38:          31 Transpose 37
+                              Store 33(r02) 38
+              45:          42 Load 44(f4x1)
+              46:          39 Transpose 45
+                              Store 41(r03) 46
+              48:          15 Load 18(f1x1)
+              49:          15 Transpose 48
+                              Store 47(r10) 49
+              52:          22 Load 51(f1x2)
+              53:          25 Transpose 52
+                              Store 50(r11) 53
+              56:          31 Load 55(f1x3)
+              57:          34 Transpose 56
+                              Store 54(r12) 57
+              60:          39 Load 59(f1x4)
+              61:          42 Transpose 60
+                              Store 58(r13) 61
                               Return
                               FunctionEnd
+      12(@main():10(PS_OUTPUT) Function None 11
+              13:             Label
+   63(ps_output):     62(ptr) Variable Function
+              69:     68(ptr) AccessChain 63(ps_output) 65
+                              Store 69 67
+              70:10(PS_OUTPUT) Load 63(ps_output)
+                              ReturnValue 70
+                              FunctionEnd

+ 202 - 189
3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out

@@ -85,7 +85,7 @@ gl_FragCoord origin is upper left
 0:43          'r33' (temp 4X4 matrix of bool)
 0:43          transpose (temp 4X4 matrix of bool)
 0:43            'b4x4' (temp 4X4 matrix of bool)
-0:49  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:49  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:49    Function Parameters: 
 0:?     Sequence
 0:51      move second child to first child (temp 4-component vector of float)
@@ -98,15 +98,18 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:52      Sequence
-0:52        Sequence
-0:52          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:52            color: direct index for structure (temp 4-component vector of float)
-0:52              'ps_output' (temp structure{temp 4-component vector of float color})
-0:52              Constant:
-0:52                0 (const int)
-0:52        Branch: Return
+0:52      Branch: Return with expression
+0:52        'ps_output' (temp structure{temp 4-component vector of float color})
+0:49  Function Definition: main( (temp void)
+0:49    Function Parameters: 
+0:?     Sequence
+0:49      Sequence
+0:49        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:49          color: direct index for structure (temp 4-component vector of float)
+0:49            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:49            Constant:
+0:49              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -200,7 +203,7 @@ gl_FragCoord origin is upper left
 0:43          'r33' (temp 4X4 matrix of bool)
 0:43          transpose (temp 4X4 matrix of bool)
 0:43            'b4x4' (temp 4X4 matrix of bool)
-0:49  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:49  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:49    Function Parameters: 
 0:?     Sequence
 0:51      move second child to first child (temp 4-component vector of float)
@@ -213,207 +216,217 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:52      Sequence
-0:52        Sequence
-0:52          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:52            color: direct index for structure (temp 4-component vector of float)
-0:52              'ps_output' (temp structure{temp 4-component vector of float color})
-0:52              Constant:
-0:52                0 (const int)
-0:52        Branch: Return
+0:52      Branch: Return with expression
+0:52        'ps_output' (temp structure{temp 4-component vector of float color})
+0:49  Function Definition: main( (temp void)
+0:49    Function Parameters: 
+0:?     Sequence
+0:49      Sequence
+0:49        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:49          color: direct index for structure (temp 4-component vector of float)
+0:49            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:49            Constant:
+0:49              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 125
+// Id's are bound by 130
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 121
+                              EntryPoint Fragment 4  "main" 127
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 6  "TestBoolMatTypes("
-                              Name 12  "r00"
-                              Name 13  "b1x1"
-                              Name 19  "r01"
-                              Name 22  "b2x1"
-                              Name 28  "r02"
-                              Name 31  "b3x1"
-                              Name 37  "r03"
-                              Name 40  "b4x1"
-                              Name 43  "r10"
-                              Name 44  "b1x2"
-                              Name 49  "r11"
-                              Name 50  "b2x2"
-                              Name 55  "r12"
-                              Name 58  "b3x2"
-                              Name 63  "r13"
-                              Name 66  "b4x2"
-                              Name 69  "r20"
-                              Name 70  "b1x3"
-                              Name 73  "r21"
-                              Name 74  "b2x3"
-                              Name 79  "r22"
-                              Name 80  "b3x3"
-                              Name 85  "r23"
-                              Name 88  "b4x3"
-                              Name 91  "r30"
-                              Name 92  "b1x4"
-                              Name 95  "r31"
-                              Name 96  "b2x4"
-                              Name 99  "r32"
-                              Name 100  "b3x4"
-                              Name 105  "r33"
-                              Name 106  "b4x4"
-                              Name 111  "PS_OUTPUT"
-                              MemberName 111(PS_OUTPUT) 0  "color"
-                              Name 113  "ps_output"
-                              Name 121  "color"
-                              Decorate 121(color) Location 0
+                              Name 10  "PS_OUTPUT"
+                              MemberName 10(PS_OUTPUT) 0  "color"
+                              Name 12  "@main("
+                              Name 18  "r00"
+                              Name 19  "b1x1"
+                              Name 25  "r01"
+                              Name 28  "b2x1"
+                              Name 34  "r02"
+                              Name 37  "b3x1"
+                              Name 43  "r03"
+                              Name 46  "b4x1"
+                              Name 49  "r10"
+                              Name 50  "b1x2"
+                              Name 55  "r11"
+                              Name 56  "b2x2"
+                              Name 61  "r12"
+                              Name 64  "b3x2"
+                              Name 69  "r13"
+                              Name 72  "b4x2"
+                              Name 75  "r20"
+                              Name 76  "b1x3"
+                              Name 79  "r21"
+                              Name 80  "b2x3"
+                              Name 85  "r22"
+                              Name 86  "b3x3"
+                              Name 91  "r23"
+                              Name 94  "b4x3"
+                              Name 97  "r30"
+                              Name 98  "b1x4"
+                              Name 101  "r31"
+                              Name 102  "b2x4"
+                              Name 105  "r32"
+                              Name 106  "b3x4"
+                              Name 111  "r33"
+                              Name 112  "b4x4"
+                              Name 116  "ps_output"
+                              Name 127  "color"
+                              Decorate 127(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               8:             TypeBool
-               9:             TypeVector 8(bool) 1
-              10:             TypeMatrix 9(bvec) 1
-              11:             TypePointer Function 10
-              16:             TypeVector 8(bool) 2
-              17:             TypeMatrix 16(bvec2) 1
-              18:             TypePointer Function 17
-              20:             TypeMatrix 9(bvec) 2
-              21:             TypePointer Function 20
-              25:             TypeVector 8(bool) 3
-              26:             TypeMatrix 25(bvec3) 1
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+   10(PS_OUTPUT):             TypeStruct 9(fvec4)
+              11:             TypeFunction 10(PS_OUTPUT)
+              14:             TypeBool
+              15:             TypeVector 14(bool) 1
+              16:             TypeMatrix 15(bvec) 1
+              17:             TypePointer Function 16
+              22:             TypeVector 14(bool) 2
+              23:             TypeMatrix 22(bvec2) 1
+              24:             TypePointer Function 23
+              26:             TypeMatrix 15(bvec) 2
               27:             TypePointer Function 26
-              29:             TypeMatrix 9(bvec) 3
-              30:             TypePointer Function 29
-              34:             TypeVector 8(bool) 4
-              35:             TypeMatrix 34(bvec4) 1
+              31:             TypeVector 14(bool) 3
+              32:             TypeMatrix 31(bvec3) 1
+              33:             TypePointer Function 32
+              35:             TypeMatrix 15(bvec) 3
               36:             TypePointer Function 35
-              38:             TypeMatrix 9(bvec) 4
-              39:             TypePointer Function 38
-              47:             TypeMatrix 16(bvec2) 2
-              48:             TypePointer Function 47
-              53:             TypeMatrix 25(bvec3) 2
+              40:             TypeVector 14(bool) 4
+              41:             TypeMatrix 40(bvec4) 1
+              42:             TypePointer Function 41
+              44:             TypeMatrix 15(bvec) 4
+              45:             TypePointer Function 44
+              53:             TypeMatrix 22(bvec2) 2
               54:             TypePointer Function 53
-              56:             TypeMatrix 16(bvec2) 3
-              57:             TypePointer Function 56
-              61:             TypeMatrix 34(bvec4) 2
-              62:             TypePointer Function 61
-              64:             TypeMatrix 16(bvec2) 4
-              65:             TypePointer Function 64
-              77:             TypeMatrix 25(bvec3) 3
-              78:             TypePointer Function 77
-              83:             TypeMatrix 34(bvec4) 3
+              59:             TypeMatrix 31(bvec3) 2
+              60:             TypePointer Function 59
+              62:             TypeMatrix 22(bvec2) 3
+              63:             TypePointer Function 62
+              67:             TypeMatrix 40(bvec4) 2
+              68:             TypePointer Function 67
+              70:             TypeMatrix 22(bvec2) 4
+              71:             TypePointer Function 70
+              83:             TypeMatrix 31(bvec3) 3
               84:             TypePointer Function 83
-              86:             TypeMatrix 25(bvec3) 4
-              87:             TypePointer Function 86
-             103:             TypeMatrix 34(bvec4) 4
-             104:             TypePointer Function 103
-             109:             TypeFloat 32
-             110:             TypeVector 109(float) 4
-  111(PS_OUTPUT):             TypeStruct 110(fvec4)
-             112:             TypePointer Function 111(PS_OUTPUT)
-             114:             TypeInt 32 1
-             115:    114(int) Constant 0
-             116:  109(float) Constant 0
-             117:  110(fvec4) ConstantComposite 116 116 116 116
-             118:             TypePointer Function 110(fvec4)
-             120:             TypePointer Output 110(fvec4)
-      121(color):    120(ptr) Variable Output
+              89:             TypeMatrix 40(bvec4) 3
+              90:             TypePointer Function 89
+              92:             TypeMatrix 31(bvec3) 4
+              93:             TypePointer Function 92
+             109:             TypeMatrix 40(bvec4) 4
+             110:             TypePointer Function 109
+             115:             TypePointer Function 10(PS_OUTPUT)
+             117:             TypeInt 32 1
+             118:    117(int) Constant 0
+             119:    8(float) Constant 0
+             120:    9(fvec4) ConstantComposite 119 119 119 119
+             121:             TypePointer Function 9(fvec4)
+             126:             TypePointer Output 9(fvec4)
+      127(color):    126(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-  113(ps_output):    112(ptr) Variable Function
-             119:    118(ptr) AccessChain 113(ps_output) 115
-                              Store 119 117
-             122:    118(ptr) AccessChain 113(ps_output) 115
-             123:  110(fvec4) Load 122
-                              Store 121(color) 123
+             128:10(PS_OUTPUT) FunctionCall 12(@main()
+             129:    9(fvec4) CompositeExtract 128 0
+                              Store 127(color) 129
                               Return
                               FunctionEnd
 6(TestBoolMatTypes():           2 Function None 3
                7:             Label
-         12(r00):     11(ptr) Variable Function
-        13(b1x1):     11(ptr) Variable Function
-         19(r01):     18(ptr) Variable Function
-        22(b2x1):     21(ptr) Variable Function
-         28(r02):     27(ptr) Variable Function
-        31(b3x1):     30(ptr) Variable Function
-         37(r03):     36(ptr) Variable Function
-        40(b4x1):     39(ptr) Variable Function
-         43(r10):     21(ptr) Variable Function
-        44(b1x2):     18(ptr) Variable Function
-         49(r11):     48(ptr) Variable Function
-        50(b2x2):     48(ptr) Variable Function
-         55(r12):     54(ptr) Variable Function
-        58(b3x2):     57(ptr) Variable Function
-         63(r13):     62(ptr) Variable Function
-        66(b4x2):     65(ptr) Variable Function
-         69(r20):     30(ptr) Variable Function
-        70(b1x3):     27(ptr) Variable Function
-         73(r21):     57(ptr) Variable Function
-        74(b2x3):     54(ptr) Variable Function
-         79(r22):     78(ptr) Variable Function
-        80(b3x3):     78(ptr) Variable Function
-         85(r23):     84(ptr) Variable Function
-        88(b4x3):     87(ptr) Variable Function
-         91(r30):     39(ptr) Variable Function
-        92(b1x4):     36(ptr) Variable Function
-         95(r31):     65(ptr) Variable Function
-        96(b2x4):     62(ptr) Variable Function
-         99(r32):     87(ptr) Variable Function
-       100(b3x4):     84(ptr) Variable Function
-        105(r33):    104(ptr) Variable Function
-       106(b4x4):    104(ptr) Variable Function
-              14:          10 Load 13(b1x1)
-              15:          10 Transpose 14
-                              Store 12(r00) 15
-              23:          20 Load 22(b2x1)
-              24:          17 Transpose 23
-                              Store 19(r01) 24
-              32:          29 Load 31(b3x1)
-              33:          26 Transpose 32
-                              Store 28(r02) 33
-              41:          38 Load 40(b4x1)
-              42:          35 Transpose 41
-                              Store 37(r03) 42
-              45:          17 Load 44(b1x2)
-              46:          20 Transpose 45
-                              Store 43(r10) 46
-              51:          47 Load 50(b2x2)
-              52:          47 Transpose 51
-                              Store 49(r11) 52
-              59:          56 Load 58(b3x2)
-              60:          53 Transpose 59
-                              Store 55(r12) 60
-              67:          64 Load 66(b4x2)
-              68:          61 Transpose 67
-                              Store 63(r13) 68
-              71:          26 Load 70(b1x3)
-              72:          29 Transpose 71
-                              Store 69(r20) 72
-              75:          53 Load 74(b2x3)
-              76:          56 Transpose 75
-                              Store 73(r21) 76
-              81:          77 Load 80(b3x3)
-              82:          77 Transpose 81
-                              Store 79(r22) 82
-              89:          86 Load 88(b4x3)
-              90:          83 Transpose 89
-                              Store 85(r23) 90
-              93:          35 Load 92(b1x4)
-              94:          38 Transpose 93
-                              Store 91(r30) 94
-              97:          61 Load 96(b2x4)
-              98:          64 Transpose 97
-                              Store 95(r31) 98
-             101:          83 Load 100(b3x4)
-             102:          86 Transpose 101
-                              Store 99(r32) 102
-             107:         103 Load 106(b4x4)
-             108:         103 Transpose 107
-                              Store 105(r33) 108
+         18(r00):     17(ptr) Variable Function
+        19(b1x1):     17(ptr) Variable Function
+         25(r01):     24(ptr) Variable Function
+        28(b2x1):     27(ptr) Variable Function
+         34(r02):     33(ptr) Variable Function
+        37(b3x1):     36(ptr) Variable Function
+         43(r03):     42(ptr) Variable Function
+        46(b4x1):     45(ptr) Variable Function
+         49(r10):     27(ptr) Variable Function
+        50(b1x2):     24(ptr) Variable Function
+         55(r11):     54(ptr) Variable Function
+        56(b2x2):     54(ptr) Variable Function
+         61(r12):     60(ptr) Variable Function
+        64(b3x2):     63(ptr) Variable Function
+         69(r13):     68(ptr) Variable Function
+        72(b4x2):     71(ptr) Variable Function
+         75(r20):     36(ptr) Variable Function
+        76(b1x3):     33(ptr) Variable Function
+         79(r21):     63(ptr) Variable Function
+        80(b2x3):     60(ptr) Variable Function
+         85(r22):     84(ptr) Variable Function
+        86(b3x3):     84(ptr) Variable Function
+         91(r23):     90(ptr) Variable Function
+        94(b4x3):     93(ptr) Variable Function
+         97(r30):     45(ptr) Variable Function
+        98(b1x4):     42(ptr) Variable Function
+        101(r31):     71(ptr) Variable Function
+       102(b2x4):     68(ptr) Variable Function
+        105(r32):     93(ptr) Variable Function
+       106(b3x4):     90(ptr) Variable Function
+        111(r33):    110(ptr) Variable Function
+       112(b4x4):    110(ptr) Variable Function
+              20:          16 Load 19(b1x1)
+              21:          16 Transpose 20
+                              Store 18(r00) 21
+              29:          26 Load 28(b2x1)
+              30:          23 Transpose 29
+                              Store 25(r01) 30
+              38:          35 Load 37(b3x1)
+              39:          32 Transpose 38
+                              Store 34(r02) 39
+              47:          44 Load 46(b4x1)
+              48:          41 Transpose 47
+                              Store 43(r03) 48
+              51:          23 Load 50(b1x2)
+              52:          26 Transpose 51
+                              Store 49(r10) 52
+              57:          53 Load 56(b2x2)
+              58:          53 Transpose 57
+                              Store 55(r11) 58
+              65:          62 Load 64(b3x2)
+              66:          59 Transpose 65
+                              Store 61(r12) 66
+              73:          70 Load 72(b4x2)
+              74:          67 Transpose 73
+                              Store 69(r13) 74
+              77:          32 Load 76(b1x3)
+              78:          35 Transpose 77
+                              Store 75(r20) 78
+              81:          59 Load 80(b2x3)
+              82:          62 Transpose 81
+                              Store 79(r21) 82
+              87:          83 Load 86(b3x3)
+              88:          83 Transpose 87
+                              Store 85(r22) 88
+              95:          92 Load 94(b4x3)
+              96:          89 Transpose 95
+                              Store 91(r23) 96
+              99:          41 Load 98(b1x4)
+             100:          44 Transpose 99
+                              Store 97(r30) 100
+             103:          67 Load 102(b2x4)
+             104:          70 Transpose 103
+                              Store 101(r31) 104
+             107:          89 Load 106(b3x4)
+             108:          92 Transpose 107
+                              Store 105(r32) 108
+             113:         109 Load 112(b4x4)
+             114:         109 Transpose 113
+                              Store 111(r33) 114
                               Return
                               FunctionEnd
+      12(@main():10(PS_OUTPUT) Function None 11
+              13:             Label
+  116(ps_output):    115(ptr) Variable Function
+             122:    121(ptr) AccessChain 116(ps_output) 118
+                              Store 122 120
+             123:10(PS_OUTPUT) Load 116(ps_output)
+                              ReturnValue 123
+                              FunctionEnd

+ 346 - 333
3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out

@@ -168,7 +168,7 @@ gl_FragCoord origin is upper left
 0:87          'r33' (temp 4X4 matrix of uint)
 0:87          transpose (temp 4X4 matrix of uint)
 0:87            'u4x4' (temp 4X4 matrix of uint)
-0:93  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:93  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:93    Function Parameters: 
 0:?     Sequence
 0:95      move second child to first child (temp 4-component vector of float)
@@ -181,15 +181,18 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:96      Sequence
-0:96        Sequence
-0:96          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:96            color: direct index for structure (temp 4-component vector of float)
-0:96              'ps_output' (temp structure{temp 4-component vector of float color})
-0:96              Constant:
-0:96                0 (const int)
-0:96        Branch: Return
+0:96      Branch: Return with expression
+0:96        'ps_output' (temp structure{temp 4-component vector of float color})
+0:93  Function Definition: main( (temp void)
+0:93    Function Parameters: 
+0:?     Sequence
+0:93      Sequence
+0:93        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:93          color: direct index for structure (temp 4-component vector of float)
+0:93            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:93            Constant:
+0:93              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -366,7 +369,7 @@ gl_FragCoord origin is upper left
 0:87          'r33' (temp 4X4 matrix of uint)
 0:87          transpose (temp 4X4 matrix of uint)
 0:87            'u4x4' (temp 4X4 matrix of uint)
-0:93  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:93  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:93    Function Parameters: 
 0:?     Sequence
 0:95      move second child to first child (temp 4-component vector of float)
@@ -379,360 +382,370 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:96      Sequence
-0:96        Sequence
-0:96          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:96            color: direct index for structure (temp 4-component vector of float)
-0:96              'ps_output' (temp structure{temp 4-component vector of float color})
-0:96              Constant:
-0:96                0 (const int)
-0:96        Branch: Return
+0:96      Branch: Return with expression
+0:96        'ps_output' (temp structure{temp 4-component vector of float color})
+0:93  Function Definition: main( (temp void)
+0:93    Function Parameters: 
+0:?     Sequence
+0:93      Sequence
+0:93        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:93          color: direct index for structure (temp 4-component vector of float)
+0:93            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:93            Constant:
+0:93              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 227
+// Id's are bound by 232
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 223
+                              EntryPoint Fragment 4  "main" 229
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 6  "TestIntMatTypes("
                               Name 8  "TestUintMatTypes("
-                              Name 14  "r00"
-                              Name 15  "i1x1"
-                              Name 21  "r01"
-                              Name 24  "i2x1"
-                              Name 30  "r02"
-                              Name 33  "i3x1"
-                              Name 39  "r03"
-                              Name 42  "i4x1"
-                              Name 45  "r10"
-                              Name 46  "i1x2"
-                              Name 51  "r11"
-                              Name 52  "i2x2"
-                              Name 57  "r12"
-                              Name 60  "i3x2"
-                              Name 65  "r13"
-                              Name 68  "i4x2"
-                              Name 71  "r20"
-                              Name 72  "i1x3"
-                              Name 75  "r21"
-                              Name 76  "i2x3"
-                              Name 81  "r22"
-                              Name 82  "i3x3"
-                              Name 87  "r23"
-                              Name 90  "i4x3"
-                              Name 93  "r30"
-                              Name 94  "i1x4"
-                              Name 97  "r31"
-                              Name 98  "i2x4"
-                              Name 101  "r32"
-                              Name 102  "i3x4"
-                              Name 107  "r33"
-                              Name 108  "i4x4"
-                              Name 115  "r00"
-                              Name 116  "u1x1"
-                              Name 122  "r01"
-                              Name 125  "u2x1"
-                              Name 131  "r02"
-                              Name 134  "u3x1"
-                              Name 140  "r03"
-                              Name 143  "u4x1"
-                              Name 146  "r10"
-                              Name 147  "u1x2"
-                              Name 152  "r11"
-                              Name 153  "u2x2"
-                              Name 158  "r12"
-                              Name 161  "u3x2"
-                              Name 166  "r13"
-                              Name 169  "u4x2"
-                              Name 172  "r20"
-                              Name 173  "u1x3"
-                              Name 176  "r21"
-                              Name 177  "u2x3"
-                              Name 182  "r22"
-                              Name 183  "u3x3"
-                              Name 188  "r23"
-                              Name 191  "u4x3"
-                              Name 194  "r30"
-                              Name 195  "u1x4"
-                              Name 198  "r31"
-                              Name 199  "u2x4"
-                              Name 202  "r32"
-                              Name 203  "u3x4"
-                              Name 208  "r33"
-                              Name 209  "u4x4"
-                              Name 214  "PS_OUTPUT"
-                              MemberName 214(PS_OUTPUT) 0  "color"
-                              Name 216  "ps_output"
-                              Name 223  "color"
-                              Decorate 223(color) Location 0
+                              Name 12  "PS_OUTPUT"
+                              MemberName 12(PS_OUTPUT) 0  "color"
+                              Name 14  "@main("
+                              Name 20  "r00"
+                              Name 21  "i1x1"
+                              Name 27  "r01"
+                              Name 30  "i2x1"
+                              Name 36  "r02"
+                              Name 39  "i3x1"
+                              Name 45  "r03"
+                              Name 48  "i4x1"
+                              Name 51  "r10"
+                              Name 52  "i1x2"
+                              Name 57  "r11"
+                              Name 58  "i2x2"
+                              Name 63  "r12"
+                              Name 66  "i3x2"
+                              Name 71  "r13"
+                              Name 74  "i4x2"
+                              Name 77  "r20"
+                              Name 78  "i1x3"
+                              Name 81  "r21"
+                              Name 82  "i2x3"
+                              Name 87  "r22"
+                              Name 88  "i3x3"
+                              Name 93  "r23"
+                              Name 96  "i4x3"
+                              Name 99  "r30"
+                              Name 100  "i1x4"
+                              Name 103  "r31"
+                              Name 104  "i2x4"
+                              Name 107  "r32"
+                              Name 108  "i3x4"
+                              Name 113  "r33"
+                              Name 114  "i4x4"
+                              Name 121  "r00"
+                              Name 122  "u1x1"
+                              Name 128  "r01"
+                              Name 131  "u2x1"
+                              Name 137  "r02"
+                              Name 140  "u3x1"
+                              Name 146  "r03"
+                              Name 149  "u4x1"
+                              Name 152  "r10"
+                              Name 153  "u1x2"
+                              Name 158  "r11"
+                              Name 159  "u2x2"
+                              Name 164  "r12"
+                              Name 167  "u3x2"
+                              Name 172  "r13"
+                              Name 175  "u4x2"
+                              Name 178  "r20"
+                              Name 179  "u1x3"
+                              Name 182  "r21"
+                              Name 183  "u2x3"
+                              Name 188  "r22"
+                              Name 189  "u3x3"
+                              Name 194  "r23"
+                              Name 197  "u4x3"
+                              Name 200  "r30"
+                              Name 201  "u1x4"
+                              Name 204  "r31"
+                              Name 205  "u2x4"
+                              Name 208  "r32"
+                              Name 209  "u3x4"
+                              Name 214  "r33"
+                              Name 215  "u4x4"
+                              Name 219  "ps_output"
+                              Name 229  "color"
+                              Decorate 229(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-              10:             TypeInt 32 1
-              11:             TypeVector 10(int) 1
-              12:             TypeMatrix 11(ivec) 1
-              13:             TypePointer Function 12
-              18:             TypeVector 10(int) 2
-              19:             TypeMatrix 18(ivec2) 1
-              20:             TypePointer Function 19
-              22:             TypeMatrix 11(ivec) 2
-              23:             TypePointer Function 22
-              27:             TypeVector 10(int) 3
-              28:             TypeMatrix 27(ivec3) 1
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+   12(PS_OUTPUT):             TypeStruct 11(fvec4)
+              13:             TypeFunction 12(PS_OUTPUT)
+              16:             TypeInt 32 1
+              17:             TypeVector 16(int) 1
+              18:             TypeMatrix 17(ivec) 1
+              19:             TypePointer Function 18
+              24:             TypeVector 16(int) 2
+              25:             TypeMatrix 24(ivec2) 1
+              26:             TypePointer Function 25
+              28:             TypeMatrix 17(ivec) 2
               29:             TypePointer Function 28
-              31:             TypeMatrix 11(ivec) 3
-              32:             TypePointer Function 31
-              36:             TypeVector 10(int) 4
-              37:             TypeMatrix 36(ivec4) 1
+              33:             TypeVector 16(int) 3
+              34:             TypeMatrix 33(ivec3) 1
+              35:             TypePointer Function 34
+              37:             TypeMatrix 17(ivec) 3
               38:             TypePointer Function 37
-              40:             TypeMatrix 11(ivec) 4
-              41:             TypePointer Function 40
-              49:             TypeMatrix 18(ivec2) 2
-              50:             TypePointer Function 49
-              55:             TypeMatrix 27(ivec3) 2
+              42:             TypeVector 16(int) 4
+              43:             TypeMatrix 42(ivec4) 1
+              44:             TypePointer Function 43
+              46:             TypeMatrix 17(ivec) 4
+              47:             TypePointer Function 46
+              55:             TypeMatrix 24(ivec2) 2
               56:             TypePointer Function 55
-              58:             TypeMatrix 18(ivec2) 3
-              59:             TypePointer Function 58
-              63:             TypeMatrix 36(ivec4) 2
-              64:             TypePointer Function 63
-              66:             TypeMatrix 18(ivec2) 4
-              67:             TypePointer Function 66
-              79:             TypeMatrix 27(ivec3) 3
-              80:             TypePointer Function 79
-              85:             TypeMatrix 36(ivec4) 3
+              61:             TypeMatrix 33(ivec3) 2
+              62:             TypePointer Function 61
+              64:             TypeMatrix 24(ivec2) 3
+              65:             TypePointer Function 64
+              69:             TypeMatrix 42(ivec4) 2
+              70:             TypePointer Function 69
+              72:             TypeMatrix 24(ivec2) 4
+              73:             TypePointer Function 72
+              85:             TypeMatrix 33(ivec3) 3
               86:             TypePointer Function 85
-              88:             TypeMatrix 27(ivec3) 4
-              89:             TypePointer Function 88
-             105:             TypeMatrix 36(ivec4) 4
-             106:             TypePointer Function 105
-             111:             TypeInt 32 0
-             112:             TypeVector 111(int) 1
-             113:             TypeMatrix 112(ivec) 1
-             114:             TypePointer Function 113
-             119:             TypeVector 111(int) 2
-             120:             TypeMatrix 119(ivec2) 1
-             121:             TypePointer Function 120
-             123:             TypeMatrix 112(ivec) 2
-             124:             TypePointer Function 123
-             128:             TypeVector 111(int) 3
-             129:             TypeMatrix 128(ivec3) 1
+              91:             TypeMatrix 42(ivec4) 3
+              92:             TypePointer Function 91
+              94:             TypeMatrix 33(ivec3) 4
+              95:             TypePointer Function 94
+             111:             TypeMatrix 42(ivec4) 4
+             112:             TypePointer Function 111
+             117:             TypeInt 32 0
+             118:             TypeVector 117(int) 1
+             119:             TypeMatrix 118(ivec) 1
+             120:             TypePointer Function 119
+             125:             TypeVector 117(int) 2
+             126:             TypeMatrix 125(ivec2) 1
+             127:             TypePointer Function 126
+             129:             TypeMatrix 118(ivec) 2
              130:             TypePointer Function 129
-             132:             TypeMatrix 112(ivec) 3
-             133:             TypePointer Function 132
-             137:             TypeVector 111(int) 4
-             138:             TypeMatrix 137(ivec4) 1
+             134:             TypeVector 117(int) 3
+             135:             TypeMatrix 134(ivec3) 1
+             136:             TypePointer Function 135
+             138:             TypeMatrix 118(ivec) 3
              139:             TypePointer Function 138
-             141:             TypeMatrix 112(ivec) 4
-             142:             TypePointer Function 141
-             150:             TypeMatrix 119(ivec2) 2
-             151:             TypePointer Function 150
-             156:             TypeMatrix 128(ivec3) 2
+             143:             TypeVector 117(int) 4
+             144:             TypeMatrix 143(ivec4) 1
+             145:             TypePointer Function 144
+             147:             TypeMatrix 118(ivec) 4
+             148:             TypePointer Function 147
+             156:             TypeMatrix 125(ivec2) 2
              157:             TypePointer Function 156
-             159:             TypeMatrix 119(ivec2) 3
-             160:             TypePointer Function 159
-             164:             TypeMatrix 137(ivec4) 2
-             165:             TypePointer Function 164
-             167:             TypeMatrix 119(ivec2) 4
-             168:             TypePointer Function 167
-             180:             TypeMatrix 128(ivec3) 3
-             181:             TypePointer Function 180
-             186:             TypeMatrix 137(ivec4) 3
+             162:             TypeMatrix 134(ivec3) 2
+             163:             TypePointer Function 162
+             165:             TypeMatrix 125(ivec2) 3
+             166:             TypePointer Function 165
+             170:             TypeMatrix 143(ivec4) 2
+             171:             TypePointer Function 170
+             173:             TypeMatrix 125(ivec2) 4
+             174:             TypePointer Function 173
+             186:             TypeMatrix 134(ivec3) 3
              187:             TypePointer Function 186
-             189:             TypeMatrix 128(ivec3) 4
-             190:             TypePointer Function 189
-             206:             TypeMatrix 137(ivec4) 4
-             207:             TypePointer Function 206
-             212:             TypeFloat 32
-             213:             TypeVector 212(float) 4
-  214(PS_OUTPUT):             TypeStruct 213(fvec4)
-             215:             TypePointer Function 214(PS_OUTPUT)
-             217:     10(int) Constant 0
-             218:  212(float) Constant 0
-             219:  213(fvec4) ConstantComposite 218 218 218 218
-             220:             TypePointer Function 213(fvec4)
-             222:             TypePointer Output 213(fvec4)
-      223(color):    222(ptr) Variable Output
+             192:             TypeMatrix 143(ivec4) 3
+             193:             TypePointer Function 192
+             195:             TypeMatrix 134(ivec3) 4
+             196:             TypePointer Function 195
+             212:             TypeMatrix 143(ivec4) 4
+             213:             TypePointer Function 212
+             218:             TypePointer Function 12(PS_OUTPUT)
+             220:     16(int) Constant 0
+             221:   10(float) Constant 0
+             222:   11(fvec4) ConstantComposite 221 221 221 221
+             223:             TypePointer Function 11(fvec4)
+             228:             TypePointer Output 11(fvec4)
+      229(color):    228(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-  216(ps_output):    215(ptr) Variable Function
-             221:    220(ptr) AccessChain 216(ps_output) 217
-                              Store 221 219
-             224:    220(ptr) AccessChain 216(ps_output) 217
-             225:  213(fvec4) Load 224
-                              Store 223(color) 225
+             230:12(PS_OUTPUT) FunctionCall 14(@main()
+             231:   11(fvec4) CompositeExtract 230 0
+                              Store 229(color) 231
                               Return
                               FunctionEnd
 6(TestIntMatTypes():           2 Function None 3
                7:             Label
-         14(r00):     13(ptr) Variable Function
-        15(i1x1):     13(ptr) Variable Function
-         21(r01):     20(ptr) Variable Function
-        24(i2x1):     23(ptr) Variable Function
-         30(r02):     29(ptr) Variable Function
-        33(i3x1):     32(ptr) Variable Function
-         39(r03):     38(ptr) Variable Function
-        42(i4x1):     41(ptr) Variable Function
-         45(r10):     23(ptr) Variable Function
-        46(i1x2):     20(ptr) Variable Function
-         51(r11):     50(ptr) Variable Function
-        52(i2x2):     50(ptr) Variable Function
-         57(r12):     56(ptr) Variable Function
-        60(i3x2):     59(ptr) Variable Function
-         65(r13):     64(ptr) Variable Function
-        68(i4x2):     67(ptr) Variable Function
-         71(r20):     32(ptr) Variable Function
-        72(i1x3):     29(ptr) Variable Function
-         75(r21):     59(ptr) Variable Function
-        76(i2x3):     56(ptr) Variable Function
-         81(r22):     80(ptr) Variable Function
-        82(i3x3):     80(ptr) Variable Function
-         87(r23):     86(ptr) Variable Function
-        90(i4x3):     89(ptr) Variable Function
-         93(r30):     41(ptr) Variable Function
-        94(i1x4):     38(ptr) Variable Function
-         97(r31):     67(ptr) Variable Function
-        98(i2x4):     64(ptr) Variable Function
-        101(r32):     89(ptr) Variable Function
-       102(i3x4):     86(ptr) Variable Function
-        107(r33):    106(ptr) Variable Function
-       108(i4x4):    106(ptr) Variable Function
-              16:          12 Load 15(i1x1)
-              17:          12 Transpose 16
-                              Store 14(r00) 17
-              25:          22 Load 24(i2x1)
-              26:          19 Transpose 25
-                              Store 21(r01) 26
-              34:          31 Load 33(i3x1)
-              35:          28 Transpose 34
-                              Store 30(r02) 35
-              43:          40 Load 42(i4x1)
-              44:          37 Transpose 43
-                              Store 39(r03) 44
-              47:          19 Load 46(i1x2)
-              48:          22 Transpose 47
-                              Store 45(r10) 48
-              53:          49 Load 52(i2x2)
-              54:          49 Transpose 53
-                              Store 51(r11) 54
-              61:          58 Load 60(i3x2)
-              62:          55 Transpose 61
-                              Store 57(r12) 62
-              69:          66 Load 68(i4x2)
-              70:          63 Transpose 69
-                              Store 65(r13) 70
-              73:          28 Load 72(i1x3)
-              74:          31 Transpose 73
-                              Store 71(r20) 74
-              77:          55 Load 76(i2x3)
-              78:          58 Transpose 77
-                              Store 75(r21) 78
-              83:          79 Load 82(i3x3)
-              84:          79 Transpose 83
-                              Store 81(r22) 84
-              91:          88 Load 90(i4x3)
-              92:          85 Transpose 91
-                              Store 87(r23) 92
-              95:          37 Load 94(i1x4)
-              96:          40 Transpose 95
-                              Store 93(r30) 96
-              99:          63 Load 98(i2x4)
-             100:          66 Transpose 99
-                              Store 97(r31) 100
-             103:          85 Load 102(i3x4)
-             104:          88 Transpose 103
-                              Store 101(r32) 104
-             109:         105 Load 108(i4x4)
-             110:         105 Transpose 109
-                              Store 107(r33) 110
+         20(r00):     19(ptr) Variable Function
+        21(i1x1):     19(ptr) Variable Function
+         27(r01):     26(ptr) Variable Function
+        30(i2x1):     29(ptr) Variable Function
+         36(r02):     35(ptr) Variable Function
+        39(i3x1):     38(ptr) Variable Function
+         45(r03):     44(ptr) Variable Function
+        48(i4x1):     47(ptr) Variable Function
+         51(r10):     29(ptr) Variable Function
+        52(i1x2):     26(ptr) Variable Function
+         57(r11):     56(ptr) Variable Function
+        58(i2x2):     56(ptr) Variable Function
+         63(r12):     62(ptr) Variable Function
+        66(i3x2):     65(ptr) Variable Function
+         71(r13):     70(ptr) Variable Function
+        74(i4x2):     73(ptr) Variable Function
+         77(r20):     38(ptr) Variable Function
+        78(i1x3):     35(ptr) Variable Function
+         81(r21):     65(ptr) Variable Function
+        82(i2x3):     62(ptr) Variable Function
+         87(r22):     86(ptr) Variable Function
+        88(i3x3):     86(ptr) Variable Function
+         93(r23):     92(ptr) Variable Function
+        96(i4x3):     95(ptr) Variable Function
+         99(r30):     47(ptr) Variable Function
+       100(i1x4):     44(ptr) Variable Function
+        103(r31):     73(ptr) Variable Function
+       104(i2x4):     70(ptr) Variable Function
+        107(r32):     95(ptr) Variable Function
+       108(i3x4):     92(ptr) Variable Function
+        113(r33):    112(ptr) Variable Function
+       114(i4x4):    112(ptr) Variable Function
+              22:          18 Load 21(i1x1)
+              23:          18 Transpose 22
+                              Store 20(r00) 23
+              31:          28 Load 30(i2x1)
+              32:          25 Transpose 31
+                              Store 27(r01) 32
+              40:          37 Load 39(i3x1)
+              41:          34 Transpose 40
+                              Store 36(r02) 41
+              49:          46 Load 48(i4x1)
+              50:          43 Transpose 49
+                              Store 45(r03) 50
+              53:          25 Load 52(i1x2)
+              54:          28 Transpose 53
+                              Store 51(r10) 54
+              59:          55 Load 58(i2x2)
+              60:          55 Transpose 59
+                              Store 57(r11) 60
+              67:          64 Load 66(i3x2)
+              68:          61 Transpose 67
+                              Store 63(r12) 68
+              75:          72 Load 74(i4x2)
+              76:          69 Transpose 75
+                              Store 71(r13) 76
+              79:          34 Load 78(i1x3)
+              80:          37 Transpose 79
+                              Store 77(r20) 80
+              83:          61 Load 82(i2x3)
+              84:          64 Transpose 83
+                              Store 81(r21) 84
+              89:          85 Load 88(i3x3)
+              90:          85 Transpose 89
+                              Store 87(r22) 90
+              97:          94 Load 96(i4x3)
+              98:          91 Transpose 97
+                              Store 93(r23) 98
+             101:          43 Load 100(i1x4)
+             102:          46 Transpose 101
+                              Store 99(r30) 102
+             105:          69 Load 104(i2x4)
+             106:          72 Transpose 105
+                              Store 103(r31) 106
+             109:          91 Load 108(i3x4)
+             110:          94 Transpose 109
+                              Store 107(r32) 110
+             115:         111 Load 114(i4x4)
+             116:         111 Transpose 115
+                              Store 113(r33) 116
                               Return
                               FunctionEnd
 8(TestUintMatTypes():           2 Function None 3
                9:             Label
-        115(r00):    114(ptr) Variable Function
-       116(u1x1):    114(ptr) Variable Function
-        122(r01):    121(ptr) Variable Function
-       125(u2x1):    124(ptr) Variable Function
-        131(r02):    130(ptr) Variable Function
-       134(u3x1):    133(ptr) Variable Function
-        140(r03):    139(ptr) Variable Function
-       143(u4x1):    142(ptr) Variable Function
-        146(r10):    124(ptr) Variable Function
-       147(u1x2):    121(ptr) Variable Function
-        152(r11):    151(ptr) Variable Function
-       153(u2x2):    151(ptr) Variable Function
-        158(r12):    157(ptr) Variable Function
-       161(u3x2):    160(ptr) Variable Function
-        166(r13):    165(ptr) Variable Function
-       169(u4x2):    168(ptr) Variable Function
-        172(r20):    133(ptr) Variable Function
-       173(u1x3):    130(ptr) Variable Function
-        176(r21):    160(ptr) Variable Function
-       177(u2x3):    157(ptr) Variable Function
-        182(r22):    181(ptr) Variable Function
-       183(u3x3):    181(ptr) Variable Function
-        188(r23):    187(ptr) Variable Function
-       191(u4x3):    190(ptr) Variable Function
-        194(r30):    142(ptr) Variable Function
-       195(u1x4):    139(ptr) Variable Function
-        198(r31):    168(ptr) Variable Function
-       199(u2x4):    165(ptr) Variable Function
-        202(r32):    190(ptr) Variable Function
-       203(u3x4):    187(ptr) Variable Function
-        208(r33):    207(ptr) Variable Function
-       209(u4x4):    207(ptr) Variable Function
-             117:         113 Load 116(u1x1)
-             118:         113 Transpose 117
-                              Store 115(r00) 118
-             126:         123 Load 125(u2x1)
-             127:         120 Transpose 126
-                              Store 122(r01) 127
-             135:         132 Load 134(u3x1)
-             136:         129 Transpose 135
-                              Store 131(r02) 136
-             144:         141 Load 143(u4x1)
-             145:         138 Transpose 144
-                              Store 140(r03) 145
-             148:         120 Load 147(u1x2)
-             149:         123 Transpose 148
-                              Store 146(r10) 149
-             154:         150 Load 153(u2x2)
-             155:         150 Transpose 154
-                              Store 152(r11) 155
-             162:         159 Load 161(u3x2)
-             163:         156 Transpose 162
-                              Store 158(r12) 163
-             170:         167 Load 169(u4x2)
-             171:         164 Transpose 170
-                              Store 166(r13) 171
-             174:         129 Load 173(u1x3)
-             175:         132 Transpose 174
-                              Store 172(r20) 175
-             178:         156 Load 177(u2x3)
-             179:         159 Transpose 178
-                              Store 176(r21) 179
-             184:         180 Load 183(u3x3)
-             185:         180 Transpose 184
-                              Store 182(r22) 185
-             192:         189 Load 191(u4x3)
-             193:         186 Transpose 192
-                              Store 188(r23) 193
-             196:         138 Load 195(u1x4)
-             197:         141 Transpose 196
-                              Store 194(r30) 197
-             200:         164 Load 199(u2x4)
-             201:         167 Transpose 200
-                              Store 198(r31) 201
-             204:         186 Load 203(u3x4)
-             205:         189 Transpose 204
-                              Store 202(r32) 205
-             210:         206 Load 209(u4x4)
-             211:         206 Transpose 210
-                              Store 208(r33) 211
+        121(r00):    120(ptr) Variable Function
+       122(u1x1):    120(ptr) Variable Function
+        128(r01):    127(ptr) Variable Function
+       131(u2x1):    130(ptr) Variable Function
+        137(r02):    136(ptr) Variable Function
+       140(u3x1):    139(ptr) Variable Function
+        146(r03):    145(ptr) Variable Function
+       149(u4x1):    148(ptr) Variable Function
+        152(r10):    130(ptr) Variable Function
+       153(u1x2):    127(ptr) Variable Function
+        158(r11):    157(ptr) Variable Function
+       159(u2x2):    157(ptr) Variable Function
+        164(r12):    163(ptr) Variable Function
+       167(u3x2):    166(ptr) Variable Function
+        172(r13):    171(ptr) Variable Function
+       175(u4x2):    174(ptr) Variable Function
+        178(r20):    139(ptr) Variable Function
+       179(u1x3):    136(ptr) Variable Function
+        182(r21):    166(ptr) Variable Function
+       183(u2x3):    163(ptr) Variable Function
+        188(r22):    187(ptr) Variable Function
+       189(u3x3):    187(ptr) Variable Function
+        194(r23):    193(ptr) Variable Function
+       197(u4x3):    196(ptr) Variable Function
+        200(r30):    148(ptr) Variable Function
+       201(u1x4):    145(ptr) Variable Function
+        204(r31):    174(ptr) Variable Function
+       205(u2x4):    171(ptr) Variable Function
+        208(r32):    196(ptr) Variable Function
+       209(u3x4):    193(ptr) Variable Function
+        214(r33):    213(ptr) Variable Function
+       215(u4x4):    213(ptr) Variable Function
+             123:         119 Load 122(u1x1)
+             124:         119 Transpose 123
+                              Store 121(r00) 124
+             132:         129 Load 131(u2x1)
+             133:         126 Transpose 132
+                              Store 128(r01) 133
+             141:         138 Load 140(u3x1)
+             142:         135 Transpose 141
+                              Store 137(r02) 142
+             150:         147 Load 149(u4x1)
+             151:         144 Transpose 150
+                              Store 146(r03) 151
+             154:         126 Load 153(u1x2)
+             155:         129 Transpose 154
+                              Store 152(r10) 155
+             160:         156 Load 159(u2x2)
+             161:         156 Transpose 160
+                              Store 158(r11) 161
+             168:         165 Load 167(u3x2)
+             169:         162 Transpose 168
+                              Store 164(r12) 169
+             176:         173 Load 175(u4x2)
+             177:         170 Transpose 176
+                              Store 172(r13) 177
+             180:         135 Load 179(u1x3)
+             181:         138 Transpose 180
+                              Store 178(r20) 181
+             184:         162 Load 183(u2x3)
+             185:         165 Transpose 184
+                              Store 182(r21) 185
+             190:         186 Load 189(u3x3)
+             191:         186 Transpose 190
+                              Store 188(r22) 191
+             198:         195 Load 197(u4x3)
+             199:         192 Transpose 198
+                              Store 194(r23) 199
+             202:         144 Load 201(u1x4)
+             203:         147 Transpose 202
+                              Store 200(r30) 203
+             206:         170 Load 205(u2x4)
+             207:         173 Transpose 206
+                              Store 204(r31) 207
+             210:         192 Load 209(u3x4)
+             211:         195 Transpose 210
+                              Store 208(r32) 211
+             216:         212 Load 215(u4x4)
+             217:         212 Transpose 216
+                              Store 214(r33) 217
                               Return
                               FunctionEnd
+      14(@main():12(PS_OUTPUT) Function None 13
+              15:             Label
+  219(ps_output):    218(ptr) Variable Function
+             224:    223(ptr) AccessChain 219(ps_output) 220
+                              Store 224 222
+             225:12(PS_OUTPUT) Load 219(ps_output)
+                              ReturnValue 225
+                              FunctionEnd

+ 174 - 141
3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out

@@ -1,9 +1,9 @@
 hlsl.matrixSwizzle.vert
 Shader version: 450
 0:? Sequence
-0:2  Function Definition: ShaderFunction(f1; (temp void)
+0:2  Function Definition: @ShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
-0:2      'inf' (layout(location=0 ) in float)
+0:2      'inf' (in float)
 0:?     Sequence
 0:7      move second child to first child (temp float)
 0:7        direct index (temp float)
@@ -205,6 +205,14 @@ Shader version: 450
 0:23              2 (const int)
 0:23            Constant:
 0:23              0 (const int)
+0:2  Function Definition: ShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         'inf' (temp float)
+0:?         'inf' (layout(location=0 ) in float)
+0:2      Function Call: @ShaderFunction(f1; (temp void)
+0:?         'inf' (temp float)
 0:27  Function Definition: createMat3x3(vf3;vf3;vf3; (temp 3X3 matrix of float)
 0:27    Function Parameters: 
 0:27      'a' (in 3-component vector of float)
@@ -333,9 +341,9 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:2  Function Definition: ShaderFunction(f1; (temp void)
+0:2  Function Definition: @ShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
-0:2      'inf' (layout(location=0 ) in float)
+0:2      'inf' (in float)
 0:?     Sequence
 0:7      move second child to first child (temp float)
 0:7        direct index (temp float)
@@ -537,6 +545,14 @@ Shader version: 450
 0:23              2 (const int)
 0:23            Constant:
 0:23              0 (const int)
+0:2  Function Definition: ShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp float)
+0:?         'inf' (temp float)
+0:?         'inf' (layout(location=0 ) in float)
+0:2      Function Call: @ShaderFunction(f1; (temp void)
+0:?         'inf' (temp float)
 0:27  Function Definition: createMat3x3(vf3;vf3;vf3; (temp 3X3 matrix of float)
 0:27    Function Parameters: 
 0:27      'a' (in 3-component vector of float)
@@ -662,157 +678,174 @@ Shader version: 450
 Missing functionality: matrix swizzle
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 109
+// Id's are bound by 118
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "ShaderFunction" 108
+                              EntryPoint Vertex 4  "ShaderFunction" 81
                               Name 4  "ShaderFunction"
-                              Name 14  "createMat3x3(vf3;vf3;vf3;"
-                              Name 11  "a"
-                              Name 12  "b"
-                              Name 13  "c"
-                              Name 19  "m"
-                              Name 38  "f3"
-                              Name 51  "intermVec"
-                              Name 63  "intermVec"
-                              Name 76  "m"
-                              Name 108  "inf"
-                              Decorate 108(inf) Location 0
+                              Name 10  "@ShaderFunction(f1;"
+                              Name 9  "inf"
+                              Name 19  "createMat3x3(vf3;vf3;vf3;"
+                              Name 16  "a"
+                              Name 17  "b"
+                              Name 18  "c"
+                              Name 24  "m"
+                              Name 42  "f3"
+                              Name 55  "intermVec"
+                              Name 67  "intermVec"
+                              Name 79  "inf"
+                              Name 81  "inf"
+                              Name 83  "param"
+                              Name 87  "m"
+                              Decorate 81(inf) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 3
-               8:             TypePointer Function 7(fvec3)
-               9:             TypeMatrix 7(fvec3) 3
-              10:             TypeFunction 9 8(ptr) 8(ptr) 8(ptr)
-              16:             TypeVector 6(float) 4
-              17:             TypeMatrix 16(fvec4) 3
-              18:             TypePointer Function 17
-              20:             TypeInt 32 1
-              21:     20(int) Constant 2
-              22:    6(float) Constant 1065353216
-              23:             TypeInt 32 0
-              24:     23(int) Constant 3
-              25:             TypePointer Function 6(float)
-              27:    6(float) Constant 1073741824
-              30:     20(int) Constant 0
-              31:    6(float) Constant 1077936128
-              32:   16(fvec4) ConstantComposite 31 31 31 31
-              33:             TypePointer Function 16(fvec4)
-              35:     20(int) Constant 1
-              39:     23(int) Constant 0
-              43:     23(int) Constant 1
-              47:     23(int) Constant 2
-              52:    6(float) Constant 1084227584
-              53:    7(fvec3) ConstantComposite 52 52 52
-              75:             TypePointer Function 9
-             107:             TypePointer Input 6(float)
-        108(inf):    107(ptr) Variable Input
+               7:             TypePointer Function 6(float)
+               8:             TypeFunction 2 7(ptr)
+              12:             TypeVector 6(float) 3
+              13:             TypePointer Function 12(fvec3)
+              14:             TypeMatrix 12(fvec3) 3
+              15:             TypeFunction 14 13(ptr) 13(ptr) 13(ptr)
+              21:             TypeVector 6(float) 4
+              22:             TypeMatrix 21(fvec4) 3
+              23:             TypePointer Function 22
+              25:             TypeInt 32 1
+              26:     25(int) Constant 2
+              27:    6(float) Constant 1065353216
+              28:             TypeInt 32 0
+              29:     28(int) Constant 3
+              31:    6(float) Constant 1073741824
+              34:     25(int) Constant 0
+              35:    6(float) Constant 1077936128
+              36:   21(fvec4) ConstantComposite 35 35 35 35
+              37:             TypePointer Function 21(fvec4)
+              39:     25(int) Constant 1
+              43:     28(int) Constant 0
+              47:     28(int) Constant 1
+              51:     28(int) Constant 2
+              56:    6(float) Constant 1084227584
+              57:   12(fvec3) ConstantComposite 56 56 56
+              80:             TypePointer Input 6(float)
+         81(inf):     80(ptr) Variable Input
+              86:             TypePointer Function 14
 4(ShaderFunction):           2 Function None 3
                5:             Label
-           19(m):     18(ptr) Variable Function
-          38(f3):      8(ptr) Variable Function
-   51(intermVec):      8(ptr) Variable Function
-   63(intermVec):      8(ptr) Variable Function
-              26:     25(ptr) AccessChain 19(m) 21 24
-                              Store 26 22
-              28:     25(ptr) AccessChain 19(m) 21 24
-                              Store 28 27
-              29:     25(ptr) AccessChain 19(m) 21 24
-                              Store 29 27
-              34:     33(ptr) AccessChain 19(m) 30
-                              Store 34 32
-              36:     33(ptr) AccessChain 19(m) 35
-                              Store 36 32
-              37:     33(ptr) AccessChain 19(m) 35
-                              Store 37 32
-              40:     25(ptr) AccessChain 38(f3) 39
-              41:    6(float) Load 40
-              42:     25(ptr) AccessChain 19(m) 30 39
-                              Store 42 41
-              44:     25(ptr) AccessChain 38(f3) 43
+         79(inf):      7(ptr) Variable Function
+       83(param):      7(ptr) Variable Function
+              82:    6(float) Load 81(inf)
+                              Store 79(inf) 82
+              84:    6(float) Load 79(inf)
+                              Store 83(param) 84
+              85:           2 FunctionCall 10(@ShaderFunction(f1;) 83(param)
+                              Return
+                              FunctionEnd
+10(@ShaderFunction(f1;):           2 Function None 8
+          9(inf):      7(ptr) FunctionParameter
+              11:             Label
+           24(m):     23(ptr) Variable Function
+          42(f3):     13(ptr) Variable Function
+   55(intermVec):     13(ptr) Variable Function
+   67(intermVec):     13(ptr) Variable Function
+              30:      7(ptr) AccessChain 24(m) 26 29
+                              Store 30 27
+              32:      7(ptr) AccessChain 24(m) 26 29
+                              Store 32 31
+              33:      7(ptr) AccessChain 24(m) 26 29
+                              Store 33 31
+              38:     37(ptr) AccessChain 24(m) 34
+                              Store 38 36
+              40:     37(ptr) AccessChain 24(m) 39
+                              Store 40 36
+              41:     37(ptr) AccessChain 24(m) 39
+                              Store 41 36
+              44:      7(ptr) AccessChain 42(f3) 43
               45:    6(float) Load 44
-              46:     25(ptr) AccessChain 19(m) 35 43
+              46:      7(ptr) AccessChain 24(m) 34 43
                               Store 46 45
-              48:     25(ptr) AccessChain 38(f3) 47
+              48:      7(ptr) AccessChain 42(f3) 47
               49:    6(float) Load 48
-              50:     25(ptr) AccessChain 19(m) 35 47
+              50:      7(ptr) AccessChain 24(m) 39 47
                               Store 50 49
-                              Store 51(intermVec) 53
-              54:     25(ptr) AccessChain 51(intermVec) 39
-              55:    6(float) Load 54
-              56:     25(ptr) AccessChain 19(m) 35 39
-                              Store 56 55
-              57:     25(ptr) AccessChain 51(intermVec) 43
-              58:    6(float) Load 57
-              59:     25(ptr) AccessChain 19(m) 30 43
-                              Store 59 58
-              60:     25(ptr) AccessChain 51(intermVec) 47
-              61:    6(float) Load 60
-              62:     25(ptr) AccessChain 19(m) 21 39
-                              Store 62 61
-              64:    7(fvec3) Load 38(f3)
-              65:    7(fvec3) VectorTimesScalar 64 27
-                              Store 63(intermVec) 65
-              66:     25(ptr) AccessChain 63(intermVec) 39
-              67:    6(float) Load 66
-              68:     25(ptr) AccessChain 19(m) 30 39
-                              Store 68 67
-              69:     25(ptr) AccessChain 63(intermVec) 43
-              70:    6(float) Load 69
-              71:     25(ptr) AccessChain 19(m) 30 43
-                              Store 71 70
-              72:     25(ptr) AccessChain 63(intermVec) 47
-              73:    6(float) Load 72
-              74:     25(ptr) AccessChain 19(m) 35 39
-                              Store 74 73
-                              Store 38(f3) 30
+              52:      7(ptr) AccessChain 42(f3) 51
+              53:    6(float) Load 52
+              54:      7(ptr) AccessChain 24(m) 39 51
+                              Store 54 53
+                              Store 55(intermVec) 57
+              58:      7(ptr) AccessChain 55(intermVec) 43
+              59:    6(float) Load 58
+              60:      7(ptr) AccessChain 24(m) 39 43
+                              Store 60 59
+              61:      7(ptr) AccessChain 55(intermVec) 47
+              62:    6(float) Load 61
+              63:      7(ptr) AccessChain 24(m) 34 47
+                              Store 63 62
+              64:      7(ptr) AccessChain 55(intermVec) 51
+              65:    6(float) Load 64
+              66:      7(ptr) AccessChain 24(m) 26 43
+                              Store 66 65
+              68:   12(fvec3) Load 42(f3)
+              69:   12(fvec3) VectorTimesScalar 68 31
+                              Store 67(intermVec) 69
+              70:      7(ptr) AccessChain 67(intermVec) 43
+              71:    6(float) Load 70
+              72:      7(ptr) AccessChain 24(m) 34 43
+                              Store 72 71
+              73:      7(ptr) AccessChain 67(intermVec) 47
+              74:    6(float) Load 73
+              75:      7(ptr) AccessChain 24(m) 34 47
+                              Store 75 74
+              76:      7(ptr) AccessChain 67(intermVec) 51
+              77:    6(float) Load 76
+              78:      7(ptr) AccessChain 24(m) 39 43
+                              Store 78 77
+                              Store 42(f3) 34
                               Return
                               FunctionEnd
-14(createMat3x3(vf3;vf3;vf3;):           9 Function None 10
-           11(a):      8(ptr) FunctionParameter
-           12(b):      8(ptr) FunctionParameter
-           13(c):      8(ptr) FunctionParameter
-              15:             Label
-           76(m):     75(ptr) Variable Function
-              77:     25(ptr) AccessChain 11(a) 39
-              78:    6(float) Load 77
-              79:     25(ptr) AccessChain 76(m) 30 39
-                              Store 79 78
-              80:     25(ptr) AccessChain 11(a) 43
-              81:    6(float) Load 80
-              82:     25(ptr) AccessChain 76(m) 35 39
-                              Store 82 81
-              83:     25(ptr) AccessChain 11(a) 47
-              84:    6(float) Load 83
-              85:     25(ptr) AccessChain 76(m) 21 39
-                              Store 85 84
-              86:     25(ptr) AccessChain 12(b) 39
-              87:    6(float) Load 86
-              88:     25(ptr) AccessChain 76(m) 30 43
-                              Store 88 87
-              89:     25(ptr) AccessChain 12(b) 43
-              90:    6(float) Load 89
-              91:     25(ptr) AccessChain 76(m) 35 43
-                              Store 91 90
-              92:     25(ptr) AccessChain 12(b) 47
-              93:    6(float) Load 92
-              94:     25(ptr) AccessChain 76(m) 21 43
-                              Store 94 93
-              95:     25(ptr) AccessChain 13(c) 39
-              96:    6(float) Load 95
-              97:     25(ptr) AccessChain 76(m) 30 47
-                              Store 97 96
-              98:     25(ptr) AccessChain 13(c) 43
-              99:    6(float) Load 98
-             100:     25(ptr) AccessChain 76(m) 35 47
-                              Store 100 99
-             101:     25(ptr) AccessChain 13(c) 47
-             102:    6(float) Load 101
-             103:     25(ptr) AccessChain 76(m) 21 47
-                              Store 103 102
-             104:           9 Load 76(m)
-                              ReturnValue 104
+19(createMat3x3(vf3;vf3;vf3;):          14 Function None 15
+           16(a):     13(ptr) FunctionParameter
+           17(b):     13(ptr) FunctionParameter
+           18(c):     13(ptr) FunctionParameter
+              20:             Label
+           87(m):     86(ptr) Variable Function
+              88:      7(ptr) AccessChain 16(a) 43
+              89:    6(float) Load 88
+              90:      7(ptr) AccessChain 87(m) 34 43
+                              Store 90 89
+              91:      7(ptr) AccessChain 16(a) 47
+              92:    6(float) Load 91
+              93:      7(ptr) AccessChain 87(m) 39 43
+                              Store 93 92
+              94:      7(ptr) AccessChain 16(a) 51
+              95:    6(float) Load 94
+              96:      7(ptr) AccessChain 87(m) 26 43
+                              Store 96 95
+              97:      7(ptr) AccessChain 17(b) 43
+              98:    6(float) Load 97
+              99:      7(ptr) AccessChain 87(m) 34 47
+                              Store 99 98
+             100:      7(ptr) AccessChain 17(b) 47
+             101:    6(float) Load 100
+             102:      7(ptr) AccessChain 87(m) 39 47
+                              Store 102 101
+             103:      7(ptr) AccessChain 17(b) 51
+             104:    6(float) Load 103
+             105:      7(ptr) AccessChain 87(m) 26 47
+                              Store 105 104
+             106:      7(ptr) AccessChain 18(c) 43
+             107:    6(float) Load 106
+             108:      7(ptr) AccessChain 87(m) 34 51
+                              Store 108 107
+             109:      7(ptr) AccessChain 18(c) 47
+             110:    6(float) Load 109
+             111:      7(ptr) AccessChain 87(m) 39 51
+                              Store 111 110
+             112:      7(ptr) AccessChain 18(c) 51
+             113:    6(float) Load 112
+             114:      7(ptr) AccessChain 87(m) 26 51
+                              Store 114 113
+             115:          14 Load 87(m)
+                              ReturnValue 115
                               FunctionEnd

+ 158 - 145
3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out

@@ -2,7 +2,7 @@ hlsl.matrixindex.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:22      Sequence
@@ -117,15 +117,18 @@ gl_FragCoord origin is upper left
 0:47            0 (const int)
 0:47        Construct vec4 (temp 4-component vector of float)
 0:47          'e2_11' (temp float)
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:48            Color: direct index for structure (temp 4-component vector of float)
-0:48              'psout' (temp structure{temp 4-component vector of float Color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
@@ -137,7 +140,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:10    Function Parameters: 
 0:?     Sequence
 0:22      Sequence
@@ -252,156 +255,166 @@ gl_FragCoord origin is upper left
 0:47            0 (const int)
 0:47        Construct vec4 (temp 4-component vector of float)
 0:47          'e2_11' (temp float)
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:48            Color: direct index for structure (temp 4-component vector of float)
-0:48              'psout' (temp structure{temp 4-component vector of float Color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color})
+0:10  Function Definition: main( (temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:10          Color: direct index for structure (temp 4-component vector of float)
+0:10            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:10            Constant:
+0:10              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 78
+// Id's are bound by 83
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 74
+                              EntryPoint Fragment 4  "main" 80
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "e1_00"
-                              Name 10  "e1_01"
-                              Name 12  "e1_10"
-                              Name 14  "e1_11"
-                              Name 16  "e1_20"
-                              Name 18  "e1_21"
-                              Name 20  "e2_00"
-                              Name 22  "e2_01"
-                              Name 24  "e2_10"
-                              Name 26  "e2_11"
-                              Name 28  "e2_20"
-                              Name 30  "e2_21"
-                              Name 34  "r0a"
-                              Name 36  "r1a"
-                              Name 38  "r2a"
-                              Name 40  "r0b"
-                              Name 47  "$Global"
-                              MemberName 47($Global) 0  "idx"
-                              MemberName 47($Global) 1  "um"
-                              Name 49  ""
-                              Name 55  "indexable"
-                              Name 58  "r0c"
-                              Name 66  "PS_OUTPUT"
-                              MemberName 66(PS_OUTPUT) 0  "Color"
-                              Name 68  "psout"
-                              Name 74  "Color"
-                              MemberDecorate 47($Global) 0 Offset 0
-                              MemberDecorate 47($Global) 1 RowMajor
-                              MemberDecorate 47($Global) 1 Offset 16
-                              MemberDecorate 47($Global) 1 MatrixStride 16
-                              Decorate 47($Global) Block
-                              Decorate 49 DescriptorSet 0
-                              Decorate 74(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 13  "e1_00"
+                              Name 15  "e1_01"
+                              Name 17  "e1_10"
+                              Name 19  "e1_11"
+                              Name 21  "e1_20"
+                              Name 23  "e1_21"
+                              Name 25  "e2_00"
+                              Name 27  "e2_01"
+                              Name 29  "e2_10"
+                              Name 31  "e2_11"
+                              Name 33  "e2_20"
+                              Name 35  "e2_21"
+                              Name 39  "r0a"
+                              Name 41  "r1a"
+                              Name 43  "r2a"
+                              Name 45  "r0b"
+                              Name 52  "$Global"
+                              MemberName 52($Global) 0  "idx"
+                              MemberName 52($Global) 1  "um"
+                              Name 54  ""
+                              Name 60  "indexable"
+                              Name 63  "r0c"
+                              Name 71  "psout"
+                              Name 80  "Color"
+                              MemberDecorate 52($Global) 0 Offset 0
+                              MemberDecorate 52($Global) 1 RowMajor
+                              MemberDecorate 52($Global) 1 Offset 16
+                              MemberDecorate 52($Global) 1 MatrixStride 16
+                              Decorate 52($Global) Block
+                              Decorate 54 DescriptorSet 0
+                              Decorate 80(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               9:    6(float) Constant 1092616192
-              11:    6(float) Constant 1093664768
-              13:    6(float) Constant 1094713344
-              15:    6(float) Constant 1095761920
-              17:    6(float) Constant 1096810496
-              19:    6(float) Constant 1097859072
-              21:    6(float) Constant 1101004800
-              23:    6(float) Constant 1101529088
-              25:    6(float) Constant 1102053376
-              27:    6(float) Constant 1102577664
-              29:    6(float) Constant 1103101952
-              31:    6(float) Constant 1103626240
-              32:             TypeVector 6(float) 2
-              33:             TypePointer Function 32(fvec2)
-              35:   32(fvec2) ConstantComposite 9 11
-              37:   32(fvec2) ConstantComposite 13 15
-              39:   32(fvec2) ConstantComposite 17 19
-              41:             TypeMatrix 32(fvec2) 3
-              42:   32(fvec2) ConstantComposite 21 23
-              43:   32(fvec2) ConstantComposite 25 27
-              44:   32(fvec2) ConstantComposite 29 31
-              45:          41 ConstantComposite 42 43 44
-              46:             TypeInt 32 1
-     47($Global):             TypeStruct 46(int) 41
-              48:             TypePointer Uniform 47($Global)
-              49:     48(ptr) Variable Uniform
-              50:     46(int) Constant 0
-              51:             TypePointer Uniform 46(int)
-              54:             TypePointer Function 41
-              59:     46(int) Constant 1
-              62:             TypePointer Uniform 32(fvec2)
-              65:             TypeVector 6(float) 4
-   66(PS_OUTPUT):             TypeStruct 65(fvec4)
-              67:             TypePointer Function 66(PS_OUTPUT)
-              71:             TypePointer Function 65(fvec4)
-              73:             TypePointer Output 65(fvec4)
-       74(Color):     73(ptr) Variable Output
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 6(float)
+              14:    6(float) Constant 1092616192
+              16:    6(float) Constant 1093664768
+              18:    6(float) Constant 1094713344
+              20:    6(float) Constant 1095761920
+              22:    6(float) Constant 1096810496
+              24:    6(float) Constant 1097859072
+              26:    6(float) Constant 1101004800
+              28:    6(float) Constant 1101529088
+              30:    6(float) Constant 1102053376
+              32:    6(float) Constant 1102577664
+              34:    6(float) Constant 1103101952
+              36:    6(float) Constant 1103626240
+              37:             TypeVector 6(float) 2
+              38:             TypePointer Function 37(fvec2)
+              40:   37(fvec2) ConstantComposite 14 16
+              42:   37(fvec2) ConstantComposite 18 20
+              44:   37(fvec2) ConstantComposite 22 24
+              46:             TypeMatrix 37(fvec2) 3
+              47:   37(fvec2) ConstantComposite 26 28
+              48:   37(fvec2) ConstantComposite 30 32
+              49:   37(fvec2) ConstantComposite 34 36
+              50:          46 ConstantComposite 47 48 49
+              51:             TypeInt 32 1
+     52($Global):             TypeStruct 51(int) 46
+              53:             TypePointer Uniform 52($Global)
+              54:     53(ptr) Variable Uniform
+              55:     51(int) Constant 0
+              56:             TypePointer Uniform 51(int)
+              59:             TypePointer Function 46
+              64:     51(int) Constant 1
+              67:             TypePointer Uniform 37(fvec2)
+              70:             TypePointer Function 8(PS_OUTPUT)
+              74:             TypePointer Function 7(fvec4)
+              79:             TypePointer Output 7(fvec4)
+       80(Color):     79(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-        8(e1_00):      7(ptr) Variable Function
-       10(e1_01):      7(ptr) Variable Function
-       12(e1_10):      7(ptr) Variable Function
-       14(e1_11):      7(ptr) Variable Function
-       16(e1_20):      7(ptr) Variable Function
-       18(e1_21):      7(ptr) Variable Function
-       20(e2_00):      7(ptr) Variable Function
-       22(e2_01):      7(ptr) Variable Function
-       24(e2_10):      7(ptr) Variable Function
-       26(e2_11):      7(ptr) Variable Function
-       28(e2_20):      7(ptr) Variable Function
-       30(e2_21):      7(ptr) Variable Function
-         34(r0a):     33(ptr) Variable Function
-         36(r1a):     33(ptr) Variable Function
-         38(r2a):     33(ptr) Variable Function
-         40(r0b):     33(ptr) Variable Function
-   55(indexable):     54(ptr) Variable Function
-         58(r0c):     33(ptr) Variable Function
-       68(psout):     67(ptr) Variable Function
-                              Store 8(e1_00) 9
-                              Store 10(e1_01) 11
-                              Store 12(e1_10) 13
-                              Store 14(e1_11) 15
-                              Store 16(e1_20) 17
-                              Store 18(e1_21) 19
-                              Store 20(e2_00) 21
-                              Store 22(e2_01) 23
-                              Store 24(e2_10) 25
-                              Store 26(e2_11) 27
-                              Store 28(e2_20) 29
-                              Store 30(e2_21) 31
-                              Store 34(r0a) 35
-                              Store 36(r1a) 37
-                              Store 38(r2a) 39
-              52:     51(ptr) AccessChain 49 50
-              53:     46(int) Load 52
-                              Store 55(indexable) 45
-              56:     33(ptr) AccessChain 55(indexable) 53
-              57:   32(fvec2) Load 56
-                              Store 40(r0b) 57
-              60:     51(ptr) AccessChain 49 50
-              61:     46(int) Load 60
-              63:     62(ptr) AccessChain 49 59 61
-              64:   32(fvec2) Load 63
-                              Store 58(r0c) 64
-              69:    6(float) Load 26(e2_11)
-              70:   65(fvec4) CompositeConstruct 69 69 69 69
-              72:     71(ptr) AccessChain 68(psout) 50
-                              Store 72 70
-              75:     71(ptr) AccessChain 68(psout) 50
-              76:   65(fvec4) Load 75
-                              Store 74(Color) 76
+              81:8(PS_OUTPUT) FunctionCall 10(@main()
+              82:    7(fvec4) CompositeExtract 81 0
+                              Store 80(Color) 82
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       13(e1_00):     12(ptr) Variable Function
+       15(e1_01):     12(ptr) Variable Function
+       17(e1_10):     12(ptr) Variable Function
+       19(e1_11):     12(ptr) Variable Function
+       21(e1_20):     12(ptr) Variable Function
+       23(e1_21):     12(ptr) Variable Function
+       25(e2_00):     12(ptr) Variable Function
+       27(e2_01):     12(ptr) Variable Function
+       29(e2_10):     12(ptr) Variable Function
+       31(e2_11):     12(ptr) Variable Function
+       33(e2_20):     12(ptr) Variable Function
+       35(e2_21):     12(ptr) Variable Function
+         39(r0a):     38(ptr) Variable Function
+         41(r1a):     38(ptr) Variable Function
+         43(r2a):     38(ptr) Variable Function
+         45(r0b):     38(ptr) Variable Function
+   60(indexable):     59(ptr) Variable Function
+         63(r0c):     38(ptr) Variable Function
+       71(psout):     70(ptr) Variable Function
+                              Store 13(e1_00) 14
+                              Store 15(e1_01) 16
+                              Store 17(e1_10) 18
+                              Store 19(e1_11) 20
+                              Store 21(e1_20) 22
+                              Store 23(e1_21) 24
+                              Store 25(e2_00) 26
+                              Store 27(e2_01) 28
+                              Store 29(e2_10) 30
+                              Store 31(e2_11) 32
+                              Store 33(e2_20) 34
+                              Store 35(e2_21) 36
+                              Store 39(r0a) 40
+                              Store 41(r1a) 42
+                              Store 43(r2a) 44
+              57:     56(ptr) AccessChain 54 55
+              58:     51(int) Load 57
+                              Store 60(indexable) 50
+              61:     38(ptr) AccessChain 60(indexable) 58
+              62:   37(fvec2) Load 61
+                              Store 45(r0b) 62
+              65:     56(ptr) AccessChain 54 55
+              66:     51(int) Load 65
+              68:     67(ptr) AccessChain 54 64 66
+              69:   37(fvec2) Load 68
+                              Store 63(r0c) 69
+              72:    6(float) Load 31(e2_11)
+              73:    7(fvec4) CompositeConstruct 72 72 72 72
+              75:     74(ptr) AccessChain 71(psout) 55
+                              Store 75 73
+              76:8(PS_OUTPUT) Load 71(psout)
+                              ReturnValue 76
+                              FunctionEnd

+ 87 - 37
3rdparty/glslang/Test/baseResults/hlsl.max.frag.out

@@ -2,18 +2,29 @@ hlsl.max.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input1' (layout(location=0 ) in 4-component vector of float)
-0:2      'input2' (layout(location=1 ) in 4-component vector of float)
+0:2      'input1' (in 4-component vector of float)
+0:2      'input2' (in 4-component vector of float)
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          max (temp 4-component vector of float)
-0:3            'input1' (layout(location=0 ) in 4-component vector of float)
-0:3            'input2' (layout(location=1 ) in 4-component vector of float)
-0:3        Branch: Return
+0:3      Branch: Return with expression
+0:3        max (temp 4-component vector of float)
+0:3          'input1' (in 4-component vector of float)
+0:3          'input2' (in 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input1' (temp 4-component vector of float)
+0:?         'input1' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input2' (temp 4-component vector of float)
+0:?         'input2' (layout(location=1 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:?           'input1' (temp 4-component vector of float)
+0:?           'input2' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input1' (layout(location=0 ) in 4-component vector of float)
@@ -26,18 +37,29 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:2  Function Definition: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
 0:2    Function Parameters: 
-0:2      'input1' (layout(location=0 ) in 4-component vector of float)
-0:2      'input2' (layout(location=1 ) in 4-component vector of float)
+0:2      'input1' (in 4-component vector of float)
+0:2      'input2' (in 4-component vector of float)
 0:?     Sequence
-0:3      Sequence
-0:3        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          max (temp 4-component vector of float)
-0:3            'input1' (layout(location=0 ) in 4-component vector of float)
-0:3            'input2' (layout(location=1 ) in 4-component vector of float)
-0:3        Branch: Return
+0:3      Branch: Return with expression
+0:3        max (temp 4-component vector of float)
+0:3          'input1' (in 4-component vector of float)
+0:3          'input2' (in 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction( (temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input1' (temp 4-component vector of float)
+0:?         'input1' (layout(location=0 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         'input2' (temp 4-component vector of float)
+0:?         'input2' (layout(location=1 ) in 4-component vector of float)
+0:2      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:?           'input1' (temp 4-component vector of float)
+0:?           'input2' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input1' (layout(location=0 ) in 4-component vector of float)
@@ -45,34 +67,62 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 17
+// Id's are bound by 33
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 11 13
+                              EntryPoint Fragment 4  "PixelShaderFunction" 21 24 27
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "@entryPointOutput"
-                              Name 11  "input1"
-                              Name 13  "input2"
-                              Decorate 9(@entryPointOutput) Location 0
-                              Decorate 11(input1) Location 0
-                              Decorate 13(input2) Location 1
+                              Name 12  "@PixelShaderFunction(vf4;vf4;"
+                              Name 10  "input1"
+                              Name 11  "input2"
+                              Name 19  "input1"
+                              Name 21  "input1"
+                              Name 23  "input2"
+                              Name 24  "input2"
+                              Name 27  "@entryPointOutput"
+                              Name 28  "param"
+                              Name 30  "param"
+                              Decorate 21(input1) Location 0
+                              Decorate 24(input2) Location 1
+                              Decorate 27(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:             TypePointer Input 7(fvec4)
-      11(input1):     10(ptr) Variable Input
-      13(input2):     10(ptr) Variable Input
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr) 8(ptr)
+              20:             TypePointer Input 7(fvec4)
+      21(input1):     20(ptr) Variable Input
+      24(input2):     20(ptr) Variable Input
+              26:             TypePointer Output 7(fvec4)
+27(@entryPointOutput):     26(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              12:    7(fvec4) Load 11(input1)
-              14:    7(fvec4) Load 13(input2)
-              15:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 12 14
-                              Store 9(@entryPointOutput) 15
+      19(input1):      8(ptr) Variable Function
+      23(input2):      8(ptr) Variable Function
+       28(param):      8(ptr) Variable Function
+       30(param):      8(ptr) Variable Function
+              22:    7(fvec4) Load 21(input1)
+                              Store 19(input1) 22
+              25:    7(fvec4) Load 24(input2)
+                              Store 23(input2) 25
+              29:    7(fvec4) Load 19(input1)
+                              Store 28(param) 29
+              31:    7(fvec4) Load 23(input2)
+                              Store 30(param) 31
+              32:    7(fvec4) FunctionCall 12(@PixelShaderFunction(vf4;vf4;) 28(param) 30(param)
+                              Store 27(@entryPointOutput) 32
                               Return
                               FunctionEnd
+12(@PixelShaderFunction(vf4;vf4;):    7(fvec4) Function None 9
+      10(input1):      8(ptr) FunctionParameter
+      11(input2):      8(ptr) FunctionParameter
+              13:             Label
+              14:    7(fvec4) Load 10(input1)
+              15:    7(fvec4) Load 11(input2)
+              16:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 14 15
+                              ReturnValue 16
+                              FunctionEnd

+ 140 - 127
3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out

@@ -2,7 +2,7 @@ hlsl.mintypes.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:9  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:9  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:9    Function Parameters: 
 0:?     Sequence
 0:40      add (temp mediump 2-component vector of float)
@@ -30,15 +30,18 @@ gl_FragCoord origin is upper left
 0:47          0.000000
 0:47          0.000000
 0:47          0.000000
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:48            Color: direct index for structure (temp 4-component vector of float)
-0:48              'psout' (temp structure{temp 4-component vector of float Color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color})
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:9          Color: direct index for structure (temp 4-component vector of float)
+0:9            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:9            Constant:
+0:9              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform mediump float b1a, layout(offset=4 ) uniform mediump float b1b})
@@ -50,7 +53,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:9  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:9  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:9    Function Parameters: 
 0:?     Sequence
 0:40      add (temp mediump 2-component vector of float)
@@ -78,147 +81,157 @@ gl_FragCoord origin is upper left
 0:47          0.000000
 0:47          0.000000
 0:47          0.000000
-0:48      Sequence
-0:48        Sequence
-0:48          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:48            Color: direct index for structure (temp 4-component vector of float)
-0:48              'psout' (temp structure{temp 4-component vector of float Color})
-0:48              Constant:
-0:48                0 (const int)
-0:48        Branch: Return
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color})
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:9          Color: direct index for structure (temp 4-component vector of float)
+0:9            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:9            Constant:
+0:9              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform mediump float b1a, layout(offset=4 ) uniform mediump float b1b})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 65
+// Id's are bound by 70
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 58
+                              EntryPoint Fragment 4  "main" 64
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 9  "mf16_2"
-                              Name 12  "mf16"
-                              Name 16  "mf10_2"
-                              Name 18  "mf10"
-                              Name 25  "mi16_2"
-                              Name 28  "mi16"
-                              Name 32  "mi12_2"
-                              Name 34  "mi12"
-                              Name 41  "mu16_2"
-                              Name 44  "mu16"
-                              Name 49  "PS_OUTPUT"
-                              MemberName 49(PS_OUTPUT) 0  "Color"
-                              Name 51  "psout"
-                              Name 58  "Color"
-                              Name 62  "$Global"
-                              MemberName 62($Global) 0  "b1a"
-                              MemberName 62($Global) 1  "b1b"
-                              Name 64  ""
-                              Decorate 9(mf16_2) RelaxedPrecision
-                              Decorate 10 RelaxedPrecision
-                              Decorate 12(mf16) RelaxedPrecision
-                              Decorate 13 RelaxedPrecision
-                              Decorate 14 RelaxedPrecision
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 14  "mf16_2"
+                              Name 17  "mf16"
+                              Name 21  "mf10_2"
+                              Name 23  "mf10"
+                              Name 30  "mi16_2"
+                              Name 33  "mi16"
+                              Name 37  "mi12_2"
+                              Name 39  "mi12"
+                              Name 46  "mu16_2"
+                              Name 49  "mu16"
+                              Name 54  "psout"
+                              Name 64  "Color"
+                              Name 67  "$Global"
+                              MemberName 67($Global) 0  "b1a"
+                              MemberName 67($Global) 1  "b1b"
+                              Name 69  ""
+                              Decorate 14(mf16_2) RelaxedPrecision
                               Decorate 15 RelaxedPrecision
-                              Decorate 16(mf10_2) RelaxedPrecision
-                              Decorate 17 RelaxedPrecision
-                              Decorate 18(mf10) RelaxedPrecision
+                              Decorate 17(mf16) RelaxedPrecision
+                              Decorate 18 RelaxedPrecision
                               Decorate 19 RelaxedPrecision
                               Decorate 20 RelaxedPrecision
-                              Decorate 21 RelaxedPrecision
-                              Decorate 25(mi16_2) RelaxedPrecision
+                              Decorate 21(mf10_2) RelaxedPrecision
+                              Decorate 22 RelaxedPrecision
+                              Decorate 23(mf10) RelaxedPrecision
+                              Decorate 24 RelaxedPrecision
+                              Decorate 25 RelaxedPrecision
                               Decorate 26 RelaxedPrecision
-                              Decorate 28(mi16) RelaxedPrecision
-                              Decorate 29 RelaxedPrecision
-                              Decorate 30 RelaxedPrecision
+                              Decorate 30(mi16_2) RelaxedPrecision
                               Decorate 31 RelaxedPrecision
-                              Decorate 32(mi12_2) RelaxedPrecision
-                              Decorate 33 RelaxedPrecision
-                              Decorate 34(mi12) RelaxedPrecision
+                              Decorate 33(mi16) RelaxedPrecision
+                              Decorate 34 RelaxedPrecision
                               Decorate 35 RelaxedPrecision
                               Decorate 36 RelaxedPrecision
-                              Decorate 37 RelaxedPrecision
-                              Decorate 41(mu16_2) RelaxedPrecision
+                              Decorate 37(mi12_2) RelaxedPrecision
+                              Decorate 38 RelaxedPrecision
+                              Decorate 39(mi12) RelaxedPrecision
+                              Decorate 40 RelaxedPrecision
+                              Decorate 41 RelaxedPrecision
                               Decorate 42 RelaxedPrecision
-                              Decorate 44(mu16) RelaxedPrecision
-                              Decorate 45 RelaxedPrecision
-                              Decorate 46 RelaxedPrecision
+                              Decorate 46(mu16_2) RelaxedPrecision
                               Decorate 47 RelaxedPrecision
-                              Decorate 58(Color) Location 0
-                              MemberDecorate 62($Global) 0 RelaxedPrecision
-                              MemberDecorate 62($Global) 0 Offset 0
-                              MemberDecorate 62($Global) 1 RelaxedPrecision
-                              MemberDecorate 62($Global) 1 Offset 4
-                              Decorate 62($Global) Block
-                              Decorate 64 DescriptorSet 0
+                              Decorate 49(mu16) RelaxedPrecision
+                              Decorate 50 RelaxedPrecision
+                              Decorate 51 RelaxedPrecision
+                              Decorate 52 RelaxedPrecision
+                              Decorate 64(Color) Location 0
+                              MemberDecorate 67($Global) 0 RelaxedPrecision
+                              MemberDecorate 67($Global) 0 Offset 0
+                              MemberDecorate 67($Global) 1 RelaxedPrecision
+                              MemberDecorate 67($Global) 1 Offset 4
+                              Decorate 67($Global) Block
+                              Decorate 69 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 2
-               8:             TypePointer Function 7(fvec2)
-              11:             TypePointer Function 6(float)
-              22:             TypeInt 32 1
-              23:             TypeVector 22(int) 2
-              24:             TypePointer Function 23(ivec2)
-              27:             TypePointer Function 22(int)
-              38:             TypeInt 32 0
-              39:             TypeVector 38(int) 2
-              40:             TypePointer Function 39(ivec2)
-              43:             TypePointer Function 38(int)
-              48:             TypeVector 6(float) 4
-   49(PS_OUTPUT):             TypeStruct 48(fvec4)
-              50:             TypePointer Function 49(PS_OUTPUT)
-              52:     22(int) Constant 0
-              53:    6(float) Constant 0
-              54:   48(fvec4) ConstantComposite 53 53 53 53
-              55:             TypePointer Function 48(fvec4)
-              57:             TypePointer Output 48(fvec4)
-       58(Color):     57(ptr) Variable Output
-     62($Global):             TypeStruct 6(float) 6(float)
-              63:             TypePointer Uniform 62($Global)
-              64:     63(ptr) Variable Uniform
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeVector 6(float) 2
+              13:             TypePointer Function 12(fvec2)
+              16:             TypePointer Function 6(float)
+              27:             TypeInt 32 1
+              28:             TypeVector 27(int) 2
+              29:             TypePointer Function 28(ivec2)
+              32:             TypePointer Function 27(int)
+              43:             TypeInt 32 0
+              44:             TypeVector 43(int) 2
+              45:             TypePointer Function 44(ivec2)
+              48:             TypePointer Function 43(int)
+              53:             TypePointer Function 8(PS_OUTPUT)
+              55:     27(int) Constant 0
+              56:    6(float) Constant 0
+              57:    7(fvec4) ConstantComposite 56 56 56 56
+              58:             TypePointer Function 7(fvec4)
+              63:             TypePointer Output 7(fvec4)
+       64(Color):     63(ptr) Variable Output
+     67($Global):             TypeStruct 6(float) 6(float)
+              68:             TypePointer Uniform 67($Global)
+              69:     68(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-       9(mf16_2):      8(ptr) Variable Function
-        12(mf16):     11(ptr) Variable Function
-      16(mf10_2):      8(ptr) Variable Function
-        18(mf10):     11(ptr) Variable Function
-      25(mi16_2):     24(ptr) Variable Function
-        28(mi16):     27(ptr) Variable Function
-      32(mi12_2):     24(ptr) Variable Function
-        34(mi12):     27(ptr) Variable Function
-      41(mu16_2):     40(ptr) Variable Function
-        44(mu16):     43(ptr) Variable Function
-       51(psout):     50(ptr) Variable Function
-              10:    7(fvec2) Load 9(mf16_2)
-              13:    6(float) Load 12(mf16)
-              14:    7(fvec2) CompositeConstruct 13 13
-              15:    7(fvec2) FAdd 10 14
-              17:    7(fvec2) Load 16(mf10_2)
-              19:    6(float) Load 18(mf10)
-              20:    7(fvec2) CompositeConstruct 19 19
-              21:    7(fvec2) FAdd 17 20
-              26:   23(ivec2) Load 25(mi16_2)
-              29:     22(int) Load 28(mi16)
-              30:   23(ivec2) CompositeConstruct 29 29
-              31:   23(ivec2) IAdd 26 30
-              33:   23(ivec2) Load 32(mi12_2)
-              35:     22(int) Load 34(mi12)
-              36:   23(ivec2) CompositeConstruct 35 35
-              37:   23(ivec2) IAdd 33 36
-              42:   39(ivec2) Load 41(mu16_2)
-              45:     38(int) Load 44(mu16)
-              46:   39(ivec2) CompositeConstruct 45 45
-              47:   39(ivec2) IAdd 42 46
-              56:     55(ptr) AccessChain 51(psout) 52
-                              Store 56 54
-              59:     55(ptr) AccessChain 51(psout) 52
-              60:   48(fvec4) Load 59
-                              Store 58(Color) 60
+              65:8(PS_OUTPUT) FunctionCall 10(@main()
+              66:    7(fvec4) CompositeExtract 65 0
+                              Store 64(Color) 66
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+      14(mf16_2):     13(ptr) Variable Function
+        17(mf16):     16(ptr) Variable Function
+      21(mf10_2):     13(ptr) Variable Function
+        23(mf10):     16(ptr) Variable Function
+      30(mi16_2):     29(ptr) Variable Function
+        33(mi16):     32(ptr) Variable Function
+      37(mi12_2):     29(ptr) Variable Function
+        39(mi12):     32(ptr) Variable Function
+      46(mu16_2):     45(ptr) Variable Function
+        49(mu16):     48(ptr) Variable Function
+       54(psout):     53(ptr) Variable Function
+              15:   12(fvec2) Load 14(mf16_2)
+              18:    6(float) Load 17(mf16)
+              19:   12(fvec2) CompositeConstruct 18 18
+              20:   12(fvec2) FAdd 15 19
+              22:   12(fvec2) Load 21(mf10_2)
+              24:    6(float) Load 23(mf10)
+              25:   12(fvec2) CompositeConstruct 24 24
+              26:   12(fvec2) FAdd 22 25
+              31:   28(ivec2) Load 30(mi16_2)
+              34:     27(int) Load 33(mi16)
+              35:   28(ivec2) CompositeConstruct 34 34
+              36:   28(ivec2) IAdd 31 35
+              38:   28(ivec2) Load 37(mi12_2)
+              40:     27(int) Load 39(mi12)
+              41:   28(ivec2) CompositeConstruct 40 40
+              42:   28(ivec2) IAdd 38 41
+              47:   44(ivec2) Load 46(mu16_2)
+              50:     43(int) Load 49(mu16)
+              51:   44(ivec2) CompositeConstruct 50 50
+              52:   44(ivec2) IAdd 47 51
+              59:     58(ptr) AccessChain 54(psout) 55
+                              Store 59 57
+              60:8(PS_OUTPUT) Load 54(psout)
+                              ReturnValue 60
+                              FunctionEnd

+ 77 - 47
3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out

@@ -10,20 +10,27 @@ Shader version: 450
 0:5          'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:5          Convert uint to int (temp int)
 0:5            'Index' (in uint)
-0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
+0:9  Function Definition: @RealEntrypoint(u1; (temp 4-component vector of float)
 0:9    Function Parameters: 
-0:9      'Index' (in uint VertexIndex)
+0:9      'Index' (in uint)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (out 4-component vector of float Position)
-0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
-0:10            'Index' (in uint VertexIndex)
-0:10        Branch: Return
+0:10      Branch: Return with expression
+0:10        Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
+0:10          'Index' (in uint)
+0:9  Function Definition: RealEntrypoint( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child (temp uint)
+0:?         'Index' (temp uint)
+0:?         'Index' (in uint VertexIndex)
+0:9      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (out 4-component vector of float Position)
+0:9        Function Call: @RealEntrypoint(u1; (temp 4-component vector of float)
+0:?           'Index' (temp uint)
 0:?   Linker Objects
+0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:?     '@entryPointOutput' (out 4-component vector of float Position)
 0:?     'Index' (in uint VertexIndex)
-0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 
 
 Linked vertex stage:
@@ -40,40 +47,51 @@ Shader version: 450
 0:5          'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:5          Convert uint to int (temp int)
 0:5            'Index' (in uint)
-0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
+0:9  Function Definition: @RealEntrypoint(u1; (temp 4-component vector of float)
 0:9    Function Parameters: 
-0:9      'Index' (in uint VertexIndex)
+0:9      'Index' (in uint)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (out 4-component vector of float Position)
-0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
-0:10            'Index' (in uint VertexIndex)
-0:10        Branch: Return
+0:10      Branch: Return with expression
+0:10        Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
+0:10          'Index' (in uint)
+0:9  Function Definition: RealEntrypoint( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child (temp uint)
+0:?         'Index' (temp uint)
+0:?         'Index' (in uint VertexIndex)
+0:9      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (out 4-component vector of float Position)
+0:9        Function Call: @RealEntrypoint(u1; (temp 4-component vector of float)
+0:?           'Index' (temp uint)
 0:?   Linker Objects
+0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:?     '@entryPointOutput' (out 4-component vector of float Position)
 0:?     'Index' (in uint VertexIndex)
-0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 34
+// Id's are bound by 43
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "RealEntrypoint" 27 29
+                              EntryPoint Vertex 4  "RealEntrypoint" 36 39
                               Name 4  "RealEntrypoint"
                               Name 12  "FakeEntrypoint(u1;"
                               Name 11  "Index"
-                              Name 17  "Position"
-                              Name 27  "@entryPointOutput"
-                              Name 29  "Index"
-                              Name 30  "param"
-                              Decorate 17(Position) DescriptorSet 0
-                              Decorate 27(@entryPointOutput) BuiltIn Position
-                              Decorate 29(Index) BuiltIn VertexIndex
+                              Name 15  "@RealEntrypoint(u1;"
+                              Name 14  "Index"
+                              Name 20  "Position"
+                              Name 29  "param"
+                              Name 34  "Index"
+                              Name 36  "Index"
+                              Name 39  "@entryPointOutput"
+                              Name 40  "param"
+                              Decorate 20(Position) DescriptorSet 0
+                              Decorate 36(Index) BuiltIn VertexIndex
+                              Decorate 39(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -81,31 +99,43 @@ Shader version: 450
                8:             TypeFloat 32
                9:             TypeVector 8(float) 4
               10:             TypeFunction 9(fvec4) 7(ptr)
-              14:             TypeImage 8(float) Buffer sampled format:Rgba32f
-              15:             TypeSampledImage 14
-              16:             TypePointer UniformConstant 15
-    17(Position):     16(ptr) Variable UniformConstant
-              20:             TypeInt 32 1
-              26:             TypePointer Output 9(fvec4)
-27(@entryPointOutput):     26(ptr) Variable Output
-              28:             TypePointer Input 6(int)
-       29(Index):     28(ptr) Variable Input
+              17:             TypeImage 8(float) Buffer sampled format:Rgba32f
+              18:             TypeSampledImage 17
+              19:             TypePointer UniformConstant 18
+    20(Position):     19(ptr) Variable UniformConstant
+              23:             TypeInt 32 1
+              35:             TypePointer Input 6(int)
+       36(Index):     35(ptr) Variable Input
+              38:             TypePointer Output 9(fvec4)
+39(@entryPointOutput):     38(ptr) Variable Output
 4(RealEntrypoint):           2 Function None 3
                5:             Label
-       30(param):      7(ptr) Variable Function
-              31:      6(int) Load 29(Index)
-                              Store 30(param) 31
-              32:    9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 30(param)
-                              Store 27(@entryPointOutput) 32
+       34(Index):      7(ptr) Variable Function
+       40(param):      7(ptr) Variable Function
+              37:      6(int) Load 36(Index)
+                              Store 34(Index) 37
+              41:      6(int) Load 34(Index)
+                              Store 40(param) 41
+              42:    9(fvec4) FunctionCall 15(@RealEntrypoint(u1;) 40(param)
+                              Store 39(@entryPointOutput) 42
                               Return
                               FunctionEnd
 12(FakeEntrypoint(u1;):    9(fvec4) Function None 10
        11(Index):      7(ptr) FunctionParameter
               13:             Label
-              18:          15 Load 17(Position)
-              19:      6(int) Load 11(Index)
-              21:     20(int) Bitcast 19
-              22:          14 Image 18
-              23:    9(fvec4) ImageFetch 22 21
-                              ReturnValue 23
+              21:          18 Load 20(Position)
+              22:      6(int) Load 11(Index)
+              24:     23(int) Bitcast 22
+              25:          17 Image 21
+              26:    9(fvec4) ImageFetch 25 24
+                              ReturnValue 26
+                              FunctionEnd
+15(@RealEntrypoint(u1;):    9(fvec4) Function None 10
+       14(Index):      7(ptr) FunctionParameter
+              16:             Label
+       29(param):      7(ptr) Variable Function
+              30:      6(int) Load 14(Index)
+                              Store 29(param) 30
+              31:    9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 29(param)
+                              ReturnValue 31
                               FunctionEnd

+ 60 - 46
3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out

@@ -10,10 +10,14 @@ gl_FragCoord origin is upper left
 0:13          'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s})
 0:13          Constant:
 0:13            0 (const uint)
-0:17  Function Definition: main( (temp void)
+0:17  Function Definition: @main( (temp void)
 0:17    Function Parameters: 
 0:?     Sequence
 0:18      Function Call: foo( (temp structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+0:17  Function Definition: main( (temp void)
+0:17    Function Parameters: 
+0:?     Sequence
+0:17      Function Call: @main( (temp void)
 0:?   Linker Objects
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s})
 
@@ -32,16 +36,20 @@ gl_FragCoord origin is upper left
 0:13          'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s})
 0:13          Constant:
 0:13            0 (const uint)
-0:17  Function Definition: main( (temp void)
+0:17  Function Definition: @main( (temp void)
 0:17    Function Parameters: 
 0:?     Sequence
 0:18      Function Call: foo( (temp structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+0:17  Function Definition: main( (temp void)
+0:17    Function Parameters: 
+0:?     Sequence
+0:17      Function Call: @main( (temp void)
 0:?   Linker Objects
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 39
+// Id's are bound by 42
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -54,21 +62,22 @@ gl_FragCoord origin is upper left
                               MemberName 9(S) 1  "v"
                               MemberName 9(S) 2  "m"
                               Name 11  "foo("
-                              Name 13  "S"
-                              MemberName 13(S) 0  "f"
-                              MemberName 13(S) 1  "v"
-                              MemberName 13(S) 2  "m"
-                              Name 14  "bufName"
-                              MemberName 14(bufName) 0  "s"
-                              Name 16  ""
-                              MemberDecorate 13(S) 0 Offset 0
-                              MemberDecorate 13(S) 1 Offset 16
-                              MemberDecorate 13(S) 2 RowMajor
-                              MemberDecorate 13(S) 2 Offset 32
-                              MemberDecorate 13(S) 2 MatrixStride 16
-                              MemberDecorate 14(bufName) 0 Offset 0
-                              Decorate 14(bufName) Block
-                              Decorate 16 DescriptorSet 0
+                              Name 13  "@main("
+                              Name 15  "S"
+                              MemberName 15(S) 0  "f"
+                              MemberName 15(S) 1  "v"
+                              MemberName 15(S) 2  "m"
+                              Name 16  "bufName"
+                              MemberName 16(bufName) 0  "s"
+                              Name 18  ""
+                              MemberDecorate 15(S) 0 Offset 0
+                              MemberDecorate 15(S) 1 Offset 16
+                              MemberDecorate 15(S) 2 RowMajor
+                              MemberDecorate 15(S) 2 Offset 32
+                              MemberDecorate 15(S) 2 MatrixStride 16
+                              MemberDecorate 16(bufName) 0 Offset 0
+                              Decorate 16(bufName) Block
+                              Decorate 18 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -76,38 +85,43 @@ gl_FragCoord origin is upper left
                8:             TypeMatrix 7(fvec3) 3
             9(S):             TypeStruct 6(float) 7(fvec3) 8
               10:             TypeFunction 9(S)
-           13(S):             TypeStruct 6(float) 7(fvec3) 8
-     14(bufName):             TypeStruct 13(S)
-              15:             TypePointer Uniform 14(bufName)
-              16:     15(ptr) Variable Uniform
-              17:             TypeInt 32 1
-              18:     17(int) Constant 0
-              19:             TypePointer Uniform 13(S)
-              22:             TypePointer Function 9(S)
-              25:             TypePointer Function 6(float)
-              28:     17(int) Constant 1
-              29:             TypePointer Function 7(fvec3)
-              32:     17(int) Constant 2
-              33:             TypePointer Function 8
+           15(S):             TypeStruct 6(float) 7(fvec3) 8
+     16(bufName):             TypeStruct 15(S)
+              17:             TypePointer Uniform 16(bufName)
+              18:     17(ptr) Variable Uniform
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer Uniform 15(S)
+              24:             TypePointer Function 9(S)
+              27:             TypePointer Function 6(float)
+              30:     19(int) Constant 1
+              31:             TypePointer Function 7(fvec3)
+              34:     19(int) Constant 2
+              35:             TypePointer Function 8
          4(main):           2 Function None 3
                5:             Label
-              38:        9(S) FunctionCall 11(foo()
+              41:           2 FunctionCall 13(@main()
                               Return
                               FunctionEnd
         11(foo():        9(S) Function None 10
               12:             Label
-              23:     22(ptr) Variable Function
-              20:     19(ptr) AccessChain 16 18
-              21:       13(S) Load 20
-              24:    6(float) CompositeExtract 21 0
-              26:     25(ptr) AccessChain 23 18
-                              Store 26 24
-              27:    7(fvec3) CompositeExtract 21 1
-              30:     29(ptr) AccessChain 23 28
-                              Store 30 27
-              31:           8 CompositeExtract 21 2
-              34:     33(ptr) AccessChain 23 32
-                              Store 34 31
-              35:        9(S) Load 23
-                              ReturnValue 35
+              25:     24(ptr) Variable Function
+              22:     21(ptr) AccessChain 18 20
+              23:       15(S) Load 22
+              26:    6(float) CompositeExtract 23 0
+              28:     27(ptr) AccessChain 25 20
+                              Store 28 26
+              29:    7(fvec3) CompositeExtract 23 1
+              32:     31(ptr) AccessChain 25 30
+                              Store 32 29
+              33:           8 CompositeExtract 23 2
+              36:     35(ptr) AccessChain 25 34
+                              Store 36 33
+              37:        9(S) Load 25
+                              ReturnValue 37
+                              FunctionEnd
+      13(@main():           2 Function None 3
+              14:             Label
+              40:        9(S) FunctionCall 11(foo()
+                              Return
                               FunctionEnd

+ 96 - 83
3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out

@@ -2,7 +2,7 @@ hlsl.numericsuffixes.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:5  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:5    Function Parameters: 
 0:?     Sequence
 0:7      Sequence
@@ -58,15 +58,18 @@ gl_FragCoord origin is upper left
 0:18        Construct vec4 (temp 4-component vector of float)
 0:18          Convert int to float (temp float)
 0:18            'r07' (temp int)
-0:19      Sequence
-0:19        Sequence
-0:19          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:19            color: direct index for structure (temp 4-component vector of float)
-0:19              'ps_output' (temp structure{temp 4-component vector of float color})
-0:19              Constant:
-0:19                0 (const int)
-0:19        Branch: Return
+0:19      Branch: Return with expression
+0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:5          color: direct index for structure (temp 4-component vector of float)
+0:5            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:5            Constant:
+0:5              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
@@ -77,7 +80,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:5  Function Definition: @main( (temp structure{temp 4-component vector of float color})
 0:5    Function Parameters: 
 0:?     Sequence
 0:7      Sequence
@@ -133,93 +136,103 @@ gl_FragCoord origin is upper left
 0:18        Construct vec4 (temp 4-component vector of float)
 0:18          Convert int to float (temp float)
 0:18            'r07' (temp int)
-0:19      Sequence
-0:19        Sequence
-0:19          move second child to first child (temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) out 4-component vector of float)
-0:19            color: direct index for structure (temp 4-component vector of float)
-0:19              'ps_output' (temp structure{temp 4-component vector of float color})
-0:19              Constant:
-0:19                0 (const int)
-0:19        Branch: Return
+0:19      Branch: Return with expression
+0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) out 4-component vector of float)
+0:5          color: direct index for structure (temp 4-component vector of float)
+0:5            Function Call: @main( (temp structure{temp 4-component vector of float color})
+0:5            Constant:
+0:5              0 (const int)
 0:?   Linker Objects
 0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 44
+// Id's are bound by 49
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 40
+                              EntryPoint Fragment 4  "main" 46
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "r00"
-                              Name 12  "r01"
-                              Name 14  "r02"
-                              Name 16  "r03"
-                              Name 18  "r04"
-                              Name 21  "r05"
-                              Name 23  "r06"
-                              Name 25  "r07"
-                              Name 27  "r08"
-                              Name 30  "PS_OUTPUT"
-                              MemberName 30(PS_OUTPUT) 0  "color"
-                              Name 32  "ps_output"
-                              Name 40  "color"
-                              Decorate 40(color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 10  "@main("
+                              Name 13  "r00"
+                              Name 17  "r01"
+                              Name 19  "r02"
+                              Name 21  "r03"
+                              Name 23  "r04"
+                              Name 26  "r05"
+                              Name 28  "r06"
+                              Name 30  "r07"
+                              Name 32  "r08"
+                              Name 35  "ps_output"
+                              Name 46  "color"
+                              Decorate 46(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               9:    6(float) Constant 1065353216
-              10:             TypeInt 32 0
-              11:             TypePointer Function 10(int)
-              13:     10(int) Constant 1
-              15:     10(int) Constant 2
-              17:     10(int) Constant 2748
-              19:             TypeInt 32 1
-              20:             TypePointer Function 19(int)
-              22:     19(int) Constant 5
-              24:     19(int) Constant 6
-              26:     19(int) Constant 57
-              28:     10(int) Constant 58
-              29:             TypeVector 6(float) 4
-   30(PS_OUTPUT):             TypeStruct 29(fvec4)
-              31:             TypePointer Function 30(PS_OUTPUT)
-              33:     19(int) Constant 0
-              37:             TypePointer Function 29(fvec4)
-              39:             TypePointer Output 29(fvec4)
-       40(color):     39(ptr) Variable Output
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 6(float)
+              14:    6(float) Constant 1065353216
+              15:             TypeInt 32 0
+              16:             TypePointer Function 15(int)
+              18:     15(int) Constant 1
+              20:     15(int) Constant 2
+              22:     15(int) Constant 2748
+              24:             TypeInt 32 1
+              25:             TypePointer Function 24(int)
+              27:     24(int) Constant 5
+              29:     24(int) Constant 6
+              31:     24(int) Constant 57
+              33:     15(int) Constant 58
+              34:             TypePointer Function 8(PS_OUTPUT)
+              36:     24(int) Constant 0
+              40:             TypePointer Function 7(fvec4)
+              45:             TypePointer Output 7(fvec4)
+       46(color):     45(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-          8(r00):      7(ptr) Variable Function
-         12(r01):     11(ptr) Variable Function
-         14(r02):     11(ptr) Variable Function
-         16(r03):     11(ptr) Variable Function
-         18(r04):     11(ptr) Variable Function
-         21(r05):     20(ptr) Variable Function
-         23(r06):     20(ptr) Variable Function
-         25(r07):     20(ptr) Variable Function
-         27(r08):     11(ptr) Variable Function
-   32(ps_output):     31(ptr) Variable Function
-                              Store 8(r00) 9
-                              Store 12(r01) 13
-                              Store 14(r02) 15
-                              Store 16(r03) 17
-                              Store 18(r04) 17
-                              Store 21(r05) 22
-                              Store 23(r06) 24
-                              Store 25(r07) 26
-                              Store 27(r08) 28
-              34:     19(int) Load 25(r07)
-              35:    6(float) ConvertSToF 34
-              36:   29(fvec4) CompositeConstruct 35 35 35 35
-              38:     37(ptr) AccessChain 32(ps_output) 33
-                              Store 38 36
-              41:     37(ptr) AccessChain 32(ps_output) 33
-              42:   29(fvec4) Load 41
-                              Store 40(color) 42
+              47:8(PS_OUTPUT) FunctionCall 10(@main()
+              48:    7(fvec4) CompositeExtract 47 0
+                              Store 46(color) 48
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+         13(r00):     12(ptr) Variable Function
+         17(r01):     16(ptr) Variable Function
+         19(r02):     16(ptr) Variable Function
+         21(r03):     16(ptr) Variable Function
+         23(r04):     16(ptr) Variable Function
+         26(r05):     25(ptr) Variable Function
+         28(r06):     25(ptr) Variable Function
+         30(r07):     25(ptr) Variable Function
+         32(r08):     16(ptr) Variable Function
+   35(ps_output):     34(ptr) Variable Function
+                              Store 13(r00) 14
+                              Store 17(r01) 18
+                              Store 19(r02) 20
+                              Store 21(r03) 22
+                              Store 23(r04) 22
+                              Store 26(r05) 27
+                              Store 28(r06) 29
+                              Store 30(r07) 31
+                              Store 32(r08) 33
+              37:     24(int) Load 30(r07)
+              38:    6(float) ConvertSToF 37
+              39:    7(fvec4) CompositeConstruct 38 38 38 38
+              41:     40(ptr) AccessChain 35(ps_output) 36
+                              Store 41 39
+              42:8(PS_OUTPUT) Load 35(ps_output)
+                              ReturnValue 42
+                              FunctionEnd

+ 42 - 10
3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out

@@ -5,9 +5,17 @@ local_size = (4, 4, 2)
 0:4  Function Definition: main(vu3; (temp void)
 0:4    Function Parameters: 
 0:4      'tid' (in 3-component vector of uint)
-0:9  Function Definition: main_aux1(vu3; (temp void)
+0:9  Function Definition: @main_aux1(vu3; (temp void)
 0:9    Function Parameters: 
-0:9      'tid' (in 3-component vector of uint GlobalInvocationID)
+0:9      'tid' (in 3-component vector of uint)
+0:9  Function Definition: main_aux1( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child (temp 3-component vector of uint)
+0:?         'tid' (temp 3-component vector of uint)
+0:?         'tid' (in 3-component vector of uint GlobalInvocationID)
+0:9      Function Call: @main_aux1(vu3; (temp void)
+0:?         'tid' (temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'tid' (in 3-component vector of uint GlobalInvocationID)
 
@@ -21,36 +29,55 @@ local_size = (4, 4, 2)
 0:4  Function Definition: main(vu3; (temp void)
 0:4    Function Parameters: 
 0:4      'tid' (in 3-component vector of uint)
-0:9  Function Definition: main_aux1(vu3; (temp void)
+0:9  Function Definition: @main_aux1(vu3; (temp void)
+0:9    Function Parameters: 
+0:9      'tid' (in 3-component vector of uint)
+0:9  Function Definition: main_aux1( (temp void)
 0:9    Function Parameters: 
-0:9      'tid' (in 3-component vector of uint GlobalInvocationID)
+0:?     Sequence
+0:9      move second child to first child (temp 3-component vector of uint)
+0:?         'tid' (temp 3-component vector of uint)
+0:?         'tid' (in 3-component vector of uint GlobalInvocationID)
+0:9      Function Call: @main_aux1(vu3; (temp void)
+0:?         'tid' (temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'tid' (in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 15
+// Id's are bound by 23
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main_aux1" 14
+                              EntryPoint GLCompute 4  "main_aux1" 18
                               ExecutionMode 4 LocalSize 4 4 2
                               Name 4  "main_aux1"
                               Name 11  "main(vu3;"
                               Name 10  "tid"
-                              Name 14  "tid"
-                              Decorate 14(tid) BuiltIn GlobalInvocationId
+                              Name 14  "@main_aux1(vu3;"
+                              Name 13  "tid"
+                              Name 16  "tid"
+                              Name 18  "tid"
+                              Name 20  "param"
+                              Decorate 18(tid) 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:             TypePointer Input 7(ivec3)
-         14(tid):     13(ptr) Variable Input
+              17:             TypePointer Input 7(ivec3)
+         18(tid):     17(ptr) Variable Input
     4(main_aux1):           2 Function None 3
                5:             Label
+         16(tid):      8(ptr) Variable Function
+       20(param):      8(ptr) Variable Function
+              19:    7(ivec3) Load 18(tid)
+                              Store 16(tid) 19
+              21:    7(ivec3) Load 16(tid)
+                              Store 20(param) 21
+              22:           2 FunctionCall 14(@main_aux1(vu3;) 20(param)
                               Return
                               FunctionEnd
    11(main(vu3;):           2 Function None 9
@@ -58,3 +85,8 @@ local_size = (4, 4, 2)
               12:             Label
                               Return
                               FunctionEnd
+14(@main_aux1(vu3;):           2 Function None 9
+         13(tid):      8(ptr) FunctionParameter
+              15:             Label
+                              Return
+                              FunctionEnd

+ 567 - 535
3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out

@@ -108,9 +108,9 @@ gl_FragCoord origin is upper left
 0:43  Function Definition: foo15(vb1; (temp void)
 0:43    Function Parameters: 
 0:43      '' (in 1-component vector of bool)
-0:46  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:46  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:46    Function Parameters: 
-0:46      'input' (layout(location=0 ) in 4-component vector of float)
+0:46      'input' (in 4-component vector of float)
 0:?     Sequence
 0:53      Function Call: foo1(d1;b1; (temp void)
 0:53        'd' (temp double)
@@ -348,11 +348,18 @@ gl_FragCoord origin is upper left
 0:139        Construct bool (in 1-component vector of bool)
 0:139          Construct bvec3 (temp 3-component vector of bool)
 0:139            'b' (temp bool)
-0:141      Sequence
-0:141        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:141          'input' (layout(location=0 ) in 4-component vector of float)
-0:141        Branch: Return
+0:141      Branch: Return with expression
+0:141        'input' (in 4-component vector of float)
+0:46  Function Definition: PixelShaderFunction( (temp void)
+0:46    Function Parameters: 
+0:?     Sequence
+0:46      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:46      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:46        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -470,9 +477,9 @@ gl_FragCoord origin is upper left
 0:43  Function Definition: foo15(vb1; (temp void)
 0:43    Function Parameters: 
 0:43      '' (in 1-component vector of bool)
-0:46  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:46  Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:46    Function Parameters: 
-0:46      'input' (layout(location=0 ) in 4-component vector of float)
+0:46      'input' (in 4-component vector of float)
 0:?     Sequence
 0:53      Function Call: foo1(d1;b1; (temp void)
 0:53        'd' (temp double)
@@ -710,24 +717,31 @@ gl_FragCoord origin is upper left
 0:139        Construct bool (in 1-component vector of bool)
 0:139          Construct bvec3 (temp 3-component vector of bool)
 0:139            'b' (temp bool)
-0:141      Sequence
-0:141        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:141          'input' (layout(location=0 ) in 4-component vector of float)
-0:141        Branch: Return
+0:141      Branch: Return with expression
+0:141        'input' (in 4-component vector of float)
+0:46  Function Definition: PixelShaderFunction( (temp void)
+0:46    Function Parameters: 
+0:?     Sequence
+0:46      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:46      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:46        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:?           'input' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 509
+// Id's are bound by 520
 
                               Capability Shader
                               Capability Float64
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 504 506
+                              EntryPoint Fragment 4  "PixelShaderFunction" 513 516
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 13  "foo1(d1;b1;"
@@ -804,22 +818,22 @@ gl_FragCoord origin is upper left
                               Name 143  ""
                               Name 147  "foo15(vb1;"
                               Name 146  ""
-                              Name 149  "d"
-                              Name 150  "b"
-                              Name 151  "param"
-                              Name 153  "param"
-                              Name 156  "param"
-                              Name 158  "param"
-                              Name 161  "u"
+                              Name 153  "@PixelShaderFunction(vf4;"
+                              Name 152  "input"
+                              Name 155  "d"
+                              Name 156  "b"
+                              Name 157  "param"
+                              Name 159  "param"
                               Name 162  "param"
                               Name 164  "param"
-                              Name 167  "i"
+                              Name 167  "u"
                               Name 168  "param"
                               Name 170  "param"
-                              Name 173  "f"
+                              Name 173  "i"
                               Name 174  "param"
                               Name 176  "param"
-                              Name 181  "param"
+                              Name 179  "f"
+                              Name 180  "param"
                               Name 182  "param"
                               Name 187  "param"
                               Name 188  "param"
@@ -859,62 +873,66 @@ gl_FragCoord origin is upper left
                               Name 290  "param"
                               Name 295  "param"
                               Name 296  "param"
-                              Name 299  "param"
                               Name 301  "param"
-                              Name 304  "param"
-                              Name 306  "param"
-                              Name 309  "param"
-                              Name 311  "param"
-                              Name 314  "param"
-                              Name 316  "param"
-                              Name 319  "param"
-                              Name 321  "param"
-                              Name 324  "param"
+                              Name 302  "param"
+                              Name 305  "param"
+                              Name 307  "param"
+                              Name 310  "param"
+                              Name 312  "param"
+                              Name 315  "param"
+                              Name 317  "param"
+                              Name 320  "param"
+                              Name 322  "param"
+                              Name 325  "param"
+                              Name 327  "param"
                               Name 330  "param"
-                              Name 335  "param"
-                              Name 339  "param"
-                              Name 344  "param"
-                              Name 349  "param"
-                              Name 353  "param"
+                              Name 336  "param"
+                              Name 341  "param"
+                              Name 345  "param"
+                              Name 350  "param"
                               Name 355  "param"
-                              Name 360  "param"
-                              Name 364  "param"
+                              Name 359  "param"
+                              Name 361  "param"
+                              Name 366  "param"
                               Name 370  "param"
-                              Name 374  "param"
-                              Name 378  "param"
+                              Name 376  "param"
                               Name 380  "param"
-                              Name 385  "param"
-                              Name 390  "param"
-                              Name 394  "param"
-                              Name 398  "param"
-                              Name 402  "param"
+                              Name 384  "param"
+                              Name 386  "param"
+                              Name 391  "param"
+                              Name 396  "param"
+                              Name 400  "param"
                               Name 404  "param"
+                              Name 408  "param"
                               Name 410  "param"
-                              Name 412  "param"
-                              Name 417  "param"
-                              Name 421  "param"
-                              Name 425  "param"
-                              Name 429  "param"
-                              Name 433  "param"
-                              Name 437  "param"
-                              Name 441  "param"
-                              Name 445  "param"
-                              Name 449  "param"
-                              Name 453  "param"
-                              Name 457  "param"
-                              Name 461  "param"
-                              Name 465  "param"
-                              Name 469  "param"
-                              Name 474  "param"
-                              Name 481  "param"
-                              Name 485  "param"
+                              Name 416  "param"
+                              Name 418  "param"
+                              Name 423  "param"
+                              Name 427  "param"
+                              Name 431  "param"
+                              Name 435  "param"
+                              Name 439  "param"
+                              Name 443  "param"
+                              Name 447  "param"
+                              Name 451  "param"
+                              Name 455  "param"
+                              Name 459  "param"
+                              Name 463  "param"
+                              Name 467  "param"
+                              Name 471  "param"
+                              Name 475  "param"
+                              Name 480  "param"
+                              Name 487  "param"
                               Name 491  "param"
-                              Name 494  "param"
+                              Name 497  "param"
                               Name 500  "param"
-                              Name 504  "@entryPointOutput"
-                              Name 506  "input"
-                              Decorate 504(@entryPointOutput) Location 0
-                              Decorate 506(input) Location 0
+                              Name 506  "param"
+                              Name 511  "input"
+                              Name 513  "input"
+                              Name 516  "@entryPointOutput"
+                              Name 517  "param"
+                              Decorate 513(input) Location 0
+                              Decorate 516(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 64
@@ -954,470 +972,34 @@ gl_FragCoord origin is upper left
              134:             TypeVector 15(int) 2
              135:             TypePointer Function 134(ivec2)
              136:             TypeFunction 2 135(ptr)
-             328:    6(float) Constant 0 0
-             333:     15(int) Constant 0
-             342:   29(float) Constant 0
-             347:     15(int) Constant 1
-             367:     22(int) Constant 0
-             368:     22(int) Constant 1
-             388:   29(float) Constant 1065353216
-             408:    6(float) Constant 0 1072693248
-             478:             TypeVector 22(int) 2
-             488:             TypeVector 22(int) 4
-             497:             TypeVector 8(bool) 3
-             502:             TypeVector 29(float) 4
-             503:             TypePointer Output 502(fvec4)
-504(@entryPointOutput):    503(ptr) Variable Output
-             505:             TypePointer Input 502(fvec4)
-      506(input):    505(ptr) Variable Input
+             149:             TypeVector 29(float) 4
+             150:             TypePointer Function 149(fvec4)
+             151:             TypeFunction 149(fvec4) 150(ptr)
+             334:    6(float) Constant 0 0
+             339:     15(int) Constant 0
+             348:   29(float) Constant 0
+             353:     15(int) Constant 1
+             373:     22(int) Constant 0
+             374:     22(int) Constant 1
+             394:   29(float) Constant 1065353216
+             414:    6(float) Constant 0 1072693248
+             484:             TypeVector 22(int) 2
+             494:             TypeVector 22(int) 4
+             503:             TypeVector 8(bool) 3
+             512:             TypePointer Input 149(fvec4)
+      513(input):    512(ptr) Variable Input
+             515:             TypePointer Output 149(fvec4)
+516(@entryPointOutput):    515(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          149(d):      7(ptr) Variable Function
-          150(b):      9(ptr) Variable Function
-      151(param):      7(ptr) Variable Function
-      153(param):      9(ptr) Variable Function
-      156(param):      7(ptr) Variable Function
-      158(param):      7(ptr) Variable Function
-          161(u):     16(ptr) Variable Function
-      162(param):      7(ptr) Variable Function
-      164(param):     16(ptr) Variable Function
-          167(i):     23(ptr) Variable Function
-      168(param):      7(ptr) Variable Function
-      170(param):     23(ptr) Variable Function
-          173(f):     30(ptr) Variable Function
-      174(param):      7(ptr) Variable Function
-      176(param):     30(ptr) Variable Function
-      181(param):      7(ptr) Variable Function
-      182(param):      9(ptr) Variable Function
-      187(param):      7(ptr) Variable Function
-      188(param):      7(ptr) Variable Function
-      193(param):      7(ptr) Variable Function
-      194(param):     16(ptr) Variable Function
-      199(param):      7(ptr) Variable Function
-      200(param):     23(ptr) Variable Function
-      205(param):      7(ptr) Variable Function
-      206(param):     30(ptr) Variable Function
-      211(param):      7(ptr) Variable Function
-      212(param):      9(ptr) Variable Function
-      217(param):      7(ptr) Variable Function
-      218(param):      7(ptr) Variable Function
-      223(param):      7(ptr) Variable Function
-      224(param):     16(ptr) Variable Function
-      229(param):      7(ptr) Variable Function
-      230(param):     23(ptr) Variable Function
-      235(param):      7(ptr) Variable Function
-      236(param):     30(ptr) Variable Function
-      241(param):      7(ptr) Variable Function
-      242(param):      9(ptr) Variable Function
-      247(param):      7(ptr) Variable Function
-      248(param):      7(ptr) Variable Function
-      253(param):      7(ptr) Variable Function
-      254(param):     16(ptr) Variable Function
-      259(param):      7(ptr) Variable Function
-      260(param):     23(ptr) Variable Function
-      265(param):      7(ptr) Variable Function
-      266(param):     30(ptr) Variable Function
-      271(param):     23(ptr) Variable Function
-      272(param):      9(ptr) Variable Function
-      277(param):     23(ptr) Variable Function
-      278(param):      7(ptr) Variable Function
-      283(param):     23(ptr) Variable Function
-      284(param):     16(ptr) Variable Function
-      289(param):     23(ptr) Variable Function
-      290(param):     23(ptr) Variable Function
-      295(param):     23(ptr) Variable Function
-      296(param):     30(ptr) Variable Function
-      299(param):     23(ptr) Variable Function
-      301(param):      9(ptr) Variable Function
-      304(param):     23(ptr) Variable Function
-      306(param):      7(ptr) Variable Function
-      309(param):     23(ptr) Variable Function
-      311(param):     16(ptr) Variable Function
-      314(param):     23(ptr) Variable Function
-      316(param):     23(ptr) Variable Function
-      319(param):     23(ptr) Variable Function
-      321(param):     30(ptr) Variable Function
-      324(param):      9(ptr) Variable Function
-      330(param):      9(ptr) Variable Function
-      335(param):      9(ptr) Variable Function
-      339(param):      9(ptr) Variable Function
-      344(param):      9(ptr) Variable Function
-      349(param):     16(ptr) Variable Function
-      353(param):     16(ptr) Variable Function
-      355(param):     16(ptr) Variable Function
-      360(param):     16(ptr) Variable Function
-      364(param):     16(ptr) Variable Function
-      370(param):     23(ptr) Variable Function
-      374(param):     23(ptr) Variable Function
-      378(param):     23(ptr) Variable Function
-      380(param):     23(ptr) Variable Function
-      385(param):     23(ptr) Variable Function
-      390(param):     30(ptr) Variable Function
-      394(param):     30(ptr) Variable Function
-      398(param):     30(ptr) Variable Function
-      402(param):     30(ptr) Variable Function
-      404(param):     30(ptr) Variable Function
-      410(param):      7(ptr) Variable Function
-      412(param):      7(ptr) Variable Function
-      417(param):      7(ptr) Variable Function
-      421(param):      7(ptr) Variable Function
-      425(param):      7(ptr) Variable Function
-      429(param):     30(ptr) Variable Function
-      433(param):     30(ptr) Variable Function
-      437(param):     30(ptr) Variable Function
-      441(param):     23(ptr) Variable Function
-      445(param):     16(ptr) Variable Function
-      449(param):     16(ptr) Variable Function
-      453(param):     23(ptr) Variable Function
-      457(param):     23(ptr) Variable Function
-      461(param):     23(ptr) Variable Function
-      465(param):     16(ptr) Variable Function
-      469(param):      7(ptr) Variable Function
-      474(param):    126(ptr) Variable Function
-      481(param):    135(ptr) Variable Function
-      485(param):    105(ptr) Variable Function
-      491(param):     23(ptr) Variable Function
-      494(param):      9(ptr) Variable Function
-      500(param):      9(ptr) Variable Function
-             152:    6(float) Load 149(d)
-                              Store 151(param) 152
-             154:     8(bool) Load 150(b)
-                              Store 153(param) 154
-             155:           2 FunctionCall 13(foo1(d1;b1;) 151(param) 153(param)
-             157:    6(float) Load 149(d)
-                              Store 156(param) 157
-             159:    6(float) Load 149(d)
-                              Store 158(param) 159
-             160:           2 FunctionCall 39(foo1(d1;d1;) 156(param) 158(param)
-             163:    6(float) Load 149(d)
-                              Store 162(param) 163
-             165:     15(int) Load 161(u)
-                              Store 164(param) 165
-             166:           2 FunctionCall 20(foo1(d1;u1;) 162(param) 164(param)
-             169:    6(float) Load 149(d)
-                              Store 168(param) 169
-             171:     22(int) Load 167(i)
-                              Store 170(param) 171
-             172:           2 FunctionCall 27(foo1(d1;i1;) 168(param) 170(param)
-             175:    6(float) Load 149(d)
-                              Store 174(param) 175
-             177:   29(float) Load 173(f)
-                              Store 176(param) 177
-             178:           2 FunctionCall 34(foo1(d1;f1;) 174(param) 176(param)
-             179:   29(float) Load 173(f)
-             180:    6(float) FConvert 179
-                              Store 181(param) 180
-             183:     8(bool) Load 150(b)
-                              Store 182(param) 183
-             184:           2 FunctionCall 13(foo1(d1;b1;) 181(param) 182(param)
-             185:   29(float) Load 173(f)
-             186:    6(float) FConvert 185
-                              Store 187(param) 186
-             189:    6(float) Load 149(d)
-                              Store 188(param) 189
-             190:           2 FunctionCall 39(foo1(d1;d1;) 187(param) 188(param)
-             191:   29(float) Load 173(f)
-             192:    6(float) FConvert 191
-                              Store 193(param) 192
-             195:     15(int) Load 161(u)
-                              Store 194(param) 195
-             196:           2 FunctionCall 20(foo1(d1;u1;) 193(param) 194(param)
-             197:   29(float) Load 173(f)
-             198:    6(float) FConvert 197
-                              Store 199(param) 198
-             201:     22(int) Load 167(i)
-                              Store 200(param) 201
-             202:           2 FunctionCall 27(foo1(d1;i1;) 199(param) 200(param)
-             203:   29(float) Load 173(f)
-             204:    6(float) FConvert 203
-                              Store 205(param) 204
-             207:   29(float) Load 173(f)
-                              Store 206(param) 207
-             208:           2 FunctionCall 34(foo1(d1;f1;) 205(param) 206(param)
-             209:     15(int) Load 161(u)
-             210:    6(float) ConvertUToF 209
-                              Store 211(param) 210
-             213:     8(bool) Load 150(b)
-                              Store 212(param) 213
-             214:           2 FunctionCall 13(foo1(d1;b1;) 211(param) 212(param)
-             215:     15(int) Load 161(u)
-             216:    6(float) ConvertUToF 215
-                              Store 217(param) 216
-             219:    6(float) Load 149(d)
-                              Store 218(param) 219
-             220:           2 FunctionCall 39(foo1(d1;d1;) 217(param) 218(param)
-             221:     15(int) Load 161(u)
-             222:    6(float) ConvertUToF 221
-                              Store 223(param) 222
-             225:     15(int) Load 161(u)
-                              Store 224(param) 225
-             226:           2 FunctionCall 20(foo1(d1;u1;) 223(param) 224(param)
-             227:     15(int) Load 161(u)
-             228:    6(float) ConvertUToF 227
-                              Store 229(param) 228
-             231:     22(int) Load 167(i)
-                              Store 230(param) 231
-             232:           2 FunctionCall 27(foo1(d1;i1;) 229(param) 230(param)
-             233:     15(int) Load 161(u)
-             234:    6(float) ConvertUToF 233
-                              Store 235(param) 234
-             237:   29(float) Load 173(f)
-                              Store 236(param) 237
-             238:           2 FunctionCall 34(foo1(d1;f1;) 235(param) 236(param)
-             239:     22(int) Load 167(i)
-             240:    6(float) ConvertSToF 239
-                              Store 241(param) 240
-             243:     8(bool) Load 150(b)
-                              Store 242(param) 243
-             244:           2 FunctionCall 13(foo1(d1;b1;) 241(param) 242(param)
-             245:     22(int) Load 167(i)
-             246:    6(float) ConvertSToF 245
-                              Store 247(param) 246
-             249:    6(float) Load 149(d)
-                              Store 248(param) 249
-             250:           2 FunctionCall 39(foo1(d1;d1;) 247(param) 248(param)
-             251:     22(int) Load 167(i)
-             252:    6(float) ConvertSToF 251
-                              Store 253(param) 252
-             255:     15(int) Load 161(u)
-                              Store 254(param) 255
-             256:           2 FunctionCall 20(foo1(d1;u1;) 253(param) 254(param)
-             257:     22(int) Load 167(i)
-             258:    6(float) ConvertSToF 257
-                              Store 259(param) 258
-             261:     22(int) Load 167(i)
-                              Store 260(param) 261
-             262:           2 FunctionCall 27(foo1(d1;i1;) 259(param) 260(param)
-             263:     22(int) Load 167(i)
-             264:    6(float) ConvertSToF 263
-                              Store 265(param) 264
-             267:   29(float) Load 173(f)
-                              Store 266(param) 267
-             268:           2 FunctionCall 34(foo1(d1;f1;) 265(param) 266(param)
-             269:     15(int) Load 161(u)
-             270:     22(int) Bitcast 269
-                              Store 271(param) 270
-             273:     8(bool) Load 150(b)
-                              Store 272(param) 273
-             274:           2 FunctionCall 44(foo2(i1;b1;) 271(param) 272(param)
-             275:     15(int) Load 161(u)
-             276:     22(int) Bitcast 275
-                              Store 277(param) 276
-             279:    6(float) Load 149(d)
-                              Store 278(param) 279
-             280:           2 FunctionCall 64(foo2(i1;d1;) 277(param) 278(param)
-             281:     15(int) Load 161(u)
-             282:     22(int) Bitcast 281
-                              Store 283(param) 282
-             285:     15(int) Load 161(u)
-                              Store 284(param) 285
-             286:           2 FunctionCall 49(foo2(i1;u1;) 283(param) 284(param)
-             287:     15(int) Load 161(u)
-             288:     22(int) Bitcast 287
-                              Store 289(param) 288
-             291:     22(int) Load 167(i)
-                              Store 290(param) 291
-             292:           2 FunctionCall 54(foo2(i1;i1;) 289(param) 290(param)
-             293:     15(int) Load 161(u)
-             294:     22(int) Bitcast 293
-                              Store 295(param) 294
-             297:   29(float) Load 173(f)
-                              Store 296(param) 297
-             298:           2 FunctionCall 59(foo2(i1;f1;) 295(param) 296(param)
-             300:     22(int) Load 167(i)
-                              Store 299(param) 300
-             302:     8(bool) Load 150(b)
-                              Store 301(param) 302
-             303:           2 FunctionCall 44(foo2(i1;b1;) 299(param) 301(param)
-             305:     22(int) Load 167(i)
-                              Store 304(param) 305
-             307:    6(float) Load 149(d)
-                              Store 306(param) 307
-             308:           2 FunctionCall 64(foo2(i1;d1;) 304(param) 306(param)
-             310:     22(int) Load 167(i)
-                              Store 309(param) 310
-             312:     15(int) Load 161(u)
-                              Store 311(param) 312
-             313:           2 FunctionCall 49(foo2(i1;u1;) 309(param) 311(param)
-             315:     22(int) Load 167(i)
-                              Store 314(param) 315
-             317:     22(int) Load 167(i)
-                              Store 316(param) 317
-             318:           2 FunctionCall 54(foo2(i1;i1;) 314(param) 316(param)
-             320:     22(int) Load 167(i)
-                              Store 319(param) 320
-             322:   29(float) Load 173(f)
-                              Store 321(param) 322
-             323:           2 FunctionCall 59(foo2(i1;f1;) 319(param) 321(param)
-             325:     8(bool) Load 150(b)
-                              Store 324(param) 325
-             326:           2 FunctionCall 68(foo3(b1;) 324(param)
-             327:    6(float) Load 149(d)
-             329:     8(bool) FOrdNotEqual 327 328
-                              Store 330(param) 329
-             331:           2 FunctionCall 68(foo3(b1;) 330(param)
-             332:     15(int) Load 161(u)
-             334:     8(bool) INotEqual 332 333
-                              Store 335(param) 334
-             336:           2 FunctionCall 68(foo3(b1;) 335(param)
-             337:     22(int) Load 167(i)
-             338:     8(bool) INotEqual 337 333
-                              Store 339(param) 338
-             340:           2 FunctionCall 68(foo3(b1;) 339(param)
-             341:   29(float) Load 173(f)
-             343:     8(bool) FOrdNotEqual 341 342
-                              Store 344(param) 343
-             345:           2 FunctionCall 68(foo3(b1;) 344(param)
-             346:     8(bool) Load 150(b)
-             348:     15(int) Select 346 347 333
-                              Store 349(param) 348
-             350:           2 FunctionCall 72(foo4(u1;) 349(param)
-             351:    6(float) Load 149(d)
-             352:     15(int) ConvertFToU 351
-                              Store 353(param) 352
-             354:           2 FunctionCall 72(foo4(u1;) 353(param)
-             356:     15(int) Load 161(u)
-                              Store 355(param) 356
-             357:           2 FunctionCall 72(foo4(u1;) 355(param)
-             358:     22(int) Load 167(i)
-             359:     15(int) Bitcast 358
-                              Store 360(param) 359
-             361:           2 FunctionCall 72(foo4(u1;) 360(param)
-             362:   29(float) Load 173(f)
-             363:     15(int) ConvertFToU 362
-                              Store 364(param) 363
-             365:           2 FunctionCall 72(foo4(u1;) 364(param)
-             366:     8(bool) Load 150(b)
-             369:     22(int) Select 366 368 367
-                              Store 370(param) 369
-             371:           2 FunctionCall 76(foo5(i1;) 370(param)
-             372:    6(float) Load 149(d)
-             373:     22(int) ConvertFToS 372
-                              Store 374(param) 373
-             375:           2 FunctionCall 76(foo5(i1;) 374(param)
-             376:     15(int) Load 161(u)
-             377:     22(int) Bitcast 376
-                              Store 378(param) 377
-             379:           2 FunctionCall 76(foo5(i1;) 378(param)
-             381:     22(int) Load 167(i)
-                              Store 380(param) 381
-             382:           2 FunctionCall 76(foo5(i1;) 380(param)
-             383:   29(float) Load 173(f)
-             384:     22(int) ConvertFToS 383
-                              Store 385(param) 384
-             386:           2 FunctionCall 76(foo5(i1;) 385(param)
-             387:     8(bool) Load 150(b)
-             389:   29(float) Select 387 388 342
-                              Store 390(param) 389
-             391:           2 FunctionCall 80(foo6(f1;) 390(param)
-             392:    6(float) Load 149(d)
-             393:   29(float) FConvert 392
-                              Store 394(param) 393
-             395:           2 FunctionCall 80(foo6(f1;) 394(param)
-             396:     15(int) Load 161(u)
-             397:   29(float) ConvertUToF 396
-                              Store 398(param) 397
-             399:           2 FunctionCall 80(foo6(f1;) 398(param)
-             400:     22(int) Load 167(i)
-             401:   29(float) ConvertSToF 400
-                              Store 402(param) 401
-             403:           2 FunctionCall 80(foo6(f1;) 402(param)
-             405:   29(float) Load 173(f)
-                              Store 404(param) 405
-             406:           2 FunctionCall 80(foo6(f1;) 404(param)
-             407:     8(bool) Load 150(b)
-             409:    6(float) Select 407 408 328
-                              Store 410(param) 409
-             411:           2 FunctionCall 84(foo7(d1;) 410(param)
-             413:    6(float) Load 149(d)
-                              Store 412(param) 413
-             414:           2 FunctionCall 84(foo7(d1;) 412(param)
-             415:     15(int) Load 161(u)
-             416:    6(float) ConvertUToF 415
-                              Store 417(param) 416
-             418:           2 FunctionCall 84(foo7(d1;) 417(param)
-             419:     22(int) Load 167(i)
-             420:    6(float) ConvertSToF 419
-                              Store 421(param) 420
-             422:           2 FunctionCall 84(foo7(d1;) 421(param)
-             423:   29(float) Load 173(f)
-             424:    6(float) FConvert 423
-                              Store 425(param) 424
-             426:           2 FunctionCall 84(foo7(d1;) 425(param)
-             427:     8(bool) Load 150(b)
-             428:   29(float) Select 427 388 342
-                              Store 429(param) 428
-             430:           2 FunctionCall 87(foo8(f1;) 429(param)
-             431:     15(int) Load 161(u)
-             432:   29(float) ConvertUToF 431
-                              Store 433(param) 432
-             434:           2 FunctionCall 87(foo8(f1;) 433(param)
-             435:     22(int) Load 167(i)
-             436:   29(float) ConvertSToF 435
-                              Store 437(param) 436
-             438:           2 FunctionCall 87(foo8(f1;) 437(param)
-             439:     8(bool) Load 150(b)
-             440:     22(int) Select 439 368 367
-                              Store 441(param) 440
-             442:           2 FunctionCall 93(foo9(i1;) 441(param)
-             443:   29(float) Load 173(f)
-             444:     15(int) ConvertFToU 443
-                              Store 445(param) 444
-             446:           2 FunctionCall 96(foo9(u1;) 445(param)
-             447:    6(float) Load 149(d)
-             448:     15(int) ConvertFToU 447
-                              Store 449(param) 448
-             450:           2 FunctionCall 96(foo9(u1;) 449(param)
-             451:     15(int) Load 161(u)
-             452:     22(int) Bitcast 451
-                              Store 453(param) 452
-             454:           2 FunctionCall 102(foo10(i1;) 453(param)
-             455:   29(float) Load 173(f)
-             456:     22(int) ConvertFToS 455
-                              Store 457(param) 456
-             458:           2 FunctionCall 102(foo10(i1;) 457(param)
-             459:    6(float) Load 149(d)
-             460:     22(int) ConvertFToS 459
-                              Store 461(param) 460
-             462:           2 FunctionCall 102(foo10(i1;) 461(param)
-             463:     8(bool) Load 150(b)
-             464:     15(int) Select 463 347 333
-                              Store 465(param) 464
-             466:           2 FunctionCall 120(foo11(u1;) 465(param)
-             467:   29(float) Load 173(f)
-             468:    6(float) FConvert 467
-                              Store 469(param) 468
-             470:           2 FunctionCall 111(foo11(d1;) 469(param)
-             471:   29(float) Load 173(f)
-             472:  104(fvec3) CompositeConstruct 471 471 471
-             473:  125(fvec3) FConvert 472
-                              Store 474(param) 473
-             475:           2 FunctionCall 129(foo12(vd3;) 474(param)
-             476:     22(int) Load 167(i)
-             477:     22(int) Load 167(i)
-             479:  478(ivec2) CompositeConstruct 476 477
-             480:  134(ivec2) Bitcast 479
-                              Store 481(param) 480
-             482:           2 FunctionCall 138(foo16(vu2;) 481(param)
-             483:   29(float) Load 173(f)
-             484:  104(fvec3) CompositeConstruct 483 483 483
-                              Store 485(param) 484
-             486:           2 FunctionCall 141(foo13(vf3;) 485(param)
-             487:     22(int) Load 167(i)
-             489:  488(ivec4) CompositeConstruct 487 487 487 487
-             490:     22(int) CompositeExtract 489 0
-                              Store 491(param) 490
-             492:           2 FunctionCall 144(foo14(vi1;) 491(param)
-             493:     8(bool) Load 150(b)
-                              Store 494(param) 493
-             495:           2 FunctionCall 147(foo15(vb1;) 494(param)
-             496:     8(bool) Load 150(b)
-             498:  497(bvec3) CompositeConstruct 496 496 496
-             499:     8(bool) CompositeExtract 498 0
-                              Store 500(param) 499
-             501:           2 FunctionCall 147(foo15(vb1;) 500(param)
-             507:  502(fvec4) Load 506(input)
-                              Store 504(@entryPointOutput) 507
+      511(input):    150(ptr) Variable Function
+      517(param):    150(ptr) Variable Function
+             514:  149(fvec4) Load 513(input)
+                              Store 511(input) 514
+             518:  149(fvec4) Load 511(input)
+                              Store 517(param) 518
+             519:  149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 517(param)
+                              Store 516(@entryPointOutput) 519
                               Return
                               FunctionEnd
  13(foo1(d1;b1;):           2 Function None 10
@@ -1590,3 +1172,453 @@ gl_FragCoord origin is upper left
              148:             Label
                               Return
                               FunctionEnd
+153(@PixelShaderFunction(vf4;):  149(fvec4) Function None 151
+      152(input):    150(ptr) FunctionParameter
+             154:             Label
+          155(d):      7(ptr) Variable Function
+          156(b):      9(ptr) Variable Function
+      157(param):      7(ptr) Variable Function
+      159(param):      9(ptr) Variable Function
+      162(param):      7(ptr) Variable Function
+      164(param):      7(ptr) Variable Function
+          167(u):     16(ptr) Variable Function
+      168(param):      7(ptr) Variable Function
+      170(param):     16(ptr) Variable Function
+          173(i):     23(ptr) Variable Function
+      174(param):      7(ptr) Variable Function
+      176(param):     23(ptr) Variable Function
+          179(f):     30(ptr) Variable Function
+      180(param):      7(ptr) Variable Function
+      182(param):     30(ptr) Variable Function
+      187(param):      7(ptr) Variable Function
+      188(param):      9(ptr) Variable Function
+      193(param):      7(ptr) Variable Function
+      194(param):      7(ptr) Variable Function
+      199(param):      7(ptr) Variable Function
+      200(param):     16(ptr) Variable Function
+      205(param):      7(ptr) Variable Function
+      206(param):     23(ptr) Variable Function
+      211(param):      7(ptr) Variable Function
+      212(param):     30(ptr) Variable Function
+      217(param):      7(ptr) Variable Function
+      218(param):      9(ptr) Variable Function
+      223(param):      7(ptr) Variable Function
+      224(param):      7(ptr) Variable Function
+      229(param):      7(ptr) Variable Function
+      230(param):     16(ptr) Variable Function
+      235(param):      7(ptr) Variable Function
+      236(param):     23(ptr) Variable Function
+      241(param):      7(ptr) Variable Function
+      242(param):     30(ptr) Variable Function
+      247(param):      7(ptr) Variable Function
+      248(param):      9(ptr) Variable Function
+      253(param):      7(ptr) Variable Function
+      254(param):      7(ptr) Variable Function
+      259(param):      7(ptr) Variable Function
+      260(param):     16(ptr) Variable Function
+      265(param):      7(ptr) Variable Function
+      266(param):     23(ptr) Variable Function
+      271(param):      7(ptr) Variable Function
+      272(param):     30(ptr) Variable Function
+      277(param):     23(ptr) Variable Function
+      278(param):      9(ptr) Variable Function
+      283(param):     23(ptr) Variable Function
+      284(param):      7(ptr) Variable Function
+      289(param):     23(ptr) Variable Function
+      290(param):     16(ptr) Variable Function
+      295(param):     23(ptr) Variable Function
+      296(param):     23(ptr) Variable Function
+      301(param):     23(ptr) Variable Function
+      302(param):     30(ptr) Variable Function
+      305(param):     23(ptr) Variable Function
+      307(param):      9(ptr) Variable Function
+      310(param):     23(ptr) Variable Function
+      312(param):      7(ptr) Variable Function
+      315(param):     23(ptr) Variable Function
+      317(param):     16(ptr) Variable Function
+      320(param):     23(ptr) Variable Function
+      322(param):     23(ptr) Variable Function
+      325(param):     23(ptr) Variable Function
+      327(param):     30(ptr) Variable Function
+      330(param):      9(ptr) Variable Function
+      336(param):      9(ptr) Variable Function
+      341(param):      9(ptr) Variable Function
+      345(param):      9(ptr) Variable Function
+      350(param):      9(ptr) Variable Function
+      355(param):     16(ptr) Variable Function
+      359(param):     16(ptr) Variable Function
+      361(param):     16(ptr) Variable Function
+      366(param):     16(ptr) Variable Function
+      370(param):     16(ptr) Variable Function
+      376(param):     23(ptr) Variable Function
+      380(param):     23(ptr) Variable Function
+      384(param):     23(ptr) Variable Function
+      386(param):     23(ptr) Variable Function
+      391(param):     23(ptr) Variable Function
+      396(param):     30(ptr) Variable Function
+      400(param):     30(ptr) Variable Function
+      404(param):     30(ptr) Variable Function
+      408(param):     30(ptr) Variable Function
+      410(param):     30(ptr) Variable Function
+      416(param):      7(ptr) Variable Function
+      418(param):      7(ptr) Variable Function
+      423(param):      7(ptr) Variable Function
+      427(param):      7(ptr) Variable Function
+      431(param):      7(ptr) Variable Function
+      435(param):     30(ptr) Variable Function
+      439(param):     30(ptr) Variable Function
+      443(param):     30(ptr) Variable Function
+      447(param):     23(ptr) Variable Function
+      451(param):     16(ptr) Variable Function
+      455(param):     16(ptr) Variable Function
+      459(param):     23(ptr) Variable Function
+      463(param):     23(ptr) Variable Function
+      467(param):     23(ptr) Variable Function
+      471(param):     16(ptr) Variable Function
+      475(param):      7(ptr) Variable Function
+      480(param):    126(ptr) Variable Function
+      487(param):    135(ptr) Variable Function
+      491(param):    105(ptr) Variable Function
+      497(param):     23(ptr) Variable Function
+      500(param):      9(ptr) Variable Function
+      506(param):      9(ptr) Variable Function
+             158:    6(float) Load 155(d)
+                              Store 157(param) 158
+             160:     8(bool) Load 156(b)
+                              Store 159(param) 160
+             161:           2 FunctionCall 13(foo1(d1;b1;) 157(param) 159(param)
+             163:    6(float) Load 155(d)
+                              Store 162(param) 163
+             165:    6(float) Load 155(d)
+                              Store 164(param) 165
+             166:           2 FunctionCall 39(foo1(d1;d1;) 162(param) 164(param)
+             169:    6(float) Load 155(d)
+                              Store 168(param) 169
+             171:     15(int) Load 167(u)
+                              Store 170(param) 171
+             172:           2 FunctionCall 20(foo1(d1;u1;) 168(param) 170(param)
+             175:    6(float) Load 155(d)
+                              Store 174(param) 175
+             177:     22(int) Load 173(i)
+                              Store 176(param) 177
+             178:           2 FunctionCall 27(foo1(d1;i1;) 174(param) 176(param)
+             181:    6(float) Load 155(d)
+                              Store 180(param) 181
+             183:   29(float) Load 179(f)
+                              Store 182(param) 183
+             184:           2 FunctionCall 34(foo1(d1;f1;) 180(param) 182(param)
+             185:   29(float) Load 179(f)
+             186:    6(float) FConvert 185
+                              Store 187(param) 186
+             189:     8(bool) Load 156(b)
+                              Store 188(param) 189
+             190:           2 FunctionCall 13(foo1(d1;b1;) 187(param) 188(param)
+             191:   29(float) Load 179(f)
+             192:    6(float) FConvert 191
+                              Store 193(param) 192
+             195:    6(float) Load 155(d)
+                              Store 194(param) 195
+             196:           2 FunctionCall 39(foo1(d1;d1;) 193(param) 194(param)
+             197:   29(float) Load 179(f)
+             198:    6(float) FConvert 197
+                              Store 199(param) 198
+             201:     15(int) Load 167(u)
+                              Store 200(param) 201
+             202:           2 FunctionCall 20(foo1(d1;u1;) 199(param) 200(param)
+             203:   29(float) Load 179(f)
+             204:    6(float) FConvert 203
+                              Store 205(param) 204
+             207:     22(int) Load 173(i)
+                              Store 206(param) 207
+             208:           2 FunctionCall 27(foo1(d1;i1;) 205(param) 206(param)
+             209:   29(float) Load 179(f)
+             210:    6(float) FConvert 209
+                              Store 211(param) 210
+             213:   29(float) Load 179(f)
+                              Store 212(param) 213
+             214:           2 FunctionCall 34(foo1(d1;f1;) 211(param) 212(param)
+             215:     15(int) Load 167(u)
+             216:    6(float) ConvertUToF 215
+                              Store 217(param) 216
+             219:     8(bool) Load 156(b)
+                              Store 218(param) 219
+             220:           2 FunctionCall 13(foo1(d1;b1;) 217(param) 218(param)
+             221:     15(int) Load 167(u)
+             222:    6(float) ConvertUToF 221
+                              Store 223(param) 222
+             225:    6(float) Load 155(d)
+                              Store 224(param) 225
+             226:           2 FunctionCall 39(foo1(d1;d1;) 223(param) 224(param)
+             227:     15(int) Load 167(u)
+             228:    6(float) ConvertUToF 227
+                              Store 229(param) 228
+             231:     15(int) Load 167(u)
+                              Store 230(param) 231
+             232:           2 FunctionCall 20(foo1(d1;u1;) 229(param) 230(param)
+             233:     15(int) Load 167(u)
+             234:    6(float) ConvertUToF 233
+                              Store 235(param) 234
+             237:     22(int) Load 173(i)
+                              Store 236(param) 237
+             238:           2 FunctionCall 27(foo1(d1;i1;) 235(param) 236(param)
+             239:     15(int) Load 167(u)
+             240:    6(float) ConvertUToF 239
+                              Store 241(param) 240
+             243:   29(float) Load 179(f)
+                              Store 242(param) 243
+             244:           2 FunctionCall 34(foo1(d1;f1;) 241(param) 242(param)
+             245:     22(int) Load 173(i)
+             246:    6(float) ConvertSToF 245
+                              Store 247(param) 246
+             249:     8(bool) Load 156(b)
+                              Store 248(param) 249
+             250:           2 FunctionCall 13(foo1(d1;b1;) 247(param) 248(param)
+             251:     22(int) Load 173(i)
+             252:    6(float) ConvertSToF 251
+                              Store 253(param) 252
+             255:    6(float) Load 155(d)
+                              Store 254(param) 255
+             256:           2 FunctionCall 39(foo1(d1;d1;) 253(param) 254(param)
+             257:     22(int) Load 173(i)
+             258:    6(float) ConvertSToF 257
+                              Store 259(param) 258
+             261:     15(int) Load 167(u)
+                              Store 260(param) 261
+             262:           2 FunctionCall 20(foo1(d1;u1;) 259(param) 260(param)
+             263:     22(int) Load 173(i)
+             264:    6(float) ConvertSToF 263
+                              Store 265(param) 264
+             267:     22(int) Load 173(i)
+                              Store 266(param) 267
+             268:           2 FunctionCall 27(foo1(d1;i1;) 265(param) 266(param)
+             269:     22(int) Load 173(i)
+             270:    6(float) ConvertSToF 269
+                              Store 271(param) 270
+             273:   29(float) Load 179(f)
+                              Store 272(param) 273
+             274:           2 FunctionCall 34(foo1(d1;f1;) 271(param) 272(param)
+             275:     15(int) Load 167(u)
+             276:     22(int) Bitcast 275
+                              Store 277(param) 276
+             279:     8(bool) Load 156(b)
+                              Store 278(param) 279
+             280:           2 FunctionCall 44(foo2(i1;b1;) 277(param) 278(param)
+             281:     15(int) Load 167(u)
+             282:     22(int) Bitcast 281
+                              Store 283(param) 282
+             285:    6(float) Load 155(d)
+                              Store 284(param) 285
+             286:           2 FunctionCall 64(foo2(i1;d1;) 283(param) 284(param)
+             287:     15(int) Load 167(u)
+             288:     22(int) Bitcast 287
+                              Store 289(param) 288
+             291:     15(int) Load 167(u)
+                              Store 290(param) 291
+             292:           2 FunctionCall 49(foo2(i1;u1;) 289(param) 290(param)
+             293:     15(int) Load 167(u)
+             294:     22(int) Bitcast 293
+                              Store 295(param) 294
+             297:     22(int) Load 173(i)
+                              Store 296(param) 297
+             298:           2 FunctionCall 54(foo2(i1;i1;) 295(param) 296(param)
+             299:     15(int) Load 167(u)
+             300:     22(int) Bitcast 299
+                              Store 301(param) 300
+             303:   29(float) Load 179(f)
+                              Store 302(param) 303
+             304:           2 FunctionCall 59(foo2(i1;f1;) 301(param) 302(param)
+             306:     22(int) Load 173(i)
+                              Store 305(param) 306
+             308:     8(bool) Load 156(b)
+                              Store 307(param) 308
+             309:           2 FunctionCall 44(foo2(i1;b1;) 305(param) 307(param)
+             311:     22(int) Load 173(i)
+                              Store 310(param) 311
+             313:    6(float) Load 155(d)
+                              Store 312(param) 313
+             314:           2 FunctionCall 64(foo2(i1;d1;) 310(param) 312(param)
+             316:     22(int) Load 173(i)
+                              Store 315(param) 316
+             318:     15(int) Load 167(u)
+                              Store 317(param) 318
+             319:           2 FunctionCall 49(foo2(i1;u1;) 315(param) 317(param)
+             321:     22(int) Load 173(i)
+                              Store 320(param) 321
+             323:     22(int) Load 173(i)
+                              Store 322(param) 323
+             324:           2 FunctionCall 54(foo2(i1;i1;) 320(param) 322(param)
+             326:     22(int) Load 173(i)
+                              Store 325(param) 326
+             328:   29(float) Load 179(f)
+                              Store 327(param) 328
+             329:           2 FunctionCall 59(foo2(i1;f1;) 325(param) 327(param)
+             331:     8(bool) Load 156(b)
+                              Store 330(param) 331
+             332:           2 FunctionCall 68(foo3(b1;) 330(param)
+             333:    6(float) Load 155(d)
+             335:     8(bool) FOrdNotEqual 333 334
+                              Store 336(param) 335
+             337:           2 FunctionCall 68(foo3(b1;) 336(param)
+             338:     15(int) Load 167(u)
+             340:     8(bool) INotEqual 338 339
+                              Store 341(param) 340
+             342:           2 FunctionCall 68(foo3(b1;) 341(param)
+             343:     22(int) Load 173(i)
+             344:     8(bool) INotEqual 343 339
+                              Store 345(param) 344
+             346:           2 FunctionCall 68(foo3(b1;) 345(param)
+             347:   29(float) Load 179(f)
+             349:     8(bool) FOrdNotEqual 347 348
+                              Store 350(param) 349
+             351:           2 FunctionCall 68(foo3(b1;) 350(param)
+             352:     8(bool) Load 156(b)
+             354:     15(int) Select 352 353 339
+                              Store 355(param) 354
+             356:           2 FunctionCall 72(foo4(u1;) 355(param)
+             357:    6(float) Load 155(d)
+             358:     15(int) ConvertFToU 357
+                              Store 359(param) 358
+             360:           2 FunctionCall 72(foo4(u1;) 359(param)
+             362:     15(int) Load 167(u)
+                              Store 361(param) 362
+             363:           2 FunctionCall 72(foo4(u1;) 361(param)
+             364:     22(int) Load 173(i)
+             365:     15(int) Bitcast 364
+                              Store 366(param) 365
+             367:           2 FunctionCall 72(foo4(u1;) 366(param)
+             368:   29(float) Load 179(f)
+             369:     15(int) ConvertFToU 368
+                              Store 370(param) 369
+             371:           2 FunctionCall 72(foo4(u1;) 370(param)
+             372:     8(bool) Load 156(b)
+             375:     22(int) Select 372 374 373
+                              Store 376(param) 375
+             377:           2 FunctionCall 76(foo5(i1;) 376(param)
+             378:    6(float) Load 155(d)
+             379:     22(int) ConvertFToS 378
+                              Store 380(param) 379
+             381:           2 FunctionCall 76(foo5(i1;) 380(param)
+             382:     15(int) Load 167(u)
+             383:     22(int) Bitcast 382
+                              Store 384(param) 383
+             385:           2 FunctionCall 76(foo5(i1;) 384(param)
+             387:     22(int) Load 173(i)
+                              Store 386(param) 387
+             388:           2 FunctionCall 76(foo5(i1;) 386(param)
+             389:   29(float) Load 179(f)
+             390:     22(int) ConvertFToS 389
+                              Store 391(param) 390
+             392:           2 FunctionCall 76(foo5(i1;) 391(param)
+             393:     8(bool) Load 156(b)
+             395:   29(float) Select 393 394 348
+                              Store 396(param) 395
+             397:           2 FunctionCall 80(foo6(f1;) 396(param)
+             398:    6(float) Load 155(d)
+             399:   29(float) FConvert 398
+                              Store 400(param) 399
+             401:           2 FunctionCall 80(foo6(f1;) 400(param)
+             402:     15(int) Load 167(u)
+             403:   29(float) ConvertUToF 402
+                              Store 404(param) 403
+             405:           2 FunctionCall 80(foo6(f1;) 404(param)
+             406:     22(int) Load 173(i)
+             407:   29(float) ConvertSToF 406
+                              Store 408(param) 407
+             409:           2 FunctionCall 80(foo6(f1;) 408(param)
+             411:   29(float) Load 179(f)
+                              Store 410(param) 411
+             412:           2 FunctionCall 80(foo6(f1;) 410(param)
+             413:     8(bool) Load 156(b)
+             415:    6(float) Select 413 414 334
+                              Store 416(param) 415
+             417:           2 FunctionCall 84(foo7(d1;) 416(param)
+             419:    6(float) Load 155(d)
+                              Store 418(param) 419
+             420:           2 FunctionCall 84(foo7(d1;) 418(param)
+             421:     15(int) Load 167(u)
+             422:    6(float) ConvertUToF 421
+                              Store 423(param) 422
+             424:           2 FunctionCall 84(foo7(d1;) 423(param)
+             425:     22(int) Load 173(i)
+             426:    6(float) ConvertSToF 425
+                              Store 427(param) 426
+             428:           2 FunctionCall 84(foo7(d1;) 427(param)
+             429:   29(float) Load 179(f)
+             430:    6(float) FConvert 429
+                              Store 431(param) 430
+             432:           2 FunctionCall 84(foo7(d1;) 431(param)
+             433:     8(bool) Load 156(b)
+             434:   29(float) Select 433 394 348
+                              Store 435(param) 434
+             436:           2 FunctionCall 87(foo8(f1;) 435(param)
+             437:     15(int) Load 167(u)
+             438:   29(float) ConvertUToF 437
+                              Store 439(param) 438
+             440:           2 FunctionCall 87(foo8(f1;) 439(param)
+             441:     22(int) Load 173(i)
+             442:   29(float) ConvertSToF 441
+                              Store 443(param) 442
+             444:           2 FunctionCall 87(foo8(f1;) 443(param)
+             445:     8(bool) Load 156(b)
+             446:     22(int) Select 445 374 373
+                              Store 447(param) 446
+             448:           2 FunctionCall 93(foo9(i1;) 447(param)
+             449:   29(float) Load 179(f)
+             450:     15(int) ConvertFToU 449
+                              Store 451(param) 450
+             452:           2 FunctionCall 96(foo9(u1;) 451(param)
+             453:    6(float) Load 155(d)
+             454:     15(int) ConvertFToU 453
+                              Store 455(param) 454
+             456:           2 FunctionCall 96(foo9(u1;) 455(param)
+             457:     15(int) Load 167(u)
+             458:     22(int) Bitcast 457
+                              Store 459(param) 458
+             460:           2 FunctionCall 102(foo10(i1;) 459(param)
+             461:   29(float) Load 179(f)
+             462:     22(int) ConvertFToS 461
+                              Store 463(param) 462
+             464:           2 FunctionCall 102(foo10(i1;) 463(param)
+             465:    6(float) Load 155(d)
+             466:     22(int) ConvertFToS 465
+                              Store 467(param) 466
+             468:           2 FunctionCall 102(foo10(i1;) 467(param)
+             469:     8(bool) Load 156(b)
+             470:     15(int) Select 469 353 339
+                              Store 471(param) 470
+             472:           2 FunctionCall 120(foo11(u1;) 471(param)
+             473:   29(float) Load 179(f)
+             474:    6(float) FConvert 473
+                              Store 475(param) 474
+             476:           2 FunctionCall 111(foo11(d1;) 475(param)
+             477:   29(float) Load 179(f)
+             478:  104(fvec3) CompositeConstruct 477 477 477
+             479:  125(fvec3) FConvert 478
+                              Store 480(param) 479
+             481:           2 FunctionCall 129(foo12(vd3;) 480(param)
+             482:     22(int) Load 173(i)
+             483:     22(int) Load 173(i)
+             485:  484(ivec2) CompositeConstruct 482 483
+             486:  134(ivec2) Bitcast 485
+                              Store 487(param) 486
+             488:           2 FunctionCall 138(foo16(vu2;) 487(param)
+             489:   29(float) Load 179(f)
+             490:  104(fvec3) CompositeConstruct 489 489 489
+                              Store 491(param) 490
+             492:           2 FunctionCall 141(foo13(vf3;) 491(param)
+             493:     22(int) Load 173(i)
+             495:  494(ivec4) CompositeConstruct 493 493 493 493
+             496:     22(int) CompositeExtract 495 0
+                              Store 497(param) 496
+             498:           2 FunctionCall 144(foo14(vi1;) 497(param)
+             499:     8(bool) Load 156(b)
+                              Store 500(param) 499
+             501:           2 FunctionCall 147(foo15(vb1;) 500(param)
+             502:     8(bool) Load 156(b)
+             504:  503(bvec3) CompositeConstruct 502 502 502
+             505:     8(bool) CompositeExtract 504 0
+                              Store 506(param) 505
+             507:           2 FunctionCall 147(foo15(vb1;) 506(param)
+             508:  149(fvec4) Load 152(input)
+                              ReturnValue 508
+                              FunctionEnd

+ 394 - 381
3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out

@@ -55,7 +55,7 @@ gl_FragCoord origin is upper left
 0:32  Function Definition: fn3(i1; (temp void)
 0:32    Function Parameters: 
 0:32      'p0' (in int)
-0:36  Function Definition: main( (temp 4-component vector of int)
+0:36  Function Definition: @main( (temp 4-component vector of int)
 0:36    Function Parameters: 
 0:?     Sequence
 0:37      Sequence
@@ -70,117 +70,120 @@ gl_FragCoord origin is upper left
 0:40      Function Call: fn3(i1; (temp void)
 0:40        Constant:
 0:40          5 (const int)
-0:50      Sequence
-0:50        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:49          add (temp 4-component vector of int)
-0:47            add (temp 4-component vector of int)
-0:46              add (temp 4-component vector of int)
-0:45                add (temp 4-component vector of int)
-0:44                  add (temp 4-component vector of int)
-0:43                    add (temp 4-component vector of int)
-0:42                      add (temp 4-component vector of int)
-0:42                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:42                          Constant:
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:?                           Constant:
-0:?                             -1 (const int)
-0:?                             -2 (const int)
-0:?                             -3 (const int)
-0:?                             -4 (const int)
-0:15                          Constant:
-0:15                            1 (const int)
-0:15                            2 (const int)
-0:16                          Constant:
-0:16                            42 (const int)
-0:43                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:50      Branch: Return with expression
+0:49        add (temp 4-component vector of int)
+0:47          add (temp 4-component vector of int)
+0:46            add (temp 4-component vector of int)
+0:45              add (temp 4-component vector of int)
+0:44                add (temp 4-component vector of int)
+0:43                  add (temp 4-component vector of int)
+0:42                    add (temp 4-component vector of int)
+0:42                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:42                        Constant:
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:?                         Constant:
+0:?                           -1 (const int)
+0:?                           -2 (const int)
+0:?                           -3 (const int)
+0:?                           -4 (const int)
+0:15                        Constant:
+0:15                          1 (const int)
+0:15                          2 (const int)
+0:16                        Constant:
+0:16                          42 (const int)
+0:43                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:43                        Constant:
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:43                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
 0:43                          Constant:
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:43                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:43                            Constant:
-0:43                              0 (const uint)
-0:15                          Constant:
-0:15                            1 (const int)
-0:15                            2 (const int)
-0:16                          Constant:
-0:16                            42 (const int)
-0:44                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:44                        Constant:
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:44                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:44                          Constant:
-0:44                            0 (const uint)
-0:44                        'myarray' (temp 2-element array of int)
+0:43                            0 (const uint)
+0:15                        Constant:
+0:15                          1 (const int)
+0:15                          2 (const int)
 0:16                        Constant:
 0:16                          42 (const int)
-0:45                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:45                      Constant:
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:45                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:45                        Constant:
-0:45                          0 (const uint)
-0:45                      'myarray' (temp 2-element array of int)
+0:44                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:44                      Constant:
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:44                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
+0:44                        Constant:
+0:44                          0 (const uint)
+0:44                      'myarray' (temp 2-element array of int)
+0:16                      Constant:
+0:16                        42 (const int)
+0:45                  Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:45                    Constant:
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                    ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:45                      'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
 0:45                      Constant:
-0:45                        99 (const int)
-0:46                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:46                    Constant:
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                    Constant:
-0:46                      false (const bool)
-0:9                    Constant:
-0:9                      false (const bool)
-0:47                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:47                  Constant:
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                  Constant:
-0:47                    false (const bool)
-0:47                  Constant:
-0:47                    true (const bool)
-0:49              Function Call: fn2(vi4;f1; (temp 4-component vector of int)
-0:49                Constant:
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                Constant:
-0:49                  11.110000
-0:50            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:50              Constant:
-0:50                111 (const int)
-0:50                111 (const int)
-0:50                111 (const int)
-0:50                111 (const int)
-0:50              Constant:
-0:50                12 (const int)
-0:50        Branch: Return
+0:45                        0 (const uint)
+0:45                    'myarray' (temp 2-element array of int)
+0:45                    Constant:
+0:45                      99 (const int)
+0:46                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:46                  Constant:
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                  Constant:
+0:46                    false (const bool)
+0:9                  Constant:
+0:9                    false (const bool)
+0:47              Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:47                Constant:
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                Constant:
+0:47                  false (const bool)
+0:47                Constant:
+0:47                  true (const bool)
+0:49            Function Call: fn2(vi4;f1; (temp 4-component vector of int)
+0:49              Constant:
+0:49                110 (const int)
+0:49                110 (const int)
+0:49                110 (const int)
+0:49                110 (const int)
+0:49              Constant:
+0:49                11.110000
+0:50          Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:50            Constant:
+0:50              111 (const int)
+0:50              111 (const int)
+0:50              111 (const int)
+0:50              111 (const int)
+0:50            Constant:
+0:50              12 (const int)
+0:36  Function Definition: main( (temp void)
+0:36    Function Parameters: 
+0:?     Sequence
+0:36      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:36        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'cia' (const int)
 0:?       -4 (const int)
 0:?     'cib' (const int)
 0:?       -42 (const int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 
 
 Linked fragment stage:
@@ -242,7 +245,7 @@ gl_FragCoord origin is upper left
 0:32  Function Definition: fn3(i1; (temp void)
 0:32    Function Parameters: 
 0:32      'p0' (in int)
-0:36  Function Definition: main( (temp 4-component vector of int)
+0:36  Function Definition: @main( (temp 4-component vector of int)
 0:36    Function Parameters: 
 0:?     Sequence
 0:37      Sequence
@@ -257,126 +260,129 @@ gl_FragCoord origin is upper left
 0:40      Function Call: fn3(i1; (temp void)
 0:40        Constant:
 0:40          5 (const int)
-0:50      Sequence
-0:50        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:49          add (temp 4-component vector of int)
-0:47            add (temp 4-component vector of int)
-0:46              add (temp 4-component vector of int)
-0:45                add (temp 4-component vector of int)
-0:44                  add (temp 4-component vector of int)
-0:43                    add (temp 4-component vector of int)
-0:42                      add (temp 4-component vector of int)
-0:42                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:42                          Constant:
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:42                            100 (const int)
-0:?                           Constant:
-0:?                             -1 (const int)
-0:?                             -2 (const int)
-0:?                             -3 (const int)
-0:?                             -4 (const int)
-0:15                          Constant:
-0:15                            1 (const int)
-0:15                            2 (const int)
-0:16                          Constant:
-0:16                            42 (const int)
-0:43                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:50      Branch: Return with expression
+0:49        add (temp 4-component vector of int)
+0:47          add (temp 4-component vector of int)
+0:46            add (temp 4-component vector of int)
+0:45              add (temp 4-component vector of int)
+0:44                add (temp 4-component vector of int)
+0:43                  add (temp 4-component vector of int)
+0:42                    add (temp 4-component vector of int)
+0:42                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:42                        Constant:
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:42                          100 (const int)
+0:?                         Constant:
+0:?                           -1 (const int)
+0:?                           -2 (const int)
+0:?                           -3 (const int)
+0:?                           -4 (const int)
+0:15                        Constant:
+0:15                          1 (const int)
+0:15                          2 (const int)
+0:16                        Constant:
+0:16                          42 (const int)
+0:43                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:43                        Constant:
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                          101 (const int)
+0:43                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:43                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
 0:43                          Constant:
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                            101 (const int)
-0:43                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:43                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:43                            Constant:
-0:43                              0 (const uint)
-0:15                          Constant:
-0:15                            1 (const int)
-0:15                            2 (const int)
-0:16                          Constant:
-0:16                            42 (const int)
-0:44                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:44                        Constant:
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                          102 (const int)
-0:44                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:44                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:44                          Constant:
-0:44                            0 (const uint)
-0:44                        'myarray' (temp 2-element array of int)
+0:43                            0 (const uint)
+0:15                        Constant:
+0:15                          1 (const int)
+0:15                          2 (const int)
 0:16                        Constant:
 0:16                          42 (const int)
-0:45                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:45                      Constant:
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                        103 (const int)
-0:45                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:45                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
-0:45                        Constant:
-0:45                          0 (const uint)
-0:45                      'myarray' (temp 2-element array of int)
+0:44                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:44                      Constant:
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                        102 (const int)
+0:44                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:44                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
+0:44                        Constant:
+0:44                          0 (const uint)
+0:44                      'myarray' (temp 2-element array of int)
+0:16                      Constant:
+0:16                        42 (const int)
+0:45                  Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:45                    Constant:
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                      103 (const int)
+0:45                    ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:45                      'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
 0:45                      Constant:
-0:45                        99 (const int)
-0:46                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:46                    Constant:
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                      104 (const int)
-0:46                    Constant:
-0:46                      false (const bool)
-0:9                    Constant:
-0:9                      false (const bool)
-0:47                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:47                  Constant:
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                    105 (const int)
-0:47                  Constant:
-0:47                    false (const bool)
-0:47                  Constant:
-0:47                    true (const bool)
-0:49              Function Call: fn2(vi4;f1; (temp 4-component vector of int)
-0:49                Constant:
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                  110 (const int)
-0:49                Constant:
-0:49                  11.110000
-0:50            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:50              Constant:
-0:50                111 (const int)
-0:50                111 (const int)
-0:50                111 (const int)
-0:50                111 (const int)
-0:50              Constant:
-0:50                12 (const int)
-0:50        Branch: Return
+0:45                        0 (const uint)
+0:45                    'myarray' (temp 2-element array of int)
+0:45                    Constant:
+0:45                      99 (const int)
+0:46                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:46                  Constant:
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                    104 (const int)
+0:46                  Constant:
+0:46                    false (const bool)
+0:9                  Constant:
+0:9                    false (const bool)
+0:47              Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:47                Constant:
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                  105 (const int)
+0:47                Constant:
+0:47                  false (const bool)
+0:47                Constant:
+0:47                  true (const bool)
+0:49            Function Call: fn2(vi4;f1; (temp 4-component vector of int)
+0:49              Constant:
+0:49                110 (const int)
+0:49                110 (const int)
+0:49                110 (const int)
+0:49                110 (const int)
+0:49              Constant:
+0:49                11.110000
+0:50          Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:50            Constant:
+0:50              111 (const int)
+0:50              111 (const int)
+0:50              111 (const int)
+0:50              111 (const int)
+0:50            Constant:
+0:50              12 (const int)
+0:36  Function Definition: main( (temp void)
+0:36    Function Parameters: 
+0:?     Sequence
+0:36      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:36        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'cia' (const int)
 0:?       -4 (const int)
 0:?     'cib' (const int)
 0:?       -42 (const int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 173
+// Id's are bound by 178
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 88
+                              EntryPoint Fragment 4  "main" 175
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 15  "fn1(vi4;b1;b1;"
@@ -396,43 +402,44 @@ gl_FragCoord origin is upper left
                               Name 38  "x"
                               Name 43  "fn3(i1;"
                               Name 42  "p0"
-                              Name 77  "myarray"
-                              Name 82  "param"
+                              Name 46  "@main("
+                              Name 80  "myarray"
                               Name 85  "param"
-                              Name 88  "@entryPointOutput"
-                              Name 100  "param"
+                              Name 88  "param"
                               Name 101  "param"
                               Name 102  "param"
                               Name 103  "param"
-                              Name 107  "$Global"
-                              MemberName 107($Global) 0  "ui4"
-                              Name 109  ""
-                              Name 110  "param"
+                              Name 104  "param"
+                              Name 108  "$Global"
+                              MemberName 108($Global) 0  "ui4"
+                              Name 110  ""
                               Name 111  "param"
-                              Name 115  "param"
+                              Name 112  "param"
                               Name 116  "param"
-                              Name 121  "param"
+                              Name 117  "param"
                               Name 122  "param"
-                              Name 125  "param"
-                              Name 127  "param"
-                              Name 133  "param"
+                              Name 123  "param"
+                              Name 126  "param"
+                              Name 128  "param"
                               Name 134  "param"
-                              Name 137  "param"
-                              Name 139  "param"
-                              Name 145  "param"
+                              Name 135  "param"
+                              Name 138  "param"
+                              Name 140  "param"
                               Name 146  "param"
                               Name 147  "param"
-                              Name 153  "param"
+                              Name 148  "param"
                               Name 154  "param"
                               Name 155  "param"
-                              Name 161  "param"
+                              Name 156  "param"
                               Name 162  "param"
-                              Name 167  "param"
+                              Name 163  "param"
                               Name 168  "param"
-                              Decorate 88(@entryPointOutput) Location 0
-                              MemberDecorate 107($Global) 0 Offset 0
-                              Decorate 107($Global) Block
-                              Decorate 109 DescriptorSet 0
+                              Name 169  "param"
+                              Name 175  "@entryPointOutput"
+                              MemberDecorate 108($Global) 0 Offset 0
+                              Decorate 108($Global) Block
+                              Decorate 110 DescriptorSet 0
+                              Decorate 175(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -452,144 +459,63 @@ gl_FragCoord origin is upper left
               35:             TypePointer Function 34(float)
               36:             TypeFunction 7(ivec4) 8(ptr) 35(ptr)
               41:             TypeFunction 2 21(ptr)
-              51:      6(int) Constant 0
-              61:      6(int) Constant 10
-              62:      6(int) Constant 11
-              63:      6(int) Constant 12
-              64:      6(int) Constant 13
-              65:    7(ivec4) ConstantComposite 61 62 63 64
-              69:      6(int) Constant 20
-              70:      6(int) Constant 21
-              71:      6(int) Constant 22
-              72:      6(int) Constant 23
-              73:    7(ivec4) ConstantComposite 69 70 71 72
-              78:      6(int) Constant 30
-              79:      6(int) Constant 31
-              80:          19 ConstantComposite 78 79
-              81:      6(int) Constant 3
-              84:      6(int) Constant 5
-              87:             TypePointer Output 7(ivec4)
-88(@entryPointOutput):     87(ptr) Variable Output
-              89:      6(int) Constant 100
-              90:    7(ivec4) ConstantComposite 89 89 89 89
-              91:      6(int) Constant 4294967295
-              92:      6(int) Constant 4294967294
-              93:      6(int) Constant 4294967293
-              94:      6(int) Constant 4294967292
-              95:    7(ivec4) ConstantComposite 91 92 93 94
-              96:      6(int) Constant 1
-              97:      6(int) Constant 2
-              98:          19 ConstantComposite 96 97
-              99:      6(int) Constant 42
-             105:      6(int) Constant 101
-             106:    7(ivec4) ConstantComposite 105 105 105 105
-    107($Global):             TypeStruct 7(ivec4)
-             108:             TypePointer Uniform 107($Global)
-             109:    108(ptr) Variable Uniform
-             112:             TypePointer Uniform 7(ivec4)
-             119:      6(int) Constant 102
-             120:    7(ivec4) ConstantComposite 119 119 119 119
-             130:      6(int) Constant 103
-             131:    7(ivec4) ConstantComposite 130 130 130 130
-             132:      6(int) Constant 99
-             142:      6(int) Constant 104
-             143:    7(ivec4) ConstantComposite 142 142 142 142
-             144:     9(bool) ConstantFalse
-             150:      6(int) Constant 105
-             151:    7(ivec4) ConstantComposite 150 150 150 150
-             152:     9(bool) ConstantTrue
-             158:      6(int) Constant 110
-             159:    7(ivec4) ConstantComposite 158 158 158 158
-             160:   34(float) Constant 1093780111
-             165:      6(int) Constant 111
-             166:    7(ivec4) ConstantComposite 165 165 165 165
-             172:      6(int) Constant 4294967254
+              45:             TypeFunction 7(ivec4)
+              54:      6(int) Constant 0
+              64:      6(int) Constant 10
+              65:      6(int) Constant 11
+              66:      6(int) Constant 12
+              67:      6(int) Constant 13
+              68:    7(ivec4) ConstantComposite 64 65 66 67
+              72:      6(int) Constant 20
+              73:      6(int) Constant 21
+              74:      6(int) Constant 22
+              75:      6(int) Constant 23
+              76:    7(ivec4) ConstantComposite 72 73 74 75
+              81:      6(int) Constant 30
+              82:      6(int) Constant 31
+              83:          19 ConstantComposite 81 82
+              84:      6(int) Constant 3
+              87:      6(int) Constant 5
+              90:      6(int) Constant 100
+              91:    7(ivec4) ConstantComposite 90 90 90 90
+              92:      6(int) Constant 4294967295
+              93:      6(int) Constant 4294967294
+              94:      6(int) Constant 4294967293
+              95:      6(int) Constant 4294967292
+              96:    7(ivec4) ConstantComposite 92 93 94 95
+              97:      6(int) Constant 1
+              98:      6(int) Constant 2
+              99:          19 ConstantComposite 97 98
+             100:      6(int) Constant 42
+             106:      6(int) Constant 101
+             107:    7(ivec4) ConstantComposite 106 106 106 106
+    108($Global):             TypeStruct 7(ivec4)
+             109:             TypePointer Uniform 108($Global)
+             110:    109(ptr) Variable Uniform
+             113:             TypePointer Uniform 7(ivec4)
+             120:      6(int) Constant 102
+             121:    7(ivec4) ConstantComposite 120 120 120 120
+             131:      6(int) Constant 103
+             132:    7(ivec4) ConstantComposite 131 131 131 131
+             133:      6(int) Constant 99
+             143:      6(int) Constant 104
+             144:    7(ivec4) ConstantComposite 143 143 143 143
+             145:     9(bool) ConstantFalse
+             151:      6(int) Constant 105
+             152:    7(ivec4) ConstantComposite 151 151 151 151
+             153:     9(bool) ConstantTrue
+             159:      6(int) Constant 110
+             160:    7(ivec4) ConstantComposite 159 159 159 159
+             161:   34(float) Constant 1093780111
+             166:      6(int) Constant 111
+             167:    7(ivec4) ConstantComposite 166 166 166 166
+             174:             TypePointer Output 7(ivec4)
+175(@entryPointOutput):    174(ptr) Variable Output
+             177:      6(int) Constant 4294967254
          4(main):           2 Function None 3
                5:             Label
-     77(myarray):     20(ptr) Variable Function
-       82(param):     21(ptr) Variable Function
-       85(param):     21(ptr) Variable Function
-      100(param):      8(ptr) Variable Function
-      101(param):      8(ptr) Variable Function
-      102(param):     20(ptr) Variable Function
-      103(param):     21(ptr) Variable Function
-      110(param):      8(ptr) Variable Function
-      111(param):      8(ptr) Variable Function
-      115(param):     20(ptr) Variable Function
-      116(param):     21(ptr) Variable Function
-      121(param):      8(ptr) Variable Function
-      122(param):      8(ptr) Variable Function
-      125(param):     20(ptr) Variable Function
-      127(param):     21(ptr) Variable Function
-      133(param):      8(ptr) Variable Function
-      134(param):      8(ptr) Variable Function
-      137(param):     20(ptr) Variable Function
-      139(param):     21(ptr) Variable Function
-      145(param):      8(ptr) Variable Function
-      146(param):     10(ptr) Variable Function
-      147(param):     10(ptr) Variable Function
-      153(param):      8(ptr) Variable Function
-      154(param):     10(ptr) Variable Function
-      155(param):     10(ptr) Variable Function
-      161(param):      8(ptr) Variable Function
-      162(param):     35(ptr) Variable Function
-      167(param):      8(ptr) Variable Function
-      168(param):     21(ptr) Variable Function
-                              Store 77(myarray) 80
-                              Store 82(param) 81
-              83:           2 FunctionCall 43(fn3(i1;) 82(param)
-                              Store 85(param) 84
-              86:           2 FunctionCall 43(fn3(i1;) 85(param)
-                              Store 100(param) 90
-                              Store 101(param) 95
-                              Store 102(param) 98
-                              Store 103(param) 99
-             104:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 100(param) 101(param) 102(param) 103(param)
-                              Store 110(param) 106
-             113:    112(ptr) AccessChain 109 51
-             114:    7(ivec4) Load 113
-                              Store 111(param) 114
-                              Store 115(param) 98
-                              Store 116(param) 99
-             117:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 110(param) 111(param) 115(param) 116(param)
-             118:    7(ivec4) IAdd 104 117
-                              Store 121(param) 120
-             123:    112(ptr) AccessChain 109 51
-             124:    7(ivec4) Load 123
-                              Store 122(param) 124
-             126:          19 Load 77(myarray)
-                              Store 125(param) 126
-                              Store 127(param) 99
-             128:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 121(param) 122(param) 125(param) 127(param)
-             129:    7(ivec4) IAdd 118 128
-                              Store 133(param) 131
-             135:    112(ptr) AccessChain 109 51
-             136:    7(ivec4) Load 135
-                              Store 134(param) 136
-             138:          19 Load 77(myarray)
-                              Store 137(param) 138
-                              Store 139(param) 132
-             140:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 133(param) 134(param) 137(param) 139(param)
-             141:    7(ivec4) IAdd 129 140
-                              Store 145(param) 143
-                              Store 146(param) 144
-                              Store 147(param) 144
-             148:    7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 145(param) 146(param) 147(param)
-             149:    7(ivec4) IAdd 141 148
-                              Store 153(param) 151
-                              Store 154(param) 144
-                              Store 155(param) 152
-             156:    7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 153(param) 154(param) 155(param)
-             157:    7(ivec4) IAdd 149 156
-                              Store 161(param) 159
-                              Store 162(param) 160
-             163:    7(ivec4) FunctionCall 39(fn2(vi4;f1;) 161(param) 162(param)
-             164:    7(ivec4) IAdd 157 163
-                              Store 167(param) 166
-                              Store 168(param) 63
-             169:    7(ivec4) FunctionCall 32(fn2(vi4;i1;) 167(param) 168(param)
-             170:    7(ivec4) IAdd 164 169
-                              Store 88(@entryPointOutput) 170
+             176:    7(ivec4) FunctionCall 46(@main()
+                              Store 175(@entryPointOutput) 176
                               Return
                               FunctionEnd
 15(fn1(vi4;b1;b1;):    7(ivec4) Function None 11
@@ -597,8 +523,8 @@ gl_FragCoord origin is upper left
           13(b1):     10(ptr) FunctionParameter
           14(b2):     10(ptr) FunctionParameter
               16:             Label
-              45:    7(ivec4) Load 12(p0)
-                              ReturnValue 45
+              48:    7(ivec4) Load 12(p0)
+                              ReturnValue 48
                               FunctionEnd
 27(fn1(vi4;vi4;i1[2];i1;):    7(ivec4) Function None 22
           23(p0):      8(ptr) FunctionParameter
@@ -606,34 +532,121 @@ gl_FragCoord origin is upper left
           25(p2):     20(ptr) FunctionParameter
           26(p3):     21(ptr) FunctionParameter
               28:             Label
-              48:    7(ivec4) Load 23(p0)
-              49:    7(ivec4) Load 24(p1)
-              50:    7(ivec4) IAdd 48 49
-              52:     21(ptr) AccessChain 25(p2) 51
-              53:      6(int) Load 52
-              54:    7(ivec4) CompositeConstruct 53 53 53 53
-              55:    7(ivec4) IAdd 50 54
-              56:      6(int) Load 26(p3)
+              51:    7(ivec4) Load 23(p0)
+              52:    7(ivec4) Load 24(p1)
+              53:    7(ivec4) IAdd 51 52
+              55:     21(ptr) AccessChain 25(p2) 54
+              56:      6(int) Load 55
               57:    7(ivec4) CompositeConstruct 56 56 56 56
-              58:    7(ivec4) IAdd 55 57
-                              ReturnValue 58
+              58:    7(ivec4) IAdd 53 57
+              59:      6(int) Load 26(p3)
+              60:    7(ivec4) CompositeConstruct 59 59 59 59
+              61:    7(ivec4) IAdd 58 60
+                              ReturnValue 61
                               FunctionEnd
  32(fn2(vi4;i1;):    7(ivec4) Function None 29
           30(p0):      8(ptr) FunctionParameter
            31(x):     21(ptr) FunctionParameter
               33:             Label
-                              ReturnValue 65
+                              ReturnValue 68
                               FunctionEnd
  39(fn2(vi4;f1;):    7(ivec4) Function None 36
           37(p0):      8(ptr) FunctionParameter
            38(x):     35(ptr) FunctionParameter
               40:             Label
-              68:    7(ivec4) Load 37(p0)
-              74:    7(ivec4) IAdd 68 73
-                              ReturnValue 74
+              71:    7(ivec4) Load 37(p0)
+              77:    7(ivec4) IAdd 71 76
+                              ReturnValue 77
                               FunctionEnd
      43(fn3(i1;):           2 Function None 41
           42(p0):     21(ptr) FunctionParameter
               44:             Label
                               Return
                               FunctionEnd
+      46(@main():    7(ivec4) Function None 45
+              47:             Label
+     80(myarray):     20(ptr) Variable Function
+       85(param):     21(ptr) Variable Function
+       88(param):     21(ptr) Variable Function
+      101(param):      8(ptr) Variable Function
+      102(param):      8(ptr) Variable Function
+      103(param):     20(ptr) Variable Function
+      104(param):     21(ptr) Variable Function
+      111(param):      8(ptr) Variable Function
+      112(param):      8(ptr) Variable Function
+      116(param):     20(ptr) Variable Function
+      117(param):     21(ptr) Variable Function
+      122(param):      8(ptr) Variable Function
+      123(param):      8(ptr) Variable Function
+      126(param):     20(ptr) Variable Function
+      128(param):     21(ptr) Variable Function
+      134(param):      8(ptr) Variable Function
+      135(param):      8(ptr) Variable Function
+      138(param):     20(ptr) Variable Function
+      140(param):     21(ptr) Variable Function
+      146(param):      8(ptr) Variable Function
+      147(param):     10(ptr) Variable Function
+      148(param):     10(ptr) Variable Function
+      154(param):      8(ptr) Variable Function
+      155(param):     10(ptr) Variable Function
+      156(param):     10(ptr) Variable Function
+      162(param):      8(ptr) Variable Function
+      163(param):     35(ptr) Variable Function
+      168(param):      8(ptr) Variable Function
+      169(param):     21(ptr) Variable Function
+                              Store 80(myarray) 83
+                              Store 85(param) 84
+              86:           2 FunctionCall 43(fn3(i1;) 85(param)
+                              Store 88(param) 87
+              89:           2 FunctionCall 43(fn3(i1;) 88(param)
+                              Store 101(param) 91
+                              Store 102(param) 96
+                              Store 103(param) 99
+                              Store 104(param) 100
+             105:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 101(param) 102(param) 103(param) 104(param)
+                              Store 111(param) 107
+             114:    113(ptr) AccessChain 110 54
+             115:    7(ivec4) Load 114
+                              Store 112(param) 115
+                              Store 116(param) 99
+                              Store 117(param) 100
+             118:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 111(param) 112(param) 116(param) 117(param)
+             119:    7(ivec4) IAdd 105 118
+                              Store 122(param) 121
+             124:    113(ptr) AccessChain 110 54
+             125:    7(ivec4) Load 124
+                              Store 123(param) 125
+             127:          19 Load 80(myarray)
+                              Store 126(param) 127
+                              Store 128(param) 100
+             129:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 122(param) 123(param) 126(param) 128(param)
+             130:    7(ivec4) IAdd 119 129
+                              Store 134(param) 132
+             136:    113(ptr) AccessChain 110 54
+             137:    7(ivec4) Load 136
+                              Store 135(param) 137
+             139:          19 Load 80(myarray)
+                              Store 138(param) 139
+                              Store 140(param) 133
+             141:    7(ivec4) FunctionCall 27(fn1(vi4;vi4;i1[2];i1;) 134(param) 135(param) 138(param) 140(param)
+             142:    7(ivec4) IAdd 130 141
+                              Store 146(param) 144
+                              Store 147(param) 145
+                              Store 148(param) 145
+             149:    7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 146(param) 147(param) 148(param)
+             150:    7(ivec4) IAdd 142 149
+                              Store 154(param) 152
+                              Store 155(param) 145
+                              Store 156(param) 153
+             157:    7(ivec4) FunctionCall 15(fn1(vi4;b1;b1;) 154(param) 155(param) 156(param)
+             158:    7(ivec4) IAdd 150 157
+                              Store 162(param) 160
+                              Store 163(param) 161
+             164:    7(ivec4) FunctionCall 39(fn2(vi4;f1;) 162(param) 163(param)
+             165:    7(ivec4) IAdd 158 164
+                              Store 168(param) 167
+                              Store 169(param) 66
+             170:    7(ivec4) FunctionCall 32(fn2(vi4;i1;) 168(param) 169(param)
+             171:    7(ivec4) IAdd 165 170
+                              ReturnValue 171
+                              FunctionEnd

+ 204 - 198
3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out

@@ -71,7 +71,7 @@ ERROR: node is still EOpNull!
 0:33  Function Definition: fn3(i1; (temp void)
 0:33    Function Parameters: 
 0:33      'p0' (in int)
-0:37  Function Definition: main( (temp 4-component vector of int)
+0:37  Function Definition: @main( (temp 4-component vector of int)
 0:37    Function Parameters: 
 0:?     Sequence
 0:38      Sequence
@@ -80,114 +80,117 @@ ERROR: node is still EOpNull!
 0:38          Constant:
 0:38            30 (const int)
 0:38            31 (const int)
-0:49      Sequence
-0:49        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:48          add (temp 4-component vector of int)
-0:47            add (temp 4-component vector of int)
-0:45              add (temp 4-component vector of int)
-0:44                add (temp 4-component vector of int)
-0:43                  add (temp 4-component vector of int)
-0:42                    add (temp 4-component vector of int)
-0:41                      add (temp 4-component vector of int)
-0:40                        add (temp 4-component vector of int)
-0:40                          Function Call: fn1(vi4; (temp 4-component vector of int)
-0:40                            Constant:
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:41                          Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:49      Branch: Return with expression
+0:48        add (temp 4-component vector of int)
+0:47          add (temp 4-component vector of int)
+0:45            add (temp 4-component vector of int)
+0:44              add (temp 4-component vector of int)
+0:43                add (temp 4-component vector of int)
+0:42                  add (temp 4-component vector of int)
+0:41                    add (temp 4-component vector of int)
+0:40                      add (temp 4-component vector of int)
+0:40                        Function Call: fn1(vi4; (temp 4-component vector of int)
+0:40                          Constant:
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:41                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:41                          Constant:
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:41                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
 0:41                            Constant:
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                            ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:41                              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:41                              Constant:
-0:41                                0 (const uint)
-0:15                            Constant:
-0:15                              1 (const int)
-0:15                              2 (const int)
-0:16                            Constant:
-0:16                              42 (const int)
-0:42                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:42                          Constant:
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:42                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:42                            Constant:
-0:42                              0 (const uint)
-0:42                          'myarray' (temp 2-element array of int)
+0:41                              0 (const uint)
+0:15                          Constant:
+0:15                            1 (const int)
+0:15                            2 (const int)
 0:16                          Constant:
 0:16                            42 (const int)
-0:43                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:43                        Constant:
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:43                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:43                          Constant:
-0:43                            0 (const uint)
-0:43                        'myarray' (temp 2-element array of int)
+0:42                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:42                        Constant:
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:42                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
+0:42                          Constant:
+0:42                            0 (const uint)
+0:42                        'myarray' (temp 2-element array of int)
+0:16                        Constant:
+0:16                          42 (const int)
+0:43                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:43                      Constant:
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:43                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
 0:43                        Constant:
-0:43                          99 (const int)
-0:44                    Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:44                      Constant:
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                      Constant:
-0:44                        false (const bool)
-0:9                      Constant:
-0:9                        false (const bool)
-0:45                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:45                    Constant:
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                    Constant:
-0:45                      false (const bool)
-0:45                    Constant:
-0:45                      true (const bool)
-0:47                Function Call: fn2(vi4; (temp 4-component vector of int)
-0:47                  Constant:
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:48              Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:48                Constant:
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                Constant:
-0:48                  11 (const int)
-0:49            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:49              Constant:
-0:49                111 (const int)
-0:49                111 (const int)
-0:49                111 (const int)
-0:49                111 (const int)
-0:49              Constant:
-0:49                12 (const int)
-0:49        Branch: Return
+0:43                          0 (const uint)
+0:43                      'myarray' (temp 2-element array of int)
+0:43                      Constant:
+0:43                        99 (const int)
+0:44                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:44                    Constant:
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                    Constant:
+0:44                      false (const bool)
+0:9                    Constant:
+0:9                      false (const bool)
+0:45                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:45                  Constant:
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                  Constant:
+0:45                    false (const bool)
+0:45                  Constant:
+0:45                    true (const bool)
+0:47              Function Call: fn2(vi4; (temp 4-component vector of int)
+0:47                Constant:
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:48            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:48              Constant:
+0:48                110 (const int)
+0:48                110 (const int)
+0:48                110 (const int)
+0:48                110 (const int)
+0:48              Constant:
+0:48                11 (const int)
+0:49          Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:49            Constant:
+0:49              111 (const int)
+0:49              111 (const int)
+0:49              111 (const int)
+0:49              111 (const int)
+0:49            Constant:
+0:49              12 (const int)
+0:37  Function Definition: main( (temp void)
+0:37    Function Parameters: 
+0:?     Sequence
+0:37      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:37        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'cia' (const int)
 0:?       -4 (const int)
 0:?     'cib' (const int)
 0:?       -42 (const int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 
 
 Linked fragment stage:
@@ -258,7 +261,7 @@ ERROR: node is still EOpNull!
 0:33  Function Definition: fn3(i1; (temp void)
 0:33    Function Parameters: 
 0:33      'p0' (in int)
-0:37  Function Definition: main( (temp 4-component vector of int)
+0:37  Function Definition: @main( (temp 4-component vector of int)
 0:37    Function Parameters: 
 0:?     Sequence
 0:38      Sequence
@@ -267,113 +270,116 @@ ERROR: node is still EOpNull!
 0:38          Constant:
 0:38            30 (const int)
 0:38            31 (const int)
-0:49      Sequence
-0:49        move second child to first child (temp 4-component vector of int)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
-0:48          add (temp 4-component vector of int)
-0:47            add (temp 4-component vector of int)
-0:45              add (temp 4-component vector of int)
-0:44                add (temp 4-component vector of int)
-0:43                  add (temp 4-component vector of int)
-0:42                    add (temp 4-component vector of int)
-0:41                      add (temp 4-component vector of int)
-0:40                        add (temp 4-component vector of int)
-0:40                          Function Call: fn1(vi4; (temp 4-component vector of int)
-0:40                            Constant:
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:40                              100 (const int)
-0:41                          Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:49      Branch: Return with expression
+0:48        add (temp 4-component vector of int)
+0:47          add (temp 4-component vector of int)
+0:45            add (temp 4-component vector of int)
+0:44              add (temp 4-component vector of int)
+0:43                add (temp 4-component vector of int)
+0:42                  add (temp 4-component vector of int)
+0:41                    add (temp 4-component vector of int)
+0:40                      add (temp 4-component vector of int)
+0:40                        Function Call: fn1(vi4; (temp 4-component vector of int)
+0:40                          Constant:
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:40                            100 (const int)
+0:41                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:41                          Constant:
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                            101 (const int)
+0:41                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:41                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
 0:41                            Constant:
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                              101 (const int)
-0:41                            ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:41                              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:41                              Constant:
-0:41                                0 (const uint)
-0:15                            Constant:
-0:15                              1 (const int)
-0:15                              2 (const int)
-0:16                            Constant:
-0:16                              42 (const int)
-0:42                        Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:42                          Constant:
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                            102 (const int)
-0:42                          ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:42                            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:42                            Constant:
-0:42                              0 (const uint)
-0:42                          'myarray' (temp 2-element array of int)
+0:41                              0 (const uint)
+0:15                          Constant:
+0:15                            1 (const int)
+0:15                            2 (const int)
 0:16                          Constant:
 0:16                            42 (const int)
-0:43                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
-0:43                        Constant:
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                          103 (const int)
-0:43                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
-0:43                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
-0:43                          Constant:
-0:43                            0 (const uint)
-0:43                        'myarray' (temp 2-element array of int)
+0:42                      Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:42                        Constant:
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                          102 (const int)
+0:42                        ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:42                          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
+0:42                          Constant:
+0:42                            0 (const uint)
+0:42                        'myarray' (temp 2-element array of int)
+0:16                        Constant:
+0:16                          42 (const int)
+0:43                    Function Call: fn1(vi4;vi4;i1[2];i1; (temp 4-component vector of int)
+0:43                      Constant:
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                        103 (const int)
+0:43                      ui4: direct index for structure (layout(offset=0 ) uniform 4-component vector of int)
+0:43                        'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
 0:43                        Constant:
-0:43                          99 (const int)
-0:44                    Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:44                      Constant:
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                        104 (const int)
-0:44                      Constant:
-0:44                        false (const bool)
-0:9                      Constant:
-0:9                        false (const bool)
-0:45                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
-0:45                    Constant:
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                      105 (const int)
-0:45                    Constant:
-0:45                      false (const bool)
-0:45                    Constant:
-0:45                      true (const bool)
-0:47                Function Call: fn2(vi4; (temp 4-component vector of int)
-0:47                  Constant:
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:47                    112 (const int)
-0:48              Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:48                Constant:
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                  110 (const int)
-0:48                Constant:
-0:48                  11 (const int)
-0:49            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
-0:49              Constant:
-0:49                111 (const int)
-0:49                111 (const int)
-0:49                111 (const int)
-0:49                111 (const int)
-0:49              Constant:
-0:49                12 (const int)
-0:49        Branch: Return
+0:43                          0 (const uint)
+0:43                      'myarray' (temp 2-element array of int)
+0:43                      Constant:
+0:43                        99 (const int)
+0:44                  Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:44                    Constant:
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                      104 (const int)
+0:44                    Constant:
+0:44                      false (const bool)
+0:9                    Constant:
+0:9                      false (const bool)
+0:45                Function Call: fn1(vi4;b1;b1; (temp 4-component vector of int)
+0:45                  Constant:
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                    105 (const int)
+0:45                  Constant:
+0:45                    false (const bool)
+0:45                  Constant:
+0:45                    true (const bool)
+0:47              Function Call: fn2(vi4; (temp 4-component vector of int)
+0:47                Constant:
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:47                  112 (const int)
+0:48            Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:48              Constant:
+0:48                110 (const int)
+0:48                110 (const int)
+0:48                110 (const int)
+0:48                110 (const int)
+0:48              Constant:
+0:48                11 (const int)
+0:49          Function Call: fn2(vi4;i1; (temp 4-component vector of int)
+0:49            Constant:
+0:49              111 (const int)
+0:49              111 (const int)
+0:49              111 (const int)
+0:49              111 (const int)
+0:49            Constant:
+0:49              12 (const int)
+0:37  Function Definition: main( (temp void)
+0:37    Function Parameters: 
+0:?     Sequence
+0:37      move second child to first child (temp 4-component vector of int)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
+0:37        Function Call: @main( (temp 4-component vector of int)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 0:?     'cia' (const int)
 0:?       -4 (const int)
 0:?     'cib' (const int)
 0:?       -42 (const int)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of int ui4, layout(offset=16 ) uniform float ufvar})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of int)
 
 SPIR-V is not generated for failed compile or link

+ 232 - 191
3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out

@@ -20,9 +20,9 @@ gl_FragCoord origin is upper left
 0:9        0.000000
 0:9        0.000000
 0:9        0.000000
-0:18  Function Definition: PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18  Function Definition: @PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
 0:18    Function Parameters: 
-0:18      'input' (layout(location=0 ) in 4-component vector of float)
+0:18      'input' (in 4-component vector of float)
 0:?     Sequence
 0:19      Sequence
 0:19        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
@@ -143,41 +143,51 @@ gl_FragCoord origin is upper left
 0:30              1 (const int)
 0:30          Convert int to float (temp float)
 0:30            'cgi' (temp int)
-0:32      Sequence
-0:32        Sequence
-0:32          move second child to first child (temp int)
-0:?             'a' (layout(location=0 ) out int)
-0:32            a: direct index for structure (temp int)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                0 (const int)
-0:32          move second child to first child (temp float)
-0:?             'b' (layout(location=1 ) out float)
-0:32            b: direct index for structure (temp float)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                1 (const int)
-0:32          move second child to first child (temp bool)
-0:?             'c' (layout(location=2 ) out bool)
-0:32            c: direct index for structure (temp bool)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                2 (const int)
-0:32          move second child to first child (temp 4-component vector of float)
-0:?             'v' (layout(location=3 ) out 4-component vector of float)
-0:32            v: direct index for structure (temp 4-component vector of float)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                3 (const int)
-0:32        Branch: Return
+0:32      Branch: Return with expression
+0:32        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18  Function Definition: PixelShaderFunction( (temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:18      Sequence
+0:18        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18          'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18          Function Call: @PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:?             'input' (temp 4-component vector of float)
+0:18        move second child to first child (temp int)
+0:?           'a' (layout(location=0 ) out int)
+0:18          a: direct index for structure (temp int)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              0 (const int)
+0:18        move second child to first child (temp float)
+0:?           'b' (layout(location=1 ) out float)
+0:18          b: direct index for structure (temp float)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              1 (const int)
+0:18        move second child to first child (temp bool)
+0:?           'c' (layout(location=2 ) out bool)
+0:18          c: direct index for structure (temp bool)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              2 (const int)
+0:18        move second child to first child (temp 4-component vector of float)
+0:?           'v' (layout(location=3 ) out 4-component vector of float)
+0:18          v: direct index for structure (temp 4-component vector of float)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              3 (const int)
 0:?   Linker Objects
+0:?     'gv' (global 4-component vector of float)
+0:?     'gfa' (global 3-element array of float)
 0:?     'a' (layout(location=0 ) out int)
 0:?     'b' (layout(location=1 ) out float)
 0:?     'c' (layout(location=2 ) out bool)
 0:?     'v' (layout(location=3 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
-0:?     'gv' (global 4-component vector of float)
-0:?     'gfa' (global 3-element array of float)
 0:?     'cgf2a' (const 3-element array of 2-component vector of float)
 0:?       0.000000
 0:?       0.000000
@@ -210,9 +220,9 @@ gl_FragCoord origin is upper left
 0:9        0.000000
 0:9        0.000000
 0:9        0.000000
-0:18  Function Definition: PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18  Function Definition: @PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
 0:18    Function Parameters: 
-0:18      'input' (layout(location=0 ) in 4-component vector of float)
+0:18      'input' (in 4-component vector of float)
 0:?     Sequence
 0:19      Sequence
 0:19        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
@@ -333,41 +343,51 @@ gl_FragCoord origin is upper left
 0:30              1 (const int)
 0:30          Convert int to float (temp float)
 0:30            'cgi' (temp int)
-0:32      Sequence
-0:32        Sequence
-0:32          move second child to first child (temp int)
-0:?             'a' (layout(location=0 ) out int)
-0:32            a: direct index for structure (temp int)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                0 (const int)
-0:32          move second child to first child (temp float)
-0:?             'b' (layout(location=1 ) out float)
-0:32            b: direct index for structure (temp float)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                1 (const int)
-0:32          move second child to first child (temp bool)
-0:?             'c' (layout(location=2 ) out bool)
-0:32            c: direct index for structure (temp bool)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                2 (const int)
-0:32          move second child to first child (temp 4-component vector of float)
-0:?             'v' (layout(location=3 ) out 4-component vector of float)
-0:32            v: direct index for structure (temp 4-component vector of float)
-0:32              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
-0:32              Constant:
-0:32                3 (const int)
-0:32        Branch: Return
+0:32      Branch: Return with expression
+0:32        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18  Function Definition: PixelShaderFunction( (temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child (temp 4-component vector of float)
+0:?         'input' (temp 4-component vector of float)
+0:?         'input' (layout(location=0 ) in 4-component vector of float)
+0:18      Sequence
+0:18        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18          'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18          Function Call: @PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:?             'input' (temp 4-component vector of float)
+0:18        move second child to first child (temp int)
+0:?           'a' (layout(location=0 ) out int)
+0:18          a: direct index for structure (temp int)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              0 (const int)
+0:18        move second child to first child (temp float)
+0:?           'b' (layout(location=1 ) out float)
+0:18          b: direct index for structure (temp float)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              1 (const int)
+0:18        move second child to first child (temp bool)
+0:?           'c' (layout(location=2 ) out bool)
+0:18          c: direct index for structure (temp bool)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              2 (const int)
+0:18        move second child to first child (temp 4-component vector of float)
+0:?           'v' (layout(location=3 ) out 4-component vector of float)
+0:18          v: direct index for structure (temp 4-component vector of float)
+0:18            'flattenTemp' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18            Constant:
+0:18              3 (const int)
 0:?   Linker Objects
+0:?     'gv' (global 4-component vector of float)
+0:?     'gfa' (global 3-element array of float)
 0:?     'a' (layout(location=0 ) out int)
 0:?     'b' (layout(location=1 ) out float)
 0:?     'c' (layout(location=2 ) out bool)
 0:?     'v' (layout(location=3 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
-0:?     'gv' (global 4-component vector of float)
-0:?     'gfa' (global 3-element array of float)
 0:?     'cgf2a' (const 3-element array of 2-component vector of float)
 0:?       0.000000
 0:?       0.000000
@@ -380,146 +400,167 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 92
+// Id's are bound by 104
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 72 76 80 84 89
+                              EntryPoint Fragment 4  "PixelShaderFunction" 80 87 91 95 99
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "gv"
-                              Name 17  "gfa"
-                              Name 21  "outs"
-                              MemberName 21(outs) 0  "a"
-                              MemberName 21(outs) 1  "b"
-                              MemberName 21(outs) 2  "c"
-                              MemberName 21(outs) 3  "v"
-                              Name 23  "o2"
-                              Name 28  "o4"
-                              Name 37  "o1"
-                              Name 40  "o3"
-                              Name 47  "Nest"
-                              MemberName 47(Nest) 0  "m"
-                              MemberName 47(Nest) 1  "os"
-                              MemberName 47(Nest) 2  "b"
-                              Name 49  "nest"
-                              Name 57  "gf2a"
-                              Name 61  "cgi"
-                              Name 72  "a"
-                              Name 76  "b"
-                              Name 80  "c"
-                              Name 84  "v"
-                              Name 89  "input"
-                              Decorate 72(a) Location 0
-                              Decorate 76(b) Location 1
-                              Decorate 80(c) Location 2
-                              Decorate 84(v) Location 3
-                              Decorate 89(input) Location 0
+                              Name 11  "outs"
+                              MemberName 11(outs) 0  "a"
+                              MemberName 11(outs) 1  "b"
+                              MemberName 11(outs) 2  "c"
+                              MemberName 11(outs) 3  "v"
+                              Name 14  "@PixelShaderFunction(vf4;"
+                              Name 13  "input"
+                              Name 17  "gv"
+                              Name 25  "gfa"
+                              Name 28  "o2"
+                              Name 33  "o4"
+                              Name 41  "o1"
+                              Name 44  "o3"
+                              Name 51  "Nest"
+                              MemberName 51(Nest) 0  "m"
+                              MemberName 51(Nest) 1  "os"
+                              MemberName 51(Nest) 2  "b"
+                              Name 53  "nest"
+                              Name 61  "gf2a"
+                              Name 65  "cgi"
+                              Name 78  "input"
+                              Name 80  "input"
+                              Name 82  "flattenTemp"
+                              Name 83  "param"
+                              Name 87  "a"
+                              Name 91  "b"
+                              Name 95  "c"
+                              Name 99  "v"
+                              Decorate 80(input) Location 0
+                              Decorate 87(a) Location 0
+                              Decorate 91(b) Location 1
+                              Decorate 95(c) Location 2
+                              Decorate 99(v) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Private 7(fvec4)
-           9(gv):      8(ptr) Variable Private
-              10:    6(float) Constant 0
-              11:    6(float) Constant 1065353216
-              12:    7(fvec4) ConstantComposite 10 10 11 10
-              13:             TypeInt 32 0
-              14:     13(int) Constant 3
-              15:             TypeArray 6(float) 14
-              16:             TypePointer Private 15
-         17(gfa):     16(ptr) Variable Private
-              18:          15 ConstantComposite 10 10 10
-              19:             TypeInt 32 1
-              20:             TypeBool
-        21(outs):             TypeStruct 19(int) 6(float) 20(bool) 7(fvec4)
-              22:             TypePointer Function 21(outs)
-              24:     19(int) Constant 3
-              25:    20(bool) ConstantFalse
-              26:    7(fvec4) ConstantComposite 10 10 10 10
-              27:    21(outs) ConstantComposite 24 10 25 26
-              30:     19(int) Constant 2
-              31:             TypePointer Private 6(float)
-              35:             TypePointer Function 7(fvec4)
-              38:     19(int) Constant 0
-              39:    21(outs) ConstantComposite 38 10 25 26
-              41:             TypePointer Function 20(bool)
-              45:             TypeVector 6(float) 3
-              46:             TypeMatrix 45(fvec3) 4
-        47(Nest):             TypeStruct 46 21(outs) 20(bool)
-              48:             TypePointer Function 47(Nest)
-              50:   45(fvec3) ConstantComposite 10 10 10
-              51:          46 ConstantComposite 50 50 50 50
-              52:    47(Nest) ConstantComposite 51 39 25
-              53:             TypeVector 6(float) 2
-              54:     13(int) Constant 4
-              55:             TypeArray 53(fvec2) 54
-              56:             TypePointer Function 55
-              58:   53(fvec2) ConstantComposite 10 10
-              59:          55 ConstantComposite 58 58 58 58
-              60:             TypePointer Function 19(int)
-              62:     19(int) Constant 1
-              63:     13(int) Constant 1
-              64:             TypePointer Function 6(float)
-              71:             TypePointer Output 19(int)
-           72(a):     71(ptr) Variable Output
-              75:             TypePointer Output 6(float)
-           76(b):     75(ptr) Variable Output
-              79:             TypePointer Output 20(bool)
-           80(c):     79(ptr) Variable Output
-              83:             TypePointer Output 7(fvec4)
-           84(v):     83(ptr) Variable Output
-              88:             TypePointer Input 7(fvec4)
-       89(input):     88(ptr) Variable Input
-              90:             TypeArray 53(fvec2) 14
-              91:          90 ConstantComposite 58 58 58
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeInt 32 1
+              10:             TypeBool
+        11(outs):             TypeStruct 9(int) 6(float) 10(bool) 7(fvec4)
+              12:             TypeFunction 11(outs) 8(ptr)
+              16:             TypePointer Private 7(fvec4)
+          17(gv):     16(ptr) Variable Private
+              18:    6(float) Constant 0
+              19:    6(float) Constant 1065353216
+              20:    7(fvec4) ConstantComposite 18 18 19 18
+              21:             TypeInt 32 0
+              22:     21(int) Constant 3
+              23:             TypeArray 6(float) 22
+              24:             TypePointer Private 23
+         25(gfa):     24(ptr) Variable Private
+              26:          23 ConstantComposite 18 18 18
+              27:             TypePointer Function 11(outs)
+              29:      9(int) Constant 3
+              30:    10(bool) ConstantFalse
+              31:    7(fvec4) ConstantComposite 18 18 18 18
+              32:    11(outs) ConstantComposite 29 18 30 31
+              35:      9(int) Constant 2
+              36:             TypePointer Private 6(float)
+              42:      9(int) Constant 0
+              43:    11(outs) ConstantComposite 42 18 30 31
+              45:             TypePointer Function 10(bool)
+              49:             TypeVector 6(float) 3
+              50:             TypeMatrix 49(fvec3) 4
+        51(Nest):             TypeStruct 50 11(outs) 10(bool)
+              52:             TypePointer Function 51(Nest)
+              54:   49(fvec3) ConstantComposite 18 18 18
+              55:          50 ConstantComposite 54 54 54 54
+              56:    51(Nest) ConstantComposite 55 43 30
+              57:             TypeVector 6(float) 2
+              58:     21(int) Constant 4
+              59:             TypeArray 57(fvec2) 58
+              60:             TypePointer Function 59
+              62:   57(fvec2) ConstantComposite 18 18
+              63:          59 ConstantComposite 62 62 62 62
+              64:             TypePointer Function 9(int)
+              66:      9(int) Constant 1
+              67:     21(int) Constant 1
+              68:             TypePointer Function 6(float)
+              79:             TypePointer Input 7(fvec4)
+       80(input):     79(ptr) Variable Input
+              86:             TypePointer Output 9(int)
+           87(a):     86(ptr) Variable Output
+              90:             TypePointer Output 6(float)
+           91(b):     90(ptr) Variable Output
+              94:             TypePointer Output 10(bool)
+           95(c):     94(ptr) Variable Output
+              98:             TypePointer Output 7(fvec4)
+           99(v):     98(ptr) Variable Output
+             102:             TypeArray 57(fvec2) 22
+             103:         102 ConstantComposite 62 62 62
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          23(o2):     22(ptr) Variable Function
-          28(o4):     22(ptr) Variable Function
-          37(o1):     22(ptr) Variable Function
-          40(o3):     22(ptr) Variable Function
-        49(nest):     48(ptr) Variable Function
-        57(gf2a):     56(ptr) Variable Function
-         61(cgi):     60(ptr) Variable Function
-                              Store 9(gv) 12
-                              Store 17(gfa) 18
-                              Store 23(o2) 27
-              29:    7(fvec4) Load 9(gv)
-              32:     31(ptr) AccessChain 17(gfa) 30
-              33:    6(float) Load 32
-              34:    7(fvec4) VectorTimesScalar 29 33
-              36:     35(ptr) AccessChain 28(o4) 24
-                              Store 36 34
-                              Store 37(o1) 39
-                              Store 40(o3) 39
-                              Store 28(o4) 39
-              42:     41(ptr) AccessChain 37(o1) 30
-              43:    20(bool) Load 42
-              44:     41(ptr) AccessChain 28(o4) 30
-                              Store 44 43
-                              Store 49(nest) 52
-                              Store 57(gf2a) 59
-                              Store 61(cgi) 38
-              65:     64(ptr) AccessChain 57(gf2a) 30 63
-              66:    6(float) Load 65
-              67:     19(int) Load 61(cgi)
-              68:    6(float) ConvertSToF 67
-              69:    6(float) FMul 66 68
-              70:     64(ptr) AccessChain 28(o4) 62
-                              Store 70 69
-              73:     60(ptr) AccessChain 28(o4) 38
-              74:     19(int) Load 73
-                              Store 72(a) 74
-              77:     64(ptr) AccessChain 28(o4) 62
-              78:    6(float) Load 77
-                              Store 76(b) 78
-              81:     41(ptr) AccessChain 28(o4) 30
-              82:    20(bool) Load 81
-                              Store 80(c) 82
-              85:     35(ptr) AccessChain 28(o4) 24
-              86:    7(fvec4) Load 85
-                              Store 84(v) 86
+       78(input):      8(ptr) Variable Function
+ 82(flattenTemp):     27(ptr) Variable Function
+       83(param):      8(ptr) Variable Function
+                              Store 17(gv) 20
+                              Store 25(gfa) 26
+              81:    7(fvec4) Load 80(input)
+                              Store 78(input) 81
+              84:    7(fvec4) Load 78(input)
+                              Store 83(param) 84
+              85:    11(outs) FunctionCall 14(@PixelShaderFunction(vf4;) 83(param)
+                              Store 82(flattenTemp) 85
+              88:     64(ptr) AccessChain 82(flattenTemp) 42
+              89:      9(int) Load 88
+                              Store 87(a) 89
+              92:     68(ptr) AccessChain 82(flattenTemp) 66
+              93:    6(float) Load 92
+                              Store 91(b) 93
+              96:     45(ptr) AccessChain 82(flattenTemp) 35
+              97:    10(bool) Load 96
+                              Store 95(c) 97
+             100:      8(ptr) AccessChain 82(flattenTemp) 29
+             101:    7(fvec4) Load 100
+                              Store 99(v) 101
                               Return
                               FunctionEnd
+14(@PixelShaderFunction(vf4;):    11(outs) Function None 12
+       13(input):      8(ptr) FunctionParameter
+              15:             Label
+          28(o2):     27(ptr) Variable Function
+          33(o4):     27(ptr) Variable Function
+          41(o1):     27(ptr) Variable Function
+          44(o3):     27(ptr) Variable Function
+        53(nest):     52(ptr) Variable Function
+        61(gf2a):     60(ptr) Variable Function
+         65(cgi):     64(ptr) Variable Function
+                              Store 28(o2) 32
+              34:    7(fvec4) Load 17(gv)
+              37:     36(ptr) AccessChain 25(gfa) 35
+              38:    6(float) Load 37
+              39:    7(fvec4) VectorTimesScalar 34 38
+              40:      8(ptr) AccessChain 33(o4) 29
+                              Store 40 39
+                              Store 41(o1) 43
+                              Store 44(o3) 43
+                              Store 33(o4) 43
+              46:     45(ptr) AccessChain 41(o1) 35
+              47:    10(bool) Load 46
+              48:     45(ptr) AccessChain 33(o4) 35
+                              Store 48 47
+                              Store 53(nest) 56
+                              Store 61(gf2a) 63
+                              Store 65(cgi) 42
+              69:     68(ptr) AccessChain 61(gf2a) 35 67
+              70:    6(float) Load 69
+              71:      9(int) Load 65(cgi)
+              72:    6(float) ConvertSToF 71
+              73:    6(float) FMul 70 72
+              74:     68(ptr) AccessChain 33(o4) 66
+                              Store 74 73
+              75:    11(outs) Load 33(o4)
+                              ReturnValue 75
+                              FunctionEnd

+ 99 - 76
3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out

@@ -2,7 +2,7 @@ hlsl.pp.line.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:4    Function Parameters: 
 0:?     Sequence
 0:124      Sequence
@@ -31,21 +31,27 @@ gl_FragCoord origin is upper left
 0:127            1 (const int)
 0:127        Constant:
 0:127          1.000000
-0:129      Sequence
-0:129        Sequence
-0:129          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:129            Color: direct index for structure (temp 4-component vector of float)
-0:129              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:129              Constant:
-0:129                0 (const int)
-0:129          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:129            Depth: direct index for structure (temp float)
-0:129              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:129              Constant:
-0:129                1 (const int)
-0:129        Branch: Return
+0:129      Branch: Return with expression
+0:129        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:4          Color: direct index for structure (temp 4-component vector of float)
+0:4            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4            Constant:
+0:4              0 (const int)
+0:4        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:4          Depth: direct index for structure (temp float)
+0:4            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4            Constant:
+0:4              1 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
@@ -57,7 +63,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4  Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:4    Function Parameters: 
 0:?     Sequence
 0:124      Sequence
@@ -86,80 +92,97 @@ gl_FragCoord origin is upper left
 0:127            1 (const int)
 0:127        Constant:
 0:127          1.000000
-0:129      Sequence
-0:129        Sequence
-0:129          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:129            Color: direct index for structure (temp 4-component vector of float)
-0:129              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:129              Constant:
-0:129                0 (const int)
-0:129          move second child to first child (temp float)
-0:?             'Depth' (out float FragDepth)
-0:129            Depth: direct index for structure (temp float)
-0:129              'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
-0:129              Constant:
-0:129                1 (const int)
-0:129        Branch: Return
+0:129      Branch: Return with expression
+0:129        'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4          'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4          Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:4          Color: direct index for structure (temp 4-component vector of float)
+0:4            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4            Constant:
+0:4              0 (const int)
+0:4        move second child to first child (temp float)
+0:?           'Depth' (out float FragDepth)
+0:4          Depth: direct index for structure (temp float)
+0:4            'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:4            Constant:
+0:4              1 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 35
+// Id's are bound by 42
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 27 31
+                              EntryPoint Fragment 4  "main" 35 39
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "thisLineIs"
-                              Name 12  "PS_OUTPUT"
-                              MemberName 12(PS_OUTPUT) 0  "Color"
-                              MemberName 12(PS_OUTPUT) 1  "Depth"
-                              Name 14  "psout"
-                              Name 27  "Color"
-                              Name 31  "Depth"
-                              Decorate 27(Color) Location 0
-                              Decorate 31(Depth) BuiltIn FragDepth
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 14  "thisLineIs"
+                              Name 17  "psout"
+                              Name 32  "flattenTemp"
+                              Name 35  "Color"
+                              Name 39  "Depth"
+                              Decorate 35(Color) Location 0
+                              Decorate 39(Depth) BuiltIn FragDepth
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:      6(int) Constant 124
-              10:             TypeFloat 32
-              11:             TypeVector 10(float) 4
-   12(PS_OUTPUT):             TypeStruct 11(fvec4) 10(float)
-              13:             TypePointer Function 12(PS_OUTPUT)
-              15:      6(int) Constant 0
-              18:   10(float) Constant 0
-              19:   10(float) Constant 1065353216
-              21:             TypePointer Function 11(fvec4)
-              23:      6(int) Constant 1
-              24:             TypePointer Function 10(float)
-              26:             TypePointer Output 11(fvec4)
-       27(Color):     26(ptr) Variable Output
-              30:             TypePointer Output 10(float)
-       31(Depth):     30(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 1
+              13:             TypePointer Function 12(int)
+              15:     12(int) Constant 124
+              16:             TypePointer Function 8(PS_OUTPUT)
+              18:     12(int) Constant 0
+              21:    6(float) Constant 0
+              22:    6(float) Constant 1065353216
+              24:             TypePointer Function 7(fvec4)
+              26:     12(int) Constant 1
+              27:             TypePointer Function 6(float)
+              34:             TypePointer Output 7(fvec4)
+       35(Color):     34(ptr) Variable Output
+              38:             TypePointer Output 6(float)
+       39(Depth):     38(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-   8(thisLineIs):      7(ptr) Variable Function
-       14(psout):     13(ptr) Variable Function
-                              Store 8(thisLineIs) 9
-              16:      6(int) Load 8(thisLineIs)
-              17:   10(float) ConvertSToF 16
-              20:   11(fvec4) CompositeConstruct 17 18 18 19
-              22:     21(ptr) AccessChain 14(psout) 15
-                              Store 22 20
-              25:     24(ptr) AccessChain 14(psout) 23
-                              Store 25 19
-              28:     21(ptr) AccessChain 14(psout) 15
-              29:   11(fvec4) Load 28
-                              Store 27(Color) 29
-              32:     24(ptr) AccessChain 14(psout) 23
-              33:   10(float) Load 32
-                              Store 31(Depth) 33
+ 32(flattenTemp):     16(ptr) Variable Function
+              33:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 32(flattenTemp) 33
+              36:     24(ptr) AccessChain 32(flattenTemp) 18
+              37:    7(fvec4) Load 36
+                              Store 35(Color) 37
+              40:     27(ptr) AccessChain 32(flattenTemp) 26
+              41:    6(float) Load 40
+                              Store 39(Depth) 41
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+  14(thisLineIs):     13(ptr) Variable Function
+       17(psout):     16(ptr) Variable Function
+                              Store 14(thisLineIs) 15
+              19:     12(int) Load 14(thisLineIs)
+              20:    6(float) ConvertSToF 19
+              23:    7(fvec4) CompositeConstruct 20 21 21 22
+              25:     24(ptr) AccessChain 17(psout) 18
+                              Store 25 23
+              28:     27(ptr) AccessChain 17(psout) 26
+                              Store 28 22
+              29:8(PS_OUTPUT) Load 17(psout)
+                              ReturnValue 29
+                              FunctionEnd

+ 207 - 121
3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out

@@ -2,49 +2,68 @@ hlsl.precedence.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:7  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
 0:7    Function Parameters: 
-0:7      'a1' (layout(location=0 ) in 4-component vector of float)
-0:7      'a2' (layout(location=1 ) in 4-component vector of float)
-0:7      'a3' (layout(location=2 ) in 4-component vector of float)
-0:7      'a4' (layout(location=3 ) in 4-component vector of float)
+0:7      'a1' (in 4-component vector of float)
+0:7      'a2' (in 4-component vector of float)
+0:7      'a3' (in 4-component vector of float)
+0:7      'a4' (in 4-component vector of float)
 0:?     Sequence
-0:8      Sequence
-0:8        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8      Branch: Return with expression
+0:8        add (temp 4-component vector of float)
 0:8          add (temp 4-component vector of float)
 0:8            add (temp 4-component vector of float)
-0:8              add (temp 4-component vector of float)
-0:8                'a1' (layout(location=0 ) in 4-component vector of float)
-0:8                component-wise multiply (temp 4-component vector of float)
-0:8                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:8                  'a3' (layout(location=2 ) in 4-component vector of float)
-0:8              'a4' (layout(location=3 ) in 4-component vector of float)
-0:?             Construct vec4 (temp 4-component vector of float)
-0:8              component-wise multiply (temp 3-component vector of float)
-0:8                vector swizzle (temp 3-component vector of float)
-0:8                  'a1' (layout(location=0 ) in 4-component vector of float)
-0:8                  Sequence
-0:8                    Constant:
-0:8                      0 (const int)
-0:8                    Constant:
-0:8                      1 (const int)
-0:8                    Constant:
-0:8                      2 (const int)
-0:8                vector swizzle (temp 3-component vector of float)
-0:8                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:8                  Sequence
-0:8                    Constant:
-0:8                      0 (const int)
-0:8                    Constant:
-0:8                      1 (const int)
-0:8                    Constant:
-0:8                      2 (const int)
-0:8              direct index (temp float)
-0:8                'a3' (layout(location=2 ) in 4-component vector of float)
-0:8                Constant:
-0:8                  3 (const int)
-0:8        Branch: Return
+0:8              'a1' (in 4-component vector of float)
+0:8              component-wise multiply (temp 4-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                'a3' (in 4-component vector of float)
+0:8            'a4' (in 4-component vector of float)
+0:?           Construct vec4 (temp 4-component vector of float)
+0:8            component-wise multiply (temp 3-component vector of float)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a1' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8            direct index (temp float)
+0:8              'a3' (in 4-component vector of float)
+0:8              Constant:
+0:8                3 (const int)
+0:7  Function Definition: PixelShaderFunction( (temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a1' (temp 4-component vector of float)
+0:?         'a1' (layout(location=0 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a2' (temp 4-component vector of float)
+0:?         'a2' (layout(location=1 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a3' (temp 4-component vector of float)
+0:?         'a3' (layout(location=2 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a4' (temp 4-component vector of float)
+0:?         'a4' (layout(location=3 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:7        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:?           'a1' (temp 4-component vector of float)
+0:?           'a2' (temp 4-component vector of float)
+0:?           'a3' (temp 4-component vector of float)
+0:?           'a4' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'a1' (layout(location=0 ) in 4-component vector of float)
@@ -59,49 +78,68 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:7  Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
 0:7    Function Parameters: 
-0:7      'a1' (layout(location=0 ) in 4-component vector of float)
-0:7      'a2' (layout(location=1 ) in 4-component vector of float)
-0:7      'a3' (layout(location=2 ) in 4-component vector of float)
-0:7      'a4' (layout(location=3 ) in 4-component vector of float)
+0:7      'a1' (in 4-component vector of float)
+0:7      'a2' (in 4-component vector of float)
+0:7      'a3' (in 4-component vector of float)
+0:7      'a4' (in 4-component vector of float)
 0:?     Sequence
-0:8      Sequence
-0:8        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:8      Branch: Return with expression
+0:8        add (temp 4-component vector of float)
 0:8          add (temp 4-component vector of float)
 0:8            add (temp 4-component vector of float)
-0:8              add (temp 4-component vector of float)
-0:8                'a1' (layout(location=0 ) in 4-component vector of float)
-0:8                component-wise multiply (temp 4-component vector of float)
-0:8                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:8                  'a3' (layout(location=2 ) in 4-component vector of float)
-0:8              'a4' (layout(location=3 ) in 4-component vector of float)
-0:?             Construct vec4 (temp 4-component vector of float)
-0:8              component-wise multiply (temp 3-component vector of float)
-0:8                vector swizzle (temp 3-component vector of float)
-0:8                  'a1' (layout(location=0 ) in 4-component vector of float)
-0:8                  Sequence
-0:8                    Constant:
-0:8                      0 (const int)
-0:8                    Constant:
-0:8                      1 (const int)
-0:8                    Constant:
-0:8                      2 (const int)
-0:8                vector swizzle (temp 3-component vector of float)
-0:8                  'a2' (layout(location=1 ) in 4-component vector of float)
-0:8                  Sequence
-0:8                    Constant:
-0:8                      0 (const int)
-0:8                    Constant:
-0:8                      1 (const int)
-0:8                    Constant:
-0:8                      2 (const int)
-0:8              direct index (temp float)
-0:8                'a3' (layout(location=2 ) in 4-component vector of float)
-0:8                Constant:
-0:8                  3 (const int)
-0:8        Branch: Return
+0:8              'a1' (in 4-component vector of float)
+0:8              component-wise multiply (temp 4-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                'a3' (in 4-component vector of float)
+0:8            'a4' (in 4-component vector of float)
+0:?           Construct vec4 (temp 4-component vector of float)
+0:8            component-wise multiply (temp 3-component vector of float)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a1' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8            direct index (temp float)
+0:8              'a3' (in 4-component vector of float)
+0:8              Constant:
+0:8                3 (const int)
+0:7  Function Definition: PixelShaderFunction( (temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a1' (temp 4-component vector of float)
+0:?         'a1' (layout(location=0 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a2' (temp 4-component vector of float)
+0:?         'a2' (layout(location=1 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a3' (temp 4-component vector of float)
+0:?         'a3' (layout(location=2 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         'a4' (temp 4-component vector of float)
+0:?         'a4' (layout(location=3 ) in 4-component vector of float)
+0:7      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:7        Function Call: @PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:?           'a1' (temp 4-component vector of float)
+0:?           'a2' (temp 4-component vector of float)
+0:?           'a3' (temp 4-component vector of float)
+0:?           'a4' (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'a1' (layout(location=0 ) in 4-component vector of float)
@@ -111,60 +149,108 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 39
+// Id's are bound by 65
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 11 13 15 19
+                              EntryPoint Fragment 4  "PixelShaderFunction" 43 46 49 52 55
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "@entryPointOutput"
-                              Name 11  "a1"
-                              Name 13  "a2"
-                              Name 15  "a3"
-                              Name 19  "a4"
-                              Decorate 9(@entryPointOutput) Location 0
-                              Decorate 11(a1) Location 0
-                              Decorate 13(a2) Location 1
-                              Decorate 15(a3) Location 2
-                              Decorate 19(a4) Location 3
+                              Name 14  "@PixelShaderFunction(vf4;vf4;vf4;vf4;"
+                              Name 10  "a1"
+                              Name 11  "a2"
+                              Name 12  "a3"
+                              Name 13  "a4"
+                              Name 41  "a1"
+                              Name 43  "a1"
+                              Name 45  "a2"
+                              Name 46  "a2"
+                              Name 48  "a3"
+                              Name 49  "a3"
+                              Name 51  "a4"
+                              Name 52  "a4"
+                              Name 55  "@entryPointOutput"
+                              Name 56  "param"
+                              Name 58  "param"
+                              Name 60  "param"
+                              Name 62  "param"
+                              Decorate 43(a1) Location 0
+                              Decorate 46(a2) Location 1
+                              Decorate 49(a3) Location 2
+                              Decorate 52(a4) Location 3
+                              Decorate 55(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-9(@entryPointOutput):      8(ptr) Variable Output
-              10:             TypePointer Input 7(fvec4)
-          11(a1):     10(ptr) Variable Input
-          13(a2):     10(ptr) Variable Input
-          15(a3):     10(ptr) Variable Input
-          19(a4):     10(ptr) Variable Input
-              22:             TypeVector 6(float) 3
-              28:             TypeInt 32 0
-              29:     28(int) Constant 3
-              30:             TypePointer Input 6(float)
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr) 8(ptr) 8(ptr) 8(ptr)
+              23:             TypeVector 6(float) 3
+              29:             TypeInt 32 0
+              30:     29(int) Constant 3
+              31:             TypePointer Function 6(float)
+              42:             TypePointer Input 7(fvec4)
+          43(a1):     42(ptr) Variable Input
+          46(a2):     42(ptr) Variable Input
+          49(a3):     42(ptr) Variable Input
+          52(a4):     42(ptr) Variable Input
+              54:             TypePointer Output 7(fvec4)
+55(@entryPointOutput):     54(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              12:    7(fvec4) Load 11(a1)
-              14:    7(fvec4) Load 13(a2)
-              16:    7(fvec4) Load 15(a3)
-              17:    7(fvec4) FMul 14 16
-              18:    7(fvec4) FAdd 12 17
-              20:    7(fvec4) Load 19(a4)
-              21:    7(fvec4) FAdd 18 20
-              23:    7(fvec4) Load 11(a1)
-              24:   22(fvec3) VectorShuffle 23 23 0 1 2
-              25:    7(fvec4) Load 13(a2)
-              26:   22(fvec3) VectorShuffle 25 25 0 1 2
-              27:   22(fvec3) FMul 24 26
-              31:     30(ptr) AccessChain 15(a3) 29
-              32:    6(float) Load 31
-              33:    6(float) CompositeExtract 27 0
-              34:    6(float) CompositeExtract 27 1
-              35:    6(float) CompositeExtract 27 2
-              36:    7(fvec4) CompositeConstruct 33 34 35 32
-              37:    7(fvec4) FAdd 21 36
-                              Store 9(@entryPointOutput) 37
+          41(a1):      8(ptr) Variable Function
+          45(a2):      8(ptr) Variable Function
+          48(a3):      8(ptr) Variable Function
+          51(a4):      8(ptr) Variable Function
+       56(param):      8(ptr) Variable Function
+       58(param):      8(ptr) Variable Function
+       60(param):      8(ptr) Variable Function
+       62(param):      8(ptr) Variable Function
+              44:    7(fvec4) Load 43(a1)
+                              Store 41(a1) 44
+              47:    7(fvec4) Load 46(a2)
+                              Store 45(a2) 47
+              50:    7(fvec4) Load 49(a3)
+                              Store 48(a3) 50
+              53:    7(fvec4) Load 52(a4)
+                              Store 51(a4) 53
+              57:    7(fvec4) Load 41(a1)
+                              Store 56(param) 57
+              59:    7(fvec4) Load 45(a2)
+                              Store 58(param) 59
+              61:    7(fvec4) Load 48(a3)
+                              Store 60(param) 61
+              63:    7(fvec4) Load 51(a4)
+                              Store 62(param) 63
+              64:    7(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;vf4;vf4;vf4;) 56(param) 58(param) 60(param) 62(param)
+                              Store 55(@entryPointOutput) 64
                               Return
                               FunctionEnd
+14(@PixelShaderFunction(vf4;vf4;vf4;vf4;):    7(fvec4) Function None 9
+          10(a1):      8(ptr) FunctionParameter
+          11(a2):      8(ptr) FunctionParameter
+          12(a3):      8(ptr) FunctionParameter
+          13(a4):      8(ptr) FunctionParameter
+              15:             Label
+              16:    7(fvec4) Load 10(a1)
+              17:    7(fvec4) Load 11(a2)
+              18:    7(fvec4) Load 12(a3)
+              19:    7(fvec4) FMul 17 18
+              20:    7(fvec4) FAdd 16 19
+              21:    7(fvec4) Load 13(a4)
+              22:    7(fvec4) FAdd 20 21
+              24:    7(fvec4) Load 10(a1)
+              25:   23(fvec3) VectorShuffle 24 24 0 1 2
+              26:    7(fvec4) Load 11(a2)
+              27:   23(fvec3) VectorShuffle 26 26 0 1 2
+              28:   23(fvec3) FMul 25 27
+              32:     31(ptr) AccessChain 12(a3) 30
+              33:    6(float) Load 32
+              34:    6(float) CompositeExtract 28 0
+              35:    6(float) CompositeExtract 28 1
+              36:    6(float) CompositeExtract 28 2
+              37:    7(fvec4) CompositeConstruct 34 35 36 33
+              38:    7(fvec4) FAdd 22 37
+                              ReturnValue 38
+                              FunctionEnd

+ 169 - 83
3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out

@@ -2,32 +2,51 @@ hlsl.precedence2.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:7  Function Definition: @PixelShaderFunction(i1;i1;i1;i1; (temp int)
 0:7    Function Parameters: 
-0:7      'a1' (layout(location=0 ) in int)
-0:7      'a2' (layout(location=1 ) in int)
-0:7      'a3' (layout(location=2 ) in int)
-0:7      'a4' (layout(location=3 ) in int)
+0:7      'a1' (in int)
+0:7      'a2' (in int)
+0:7      'a3' (in int)
+0:7      'a4' (in int)
 0:?     Sequence
-0:8      Sequence
-0:8        move second child to first child (temp int)
-0:?           '@entryPointOutput' (layout(location=0 ) out int)
-0:8          add (temp int)
-0:8            left-shift (temp int)
-0:8              add (temp int)
-0:8                component-wise multiply (temp int)
-0:8                  'a1' (layout(location=0 ) in int)
-0:8                  'a2' (layout(location=1 ) in int)
-0:8                'a3' (layout(location=2 ) in int)
-0:8              'a4' (layout(location=3 ) in int)
-0:8            left-shift (temp int)
-0:8              'a1' (layout(location=0 ) in int)
-0:8              add (temp int)
-0:8                'a2' (layout(location=1 ) in int)
-0:8                component-wise multiply (temp int)
-0:8                  'a3' (layout(location=2 ) in int)
-0:8                  'a4' (layout(location=3 ) in int)
-0:8        Branch: Return
+0:8      Branch: Return with expression
+0:8        add (temp int)
+0:8          left-shift (temp int)
+0:8            add (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a1' (in int)
+0:8                'a2' (in int)
+0:8              'a3' (in int)
+0:8            'a4' (in int)
+0:8          left-shift (temp int)
+0:8            'a1' (in int)
+0:8            add (temp int)
+0:8              'a2' (in int)
+0:8              component-wise multiply (temp int)
+0:8                'a3' (in int)
+0:8                'a4' (in int)
+0:7  Function Definition: PixelShaderFunction( (temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp int)
+0:?         'a1' (temp int)
+0:?         'a1' (layout(location=0 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a2' (temp int)
+0:?         'a2' (layout(location=1 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a3' (temp int)
+0:?         'a3' (layout(location=2 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a4' (temp int)
+0:?         'a4' (layout(location=3 ) in int)
+0:7      move second child to first child (temp int)
+0:?         '@entryPointOutput' (layout(location=0 ) out int)
+0:7        Function Call: @PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:?           'a1' (temp int)
+0:?           'a2' (temp int)
+0:?           'a3' (temp int)
+0:?           'a4' (temp int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out int)
 0:?     'a1' (layout(location=0 ) in int)
@@ -42,32 +61,51 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:7  Function Definition: @PixelShaderFunction(i1;i1;i1;i1; (temp int)
 0:7    Function Parameters: 
-0:7      'a1' (layout(location=0 ) in int)
-0:7      'a2' (layout(location=1 ) in int)
-0:7      'a3' (layout(location=2 ) in int)
-0:7      'a4' (layout(location=3 ) in int)
+0:7      'a1' (in int)
+0:7      'a2' (in int)
+0:7      'a3' (in int)
+0:7      'a4' (in int)
 0:?     Sequence
-0:8      Sequence
-0:8        move second child to first child (temp int)
-0:?           '@entryPointOutput' (layout(location=0 ) out int)
-0:8          add (temp int)
-0:8            left-shift (temp int)
-0:8              add (temp int)
-0:8                component-wise multiply (temp int)
-0:8                  'a1' (layout(location=0 ) in int)
-0:8                  'a2' (layout(location=1 ) in int)
-0:8                'a3' (layout(location=2 ) in int)
-0:8              'a4' (layout(location=3 ) in int)
-0:8            left-shift (temp int)
-0:8              'a1' (layout(location=0 ) in int)
-0:8              add (temp int)
-0:8                'a2' (layout(location=1 ) in int)
-0:8                component-wise multiply (temp int)
-0:8                  'a3' (layout(location=2 ) in int)
-0:8                  'a4' (layout(location=3 ) in int)
-0:8        Branch: Return
+0:8      Branch: Return with expression
+0:8        add (temp int)
+0:8          left-shift (temp int)
+0:8            add (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a1' (in int)
+0:8                'a2' (in int)
+0:8              'a3' (in int)
+0:8            'a4' (in int)
+0:8          left-shift (temp int)
+0:8            'a1' (in int)
+0:8            add (temp int)
+0:8              'a2' (in int)
+0:8              component-wise multiply (temp int)
+0:8                'a3' (in int)
+0:8                'a4' (in int)
+0:7  Function Definition: PixelShaderFunction( (temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp int)
+0:?         'a1' (temp int)
+0:?         'a1' (layout(location=0 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a2' (temp int)
+0:?         'a2' (layout(location=1 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a3' (temp int)
+0:?         'a3' (layout(location=2 ) in int)
+0:7      move second child to first child (temp int)
+0:?         'a4' (temp int)
+0:?         'a4' (layout(location=3 ) in int)
+0:7      move second child to first child (temp int)
+0:?         '@entryPointOutput' (layout(location=0 ) out int)
+0:7        Function Call: @PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:?           'a1' (temp int)
+0:?           'a2' (temp int)
+0:?           'a3' (temp int)
+0:?           'a4' (temp int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out int)
 0:?     'a1' (layout(location=0 ) in int)
@@ -77,51 +115,99 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 30
+// Id's are bound by 56
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 8 10 12 15 18
+                              EntryPoint Fragment 4  "PixelShaderFunction" 34 37 40 43 46
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 8  "@entryPointOutput"
-                              Name 10  "a1"
-                              Name 12  "a2"
-                              Name 15  "a3"
-                              Name 18  "a4"
-                              Decorate 8(@entryPointOutput) Location 0
-                              Decorate 10(a1) Location 0
-                              Decorate 12(a2) Location 1
-                              Decorate 15(a3) Location 2
-                              Decorate 18(a4) Location 3
+                              Name 13  "@PixelShaderFunction(i1;i1;i1;i1;"
+                              Name 9  "a1"
+                              Name 10  "a2"
+                              Name 11  "a3"
+                              Name 12  "a4"
+                              Name 32  "a1"
+                              Name 34  "a1"
+                              Name 36  "a2"
+                              Name 37  "a2"
+                              Name 39  "a3"
+                              Name 40  "a3"
+                              Name 42  "a4"
+                              Name 43  "a4"
+                              Name 46  "@entryPointOutput"
+                              Name 47  "param"
+                              Name 49  "param"
+                              Name 51  "param"
+                              Name 53  "param"
+                              Decorate 34(a1) Location 0
+                              Decorate 37(a2) Location 1
+                              Decorate 40(a3) Location 2
+                              Decorate 43(a4) Location 3
+                              Decorate 46(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
-               7:             TypePointer Output 6(int)
-8(@entryPointOutput):      7(ptr) Variable Output
-               9:             TypePointer Input 6(int)
-          10(a1):      9(ptr) Variable Input
-          12(a2):      9(ptr) Variable Input
-          15(a3):      9(ptr) Variable Input
-          18(a4):      9(ptr) Variable Input
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 6(int) 7(ptr) 7(ptr) 7(ptr) 7(ptr)
+              33:             TypePointer Input 6(int)
+          34(a1):     33(ptr) Variable Input
+          37(a2):     33(ptr) Variable Input
+          40(a3):     33(ptr) Variable Input
+          43(a4):     33(ptr) Variable Input
+              45:             TypePointer Output 6(int)
+46(@entryPointOutput):     45(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              11:      6(int) Load 10(a1)
-              13:      6(int) Load 12(a2)
-              14:      6(int) IMul 11 13
-              16:      6(int) Load 15(a3)
-              17:      6(int) IAdd 14 16
-              19:      6(int) Load 18(a4)
-              20:      6(int) ShiftLeftLogical 17 19
-              21:      6(int) Load 10(a1)
-              22:      6(int) Load 12(a2)
-              23:      6(int) Load 15(a3)
-              24:      6(int) Load 18(a4)
-              25:      6(int) IMul 23 24
-              26:      6(int) IAdd 22 25
-              27:      6(int) ShiftLeftLogical 21 26
-              28:      6(int) IAdd 20 27
-                              Store 8(@entryPointOutput) 28
+          32(a1):      7(ptr) Variable Function
+          36(a2):      7(ptr) Variable Function
+          39(a3):      7(ptr) Variable Function
+          42(a4):      7(ptr) Variable Function
+       47(param):      7(ptr) Variable Function
+       49(param):      7(ptr) Variable Function
+       51(param):      7(ptr) Variable Function
+       53(param):      7(ptr) Variable Function
+              35:      6(int) Load 34(a1)
+                              Store 32(a1) 35
+              38:      6(int) Load 37(a2)
+                              Store 36(a2) 38
+              41:      6(int) Load 40(a3)
+                              Store 39(a3) 41
+              44:      6(int) Load 43(a4)
+                              Store 42(a4) 44
+              48:      6(int) Load 32(a1)
+                              Store 47(param) 48
+              50:      6(int) Load 36(a2)
+                              Store 49(param) 50
+              52:      6(int) Load 39(a3)
+                              Store 51(param) 52
+              54:      6(int) Load 42(a4)
+                              Store 53(param) 54
+              55:      6(int) FunctionCall 13(@PixelShaderFunction(i1;i1;i1;i1;) 47(param) 49(param) 51(param) 53(param)
+                              Store 46(@entryPointOutput) 55
                               Return
                               FunctionEnd
+13(@PixelShaderFunction(i1;i1;i1;i1;):      6(int) Function None 8
+           9(a1):      7(ptr) FunctionParameter
+          10(a2):      7(ptr) FunctionParameter
+          11(a3):      7(ptr) FunctionParameter
+          12(a4):      7(ptr) FunctionParameter
+              14:             Label
+              15:      6(int) Load 9(a1)
+              16:      6(int) Load 10(a2)
+              17:      6(int) IMul 15 16
+              18:      6(int) Load 11(a3)
+              19:      6(int) IAdd 17 18
+              20:      6(int) Load 12(a4)
+              21:      6(int) ShiftLeftLogical 19 20
+              22:      6(int) Load 9(a1)
+              23:      6(int) Load 10(a2)
+              24:      6(int) Load 11(a3)
+              25:      6(int) Load 12(a4)
+              26:      6(int) IMul 24 25
+              27:      6(int) IAdd 23 26
+              28:      6(int) ShiftLeftLogical 22 27
+              29:      6(int) IAdd 21 28
+                              ReturnValue 29
+                              FunctionEnd

+ 57 - 44
3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out

@@ -6,7 +6,7 @@ gl_FragCoord origin is upper left
 0:6    Function Parameters: 
 0:6      'myfloat' (noContraction in float)
 0:6      'myfloat3' (noContraction out 3-component vector of float)
-0:9  Function Definition: main( (temp structure{noContraction temp 4-component vector of float color})
+0:9  Function Definition: @main( (temp structure{noContraction temp 4-component vector of float color})
 0:9    Function Parameters: 
 0:?     Sequence
 0:11      move second child to first child (noContraction temp 4-component vector of float)
@@ -19,18 +19,21 @@ gl_FragCoord origin is upper left
 0:11          1.000000
 0:11          1.000000
 0:11          1.000000
-0:12      Sequence
-0:12        Sequence
-0:12          move second child to first child (noContraction temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) noContraction out 4-component vector of float)
-0:12            color: direct index for structure (noContraction temp 4-component vector of float)
-0:12              'ps_output' (temp structure{noContraction temp 4-component vector of float color})
-0:12              Constant:
-0:12                0 (const int)
-0:12        Branch: Return
+0:12      Branch: Return with expression
+0:12        'ps_output' (temp structure{noContraction temp 4-component vector of float color})
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      Sequence
+0:9        move second child to first child (noContraction temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:9          color: direct index for structure (noContraction temp 4-component vector of float)
+0:9            Function Call: @main( (temp structure{noContraction temp 4-component vector of float color})
+0:9            Constant:
+0:9              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
 0:?     'precisefloat' (noContraction global float)
+0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -43,7 +46,7 @@ gl_FragCoord origin is upper left
 0:6    Function Parameters: 
 0:6      'myfloat' (noContraction in float)
 0:6      'myfloat3' (noContraction out 3-component vector of float)
-0:9  Function Definition: main( (temp structure{noContraction temp 4-component vector of float color})
+0:9  Function Definition: @main( (temp structure{noContraction temp 4-component vector of float color})
 0:9    Function Parameters: 
 0:?     Sequence
 0:11      move second child to first child (noContraction temp 4-component vector of float)
@@ -56,27 +59,30 @@ gl_FragCoord origin is upper left
 0:11          1.000000
 0:11          1.000000
 0:11          1.000000
-0:12      Sequence
-0:12        Sequence
-0:12          move second child to first child (noContraction temp 4-component vector of float)
-0:?             'color' (layout(location=0 ) noContraction out 4-component vector of float)
-0:12            color: direct index for structure (noContraction temp 4-component vector of float)
-0:12              'ps_output' (temp structure{noContraction temp 4-component vector of float color})
-0:12              Constant:
-0:12                0 (const int)
-0:12        Branch: Return
+0:12      Branch: Return with expression
+0:12        'ps_output' (temp structure{noContraction temp 4-component vector of float color})
+0:9  Function Definition: main( (temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      Sequence
+0:9        move second child to first child (noContraction temp 4-component vector of float)
+0:?           'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:9          color: direct index for structure (noContraction temp 4-component vector of float)
+0:9            Function Call: @main( (temp structure{noContraction temp 4-component vector of float color})
+0:9            Constant:
+0:9              0 (const int)
 0:?   Linker Objects
-0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
 0:?     'precisefloat' (noContraction global float)
+0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 32
+// Id's are bound by 37
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 26
+                              EntryPoint Fragment 4  "main" 32
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 13  "MyFunction(f1;vf3;"
@@ -84,10 +90,11 @@ gl_FragCoord origin is upper left
                               Name 12  "myfloat3"
                               Name 16  "PS_OUTPUT"
                               MemberName 16(PS_OUTPUT) 0  "color"
-                              Name 18  "ps_output"
-                              Name 26  "color"
-                              Name 31  "precisefloat"
-                              Decorate 26(color) Location 0
+                              Name 18  "@main("
+                              Name 21  "ps_output"
+                              Name 32  "color"
+                              Name 36  "precisefloat"
+                              Decorate 32(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -97,24 +104,22 @@ gl_FragCoord origin is upper left
               10:             TypeFunction 2 7(ptr) 9(ptr)
               15:             TypeVector 6(float) 4
    16(PS_OUTPUT):             TypeStruct 15(fvec4)
-              17:             TypePointer Function 16(PS_OUTPUT)
-              19:             TypeInt 32 1
-              20:     19(int) Constant 0
-              21:    6(float) Constant 1065353216
-              22:   15(fvec4) ConstantComposite 21 21 21 21
-              23:             TypePointer Function 15(fvec4)
-              25:             TypePointer Output 15(fvec4)
-       26(color):     25(ptr) Variable Output
-              30:             TypePointer Private 6(float)
-31(precisefloat):     30(ptr) Variable Private
+              17:             TypeFunction 16(PS_OUTPUT)
+              20:             TypePointer Function 16(PS_OUTPUT)
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+              24:    6(float) Constant 1065353216
+              25:   15(fvec4) ConstantComposite 24 24 24 24
+              26:             TypePointer Function 15(fvec4)
+              31:             TypePointer Output 15(fvec4)
+       32(color):     31(ptr) Variable Output
+              35:             TypePointer Private 6(float)
+36(precisefloat):     35(ptr) Variable Private
          4(main):           2 Function None 3
                5:             Label
-   18(ps_output):     17(ptr) Variable Function
-              24:     23(ptr) AccessChain 18(ps_output) 20
-                              Store 24 22
-              27:     23(ptr) AccessChain 18(ps_output) 20
-              28:   15(fvec4) Load 27
-                              Store 26(color) 28
+              33:16(PS_OUTPUT) FunctionCall 18(@main()
+              34:   15(fvec4) CompositeExtract 33 0
+                              Store 32(color) 34
                               Return
                               FunctionEnd
 13(MyFunction(f1;vf3;):           2 Function None 10
@@ -123,3 +128,11 @@ gl_FragCoord origin is upper left
               14:             Label
                               Return
                               FunctionEnd
+      18(@main():16(PS_OUTPUT) Function None 17
+              19:             Label
+   21(ps_output):     20(ptr) Variable Function
+              27:     26(ptr) AccessChain 21(ps_output) 23
+                              Store 27 25
+              28:16(PS_OUTPUT) Load 21(ps_output)
+                              ReturnValue 28
+                              FunctionEnd

+ 70 - 57
3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out

@@ -2,7 +2,7 @@ hlsl.promote.atomic.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp 4-component vector of float)
+0:5  Function Definition: @main( (temp 4-component vector of float)
 0:5    Function Parameters: 
 0:?     Sequence
 0:13      move second child to first child (temp int)
@@ -13,18 +13,21 @@ gl_FragCoord origin is upper left
 0:13            'Loc' (temp int)
 0:13            Convert int to uint (temp uint)
 0:13              'Inc' (temp int)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:15        Branch: Return
+0:15      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:5        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -33,7 +36,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (temp 4-component vector of float)
+0:5  Function Definition: @main( (temp 4-component vector of float)
 0:5    Function Parameters: 
 0:?     Sequence
 0:13      move second child to first child (temp int)
@@ -44,66 +47,76 @@ gl_FragCoord origin is upper left
 0:13            'Loc' (temp int)
 0:13            Convert int to uint (temp uint)
 0:13              'Inc' (temp int)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:15        Branch: Return
+0:15      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:5  Function Definition: main( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:5        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 31
+// Id's are bound by 36
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 27
+                              EntryPoint Fragment 4  "main" 34
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "Orig"
-                              Name 12  "s_uintbuff"
-                              Name 13  "Loc"
-                              Name 15  "Inc"
-                              Name 27  "@entryPointOutput"
-                              Decorate 12(s_uintbuff) DescriptorSet 0
-                              Decorate 27(@entryPointOutput) Location 0
+                              Name 9  "@main("
+                              Name 13  "Orig"
+                              Name 17  "s_uintbuff"
+                              Name 18  "Loc"
+                              Name 20  "Inc"
+                              Name 34  "@entryPointOutput"
+                              Decorate 17(s_uintbuff) DescriptorSet 0
+                              Decorate 34(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:             TypeInt 32 0
-              10:             TypeImage 9(int) Buffer nonsampled format:R32ui
-              11:             TypePointer UniformConstant 10
-  12(s_uintbuff):     11(ptr) Variable UniformConstant
-              18:      9(int) Constant 0
-              19:             TypePointer Image 9(int)
-              21:      9(int) Constant 1
-              24:             TypeFloat 32
-              25:             TypeVector 24(float) 4
-              26:             TypePointer Output 25(fvec4)
-27(@entryPointOutput):     26(ptr) Variable Output
-              28:   24(float) Constant 0
-              29:   25(fvec4) ConstantComposite 28 28 28 28
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeInt 32 1
+              12:             TypePointer Function 11(int)
+              14:             TypeInt 32 0
+              15:             TypeImage 14(int) Buffer nonsampled format:R32ui
+              16:             TypePointer UniformConstant 15
+  17(s_uintbuff):     16(ptr) Variable UniformConstant
+              23:     14(int) Constant 0
+              24:             TypePointer Image 14(int)
+              26:     14(int) Constant 1
+              29:    6(float) Constant 0
+              30:    7(fvec4) ConstantComposite 29 29 29 29
+              33:             TypePointer Output 7(fvec4)
+34(@entryPointOutput):     33(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-         8(Orig):      7(ptr) Variable Function
-         13(Loc):      7(ptr) Variable Function
-         15(Inc):      7(ptr) Variable Function
-              14:      6(int) Load 13(Loc)
-              16:      6(int) Load 15(Inc)
-              17:      9(int) Bitcast 16
-              20:     19(ptr) ImageTexelPointer 12(s_uintbuff) 14 18
-              22:      9(int) AtomicIAdd 20 21 18 17
-              23:      6(int) Bitcast 22
-                              Store 8(Orig) 23
-                              Store 27(@entryPointOutput) 29
+              35:    7(fvec4) FunctionCall 9(@main()
+                              Store 34(@entryPointOutput) 35
                               Return
                               FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+        13(Orig):     12(ptr) Variable Function
+         18(Loc):     12(ptr) Variable Function
+         20(Inc):     12(ptr) Variable Function
+              19:     11(int) Load 18(Loc)
+              21:     11(int) Load 20(Inc)
+              22:     14(int) Bitcast 21
+              25:     24(ptr) ImageTexelPointer 17(s_uintbuff) 19 23
+              27:     14(int) AtomicIAdd 25 26 23 22
+              28:     11(int) Bitcast 27
+                              Store 13(Orig) 28
+                              ReturnValue 30
+                              FunctionEnd

+ 132 - 119
3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out

@@ -2,7 +2,7 @@ hlsl.promote.binary.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:14  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:14  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:14    Function Parameters: 
 0:?     Sequence
 0:15      mod (temp float)
@@ -67,15 +67,18 @@ gl_FragCoord origin is upper left
 0:25          0.000000
 0:25          0.000000
 0:25          0.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:26            Color: direct index for structure (temp 4-component vector of float)
-0:26              'psout' (temp structure{temp 4-component vector of float Color})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'psout' (temp structure{temp 4-component vector of float Color})
+0:14  Function Definition: main( (temp void)
+0:14    Function Parameters: 
+0:?     Sequence
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:14          Color: direct index for structure (temp 4-component vector of float)
+0:14            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:14            Constant:
+0:14              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
@@ -87,7 +90,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:14  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:14  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 0:14    Function Parameters: 
 0:?     Sequence
 0:15      mod (temp float)
@@ -152,129 +155,139 @@ gl_FragCoord origin is upper left
 0:25          0.000000
 0:25          0.000000
 0:25          0.000000
-0:26      Sequence
-0:26        Sequence
-0:26          move second child to first child (temp 4-component vector of float)
-0:?             'Color' (layout(location=0 ) out 4-component vector of float)
-0:26            Color: direct index for structure (temp 4-component vector of float)
-0:26              'psout' (temp structure{temp 4-component vector of float Color})
-0:26              Constant:
-0:26                0 (const int)
-0:26        Branch: Return
+0:26      Branch: Return with expression
+0:26        'psout' (temp structure{temp 4-component vector of float Color})
+0:14  Function Definition: main( (temp void)
+0:14    Function Parameters: 
+0:?     Sequence
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of float)
+0:?           'Color' (layout(location=0 ) out 4-component vector of float)
+0:14          Color: direct index for structure (temp 4-component vector of float)
+0:14            Function Call: @main( (temp structure{temp 4-component vector of float Color})
+0:14            Constant:
+0:14              0 (const int)
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 78
+// Id's are bound by 83
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 74
+                              EntryPoint Fragment 4  "main" 80
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 12  "$Global"
-                              MemberName 12($Global) 0  "bval"
-                              MemberName 12($Global) 1  "bval4"
-                              MemberName 12($Global) 2  "ival"
-                              MemberName 12($Global) 3  "ival4"
-                              MemberName 12($Global) 4  "fval"
-                              MemberName 12($Global) 5  "fval4"
-                              Name 14  ""
-                              Name 62  "l_int"
-                              Name 68  "PS_OUTPUT"
-                              MemberName 68(PS_OUTPUT) 0  "Color"
-                              Name 70  "psout"
-                              Name 74  "Color"
-                              MemberDecorate 12($Global) 0 Offset 0
-                              MemberDecorate 12($Global) 1 Offset 16
-                              MemberDecorate 12($Global) 2 Offset 32
-                              MemberDecorate 12($Global) 3 Offset 48
-                              MemberDecorate 12($Global) 4 Offset 64
-                              MemberDecorate 12($Global) 5 Offset 80
-                              Decorate 12($Global) Block
-                              Decorate 14 DescriptorSet 0
-                              Decorate 74(Color) Location 0
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "@main("
+                              Name 16  "$Global"
+                              MemberName 16($Global) 0  "bval"
+                              MemberName 16($Global) 1  "bval4"
+                              MemberName 16($Global) 2  "ival"
+                              MemberName 16($Global) 3  "ival4"
+                              MemberName 16($Global) 4  "fval"
+                              MemberName 16($Global) 5  "fval4"
+                              Name 18  ""
+                              Name 66  "l_int"
+                              Name 73  "psout"
+                              Name 80  "Color"
+                              MemberDecorate 16($Global) 0 Offset 0
+                              MemberDecorate 16($Global) 1 Offset 16
+                              MemberDecorate 16($Global) 2 Offset 32
+                              MemberDecorate 16($Global) 3 Offset 48
+                              MemberDecorate 16($Global) 4 Offset 64
+                              MemberDecorate 16($Global) 5 Offset 80
+                              Decorate 16($Global) Block
+                              Decorate 18 DescriptorSet 0
+                              Decorate 80(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 0
-               7:             TypeVector 6(int) 4
-               8:             TypeInt 32 1
-               9:             TypeVector 8(int) 4
-              10:             TypeFloat 32
-              11:             TypeVector 10(float) 4
-     12($Global):             TypeStruct 6(int) 7(ivec4) 8(int) 9(ivec4) 10(float) 11(fvec4)
-              13:             TypePointer Uniform 12($Global)
-              14:     13(ptr) Variable Uniform
-              15:      8(int) Constant 2
-              16:             TypePointer Uniform 8(int)
-              20:      8(int) Constant 4
-              21:             TypePointer Uniform 10(float)
-              25:      8(int) Constant 3
-              26:             TypePointer Uniform 9(ivec4)
-              30:      8(int) Constant 5
-              31:             TypePointer Uniform 11(fvec4)
-              35:      8(int) Constant 0
-              36:             TypePointer Uniform 6(int)
-              39:             TypeBool
-              40:      6(int) Constant 0
-              42:   10(float) Constant 0
-              43:   10(float) Constant 1065353216
-              48:      8(int) Constant 1
-              49:             TypePointer Uniform 7(ivec4)
-              52:             TypeVector 39(bool) 4
-              53:    7(ivec4) ConstantComposite 40 40 40 40
-              55:   11(fvec4) ConstantComposite 42 42 42 42
-              56:   11(fvec4) ConstantComposite 43 43 43 43
-              61:             TypePointer Function 8(int)
-   68(PS_OUTPUT):             TypeStruct 11(fvec4)
-              69:             TypePointer Function 68(PS_OUTPUT)
-              71:             TypePointer Function 11(fvec4)
-              73:             TypePointer Output 11(fvec4)
-       74(Color):     73(ptr) Variable Output
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypeInt 32 0
+              13:             TypeVector 12(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+     16($Global):             TypeStruct 12(int) 13(ivec4) 14(int) 15(ivec4) 6(float) 7(fvec4)
+              17:             TypePointer Uniform 16($Global)
+              18:     17(ptr) Variable Uniform
+              19:     14(int) Constant 2
+              20:             TypePointer Uniform 14(int)
+              24:     14(int) Constant 4
+              25:             TypePointer Uniform 6(float)
+              29:     14(int) Constant 3
+              30:             TypePointer Uniform 15(ivec4)
+              34:     14(int) Constant 5
+              35:             TypePointer Uniform 7(fvec4)
+              39:     14(int) Constant 0
+              40:             TypePointer Uniform 12(int)
+              43:             TypeBool
+              44:     12(int) Constant 0
+              46:    6(float) Constant 0
+              47:    6(float) Constant 1065353216
+              52:     14(int) Constant 1
+              53:             TypePointer Uniform 13(ivec4)
+              56:             TypeVector 43(bool) 4
+              57:   13(ivec4) ConstantComposite 44 44 44 44
+              59:    7(fvec4) ConstantComposite 46 46 46 46
+              60:    7(fvec4) ConstantComposite 47 47 47 47
+              65:             TypePointer Function 14(int)
+              72:             TypePointer Function 8(PS_OUTPUT)
+              74:             TypePointer Function 7(fvec4)
+              79:             TypePointer Output 7(fvec4)
+       80(Color):     79(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-       62(l_int):     61(ptr) Variable Function
-       70(psout):     69(ptr) Variable Function
-              17:     16(ptr) AccessChain 14 15
-              18:      8(int) Load 17
-              19:   10(float) ConvertSToF 18
-              22:     21(ptr) AccessChain 14 20
-              23:   10(float) Load 22
-              24:   10(float) FMod 19 23
-              27:     26(ptr) AccessChain 14 25
-              28:    9(ivec4) Load 27
-              29:   11(fvec4) ConvertSToF 28
-              32:     31(ptr) AccessChain 14 30
-              33:   11(fvec4) Load 32
-              34:   11(fvec4) FMod 29 33
-              37:     36(ptr) AccessChain 14 35
-              38:      6(int) Load 37
-              41:    39(bool) INotEqual 38 40
-              44:   10(float) Select 41 43 42
-              45:     21(ptr) AccessChain 14 20
-              46:   10(float) Load 45
-              47:   10(float) FMod 44 46
-              50:     49(ptr) AccessChain 14 48
-              51:    7(ivec4) Load 50
-              54:   52(bvec4) INotEqual 51 53
-              57:   11(fvec4) Select 54 56 55
-              58:     31(ptr) AccessChain 14 30
-              59:   11(fvec4) Load 58
-              60:   11(fvec4) FMod 57 59
-                              Store 62(l_int) 48
-              63:     21(ptr) AccessChain 14 20
-              64:   10(float) Load 63
-              65:      8(int) ConvertFToS 64
-              66:      8(int) Load 62(l_int)
-              67:      8(int) SMod 66 65
-                              Store 62(l_int) 67
-              72:     71(ptr) AccessChain 70(psout) 35
-                              Store 72 55
-              75:     71(ptr) AccessChain 70(psout) 35
-              76:   11(fvec4) Load 75
-                              Store 74(Color) 76
+              81:8(PS_OUTPUT) FunctionCall 10(@main()
+              82:    7(fvec4) CompositeExtract 81 0
+                              Store 80(Color) 82
                               Return
                               FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       66(l_int):     65(ptr) Variable Function
+       73(psout):     72(ptr) Variable Function
+              21:     20(ptr) AccessChain 18 19
+              22:     14(int) Load 21
+              23:    6(float) ConvertSToF 22
+              26:     25(ptr) AccessChain 18 24
+              27:    6(float) Load 26
+              28:    6(float) FMod 23 27
+              31:     30(ptr) AccessChain 18 29
+              32:   15(ivec4) Load 31
+              33:    7(fvec4) ConvertSToF 32
+              36:     35(ptr) AccessChain 18 34
+              37:    7(fvec4) Load 36
+              38:    7(fvec4) FMod 33 37
+              41:     40(ptr) AccessChain 18 39
+              42:     12(int) Load 41
+              45:    43(bool) INotEqual 42 44
+              48:    6(float) Select 45 47 46
+              49:     25(ptr) AccessChain 18 24
+              50:    6(float) Load 49
+              51:    6(float) FMod 48 50
+              54:     53(ptr) AccessChain 18 52
+              55:   13(ivec4) Load 54
+              58:   56(bvec4) INotEqual 55 57
+              61:    7(fvec4) Select 58 60 59
+              62:     35(ptr) AccessChain 18 34
+              63:    7(fvec4) Load 62
+              64:    7(fvec4) FMod 61 63
+                              Store 66(l_int) 52
+              67:     25(ptr) AccessChain 18 24
+              68:    6(float) Load 67
+              69:     14(int) ConvertFToS 68
+              70:     14(int) Load 66(l_int)
+              71:     14(int) SMod 70 69
+                              Store 66(l_int) 71
+              75:     74(ptr) AccessChain 73(psout) 39
+                              Store 75 59
+              76:8(PS_OUTPUT) Load 73(psout)
+                              ReturnValue 76
+                              FunctionEnd

+ 61 - 48
3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out

@@ -2,7 +2,7 @@ hlsl.promote.vec1.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: main( (temp 4-component vector of float)
+0:3  Function Definition: @main( (temp 4-component vector of float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:7      move second child to first child (temp float)
@@ -22,15 +22,18 @@ gl_FragCoord origin is upper left
 0:13      sine (temp float)
 0:13        Construct float (in float)
 0:13          'f1b' (temp 1-component vector of float)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:15        Branch: Return
+0:15      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:3  Function Definition: main( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:3        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
@@ -41,7 +44,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: main( (temp 4-component vector of float)
+0:3  Function Definition: @main( (temp 4-component vector of float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:7      move second child to first child (temp float)
@@ -61,58 +64,68 @@ gl_FragCoord origin is upper left
 0:13      sine (temp float)
 0:13        Construct float (in float)
 0:13          'f1b' (temp 1-component vector of float)
-0:15      Sequence
-0:15        move second child to first child (temp 4-component vector of float)
-0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?           Constant:
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:?             0.000000
-0:15        Branch: Return
+0:15      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:3  Function Definition: main( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:3        Function Call: @main( (temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 26
+// Id's are bound by 31
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 23
+                              EntryPoint Fragment 4  "main" 29
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
-                              Name 8  "f1a"
-                              Name 9  "f1b"
-                              Name 16  "f3"
-                              Name 23  "@entryPointOutput"
-                              Decorate 23(@entryPointOutput) Location 0
+                              Name 9  "@main("
+                              Name 12  "f1a"
+                              Name 13  "f1b"
+                              Name 20  "f3"
+                              Name 29  "@entryPointOutput"
+                              Decorate 29(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-              12:             TypeVector 6(float) 3
-              13:    6(float) Constant 0
-              14:   12(fvec3) ConstantComposite 13 13 13
-              15:             TypePointer Function 12(fvec3)
-              21:             TypeVector 6(float) 4
-              22:             TypePointer Output 21(fvec4)
-23(@entryPointOutput):     22(ptr) Variable Output
-              24:   21(fvec4) ConstantComposite 13 13 13 13
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Function 6(float)
+              16:             TypeVector 6(float) 3
+              17:    6(float) Constant 0
+              18:   16(fvec3) ConstantComposite 17 17 17
+              19:             TypePointer Function 16(fvec3)
+              25:    7(fvec4) ConstantComposite 17 17 17 17
+              28:             TypePointer Output 7(fvec4)
+29(@entryPointOutput):     28(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-          8(f1a):      7(ptr) Variable Function
-          9(f1b):      7(ptr) Variable Function
-          16(f3):     15(ptr) Variable Function
-              10:    6(float) Load 9(f1b)
-                              Store 8(f1a) 10
-              11:    6(float) Load 8(f1a)
-                              Store 9(f1b) 11
-              17:   12(fvec3) Load 16(f3)
-              18:   12(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 14 17
-              19:    6(float) Load 9(f1b)
-              20:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 19
-                              Store 23(@entryPointOutput) 24
+              30:    7(fvec4) FunctionCall 9(@main()
+                              Store 29(@entryPointOutput) 30
                               Return
                               FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+         12(f1a):     11(ptr) Variable Function
+         13(f1b):     11(ptr) Variable Function
+          20(f3):     19(ptr) Variable Function
+              14:    6(float) Load 13(f1b)
+                              Store 12(f1a) 14
+              15:    6(float) Load 12(f1a)
+                              Store 13(f1b) 15
+              21:   16(fvec3) Load 20(f3)
+              22:   16(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 18 21
+              23:    6(float) Load 13(f1b)
+              24:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 23
+                              ReturnValue 25
+                              FunctionEnd

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini