diff --git a/.gitignore b/.gitignore
index 0faf59c0d28fc1195b299282e158b63095b45b07..30889ac7d9ff8779f9e673335349be23de6747d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,6 @@ build/
 Test/localResults/
 Test/multiThread.out
 Test/singleThread.out
+Test/vert.spv
+Test/frag.spv
 External/googletest
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c03edd7c5c2d4539eeb9832ccb391d40648c7d73..33b4764d598d8ec31fb7a0f386f4f544e79cdaf3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 2.8.11)
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
-option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" OFF)
+option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON)
 
 enable_testing()
 
diff --git a/README.md b/README.md
index 63ffdee1701612c3bdcaa8f873c80c9a755b27c8..9cfdce1839c953287c3998ca9df603de9b43cead 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,10 @@ Building
 
 ```bash
 cd <parent of where you want glslang to be>
+# If using SSH
 git clone git@github.com:KhronosGroup/glslang.git
+# Or if using HTTPS
+git clone https://github.com/KhronosGroup/glslang.git
 ```
 
 #### 2) Check-Out External Projects
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 48a6c468fb7e1060caab75da4465b8050a0f2bbc..2c65d71a6f5ee0724496ca99221a4c9c01e666f7 100755
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -11,9 +11,12 @@ set(SPVREMAP_SOURCES
     doc.cpp)
 
 set(HEADERS
+    bitutils.h
     spirv.hpp
     GLSL.std.450.h
+    GLSL.ext.KHR.h
     GlslangToSpv.h
+    hex_float.h
     Logger.h
     SpvBuilder.h
     spvIR.h
@@ -25,8 +28,9 @@ set(SPVREMAP_HEADERS
     doc.h)
 
 if(ENABLE_AMD_EXTENSIONS)
-    set(HEADERS
-        GLSL.ext.AMD.h)
+    list(APPEND
+         HEADERS
+         GLSL.ext.AMD.h)
 endif(ENABLE_AMD_EXTENSIONS)
 
 add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
diff --git a/SPIRV/GLSL.ext.AMD.h b/SPIRV/GLSL.ext.AMD.h
index 633cea0cd74506231ff272a5a9a93a1ad5d29eed..d2098cc1af65953d1c3bc809ac45e650d63b3b74 100644
--- a/SPIRV/GLSL.ext.AMD.h
+++ b/SPIRV/GLSL.ext.AMD.h
@@ -32,7 +32,7 @@ enum Decoration;
 enum Op;
 
 static const int GLSLextAMDVersion = 100;
-static const int GLSLextAMDRevision = 1;
+static const int GLSLextAMDRevision = 2;
 
 // SPV_AMD_shader_ballot
 static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
@@ -110,4 +110,7 @@ enum GcnShaderAMD {
     GcnShaderCountAMD
 };
 
+// SPV_AMD_gpu_shader_half_float
+static const char* const E_SPV_AMD_gpu_shader_half_float = "SPV_AMD_gpu_shader_half_float";
+
 #endif  // #ifndef GLSLextAMD_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
new file mode 100644
index 0000000000000000000000000000000000000000..344dd398c3bbb11595e44518ddeabc708c280ae5
--- /dev/null
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -0,0 +1,36 @@
+/*
+** Copyright (c) 2014-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a copy
+** of this software and/or associated documentation files (the "Materials"),
+** to deal in the Materials without restriction, including without limitation
+** the rights to use, copy, modify, merge, publish, distribute, sublicense,
+** and/or sell copies of the Materials, and to permit persons to whom the
+** Materials are furnished to do so, subject to the following conditions:
+**
+** The above copyright notice and this permission notice shall be included in
+** all copies or substantial portions of the Materials.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
+** IN THE MATERIALS.
+*/
+
+#ifndef GLSLextKHR_H
+#define GLSLextKHR_H
+
+// SPV_KHR_shader_ballot
+static const char* const E_SPV_KHR_shader_ballot                = "SPV_KHR_shader_ballot";
+
+// SPV_KHR_shader_draw_parameters
+static const char* const E_SPV_KHR_shader_draw_parameters       = "SPV_KHR_shader_draw_parameters";
+
+#endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 728658862e751ca9bfbc9f08db59322711622ab0..15af947c29b810a3cf45296872a354de9a1c181a 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -42,9 +42,10 @@
 #include "GlslangToSpv.h"
 #include "SpvBuilder.h"
 namespace spv {
-   #include "GLSL.std.450.h"
+    #include "GLSL.std.450.h"
+    #include "GLSL.ext.KHR.h"
 #ifdef AMD_EXTENSIONS
-   #include "GLSL.ext.AMD.h"
+    #include "GLSL.ext.AMD.h"
 #endif
 }
 
@@ -98,7 +99,7 @@ private:
 class TGlslangToSpvTraverser : public glslang::TIntermTraverser {
 public:
     TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger);
-    virtual ~TGlslangToSpvTraverser();
+    virtual ~TGlslangToSpvTraverser() { }
 
     bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*);
     bool visitBinary(glslang::TVisit, glslang::TIntermBinary*);
@@ -110,9 +111,11 @@ public:
     bool visitLoop(glslang::TVisit, glslang::TIntermLoop*);
     bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*);
 
+    void finishSpv();
     void dumpSpv(std::vector<unsigned int>& out);
 
 protected:
+    spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
     spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
@@ -154,10 +157,8 @@ protected:
     spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy);
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
     spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy);
-#ifdef AMD_EXTENSIONS
-    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand);
-#endif
+    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
+    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands);
     spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
@@ -173,6 +174,7 @@ protected:
     spv::Id getExtBuiltins(const char* name);
 
     spv::Function* shaderEntry;
+    spv::Function* currentFunction;
     spv::Instruction* entryPoint;
     int sequenceDepth;
 
@@ -180,8 +182,8 @@ protected:
 
     // There is a 1:1 mapping between a spv builder and a module; this is thread safe
     spv::Builder builder;
-    bool inMain;
-    bool mainTerminated;
+    bool inEntryPoint;
+    bool entryPointTerminated;
     bool linkageOnly;                  // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
@@ -381,7 +383,7 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
 // Translate glslang type to SPIR-V interpolation decorations.
 // Returns spv::DecorationMax when no decoration
 // should be applied.
-spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
+spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
 {
     if (qualifier.smooth)
         // Smooth decoration doesn't exist in SPIR-V 1.0
@@ -391,8 +393,10 @@ spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qual
     else if (qualifier.flat)
         return spv::DecorationFlat;
 #ifdef AMD_EXTENSIONS
-    else if (qualifier.explicitInterp)
+    else if (qualifier.explicitInterp) {
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         return spv::DecorationExplicitInterpAMD;
+    }
 #endif
     else
         return spv::DecorationMax;
@@ -498,13 +502,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     case glslang::EbvInstanceId:           return spv::BuiltInInstanceId;
     case glslang::EbvVertexIndex:          return spv::BuiltInVertexIndex;
     case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
+
     case glslang::EbvBaseVertex:
+        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addCapability(spv::CapabilityDrawParameters);
+        return spv::BuiltInBaseVertex;
+
     case glslang::EbvBaseInstance:
+        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addCapability(spv::CapabilityDrawParameters);
+        return spv::BuiltInBaseInstance;
+
     case glslang::EbvDrawId:
-        // TODO: Add SPIR-V builtin ID.
-        logger->missingFunctionality("shader draw parameters");
-        return spv::BuiltInMax;
-    case glslang::EbvPrimitiveId:          return spv::BuiltInPrimitiveId;
+        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addCapability(spv::CapabilityDrawParameters);
+        return spv::BuiltInDrawIndex;
+
+    case glslang::EbvPrimitiveId:
+        if (glslangIntermediate->getStage() == EShLangFragment)
+            builder.addCapability(spv::CapabilityGeometry);
+        return spv::BuiltInPrimitiveId;
+
     case glslang::EbvInvocationId:         return spv::BuiltInInvocationId;
     case glslang::EbvTessLevelInner:       return spv::BuiltInTessLevelInner;
     case glslang::EbvTessLevelOuter:       return spv::BuiltInTessLevelOuter;
@@ -521,24 +539,70 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     case glslang::EbvLocalInvocationId:    return spv::BuiltInLocalInvocationId;
     case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
     case glslang::EbvGlobalInvocationId:   return spv::BuiltInGlobalInvocationId;
+
     case glslang::EbvSubGroupSize:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupSize;
+
     case glslang::EbvSubGroupInvocation:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupLocalInvocationId;
+
     case glslang::EbvSubGroupEqMask:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupEqMaskKHR;
+
     case glslang::EbvSubGroupGeMask:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupGeMaskKHR;
+
     case glslang::EbvSubGroupGtMask:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupGtMaskKHR;
+
     case glslang::EbvSubGroupLeMask:
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupLeMaskKHR;
+
     case glslang::EbvSubGroupLtMask:
-        // TODO: Add SPIR-V builtin ID.
-        logger->missingFunctionality("shader ballot");
-        return spv::BuiltInMax;
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+        return spv::BuiltInSubgroupLtMaskKHR;
+
 #ifdef AMD_EXTENSIONS
-    case glslang::EbvBaryCoordNoPersp:          return spv::BuiltInBaryCoordNoPerspAMD;
-    case glslang::EbvBaryCoordNoPerspCentroid:  return spv::BuiltInBaryCoordNoPerspCentroidAMD;
-    case glslang::EbvBaryCoordNoPerspSample:    return spv::BuiltInBaryCoordNoPerspSampleAMD;
-    case glslang::EbvBaryCoordSmooth:           return spv::BuiltInBaryCoordSmoothAMD;
-    case glslang::EbvBaryCoordSmoothCentroid:   return spv::BuiltInBaryCoordSmoothCentroidAMD;
-    case glslang::EbvBaryCoordSmoothSample:     return spv::BuiltInBaryCoordSmoothSampleAMD;
-    case glslang::EbvBaryCoordPullModel:        return spv::BuiltInBaryCoordPullModelAMD;
+    case glslang::EbvBaryCoordNoPersp:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordNoPerspAMD;
+
+    case glslang::EbvBaryCoordNoPerspCentroid:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordNoPerspCentroidAMD;
+
+    case glslang::EbvBaryCoordNoPerspSample:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordNoPerspSampleAMD;
+
+    case glslang::EbvBaryCoordSmooth:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordSmoothAMD;
+
+    case glslang::EbvBaryCoordSmoothCentroid:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordSmoothCentroidAMD;
+
+    case glslang::EbvBaryCoordSmoothSample:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordSmoothSampleAMD;
+
+    case glslang::EbvBaryCoordPullModel:
+        builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        return spv::BuiltInBaryCoordPullModelAMD;
 #endif
     default:                               return spv::BuiltInMax;
     }
@@ -702,9 +766,10 @@ bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifie
 //
 
 TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate, spv::SpvBuildLogger* buildLogger)
-    : TIntermTraverser(true, false, true), shaderEntry(0), sequenceDepth(0), logger(buildLogger),
+    : TIntermTraverser(true, false, true), shaderEntry(nullptr), currentFunction(nullptr),
+      sequenceDepth(0), logger(buildLogger),
       builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion, logger),
-      inMain(false), mainTerminated(false), linkageOnly(false),
+      inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
       glslangIntermediate(glslangIntermediate)
 {
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
@@ -832,27 +897,27 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
     default:
         break;
     }
-
 }
 
-// Finish everything and dump
-void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out)
+// Finish creating SPV, after the traversal is complete.
+void TGlslangToSpvTraverser::finishSpv()
 {
+    if (! entryPointTerminated) {
+        builder.setBuildPoint(shaderEntry->getLastBlock());
+        builder.leaveFunction();
+    }
+
     // finish off the entry-point SPV instruction by adding the Input/Output <id>
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
     builder.eliminateDeadDecorations();
-    builder.dump(out);
 }
 
-TGlslangToSpvTraverser::~TGlslangToSpvTraverser()
+// Write the SPV into 'out'.
+void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out)
 {
-    if (! mainTerminated) {
-        spv::Block* lastMainBlock = shaderEntry->getLastBlock();
-        builder.setBuildPoint(lastMainBlock);
-        builder.leaveFunction();
-    }
+    builder.dump(out);
 }
 
 //
@@ -1190,6 +1255,10 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
                 one = builder.makeFloatConstant(1.0F);
             else if (node->getBasicType() == glslang::EbtDouble)
                 one = builder.makeDoubleConstant(1.0);
+#ifdef AMD_EXTENSIONS
+            else if (node->getBasicType() == glslang::EbtFloat16)
+                one = builder.makeFloat16Constant(1.0F);
+#endif
             else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
                 one = builder.makeInt64Constant(1);
             else
@@ -1283,7 +1352,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
             // anything else gets there, so visit out of order, doing them all now.
             makeGlobalInitializers(node->getAsAggregate()->getSequence());
 
-            // Initializers are done, don't want to visit again, but functions link objects need to be processed,
+            // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
             // so do them manually.
             visitFunctions(node->getAsAggregate()->getSequence());
 
@@ -1314,16 +1383,17 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
     case glslang::EOpFunction:
         if (visit == glslang::EvPreVisit) {
             if (isShaderEntryPoint(node)) {
-                inMain = true;
+                inEntryPoint = true;
                 builder.setBuildPoint(shaderEntry->getLastBlock());
+                currentFunction = shaderEntry;
             } else {
                 handleFunctionEntry(node);
             }
         } else {
-            if (inMain)
-                mainTerminated = true;
+            if (inEntryPoint)
+                entryPointTerminated = true;
             builder.leaveFunction();
-            inMain = false;
+            inEntryPoint = false;
         }
 
         return true;
@@ -1363,6 +1433,17 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
     case glslang::EOpConstructDMat4x2:
     case glslang::EOpConstructDMat4x3:
     case glslang::EOpConstructDMat4x4:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConstructF16Mat2x2:
+    case glslang::EOpConstructF16Mat2x3:
+    case glslang::EOpConstructF16Mat2x4:
+    case glslang::EOpConstructF16Mat3x2:
+    case glslang::EOpConstructF16Mat3x3:
+    case glslang::EOpConstructF16Mat3x4:
+    case glslang::EOpConstructF16Mat4x2:
+    case glslang::EOpConstructF16Mat4x3:
+    case glslang::EOpConstructF16Mat4x4:
+#endif
         isMatrix = true;
         // fall through
     case glslang::EOpConstructFloat:
@@ -1373,6 +1454,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
     case glslang::EOpConstructDVec2:
     case glslang::EOpConstructDVec3:
     case glslang::EOpConstructDVec4:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConstructFloat16:
+    case glslang::EOpConstructF16Vec2:
+    case glslang::EOpConstructF16Vec3:
+    case glslang::EOpConstructF16Vec4:
+#endif
     case glslang::EOpConstructBool:
     case glslang::EOpConstructBVec2:
     case glslang::EOpConstructBVec3:
@@ -1806,9 +1893,18 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
         builder.createLoopContinue();
         break;
     case glslang::EOpReturn:
-        if (node->getExpression())
-            builder.makeReturn(false, accessChainLoad(node->getExpression()->getType()));
-        else
+        if (node->getExpression()) {
+            const glslang::TType& glslangReturnType = node->getExpression()->getType();
+            spv::Id returnId = accessChainLoad(glslangReturnType);
+            if (builder.getTypeId(returnId) != currentFunction->getReturnType()) {
+                builder.clearAccessChain();
+                spv::Id copyId = builder.createVariable(spv::StorageClassFunction, currentFunction->getReturnType());
+                builder.setAccessChainLValue(copyId);
+                multiTypeStore(glslangReturnType, returnId);
+                returnId = builder.createLoad(copyId);
+            }
+            builder.makeReturn(false, returnId);
+        } else
             builder.makeReturn(false);
 
         builder.clearAccessChain();
@@ -1876,7 +1972,6 @@ spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision,
     return builder.createRvalueSwizzle(precision, convertGlslangToSpvType(node.getType()), parentResult, swizzle);
 }
 
-
 // Convert a glslang AST swizzle node to a swizzle vector for building SPIR-V.
 void TGlslangToSpvTraverser::convertSwizzle(const glslang::TIntermAggregate& node, std::vector<unsigned>& swizzle)
 {
@@ -1911,6 +2006,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
     case glslang::EbtDouble:
         spvType = builder.makeFloatType(64);
         break;
+#ifdef AMD_EXTENSIONS
+    case glslang::EbtFloat16:
+        builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+        builder.addCapability(spv::CapabilityFloat16);
+        spvType = builder.makeFloatType(16);
+        break;
+#endif
     case glslang::EbtBool:
         // "transparent" bool doesn't exist in SPIR-V.  The GLSL convention is
         // a 32-bit int where non-0 means true.
@@ -2274,7 +2376,7 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
 // SPIR-V level.
 //
 // This especially happens when a single glslang type expands to multiple
-// SPIR-V types, like a struct that is used in an member-undecorated way as well
+// SPIR-V types, like a struct that is used in a member-undecorated way as well
 // as in a member-decorated way.
 //
 // NOTE: This function can handle any store request; if it's not special it
@@ -2532,7 +2634,7 @@ void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glsl
 {
     for (int f = 0; f < (int)glslFunctions.size(); ++f) {
         glslang::TIntermAggregate* node = glslFunctions[f]->getAsAggregate();
-        if (node && (node->getOp() == glslang::EOpFunction || node->getOp() == glslang ::EOpLinkerObjects))
+        if (node && (node->getOp() == glslang::EOpFunction || node->getOp() == glslang::EOpLinkerObjects))
             node->traverse(this);
     }
 }
@@ -2541,8 +2643,8 @@ void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate
 {
     // SPIR-V functions should already be in the functionMap from the prepass
     // that called makeFunctions().
-    spv::Function* function = functionMap[node->getName().c_str()];
-    spv::Block* functionBlock = function->getEntryBlock();
+    currentFunction = functionMap[node->getName().c_str()];
+    spv::Block* functionBlock = currentFunction->getEntryBlock();
     builder.setBuildPoint(functionBlock);
 }
 
@@ -2667,9 +2769,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
 
     // Check for queries
     if (cracked.query) {
-        // a sampled image needs to have the image extracted first
-        if (builder.isSampledImage(params.sampler))
+        // OpImageQueryLod works on a sampled image, for other queries the image has to be extracted first
+        if (node->getOp() != glslang::EOpTextureQueryLod && builder.isSampledImage(params.sampler))
             params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
+
         switch (node->getOp()) {
         case glslang::EOpImageQuerySize:
         case glslang::EOpTextureQuerySize:
@@ -3015,7 +3118,11 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
                                                       glslang::TBasicType typeProxy, bool reduceComparison)
 {
     bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+#ifdef AMD_EXTENSIONS
+    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
+#else
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+#endif
     bool isBool = typeProxy == glslang::EbtBool;
 
     spv::Op binOp = spv::OpNop;
@@ -3341,7 +3448,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
     int extBuiltins = -1;
     int libCall = -1;
     bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+#ifdef AMD_EXTENSIONS
+    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
+#else
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+#endif
 
     switch (op) {
     case glslang::EOpNegative:
@@ -3525,6 +3636,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
         unaryOp = spv::OpBitcast;
         break;
 
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpPackFloat2x16:
+    case glslang::EOpUnpackFloat2x16:
+        unaryOp = spv::OpBitcast;
+        break;
+#endif
+
     case glslang::EOpDPdx:
         unaryOp = spv::OpDPdx;
         break;
@@ -3610,10 +3728,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
 
     case glslang::EOpBallot:
     case glslang::EOpReadFirstInvocation:
-        logger->missingFunctionality("shader ballot");
-        libCall = spv::GLSLstd450Bad;
-        break;
-
     case glslang::EOpAnyInvocation:
     case glslang::EOpAllInvocations:
     case glslang::EOpAllInvocationsEqual:
@@ -3625,7 +3739,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
     case glslang::EOpMaxInvocationsNonUniform:
     case glslang::EOpAddInvocationsNonUniform:
 #endif
-        return createInvocationsOperation(op, typeId, operand, typeProxy);
+    {
+        std::vector<spv::Id> operands;
+        operands.push_back(operand);
+        return createInvocationsOperation(op, typeId, operands, typeProxy);
+    }
 
 #ifdef AMD_EXTENSIONS
     case glslang::EOpMbcnt:
@@ -3721,22 +3839,40 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
 
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvFloat16ToBool:
+        zero = builder.makeFloat16Constant(0.0F);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+#endif
+
     case glslang::EOpConvBoolToFloat:
         convOp = spv::OpSelect;
-        zero = builder.makeFloatConstant(0.0);
-        one  = builder.makeFloatConstant(1.0);
+        zero = builder.makeFloatConstant(0.0F);
+        one  = builder.makeFloatConstant(1.0F);
         break;
+
     case glslang::EOpConvBoolToDouble:
         convOp = spv::OpSelect;
         zero = builder.makeDoubleConstant(0.0);
         one  = builder.makeDoubleConstant(1.0);
         break;
+
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvBoolToFloat16:
+        convOp = spv::OpSelect;
+        zero = builder.makeFloat16Constant(0.0F);
+        one = builder.makeFloat16Constant(1.0F);
+        break;
+#endif
+
     case glslang::EOpConvBoolToInt:
     case glslang::EOpConvBoolToInt64:
         zero = (op == glslang::EOpConvBoolToInt64) ? builder.makeInt64Constant(0) : builder.makeIntConstant(0);
         one  = (op == glslang::EOpConvBoolToInt64) ? builder.makeInt64Constant(1) : builder.makeIntConstant(1);
         convOp = spv::OpSelect;
         break;
+
     case glslang::EOpConvBoolToUint:
     case glslang::EOpConvBoolToUint64:
         zero = (op == glslang::EOpConvBoolToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0);
@@ -3748,6 +3884,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     case glslang::EOpConvIntToDouble:
     case glslang::EOpConvInt64ToFloat:
     case glslang::EOpConvInt64ToDouble:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvIntToFloat16:
+    case glslang::EOpConvInt64ToFloat16:
+#endif
         convOp = spv::OpConvertSToF;
         break;
 
@@ -3755,11 +3895,21 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     case glslang::EOpConvUintToDouble:
     case glslang::EOpConvUint64ToFloat:
     case glslang::EOpConvUint64ToDouble:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvUintToFloat16:
+    case glslang::EOpConvUint64ToFloat16:
+#endif
         convOp = spv::OpConvertUToF;
         break;
 
     case glslang::EOpConvDoubleToFloat:
     case glslang::EOpConvFloatToDouble:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvDoubleToFloat16:
+    case glslang::EOpConvFloat16ToDouble:
+    case glslang::EOpConvFloatToFloat16:
+    case glslang::EOpConvFloat16ToFloat:
+#endif
         convOp = spv::OpFConvert;
         if (builder.isMatrixType(destType))
             return createUnaryMatrixOperation(convOp, precision, noContraction, destType, operand, typeProxy);
@@ -3769,6 +3919,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     case glslang::EOpConvDoubleToInt:
     case glslang::EOpConvFloatToInt64:
     case glslang::EOpConvDoubleToInt64:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvFloat16ToInt:
+    case glslang::EOpConvFloat16ToInt64:
+#endif
         convOp = spv::OpConvertFToS;
         break;
 
@@ -3793,6 +3947,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     case glslang::EOpConvDoubleToUint:
     case glslang::EOpConvFloatToUint64:
     case glslang::EOpConvDoubleToUint64:
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvFloat16ToUint:
+    case glslang::EOpConvFloat16ToUint64:
+#endif
         convOp = spv::OpConvertFToU;
         break;
 
@@ -3959,125 +4117,176 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
 }
 
 // Create group invocation operations.
-spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
+#ifdef AMD_EXTENSIONS
     bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
+#endif
 
-    builder.addCapability(spv::CapabilityGroups);
+    spv::Op opCode = spv::OpNop;
 
-    std::vector<spv::Id> operands;
-    operands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+    std::vector<spv::Id> spvGroupOperands;
+    if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation) {
+        builder.addExtension(spv::E_SPV_KHR_shader_ballot);
+        builder.addCapability(spv::CapabilitySubgroupBallotKHR);
+    } else {
+        builder.addCapability(spv::CapabilityGroups);
 #ifdef AMD_EXTENSIONS
-    if (op == glslang::EOpMinInvocations || op == glslang::EOpMaxInvocations || op == glslang::EOpAddInvocations ||
-        op == glslang::EOpMinInvocationsNonUniform || op == glslang::EOpMaxInvocationsNonUniform || op == glslang::EOpAddInvocationsNonUniform)
-        operands.push_back(spv::GroupOperationReduce);
+        if (op == glslang::EOpMinInvocationsNonUniform ||
+            op == glslang::EOpMaxInvocationsNonUniform ||
+            op == glslang::EOpAddInvocationsNonUniform)
+            builder.addExtension(spv::E_SPV_AMD_shader_ballot);
 #endif
-    operands.push_back(operand);
+
+        spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+#ifdef AMD_EXTENSIONS
+        if (op == glslang::EOpMinInvocations || op == glslang::EOpMaxInvocations || op == glslang::EOpAddInvocations ||
+            op == glslang::EOpMinInvocationsNonUniform || op == glslang::EOpMaxInvocationsNonUniform || op == glslang::EOpAddInvocationsNonUniform)
+            spvGroupOperands.push_back(spv::GroupOperationReduce);
+#endif
+    }
+
+    for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt)
+        spvGroupOperands.push_back(*opIt);
 
     switch (op) {
     case glslang::EOpAnyInvocation:
+        opCode = spv::OpGroupAny;
+        break;
     case glslang::EOpAllInvocations:
-        return builder.createOp(op == glslang::EOpAnyInvocation ? spv::OpGroupAny : spv::OpGroupAll, typeId, operands);
-
+        opCode = spv::OpGroupAll;
+        break;
     case glslang::EOpAllInvocationsEqual:
     {
-        spv::Id groupAll = builder.createOp(spv::OpGroupAll, typeId, operands);
-        spv::Id groupAny = builder.createOp(spv::OpGroupAny, typeId, operands);
+        spv::Id groupAll = builder.createOp(spv::OpGroupAll, typeId, spvGroupOperands);
+        spv::Id groupAny = builder.createOp(spv::OpGroupAny, typeId, spvGroupOperands);
 
         return builder.createBinOp(spv::OpLogicalOr, typeId, groupAll,
                                    builder.createUnaryOp(spv::OpLogicalNot, typeId, groupAny));
     }
+
+    case glslang::EOpReadInvocation:
+        opCode = spv::OpGroupBroadcast;
+        if (builder.isVectorType(typeId))
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
+        break;
+    case glslang::EOpReadFirstInvocation:
+        opCode = spv::OpSubgroupFirstInvocationKHR;
+        break;
+    case glslang::EOpBallot:
+    {
+        // NOTE: According to the spec, the result type of "OpSubgroupBallotKHR" must be a 4 component vector of 32
+        // bit integer types. The GLSL built-in function "ballotARB()" assumes the maximum number of invocations in
+        // a subgroup is 64. Thus, we have to convert uvec4.xy to uint64_t as follow:
+        //
+        //     result = Bitcast(SubgroupBallotKHR(Predicate).xy)
+        //
+        spv::Id uintType  = builder.makeUintType(32);
+        spv::Id uvec4Type = builder.makeVectorType(uintType, 4);
+        spv::Id result = builder.createOp(spv::OpSubgroupBallotKHR, uvec4Type, spvGroupOperands);
+
+        std::vector<spv::Id> components;
+        components.push_back(builder.createCompositeExtract(result, uintType, 0));
+        components.push_back(builder.createCompositeExtract(result, uintType, 1));
+
+        spv::Id uvec2Type = builder.makeVectorType(uintType, 2);
+        return builder.createUnaryOp(spv::OpBitcast, typeId,
+                                     builder.createCompositeConstruct(uvec2Type, components));
+    }
+
 #ifdef AMD_EXTENSIONS
     case glslang::EOpMinInvocations:
     case glslang::EOpMaxInvocations:
     case glslang::EOpAddInvocations:
-    {
-        spv::Op spvOp = spv::OpNop;
         if (op == glslang::EOpMinInvocations) {
             if (isFloat)
-                spvOp = spv::OpGroupFMin;
+                opCode = spv::OpGroupFMin;
             else {
                 if (isUnsigned)
-                    spvOp = spv::OpGroupUMin;
+                    opCode = spv::OpGroupUMin;
                 else
-                    spvOp = spv::OpGroupSMin;
+                    opCode = spv::OpGroupSMin;
             }
         } else if (op == glslang::EOpMaxInvocations) {
             if (isFloat)
-                spvOp = spv::OpGroupFMax;
+                opCode = spv::OpGroupFMax;
             else {
                 if (isUnsigned)
-                    spvOp = spv::OpGroupUMax;
+                    opCode = spv::OpGroupUMax;
                 else
-                    spvOp = spv::OpGroupSMax;
+                    opCode = spv::OpGroupSMax;
             }
         } else {
             if (isFloat)
-                spvOp = spv::OpGroupFAdd;
+                opCode = spv::OpGroupFAdd;
             else
-                spvOp = spv::OpGroupIAdd;
+                opCode = spv::OpGroupIAdd;
         }
 
         if (builder.isVectorType(typeId))
-            return CreateInvocationsVectorOperation(spvOp, typeId, operand);
-        else
-            return builder.createOp(spvOp, typeId, operands);
-    }
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
+
+        break;
     case glslang::EOpMinInvocationsNonUniform:
     case glslang::EOpMaxInvocationsNonUniform:
     case glslang::EOpAddInvocationsNonUniform:
-    {
-        spv::Op spvOp = spv::OpNop;
         if (op == glslang::EOpMinInvocationsNonUniform) {
             if (isFloat)
-                spvOp = spv::OpGroupFMinNonUniformAMD;
+                opCode = spv::OpGroupFMinNonUniformAMD;
             else {
                 if (isUnsigned)
-                    spvOp = spv::OpGroupUMinNonUniformAMD;
+                    opCode = spv::OpGroupUMinNonUniformAMD;
                 else
-                    spvOp = spv::OpGroupSMinNonUniformAMD;
+                    opCode = spv::OpGroupSMinNonUniformAMD;
             }
         }
         else if (op == glslang::EOpMaxInvocationsNonUniform) {
             if (isFloat)
-                spvOp = spv::OpGroupFMaxNonUniformAMD;
+                opCode = spv::OpGroupFMaxNonUniformAMD;
             else {
                 if (isUnsigned)
-                    spvOp = spv::OpGroupUMaxNonUniformAMD;
+                    opCode = spv::OpGroupUMaxNonUniformAMD;
                 else
-                    spvOp = spv::OpGroupSMaxNonUniformAMD;
+                    opCode = spv::OpGroupSMaxNonUniformAMD;
             }
         }
         else {
             if (isFloat)
-                spvOp = spv::OpGroupFAddNonUniformAMD;
+                opCode = spv::OpGroupFAddNonUniformAMD;
             else
-                spvOp = spv::OpGroupIAddNonUniformAMD;
+                opCode = spv::OpGroupIAddNonUniformAMD;
         }
 
         if (builder.isVectorType(typeId))
-            return CreateInvocationsVectorOperation(spvOp, typeId, operand);
-        else
-            return builder.createOp(spvOp, typeId, operands);
-    }
+            return CreateInvocationsVectorOperation(opCode, typeId, operands);
+
+        break;
 #endif
     default:
         logger->missingFunctionality("invocation operation");
         return spv::NoResult;
     }
+
+    assert(opCode != spv::OpNop);
+    return builder.createOp(opCode, typeId, spvGroupOperands);
 }
 
-#ifdef AMD_EXTENSIONS
 // Create group invocation operations on a vector
-spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand)
+spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands)
 {
+#ifdef AMD_EXTENSIONS
     assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
            op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
-           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd ||
+           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
            op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
            op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
            op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
+#else
+    assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
+           op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
+           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast);
+#endif
 
     // Handle group invocation operations scalar by scalar.
     // The result type is the same type as the original type.
@@ -4087,33 +4296,41 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
     //   - make a vector out the scalar results
 
     // get the types sorted out
-    int numComponents = builder.getNumComponents(operand);
-    spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operand));
+    int numComponents = builder.getNumComponents(operands[0]);
+    spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operands[0]));
     std::vector<spv::Id> results;
 
     // do each scalar op
     for (int comp = 0; comp < numComponents; ++comp) {
         std::vector<unsigned int> indexes;
         indexes.push_back(comp);
-        spv::Id scalar = builder.createCompositeExtract(operand, scalarType, indexes);
+        spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
 
-        std::vector<spv::Id> operands;
-        operands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
-        operands.push_back(spv::GroupOperationReduce);
-        operands.push_back(scalar);
+        std::vector<spv::Id> spvGroupOperands;
+        spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+        if (op == spv::OpGroupBroadcast) {
+            spvGroupOperands.push_back(scalar);
+            spvGroupOperands.push_back(operands[1]);
+        } else {
+            spvGroupOperands.push_back(spv::GroupOperationReduce);
+            spvGroupOperands.push_back(scalar);
+        }
 
-        results.push_back(builder.createOp(op, scalarType, operands));
+        results.push_back(builder.createOp(op, scalarType, spvGroupOperands));
     }
 
     // put the pieces together
     return builder.createCompositeConstruct(typeId, results);
 }
-#endif
 
 spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
     bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+#ifdef AMD_EXTENSIONS
+    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
+#else
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+#endif
 
     spv::Op opCode = spv::OpNop;
     int extBuiltins = -1;
@@ -4256,9 +4473,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
         break;
 
     case glslang::EOpReadInvocation:
-        logger->missingFunctionality("shader ballot");
-        libCall = spv::GLSLstd450Bad;
-        break;
+        return createInvocationsOperation(op, typeId, operands, typeProxy);
 
 #ifdef AMD_EXTENSIONS
     case glslang::EOpSwizzleInvocations:
@@ -4383,7 +4598,7 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
         return 0;
     case glslang::EOpMemoryBarrier:
         builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
@@ -4645,6 +4860,11 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
             case glslang::EbtDouble:
                 spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst()));
                 break;
+#ifdef AMD_EXTENSIONS
+            case glslang::EbtFloat16:
+                spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
+                break;
+#endif
             case glslang::EbtBool:
                 spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
                 break;
@@ -4677,6 +4897,11 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
         case glslang::EbtDouble:
             scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
+#ifdef AMD_EXTENSIONS
+        case glslang::EbtFloat16:
+            scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
+            break;
+#endif
         case glslang::EbtBool:
             scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
             break;
@@ -4825,7 +5050,7 @@ spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
     if (extBuiltinMap.find(name) != extBuiltinMap.end())
         return extBuiltinMap[name];
     else {
-        builder.addExtensions(name);
+        builder.addExtension(name);
         spv::Id extBuiltins = builder.import(name);
         extBuiltinMap[name] = extBuiltins;
         return extBuiltins;
@@ -4896,9 +5121,8 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
     glslang::GetThreadPoolAllocator().push();
 
     TGlslangToSpvTraverser it(&intermediate, logger);
-
     root->traverse(&it);
-
+    it.finishSpv();
     it.dumpSpv(spirv);
 
     glslang::GetThreadPoolAllocator().pop();
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 97b280ca3a8b48b6c1a1e3fc05f2d68cef211ed1..428cfb6a7d997df51ef04d4a1d364d9341614af6 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -32,6 +32,10 @@
 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 //POSSIBILITY OF SUCH DAMAGE.
 
+#if _MSC_VER >= 1900
+    #pragma warning(disable : 4464) // relative include path contains '..'
+#endif
+
 #include "../glslang/Include/intermediate.h"
 
 #include <string>
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 5c551fb8475fcb7ebed1fb20ea9a98404ad92bef..f30963b13c5a16b2aa02f53709df99322af1b014 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -327,12 +327,10 @@ namespace spv {
         bound(maxBound); // reset header ID bound to as big as it now needs to be
     }
 
+    // Mark debug instructions for stripping
     void spirvbin_t::stripDebug()
     {
-        if ((options & STRIP) == 0)
-            return;
-
-        // build local Id and name maps
+        // Strip instructions in the stripOp set: debug info.
         process(
             [&](spv::Op opCode, unsigned start) {
                 // remember opcodes we want to strip later
@@ -343,6 +341,32 @@ namespace spv {
             op_fn_nop);
     }
 
+    // Mark instructions that refer to now-removed IDs for stripping
+    void spirvbin_t::stripDeadRefs()
+    {
+        process(
+            [&](spv::Op opCode, unsigned start) {
+                // strip opcodes pointing to removed data
+                switch (opCode) {
+                case spv::OpName:
+                case spv::OpMemberName:
+                case spv::OpDecorate:
+                case spv::OpMemberDecorate:
+                    if (idPosR.find(asId(start+1)) == idPosR.end())
+                        stripInst(start);
+                    break;
+                default: 
+                    break; // leave it alone
+                }
+
+                return true;
+            },
+            op_fn_nop);
+
+        strip();
+    }
+
+    // Update local maps of ID, type, etc positions
     void spirvbin_t::buildLocalMaps()
     {
         msg(2, 2, std::string("build local maps: "));
@@ -351,7 +375,6 @@ namespace spv {
         idMapL.clear();
 //      preserve nameMap, so we don't clear that.
         fnPos.clear();
-        fnPosDCE.clear();
         fnCalls.clear();
         typeConstPos.clear();
         idPosR.clear();
@@ -366,10 +389,6 @@ namespace spv {
         // build local Id and name maps
         process(
             [&](spv::Op opCode, unsigned start) {
-                // remember opcodes we want to strip later
-                if ((options & STRIP) && isStripOp(opCode))
-                    stripInst(start);
-
                 unsigned word = start+1;
                 spv::Id  typeId = spv::NoResult;
 
@@ -957,7 +976,6 @@ namespace spv {
                 if (call_it == fnCalls.end() || call_it->second == 0) {
                     changed = true;
                     stripRange.push_back(fn->second);
-                    fnPosDCE.insert(*fn);
 
                     // decrease counts of called functions
                     process(
@@ -1011,11 +1029,15 @@ namespace spv {
         // Remove single-use function variables + associated decorations and names
         process(
             [&](spv::Op opCode, unsigned start) {
-                if ((opCode == spv::OpVariable && varUseCount[asId(start+2)] == 1)  ||
-                    (opCode == spv::OpDecorate && varUseCount[asId(start+1)] == 1)  ||
-                    (opCode == spv::OpName     && varUseCount[asId(start+1)] == 1)) {
-                        stripInst(start);
-                }
+                spv::Id id = spv::NoResult;
+                if (opCode == spv::OpVariable)
+                    id = asId(start+2);
+                if (opCode == spv::OpDecorate || opCode == spv::OpName)
+                    id = asId(start+1);
+
+                if (id != spv::NoResult && varUseCount[id] == 1)
+                    stripInst(start);
+
                 return true;
             },
             op_fn_nop);
@@ -1276,25 +1298,31 @@ namespace spv {
         // Set up opcode tables from SpvDoc
         spv::Parameterize();
 
-        validate();  // validate header
-        buildLocalMaps();
+        validate();       // validate header
+        buildLocalMaps(); // build ID maps
 
         msg(3, 4, std::string("ID bound: ") + std::to_string(bound()));
 
+        if (options & STRIP)         stripDebug();
         strip();        // strip out data we decided to eliminate
         if (options & OPT_LOADSTORE) optLoadStore();
         if (options & OPT_FWD_LS)    forwardLoadStores();
         if (options & DCE_FUNCS)     dceFuncs();
         if (options & DCE_VARS)      dceVars();
         if (options & DCE_TYPES)     dceTypes();
-        strip();        // strip out data we decided to eliminate
+
+        strip();         // strip out data we decided to eliminate
+        stripDeadRefs(); // remove references to things we DCEed
+        // after the last strip, we must clean any debug info referring to now-deleted data
 
         if (options & MAP_TYPES)     mapTypeConst();
         if (options & MAP_NAMES)     mapNames();
         if (options & MAP_FUNCS)     mapFnBodies();
 
-        mapRemainder(); // map any unmapped IDs
-        applyMap();     // Now remap each shader to the new IDs we've come up with
+        if (options & MAP_ALL) {
+            mapRemainder(); // map any unmapped IDs
+            applyMap();     // Now remap each shader to the new IDs we've come up with
+        }
     }
 
     // remap from a memory image
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index 43ec1ae7947b87abd563bd7e7404e6d2f974ba74..77c965821a1a2b8d93cd83aa97ceb4fa6654f2de 100755
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -75,6 +75,7 @@ public:
 
 #if !defined (use_cpp11)
 #include <cstdio>
+#include <cstdint>
 
 namespace spv {
 class spirvbin_t : public spirvbin_base_t
@@ -238,7 +239,8 @@ private:
 
    void        applyMap();            // remap per local name map
    void        mapRemainder();        // map any IDs we haven't touched yet
-   void        stripDebug();          // strip debug info
+   void        stripDebug();          // strip all debug info
+   void        stripDeadRefs();       // strips debug info for now-dead references after DCE
    void        strip();               // remove debug symbols
    
    std::vector<spirword_t> spv;      // SPIR words
@@ -263,7 +265,6 @@ private:
    // Function start and end.  use unordered_map because we'll have
    // many fewer functions than IDs.
    std::unordered_map<spv::Id, range_t> fnPos;
-   std::unordered_map<spv::Id, range_t> fnPosDCE; // deleted functions
 
    // Which functions are called, anywhere in the module, with a call count
    std::unordered_map<spv::Id, int> fnCalls;
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index a881d1b4cb15a3760c83bc1b72a6b2edffb5ceee..b0b74b243867c98d16ca587db64e538eeb9c18e4 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -46,6 +46,10 @@
 
 #include "SpvBuilder.h"
 
+#ifdef AMD_EXTENSIONS
+    #include "hex_float.h"
+#endif
+
 #ifndef _WIN32
     #include <cstdio>
 #endif
@@ -60,7 +64,7 @@ Builder::Builder(unsigned int magicNumber, SpvBuildLogger* buildLogger) :
     builderNumber(magicNumber),
     buildPoint(0),
     uniqueId(0),
-    mainFunction(0),
+    entryPointFunction(0),
     generatingOpCodeForSpecConst(false),
     logger(buildLogger)
 {
@@ -785,6 +789,36 @@ Id Builder::makeDoubleConstant(double d, bool specConstant)
     return c->getResultId();
 }
 
+#ifdef AMD_EXTENSIONS
+Id Builder::makeFloat16Constant(float f16, bool specConstant)
+{
+    Op opcode = specConstant ? OpSpecConstant : OpConstant;
+    Id typeId = makeFloatType(16);
+
+    spvutils::HexFloat<spvutils::FloatProxy<float>> fVal(f16);
+    spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>> f16Val(0);
+    fVal.castTo(f16Val, spvutils::kRoundToZero);
+
+    unsigned value = f16Val.value().getAsFloat().get_value();
+
+    // See if we already made it. Applies only to regular constants, because specialization constants
+    // must remain distinct for the purpose of applying a SpecId decoration.
+    if (!specConstant) {
+        Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, value);
+        if (existing)
+            return existing;
+    }
+
+    Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
+    c->addImmediateOperand(value);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(c));
+    groupedConstants[OpTypeFloat].push_back(c);
+    module.mapInstruction(c);
+
+    return c->getResultId();
+}
+#endif
+
 Id Builder::findCompositeConstant(Op typeClass, std::vector<Id>& comps) const
 {
     Instruction* constant = 0;
@@ -933,15 +967,15 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat
 // Comments in header
 Function* Builder::makeEntryPoint(const char* entryPoint)
 {
-    assert(! mainFunction);
+    assert(! entryPointFunction);
 
     Block* entry;
     std::vector<Id> params;
     std::vector<Decoration> precisions;
 
-    mainFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry);
+    entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry);
 
-    return mainFunction;
+    return entryPointFunction;
 }
 
 // Comments in header
@@ -2110,6 +2144,7 @@ void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizz
         std::vector<unsigned> oldSwizzle = accessChain.swizzle;
         accessChain.swizzle.resize(0);
         for (unsigned int i = 0; i < swizzle.size(); ++i) {
+            assert(swizzle[i] < oldSwizzle.size());
             accessChain.swizzle.push_back(oldSwizzle[swizzle[i]]);
         }
     } else
@@ -2318,9 +2353,9 @@ void Builder::dump(std::vector<unsigned int>& out) const
         capInst.dump(out);
     }
 
-    for (int e = 0; e < (int)extensions.size(); ++e) {
+    for (auto it = extensions.cbegin(); it != extensions.cend(); ++it) {
         Instruction extInst(0, 0, OpExtension);
-        extInst.addStringOperand(extensions[e]);
+        extInst.addStringOperand(*it);
         extInst.dump(out);
     }
 
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 38dc1fa39536b2458fb111faece8a8c13e51c906..e8524b2b1b7406d97b828b98b1267008d3769c8f 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -71,7 +71,7 @@ public:
         sourceVersion = version;
     }
     void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
-    void addExtensions(const char* ext) { extensions.push_back(ext); }
+    void addExtension(const char* ext) { extensions.insert(ext); }
     Id import(const char*);
     void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
     {
@@ -191,6 +191,9 @@ public:
     Id makeUint64Constant(unsigned long long u, bool specConstant = false)  { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
     Id makeFloatConstant(float f, bool specConstant = false);
     Id makeDoubleConstant(double d, bool specConstant = false);
+#ifdef AMD_EXTENSIONS
+    Id makeFloat16Constant(float f16, bool specConstant = false);
+#endif
 
     // Turn the array of constants into a proper spv constant of the requested type.
     Id makeCompositeConstant(Id type, std::vector<Id>& comps, bool specConst = false);
@@ -552,7 +555,7 @@ public:
 
     SourceLanguage source;
     int sourceVersion;
-    std::vector<const char*> extensions;
+    std::set<const char*> extensions;
     std::vector<const char*> sourceExtensions;
     AddressingModel addressModel;
     MemoryModel memoryModel;
@@ -561,7 +564,7 @@ public:
     Module module;
     Block* buildPoint;
     Id uniqueId;
-    Function* mainFunction;
+    Function* entryPointFunction;
     bool generatingOpCodeForSpecConst;
     AccessChain accessChain;
 
diff --git a/SPIRV/bitutils.h b/SPIRV/bitutils.h
new file mode 100644
index 0000000000000000000000000000000000000000..31288ab69d3d3ade46b05186cb1bba333666420d
--- /dev/null
+++ b/SPIRV/bitutils.h
@@ -0,0 +1,81 @@
+// Copyright (c) 2015-2016 The Khronos Group Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef LIBSPIRV_UTIL_BITUTILS_H_
+#define LIBSPIRV_UTIL_BITUTILS_H_
+
+#include <cstdint>
+#include <cstring>
+
+namespace spvutils {
+
+// Performs a bitwise copy of source to the destination type Dest.
+template <typename Dest, typename Src>
+Dest BitwiseCast(Src source) {
+  Dest dest;
+  static_assert(sizeof(source) == sizeof(dest),
+                "BitwiseCast: Source and destination must have the same size");
+  std::memcpy(&dest, &source, sizeof(dest));
+  return dest;
+}
+
+// SetBits<T, First, Num> returns an integer of type <T> with bits set
+// for position <First> through <First + Num - 1>, counting from the least
+// significant bit. In particular when Num == 0, no positions are set to 1.
+// A static assert will be triggered if First + Num > sizeof(T) * 8, that is,
+// a bit that will not fit in the underlying type is set.
+template <typename T, size_t First = 0, size_t Num = 0>
+struct SetBits {
+  static_assert(First < sizeof(T) * 8,
+                "Tried to set a bit that is shifted too far.");
+  const static T get = (T(1) << First) | SetBits<T, First + 1, Num - 1>::get;
+};
+
+template <typename T, size_t Last>
+struct SetBits<T, Last, 0> {
+  const static T get = T(0);
+};
+
+// This is all compile-time so we can put our tests right here.
+static_assert(SetBits<uint32_t, 0, 0>::get == uint32_t(0x00000000),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 0, 1>::get == uint32_t(0x00000001),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 31, 1>::get == uint32_t(0x80000000),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 1, 2>::get == uint32_t(0x00000006),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 30, 2>::get == uint32_t(0xc0000000),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 0, 31>::get == uint32_t(0x7FFFFFFF),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 0, 32>::get == uint32_t(0xFFFFFFFF),
+              "SetBits failed");
+static_assert(SetBits<uint32_t, 16, 16>::get == uint32_t(0xFFFF0000),
+              "SetBits failed");
+
+static_assert(SetBits<uint64_t, 0, 1>::get == uint64_t(0x0000000000000001LL),
+              "SetBits failed");
+static_assert(SetBits<uint64_t, 63, 1>::get == uint64_t(0x8000000000000000LL),
+              "SetBits failed");
+static_assert(SetBits<uint64_t, 62, 2>::get == uint64_t(0xc000000000000000LL),
+              "SetBits failed");
+static_assert(SetBits<uint64_t, 31, 1>::get == uint64_t(0x0000000080000000LL),
+              "SetBits failed");
+static_assert(SetBits<uint64_t, 16, 16>::get == uint64_t(0x00000000FFFF0000LL),
+              "SetBits failed");
+
+}  // namespace spvutils
+
+#endif  // LIBSPIRV_UTIL_BITUTILS_H_
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index a25f7c0054e2fa65ad5535e99c7406fc0c93deed..0e68c7ef0bf2de96f4281fd3748f099971ecd678 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -45,14 +45,14 @@
 #include <cstring>
 #include <algorithm>
 
-#ifdef AMD_EXTENSIONS
 namespace spv {
     extern "C" {
         // Include C-based headers that don't have a namespace
+#ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
+#endif
     }
 }
-#endif
 
 namespace spv {
 
@@ -312,6 +312,16 @@ const char* BuiltInString(int builtIn)
     case BuiltInCeiling:
     default: return "Bad";
 
+    case 4416: return "SubgroupEqMaskKHR";
+    case 4417: return "SubgroupGeMaskKHR";
+    case 4418: return "SubgroupGtMaskKHR";
+    case 4419: return "SubgroupLeMaskKHR";
+    case 4420: return "SubgroupLtMaskKHR";
+
+    case 4424: return "BaseVertex";
+    case 4425: return "BaseInstance";
+    case 4426: return "DrawIndex";
+
 #ifdef AMD_EXTENSIONS
     case 4992: return "BaryCoordNoPerspAMD";
     case 4993: return "BaryCoordNoPerspCentroidAMD";
@@ -799,6 +809,9 @@ const char* CapabilityString(int info)
 
     case CapabilityCeiling:
     default: return "Bad";
+
+    case 4423: return "SubgroupBallotKHR";
+    case 4427: return "DrawParameters";
     }
 }
 
@@ -1131,6 +1144,9 @@ const char* OpcodeString(int op)
     default:
         return "Bad";
 
+    case 4421: return "OpSubgroupBallotKHR";
+    case 4422: return "OpSubgroupFirstInvocationKHR";
+
 #ifdef AMD_EXTENSIONS
     case 5000: return "OpGroupIAddNonUniformAMD";
     case 5001: return "OpGroupFAddNonUniformAMD";
@@ -1146,11 +1162,7 @@ const char* OpcodeString(int op)
 
 // The set of objects that hold all the instruction/operand
 // parameterization information.
-#ifdef AMD_EXTENSIONS
 InstructionParameters InstructionDesc[OpCodeMask + 1];
-#else
-InstructionParameters InstructionDesc[OpcodeCeiling];
-#endif
 OperandParameters ExecutionModeOperands[ExecutionModeCeiling];
 OperandParameters DecorationOperands[DecorationCeiling];
 
@@ -2742,6 +2754,10 @@ void Parameterize()
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
 
+    InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
+
+    InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
+
 #ifdef AMD_EXTENSIONS
     InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
diff --git a/SPIRV/hex_float.h b/SPIRV/hex_float.h
new file mode 100644
index 0000000000000000000000000000000000000000..31b9f9ed89a61982bb86f3c1a341bfddd2f59703
--- /dev/null
+++ b/SPIRV/hex_float.h
@@ -0,0 +1,1078 @@
+// Copyright (c) 2015-2016 The Khronos Group Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef LIBSPIRV_UTIL_HEX_FLOAT_H_
+#define LIBSPIRV_UTIL_HEX_FLOAT_H_
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdint>
+#include <iomanip>
+#include <limits>
+#include <sstream>
+
+#if defined(_MSC_VER) && _MSC_VER < 1700
+namespace std {
+bool isnan(double f)
+{
+  return ::_isnan(f) != 0;
+}
+bool isinf(double f)
+{
+  return ::_finite(f) == 0;
+}
+}
+#endif
+
+#include "bitutils.h"
+
+namespace spvutils {
+
+class Float16 {
+ public:
+  Float16(uint16_t v) : val(v) {}
+  Float16() {}
+  static bool isNan(const Float16& val) {
+    return ((val.val & 0x7C00) == 0x7C00) && ((val.val & 0x3FF) != 0);
+  }
+  // Returns true if the given value is any kind of infinity.
+  static bool isInfinity(const Float16& val) {
+    return ((val.val & 0x7C00) == 0x7C00) && ((val.val & 0x3FF) == 0);
+  }
+  Float16(const Float16& other) { val = other.val; }
+  uint16_t get_value() const { return val; }
+
+  // Returns the maximum normal value.
+  static Float16 max() { return Float16(0x7bff); }
+  // Returns the lowest normal value.
+  static Float16 lowest() { return Float16(0xfbff); }
+
+ private:
+  uint16_t val;
+};
+
+// To specialize this type, you must override uint_type to define
+// an unsigned integer that can fit your floating point type.
+// You must also add a isNan function that returns true if
+// a value is Nan.
+template <typename T>
+struct FloatProxyTraits {
+  typedef void uint_type;
+};
+
+template <>
+struct FloatProxyTraits<float> {
+  typedef uint32_t uint_type;
+  static bool isNan(float f) { return std::isnan(f); }
+  // Returns true if the given value is any kind of infinity.
+  static bool isInfinity(float f) { return std::isinf(f); }
+  // Returns the maximum normal value.
+  static float max() { return std::numeric_limits<float>::max(); }
+  // Returns the lowest normal value.
+  static float lowest() { return std::numeric_limits<float>::lowest(); }
+};
+
+template <>
+struct FloatProxyTraits<double> {
+  typedef uint64_t uint_type;
+  static bool isNan(double f) { return std::isnan(f); }
+  // Returns true if the given value is any kind of infinity.
+  static bool isInfinity(double f) { return std::isinf(f); }
+  // Returns the maximum normal value.
+  static double max() { return std::numeric_limits<double>::max(); }
+  // Returns the lowest normal value.
+  static double lowest() { return std::numeric_limits<double>::lowest(); }
+};
+
+template <>
+struct FloatProxyTraits<Float16> {
+  typedef uint16_t uint_type;
+  static bool isNan(Float16 f) { return Float16::isNan(f); }
+  // Returns true if the given value is any kind of infinity.
+  static bool isInfinity(Float16 f) { return Float16::isInfinity(f); }
+  // Returns the maximum normal value.
+  static Float16 max() { return Float16::max(); }
+  // Returns the lowest normal value.
+  static Float16 lowest() { return Float16::lowest(); }
+};
+
+// Since copying a floating point number (especially if it is NaN)
+// does not guarantee that bits are preserved, this class lets us
+// store the type and use it as a float when necessary.
+template <typename T>
+class FloatProxy {
+ public:
+  typedef typename FloatProxyTraits<T>::uint_type uint_type;
+
+  // Since this is to act similar to the normal floats,
+  // do not initialize the data by default.
+  FloatProxy() {}
+
+  // Intentionally non-explicit. This is a proxy type so
+  // implicit conversions allow us to use it more transparently.
+  FloatProxy(T val) { data_ = BitwiseCast<uint_type>(val); }
+
+  // Intentionally non-explicit. This is a proxy type so
+  // implicit conversions allow us to use it more transparently.
+  FloatProxy(uint_type val) { data_ = val; }
+
+  // This is helpful to have and is guaranteed not to stomp bits.
+  FloatProxy<T> operator-() const {
+    return static_cast<uint_type>(data_ ^
+                                  (uint_type(0x1) << (sizeof(T) * 8 - 1)));
+  }
+
+  // Returns the data as a floating point value.
+  T getAsFloat() const { return BitwiseCast<T>(data_); }
+
+  // Returns the raw data.
+  uint_type data() const { return data_; }
+
+  // Returns true if the value represents any type of NaN.
+  bool isNan() { return FloatProxyTraits<T>::isNan(getAsFloat()); }
+  // Returns true if the value represents any type of infinity.
+  bool isInfinity() { return FloatProxyTraits<T>::isInfinity(getAsFloat()); }
+
+  // Returns the maximum normal value.
+  static FloatProxy<T> max() {
+    return FloatProxy<T>(FloatProxyTraits<T>::max());
+  }
+  // Returns the lowest normal value.
+  static FloatProxy<T> lowest() {
+    return FloatProxy<T>(FloatProxyTraits<T>::lowest());
+  }
+
+ private:
+  uint_type data_;
+};
+
+template <typename T>
+bool operator==(const FloatProxy<T>& first, const FloatProxy<T>& second) {
+  return first.data() == second.data();
+}
+
+// Reads a FloatProxy value as a normal float from a stream.
+template <typename T>
+std::istream& operator>>(std::istream& is, FloatProxy<T>& value) {
+  T float_val;
+  is >> float_val;
+  value = FloatProxy<T>(float_val);
+  return is;
+}
+
+// This is an example traits. It is not meant to be used in practice, but will
+// be the default for any non-specialized type.
+template <typename T>
+struct HexFloatTraits {
+  // Integer type that can store this hex-float.
+  typedef void uint_type;
+  // Signed integer type that can store this hex-float.
+  typedef void int_type;
+  // The numerical type that this HexFloat represents.
+  typedef void underlying_type;
+  // The type needed to construct the underlying type.
+  typedef void native_type;
+  // The number of bits that are actually relevant in the uint_type.
+  // This allows us to deal with, for example, 24-bit values in a 32-bit
+  // integer.
+  static const uint32_t num_used_bits = 0;
+  // Number of bits that represent the exponent.
+  static const uint32_t num_exponent_bits = 0;
+  // Number of bits that represent the fractional part.
+  static const uint32_t num_fraction_bits = 0;
+  // The bias of the exponent. (How much we need to subtract from the stored
+  // value to get the correct value.)
+  static const uint32_t exponent_bias = 0;
+};
+
+// Traits for IEEE float.
+// 1 sign bit, 8 exponent bits, 23 fractional bits.
+template <>
+struct HexFloatTraits<FloatProxy<float>> {
+  typedef uint32_t uint_type;
+  typedef int32_t int_type;
+  typedef FloatProxy<float> underlying_type;
+  typedef float native_type;
+  static const uint_type num_used_bits = 32;
+  static const uint_type num_exponent_bits = 8;
+  static const uint_type num_fraction_bits = 23;
+  static const uint_type exponent_bias = 127;
+};
+
+// Traits for IEEE double.
+// 1 sign bit, 11 exponent bits, 52 fractional bits.
+template <>
+struct HexFloatTraits<FloatProxy<double>> {
+  typedef uint64_t uint_type;
+  typedef int64_t int_type;
+  typedef FloatProxy<double> underlying_type;
+  typedef double native_type;
+  static const uint_type num_used_bits = 64;
+  static const uint_type num_exponent_bits = 11;
+  static const uint_type num_fraction_bits = 52;
+  static const uint_type exponent_bias = 1023;
+};
+
+// Traits for IEEE half.
+// 1 sign bit, 5 exponent bits, 10 fractional bits.
+template <>
+struct HexFloatTraits<FloatProxy<Float16>> {
+  typedef uint16_t uint_type;
+  typedef int16_t int_type;
+  typedef uint16_t underlying_type;
+  typedef uint16_t native_type;
+  static const uint_type num_used_bits = 16;
+  static const uint_type num_exponent_bits = 5;
+  static const uint_type num_fraction_bits = 10;
+  static const uint_type exponent_bias = 15;
+};
+
+enum round_direction {
+  kRoundToZero,
+  kRoundToNearestEven,
+  kRoundToPositiveInfinity,
+  kRoundToNegativeInfinity
+};
+
+// Template class that houses a floating pointer number.
+// It exposes a number of constants based on the provided traits to
+// assist in interpreting the bits of the value.
+template <typename T, typename Traits = HexFloatTraits<T>>
+class HexFloat {
+ public:
+  typedef typename Traits::uint_type uint_type;
+  typedef typename Traits::int_type int_type;
+  typedef typename Traits::underlying_type underlying_type;
+  typedef typename Traits::native_type native_type;
+
+  explicit HexFloat(T f) : value_(f) {}
+
+  T value() const { return value_; }
+  void set_value(T f) { value_ = f; }
+
+  // These are all written like this because it is convenient to have
+  // compile-time constants for all of these values.
+
+  // Pass-through values to save typing.
+  static const uint32_t num_used_bits = Traits::num_used_bits;
+  static const uint32_t exponent_bias = Traits::exponent_bias;
+  static const uint32_t num_exponent_bits = Traits::num_exponent_bits;
+  static const uint32_t num_fraction_bits = Traits::num_fraction_bits;
+
+  // Number of bits to shift left to set the highest relevant bit.
+  static const uint32_t top_bit_left_shift = num_used_bits - 1;
+  // How many nibbles (hex characters) the fractional part takes up.
+  static const uint32_t fraction_nibbles = (num_fraction_bits + 3) / 4;
+  // If the fractional part does not fit evenly into a hex character (4-bits)
+  // then we have to left-shift to get rid of leading 0s. This is the amount
+  // we have to shift (might be 0).
+  static const uint32_t num_overflow_bits =
+      fraction_nibbles * 4 - num_fraction_bits;
+
+  // The representation of the fraction, not the actual bits. This
+  // includes the leading bit that is usually implicit.
+  static const uint_type fraction_represent_mask =
+      spvutils::SetBits<uint_type, 0,
+                        num_fraction_bits + num_overflow_bits>::get;
+
+  // The topmost bit in the nibble-aligned fraction.
+  static const uint_type fraction_top_bit =
+      uint_type(1) << (num_fraction_bits + num_overflow_bits - 1);
+
+  // The least significant bit in the exponent, which is also the bit
+  // immediately to the left of the significand.
+  static const uint_type first_exponent_bit = uint_type(1)
+                                              << (num_fraction_bits);
+
+  // The mask for the encoded fraction. It does not include the
+  // implicit bit.
+  static const uint_type fraction_encode_mask =
+      spvutils::SetBits<uint_type, 0, num_fraction_bits>::get;
+
+  // The bit that is used as a sign.
+  static const uint_type sign_mask = uint_type(1) << top_bit_left_shift;
+
+  // The bits that represent the exponent.
+  static const uint_type exponent_mask =
+      spvutils::SetBits<uint_type, num_fraction_bits, num_exponent_bits>::get;
+
+  // How far left the exponent is shifted.
+  static const uint32_t exponent_left_shift = num_fraction_bits;
+
+  // How far from the right edge the fraction is shifted.
+  static const uint32_t fraction_right_shift =
+      static_cast<uint32_t>(sizeof(uint_type) * 8) - num_fraction_bits;
+
+  // The maximum representable unbiased exponent.
+  static const int_type max_exponent =
+      (exponent_mask >> num_fraction_bits) - exponent_bias;
+  // The minimum representable exponent for normalized numbers.
+  static const int_type min_exponent = -static_cast<int_type>(exponent_bias);
+
+  // Returns the bits associated with the value.
+  uint_type getBits() const { return spvutils::BitwiseCast<uint_type>(value_); }
+
+  // Returns the bits associated with the value, without the leading sign bit.
+  uint_type getUnsignedBits() const {
+    return static_cast<uint_type>(spvutils::BitwiseCast<uint_type>(value_) &
+                                  ~sign_mask);
+  }
+
+  // Returns the bits associated with the exponent, shifted to start at the
+  // lsb of the type.
+  const uint_type getExponentBits() const {
+    return static_cast<uint_type>((getBits() & exponent_mask) >>
+                                  num_fraction_bits);
+  }
+
+  // Returns the exponent in unbiased form. This is the exponent in the
+  // human-friendly form.
+  const int_type getUnbiasedExponent() const {
+    return static_cast<int_type>(getExponentBits() - exponent_bias);
+  }
+
+  // Returns just the significand bits from the value.
+  const uint_type getSignificandBits() const {
+    return getBits() & fraction_encode_mask;
+  }
+
+  // If the number was normalized, returns the unbiased exponent.
+  // If the number was denormal, normalize the exponent first.
+  const int_type getUnbiasedNormalizedExponent() const {
+    if ((getBits() & ~sign_mask) == 0) {  // special case if everything is 0
+      return 0;
+    }
+    int_type exp = getUnbiasedExponent();
+    if (exp == min_exponent) {  // We are in denorm land.
+      uint_type significand_bits = getSignificandBits();
+      while ((significand_bits & (first_exponent_bit >> 1)) == 0) {
+        significand_bits = static_cast<uint_type>(significand_bits << 1);
+        exp = static_cast<int_type>(exp - 1);
+      }
+      significand_bits &= fraction_encode_mask;
+    }
+    return exp;
+  }
+
+  // Returns the signficand after it has been normalized.
+  const uint_type getNormalizedSignificand() const {
+    int_type unbiased_exponent = getUnbiasedNormalizedExponent();
+    uint_type significand = getSignificandBits();
+    for (int_type i = unbiased_exponent; i <= min_exponent; ++i) {
+      significand = static_cast<uint_type>(significand << 1);
+    }
+    significand &= fraction_encode_mask;
+    return significand;
+  }
+
+  // Returns true if this number represents a negative value.
+  bool isNegative() const { return (getBits() & sign_mask) != 0; }
+
+  // Sets this HexFloat from the individual components.
+  // Note this assumes EVERY significand is normalized, and has an implicit
+  // leading one. This means that the only way that this method will set 0,
+  // is if you set a number so denormalized that it underflows.
+  // Do not use this method with raw bits extracted from a subnormal number,
+  // since subnormals do not have an implicit leading 1 in the significand.
+  // The significand is also expected to be in the
+  // lowest-most num_fraction_bits of the uint_type.
+  // The exponent is expected to be unbiased, meaning an exponent of
+  // 0 actually means 0.
+  // If underflow_round_up is set, then on underflow, if a number is non-0
+  // and would underflow, we round up to the smallest denorm.
+  void setFromSignUnbiasedExponentAndNormalizedSignificand(
+      bool negative, int_type exponent, uint_type significand,
+      bool round_denorm_up) {
+    bool significand_is_zero = significand == 0;
+
+    if (exponent <= min_exponent) {
+      // If this was denormalized, then we have to shift the bit on, meaning
+      // the significand is not zero.
+      significand_is_zero = false;
+      significand |= first_exponent_bit;
+      significand = static_cast<uint_type>(significand >> 1);
+    }
+
+    while (exponent < min_exponent) {
+      significand = static_cast<uint_type>(significand >> 1);
+      ++exponent;
+    }
+
+    if (exponent == min_exponent) {
+      if (significand == 0 && !significand_is_zero && round_denorm_up) {
+        significand = static_cast<uint_type>(0x1);
+      }
+    }
+
+    uint_type new_value = 0;
+    if (negative) {
+      new_value = static_cast<uint_type>(new_value | sign_mask);
+    }
+    exponent = static_cast<int_type>(exponent + exponent_bias);
+    assert(exponent >= 0);
+
+    // put it all together
+    exponent = static_cast<uint_type>((exponent << exponent_left_shift) &
+                                      exponent_mask);
+    significand = static_cast<uint_type>(significand & fraction_encode_mask);
+    new_value = static_cast<uint_type>(new_value | (exponent | significand));
+    value_ = BitwiseCast<T>(new_value);
+  }
+
+  // Increments the significand of this number by the given amount.
+  // If this would spill the significand into the implicit bit,
+  // carry is set to true and the significand is shifted to fit into
+  // the correct location, otherwise carry is set to false.
+  // All significands and to_increment are assumed to be within the bounds
+  // for a valid significand.
+  static uint_type incrementSignificand(uint_type significand,
+                                        uint_type to_increment, bool* carry) {
+    significand = static_cast<uint_type>(significand + to_increment);
+    *carry = false;
+    if (significand & first_exponent_bit) {
+      *carry = true;
+      // The implicit 1-bit will have carried, so we should zero-out the
+      // top bit and shift back.
+      significand = static_cast<uint_type>(significand & ~first_exponent_bit);
+      significand = static_cast<uint_type>(significand >> 1);
+    }
+    return significand;
+  }
+
+  // These exist because MSVC throws warnings on negative right-shifts
+  // even if they are not going to be executed. Eg:
+  // constant_number < 0? 0: constant_number
+  // These convert the negative left-shifts into right shifts.
+
+  template <typename int_type>
+  uint_type negatable_left_shift(int_type N, uint_type val)
+  {
+    if(N >= 0)
+      return val << N;
+
+    return val >> -N;
+  }
+
+  template <typename int_type>
+  uint_type negatable_right_shift(int_type N, uint_type val)
+  {
+    if(N >= 0)
+      return val >> N;
+
+    return val << -N;
+  }
+
+  // Returns the significand, rounded to fit in a significand in
+  // other_T. This is shifted so that the most significant
+  // bit of the rounded number lines up with the most significant bit
+  // of the returned significand.
+  template <typename other_T>
+  typename other_T::uint_type getRoundedNormalizedSignificand(
+      round_direction dir, bool* carry_bit) {
+    typedef typename other_T::uint_type other_uint_type;
+    static const int_type num_throwaway_bits =
+        static_cast<int_type>(num_fraction_bits) -
+        static_cast<int_type>(other_T::num_fraction_bits);
+
+    static const uint_type last_significant_bit =
+        (num_throwaway_bits < 0)
+            ? 0
+            : negatable_left_shift(num_throwaway_bits, 1u);
+    static const uint_type first_rounded_bit =
+        (num_throwaway_bits < 1)
+            ? 0
+            : negatable_left_shift(num_throwaway_bits - 1, 1u);
+
+    static const uint_type throwaway_mask_bits =
+        num_throwaway_bits > 0 ? num_throwaway_bits : 0;
+    static const uint_type throwaway_mask =
+        spvutils::SetBits<uint_type, 0, throwaway_mask_bits>::get;
+
+    *carry_bit = false;
+    other_uint_type out_val = 0;
+    uint_type significand = getNormalizedSignificand();
+    // If we are up-casting, then we just have to shift to the right location.
+    if (num_throwaway_bits <= 0) {
+      out_val = static_cast<other_uint_type>(significand);
+      uint_type shift_amount = static_cast<uint_type>(-num_throwaway_bits);
+      out_val = static_cast<other_uint_type>(out_val << shift_amount);
+      return out_val;
+    }
+
+    // If every non-representable bit is 0, then we don't have any casting to
+    // do.
+    if ((significand & throwaway_mask) == 0) {
+      return static_cast<other_uint_type>(
+          negatable_right_shift(num_throwaway_bits, significand));
+    }
+
+    bool round_away_from_zero = false;
+    // We actually have to narrow the significand here, so we have to follow the
+    // rounding rules.
+    switch (dir) {
+      case kRoundToZero:
+        break;
+      case kRoundToPositiveInfinity:
+        round_away_from_zero = !isNegative();
+        break;
+      case kRoundToNegativeInfinity:
+        round_away_from_zero = isNegative();
+        break;
+      case kRoundToNearestEven:
+        // Have to round down, round bit is 0
+        if ((first_rounded_bit & significand) == 0) {
+          break;
+        }
+        if (((significand & throwaway_mask) & ~first_rounded_bit) != 0) {
+          // If any subsequent bit of the rounded portion is non-0 then we round
+          // up.
+          round_away_from_zero = true;
+          break;
+        }
+        // We are exactly half-way between 2 numbers, pick even.
+        if ((significand & last_significant_bit) != 0) {
+          // 1 for our last bit, round up.
+          round_away_from_zero = true;
+          break;
+        }
+        break;
+    }
+
+    if (round_away_from_zero) {
+      return static_cast<other_uint_type>(
+          negatable_right_shift(num_throwaway_bits, incrementSignificand(
+              significand, last_significant_bit, carry_bit)));
+    } else {
+      return static_cast<other_uint_type>(
+          negatable_right_shift(num_throwaway_bits, significand));
+    }
+  }
+
+  // Casts this value to another HexFloat. If the cast is widening,
+  // then round_dir is ignored. If the cast is narrowing, then
+  // the result is rounded in the direction specified.
+  // This number will retain Nan and Inf values.
+  // It will also saturate to Inf if the number overflows, and
+  // underflow to (0 or min depending on rounding) if the number underflows.
+  template <typename other_T>
+  void castTo(other_T& other, round_direction round_dir) {
+    other = other_T(static_cast<typename other_T::native_type>(0));
+    bool negate = isNegative();
+    if (getUnsignedBits() == 0) {
+      if (negate) {
+        other.set_value(-other.value());
+      }
+      return;
+    }
+    uint_type significand = getSignificandBits();
+    bool carried = false;
+    typename other_T::uint_type rounded_significand =
+        getRoundedNormalizedSignificand<other_T>(round_dir, &carried);
+
+    int_type exponent = getUnbiasedExponent();
+    if (exponent == min_exponent) {
+      // If we are denormal, normalize the exponent, so that we can encode
+      // easily.
+      exponent = static_cast<int_type>(exponent + 1);
+      for (uint_type check_bit = first_exponent_bit >> 1; check_bit != 0;
+           check_bit = static_cast<uint_type>(check_bit >> 1)) {
+        exponent = static_cast<int_type>(exponent - 1);
+        if (check_bit & significand) break;
+      }
+    }
+
+    bool is_nan =
+        (getBits() & exponent_mask) == exponent_mask && significand != 0;
+    bool is_inf =
+        !is_nan &&
+        ((exponent + carried) > static_cast<int_type>(other_T::exponent_bias) ||
+         (significand == 0 && (getBits() & exponent_mask) == exponent_mask));
+
+    // If we are Nan or Inf we should pass that through.
+    if (is_inf) {
+      other.set_value(BitwiseCast<typename other_T::underlying_type>(
+          static_cast<typename other_T::uint_type>(
+              (negate ? other_T::sign_mask : 0) | other_T::exponent_mask)));
+      return;
+    }
+    if (is_nan) {
+      typename other_T::uint_type shifted_significand;
+      shifted_significand = static_cast<typename other_T::uint_type>(
+          negatable_left_shift(
+              static_cast<int_type>(other_T::num_fraction_bits) -
+              static_cast<int_type>(num_fraction_bits), significand));
+
+      // We are some sort of Nan. We try to keep the bit-pattern of the Nan
+      // as close as possible. If we had to shift off bits so we are 0, then we
+      // just set the last bit.
+      other.set_value(BitwiseCast<typename other_T::underlying_type>(
+          static_cast<typename other_T::uint_type>(
+              (negate ? other_T::sign_mask : 0) | other_T::exponent_mask |
+              (shifted_significand == 0 ? 0x1 : shifted_significand))));
+      return;
+    }
+
+    bool round_underflow_up =
+        isNegative() ? round_dir == kRoundToNegativeInfinity
+                     : round_dir == kRoundToPositiveInfinity;
+    typedef typename other_T::int_type other_int_type;
+    // setFromSignUnbiasedExponentAndNormalizedSignificand will
+    // zero out any underflowing value (but retain the sign).
+    other.setFromSignUnbiasedExponentAndNormalizedSignificand(
+        negate, static_cast<other_int_type>(exponent), rounded_significand,
+        round_underflow_up);
+    return;
+  }
+
+ private:
+  T value_;
+
+  static_assert(num_used_bits ==
+                    Traits::num_exponent_bits + Traits::num_fraction_bits + 1,
+                "The number of bits do not fit");
+  static_assert(sizeof(T) == sizeof(uint_type), "The type sizes do not match");
+};
+
+// Returns 4 bits represented by the hex character.
+inline uint8_t get_nibble_from_character(int character) {
+  const char* dec = "0123456789";
+  const char* lower = "abcdef";
+  const char* upper = "ABCDEF";
+  const char* p = nullptr;
+  if ((p = strchr(dec, character))) {
+    return static_cast<uint8_t>(p - dec);
+  } else if ((p = strchr(lower, character))) {
+    return static_cast<uint8_t>(p - lower + 0xa);
+  } else if ((p = strchr(upper, character))) {
+    return static_cast<uint8_t>(p - upper + 0xa);
+  }
+
+  assert(false && "This was called with a non-hex character");
+  return 0;
+}
+
+// Outputs the given HexFloat to the stream.
+template <typename T, typename Traits>
+std::ostream& operator<<(std::ostream& os, const HexFloat<T, Traits>& value) {
+  typedef HexFloat<T, Traits> HF;
+  typedef typename HF::uint_type uint_type;
+  typedef typename HF::int_type int_type;
+
+  static_assert(HF::num_used_bits != 0,
+                "num_used_bits must be non-zero for a valid float");
+  static_assert(HF::num_exponent_bits != 0,
+                "num_exponent_bits must be non-zero for a valid float");
+  static_assert(HF::num_fraction_bits != 0,
+                "num_fractin_bits must be non-zero for a valid float");
+
+  const uint_type bits = spvutils::BitwiseCast<uint_type>(value.value());
+  const char* const sign = (bits & HF::sign_mask) ? "-" : "";
+  const uint_type exponent = static_cast<uint_type>(
+      (bits & HF::exponent_mask) >> HF::num_fraction_bits);
+
+  uint_type fraction = static_cast<uint_type>((bits & HF::fraction_encode_mask)
+                                              << HF::num_overflow_bits);
+
+  const bool is_zero = exponent == 0 && fraction == 0;
+  const bool is_denorm = exponent == 0 && !is_zero;
+
+  // exponent contains the biased exponent we have to convert it back into
+  // the normal range.
+  int_type int_exponent = static_cast<int_type>(exponent - HF::exponent_bias);
+  // If the number is all zeros, then we actually have to NOT shift the
+  // exponent.
+  int_exponent = is_zero ? 0 : int_exponent;
+
+  // If we are denorm, then start shifting, and decreasing the exponent until
+  // our leading bit is 1.
+
+  if (is_denorm) {
+    while ((fraction & HF::fraction_top_bit) == 0) {
+      fraction = static_cast<uint_type>(fraction << 1);
+      int_exponent = static_cast<int_type>(int_exponent - 1);
+    }
+    // Since this is denormalized, we have to consume the leading 1 since it
+    // will end up being implicit.
+    fraction = static_cast<uint_type>(fraction << 1);  // eat the leading 1
+    fraction &= HF::fraction_represent_mask;
+  }
+
+  uint_type fraction_nibbles = HF::fraction_nibbles;
+  // We do not have to display any trailing 0s, since this represents the
+  // fractional part.
+  while (fraction_nibbles > 0 && (fraction & 0xF) == 0) {
+    // Shift off any trailing values;
+    fraction = static_cast<uint_type>(fraction >> 4);
+    --fraction_nibbles;
+  }
+
+  const auto saved_flags = os.flags();
+  const auto saved_fill = os.fill();
+
+  os << sign << "0x" << (is_zero ? '0' : '1');
+  if (fraction_nibbles) {
+    // Make sure to keep the leading 0s in place, since this is the fractional
+    // part.
+    os << "." << std::setw(static_cast<int>(fraction_nibbles))
+       << std::setfill('0') << std::hex << fraction;
+  }
+  os << "p" << std::dec << (int_exponent >= 0 ? "+" : "") << int_exponent;
+
+  os.flags(saved_flags);
+  os.fill(saved_fill);
+
+  return os;
+}
+
+// Returns true if negate_value is true and the next character on the
+// input stream is a plus or minus sign.  In that case we also set the fail bit
+// on the stream and set the value to the zero value for its type.
+template <typename T, typename Traits>
+inline bool RejectParseDueToLeadingSign(std::istream& is, bool negate_value,
+                                        HexFloat<T, Traits>& value) {
+  if (negate_value) {
+    auto next_char = is.peek();
+    if (next_char == '-' || next_char == '+') {
+      // Fail the parse.  Emulate standard behaviour by setting the value to
+      // the zero value, and set the fail bit on the stream.
+      value = HexFloat<T, Traits>(typename HexFloat<T, Traits>::uint_type(0));
+      is.setstate(std::ios_base::failbit);
+      return true;
+    }
+  }
+  return false;
+}
+
+// Parses a floating point number from the given stream and stores it into the
+// value parameter.
+// If negate_value is true then the number may not have a leading minus or
+// plus, and if it successfully parses, then the number is negated before
+// being stored into the value parameter.
+// If the value cannot be correctly parsed or overflows the target floating
+// point type, then set the fail bit on the stream.
+// TODO(dneto): Promise C++11 standard behavior in how the value is set in
+// the error case, but only after all target platforms implement it correctly.
+// In particular, the Microsoft C++ runtime appears to be out of spec.
+template <typename T, typename Traits>
+inline std::istream& ParseNormalFloat(std::istream& is, bool negate_value,
+                                      HexFloat<T, Traits>& value) {
+  if (RejectParseDueToLeadingSign(is, negate_value, value)) {
+    return is;
+  }
+  T val;
+  is >> val;
+  if (negate_value) {
+    val = -val;
+  }
+  value.set_value(val);
+  // In the failure case, map -0.0 to 0.0.
+  if (is.fail() && value.getUnsignedBits() == 0u) {
+    value = HexFloat<T, Traits>(typename HexFloat<T, Traits>::uint_type(0));
+  }
+  if (val.isInfinity()) {
+    // Fail the parse.  Emulate standard behaviour by setting the value to
+    // the closest normal value, and set the fail bit on the stream.
+    value.set_value((value.isNegative() | negate_value) ? T::lowest()
+                                                        : T::max());
+    is.setstate(std::ios_base::failbit);
+  }
+  return is;
+}
+
+// Specialization of ParseNormalFloat for FloatProxy<Float16> values.
+// This will parse the float as it were a 32-bit floating point number,
+// and then round it down to fit into a Float16 value.
+// The number is rounded towards zero.
+// If negate_value is true then the number may not have a leading minus or
+// plus, and if it successfully parses, then the number is negated before
+// being stored into the value parameter.
+// If the value cannot be correctly parsed or overflows the target floating
+// point type, then set the fail bit on the stream.
+// TODO(dneto): Promise C++11 standard behavior in how the value is set in
+// the error case, but only after all target platforms implement it correctly.
+// In particular, the Microsoft C++ runtime appears to be out of spec.
+template <>
+inline std::istream&
+ParseNormalFloat<FloatProxy<Float16>, HexFloatTraits<FloatProxy<Float16>>>(
+    std::istream& is, bool negate_value,
+    HexFloat<FloatProxy<Float16>, HexFloatTraits<FloatProxy<Float16>>>& value) {
+  // First parse as a 32-bit float.
+  HexFloat<FloatProxy<float>> float_val(0.0f);
+  ParseNormalFloat(is, negate_value, float_val);
+
+  // Then convert to 16-bit float, saturating at infinities, and
+  // rounding toward zero.
+  float_val.castTo(value, kRoundToZero);
+
+  // Overflow on 16-bit behaves the same as for 32- and 64-bit: set the
+  // fail bit and set the lowest or highest value.
+  if (Float16::isInfinity(value.value().getAsFloat())) {
+    value.set_value(value.isNegative() ? Float16::lowest() : Float16::max());
+    is.setstate(std::ios_base::failbit);
+  }
+  return is;
+}
+
+// Reads a HexFloat from the given stream.
+// If the float is not encoded as a hex-float then it will be parsed
+// as a regular float.
+// This may fail if your stream does not support at least one unget.
+// Nan values can be encoded with "0x1.<not zero>p+exponent_bias".
+// This would normally overflow a float and round to
+// infinity but this special pattern is the exact representation for a NaN,
+// and therefore is actually encoded as the correct NaN. To encode inf,
+// either 0x0p+exponent_bias can be specified or any exponent greater than
+// exponent_bias.
+// Examples using IEEE 32-bit float encoding.
+//    0x1.0p+128 (+inf)
+//    -0x1.0p-128 (-inf)
+//
+//    0x1.1p+128 (+Nan)
+//    -0x1.1p+128 (-Nan)
+//
+//    0x1p+129 (+inf)
+//    -0x1p+129 (-inf)
+template <typename T, typename Traits>
+std::istream& operator>>(std::istream& is, HexFloat<T, Traits>& value) {
+  using HF = HexFloat<T, Traits>;
+  using uint_type = typename HF::uint_type;
+  using int_type = typename HF::int_type;
+
+  value.set_value(static_cast<typename HF::native_type>(0.f));
+
+  if (is.flags() & std::ios::skipws) {
+    // If the user wants to skip whitespace , then we should obey that.
+    while (std::isspace(is.peek())) {
+      is.get();
+    }
+  }
+
+  auto next_char = is.peek();
+  bool negate_value = false;
+
+  if (next_char != '-' && next_char != '0') {
+    return ParseNormalFloat(is, negate_value, value);
+  }
+
+  if (next_char == '-') {
+    negate_value = true;
+    is.get();
+    next_char = is.peek();
+  }
+
+  if (next_char == '0') {
+    is.get();  // We may have to unget this.
+    auto maybe_hex_start = is.peek();
+    if (maybe_hex_start != 'x' && maybe_hex_start != 'X') {
+      is.unget();
+      return ParseNormalFloat(is, negate_value, value);
+    } else {
+      is.get();  // Throw away the 'x';
+    }
+  } else {
+    return ParseNormalFloat(is, negate_value, value);
+  }
+
+  // This "looks" like a hex-float so treat it as one.
+  bool seen_p = false;
+  bool seen_dot = false;
+  uint_type fraction_index = 0;
+
+  uint_type fraction = 0;
+  int_type exponent = HF::exponent_bias;
+
+  // Strip off leading zeros so we don't have to special-case them later.
+  while ((next_char = is.peek()) == '0') {
+    is.get();
+  }
+
+  bool is_denorm =
+      true;  // Assume denorm "representation" until we hear otherwise.
+             // NB: This does not mean the value is actually denorm,
+             // it just means that it was written 0.
+  bool bits_written = false;  // Stays false until we write a bit.
+  while (!seen_p && !seen_dot) {
+    // Handle characters that are left of the fractional part.
+    if (next_char == '.') {
+      seen_dot = true;
+    } else if (next_char == 'p') {
+      seen_p = true;
+    } else if (::isxdigit(next_char)) {
+      // We know this is not denormalized since we have stripped all leading
+      // zeroes and we are not a ".".
+      is_denorm = false;
+      int number = get_nibble_from_character(next_char);
+      for (int i = 0; i < 4; ++i, number <<= 1) {
+        uint_type write_bit = (number & 0x8) ? 0x1 : 0x0;
+        if (bits_written) {
+          // If we are here the bits represented belong in the fractional
+          // part of the float, and we have to adjust the exponent accordingly.
+          fraction = static_cast<uint_type>(
+              fraction |
+              static_cast<uint_type>(
+                  write_bit << (HF::top_bit_left_shift - fraction_index++)));
+          exponent = static_cast<int_type>(exponent + 1);
+        }
+        bits_written |= write_bit != 0;
+      }
+    } else {
+      // We have not found our exponent yet, so we have to fail.
+      is.setstate(std::ios::failbit);
+      return is;
+    }
+    is.get();
+    next_char = is.peek();
+  }
+  bits_written = false;
+  while (seen_dot && !seen_p) {
+    // Handle only fractional parts now.
+    if (next_char == 'p') {
+      seen_p = true;
+    } else if (::isxdigit(next_char)) {
+      int number = get_nibble_from_character(next_char);
+      for (int i = 0; i < 4; ++i, number <<= 1) {
+        uint_type write_bit = (number & 0x8) ? 0x01 : 0x00;
+        bits_written |= write_bit != 0;
+        if (is_denorm && !bits_written) {
+          // Handle modifying the exponent here this way we can handle
+          // an arbitrary number of hex values without overflowing our
+          // integer.
+          exponent = static_cast<int_type>(exponent - 1);
+        } else {
+          fraction = static_cast<uint_type>(
+              fraction |
+              static_cast<uint_type>(
+                  write_bit << (HF::top_bit_left_shift - fraction_index++)));
+        }
+      }
+    } else {
+      // We still have not found our 'p' exponent yet, so this is not a valid
+      // hex-float.
+      is.setstate(std::ios::failbit);
+      return is;
+    }
+    is.get();
+    next_char = is.peek();
+  }
+
+  bool seen_sign = false;
+  int8_t exponent_sign = 1;
+  int_type written_exponent = 0;
+  while (true) {
+    if ((next_char == '-' || next_char == '+')) {
+      if (seen_sign) {
+        is.setstate(std::ios::failbit);
+        return is;
+      }
+      seen_sign = true;
+      exponent_sign = (next_char == '-') ? -1 : 1;
+    } else if (::isdigit(next_char)) {
+      // Hex-floats express their exponent as decimal.
+      written_exponent = static_cast<int_type>(written_exponent * 10);
+      written_exponent =
+          static_cast<int_type>(written_exponent + (next_char - '0'));
+    } else {
+      break;
+    }
+    is.get();
+    next_char = is.peek();
+  }
+
+  written_exponent = static_cast<int_type>(written_exponent * exponent_sign);
+  exponent = static_cast<int_type>(exponent + written_exponent);
+
+  bool is_zero = is_denorm && (fraction == 0);
+  if (is_denorm && !is_zero) {
+    fraction = static_cast<uint_type>(fraction << 1);
+    exponent = static_cast<int_type>(exponent - 1);
+  } else if (is_zero) {
+    exponent = 0;
+  }
+
+  if (exponent <= 0 && !is_zero) {
+    fraction = static_cast<uint_type>(fraction >> 1);
+    fraction |= static_cast<uint_type>(1) << HF::top_bit_left_shift;
+  }
+
+  fraction = (fraction >> HF::fraction_right_shift) & HF::fraction_encode_mask;
+
+  const int_type max_exponent =
+      SetBits<uint_type, 0, HF::num_exponent_bits>::get;
+
+  // Handle actual denorm numbers
+  while (exponent < 0 && !is_zero) {
+    fraction = static_cast<uint_type>(fraction >> 1);
+    exponent = static_cast<int_type>(exponent + 1);
+
+    fraction &= HF::fraction_encode_mask;
+    if (fraction == 0) {
+      // We have underflowed our fraction. We should clamp to zero.
+      is_zero = true;
+      exponent = 0;
+    }
+  }
+
+  // We have overflowed so we should be inf/-inf.
+  if (exponent > max_exponent) {
+    exponent = max_exponent;
+    fraction = 0;
+  }
+
+  uint_type output_bits = static_cast<uint_type>(
+      static_cast<uint_type>(negate_value ? 1 : 0) << HF::top_bit_left_shift);
+  output_bits |= fraction;
+
+  uint_type shifted_exponent = static_cast<uint_type>(
+      static_cast<uint_type>(exponent << HF::exponent_left_shift) &
+      HF::exponent_mask);
+  output_bits |= shifted_exponent;
+
+  T output_float = spvutils::BitwiseCast<T>(output_bits);
+  value.set_value(output_float);
+
+  return is;
+}
+
+// Writes a FloatProxy value to a stream.
+// Zero and normal numbers are printed in the usual notation, but with
+// enough digits to fully reproduce the value.  Other values (subnormal,
+// NaN, and infinity) are printed as a hex float.
+template <typename T>
+std::ostream& operator<<(std::ostream& os, const FloatProxy<T>& value) {
+  auto float_val = value.getAsFloat();
+  switch (std::fpclassify(float_val)) {
+    case FP_ZERO:
+    case FP_NORMAL: {
+      auto saved_precision = os.precision();
+      os.precision(std::numeric_limits<T>::digits10);
+      os << float_val;
+      os.precision(saved_precision);
+    } break;
+    default:
+      os << HexFloat<FloatProxy<T>>(value);
+      break;
+  }
+  return os;
+}
+
+template <>
+inline std::ostream& operator<<<Float16>(std::ostream& os,
+                                         const FloatProxy<Float16>& value) {
+  os << HexFloat<FloatProxy<Float16>>(value);
+  return os;
+}
+}
+
+#endif  // LIBSPIRV_UTIL_HEX_FLOAT_H_
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index e3d134257f2de217b77953f59c11aa88b5f9ab9d..bb3c3f4c76bf0dd4671a97d0f144b76af3cf5e91 100755
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -47,11 +47,11 @@ namespace spv {
 typedef unsigned int Id;
 
 #define SPV_VERSION 0x10000
-#define SPV_REVISION 6
+#define SPV_REVISION 8
 
 static const unsigned int MagicNumber = 0x07230203;
 static const unsigned int Version = 0x00010000;
-static const unsigned int Revision = 6;
+static const unsigned int Revision = 8;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -420,6 +420,14 @@ enum BuiltIn {
     BuiltInSubgroupLocalInvocationId = 41,
     BuiltInVertexIndex = 42,
     BuiltInInstanceIndex = 43,
+    BuiltInSubgroupEqMaskKHR = 4416,
+    BuiltInSubgroupGeMaskKHR = 4417,
+    BuiltInSubgroupGtMaskKHR = 4418,
+    BuiltInSubgroupLeMaskKHR = 4419,
+    BuiltInSubgroupLtMaskKHR = 4420,
+    BuiltInBaseVertex = 4424,
+    BuiltInBaseInstance = 4425,
+    BuiltInDrawIndex = 4426,
     BuiltInMax = 0x7fffffff,
 };
 
@@ -595,6 +603,8 @@ enum Capability {
     CapabilityStorageImageReadWithoutFormat = 55,
     CapabilityStorageImageWriteWithoutFormat = 56,
     CapabilityMultiViewport = 57,
+    CapabilitySubgroupBallotKHR = 4423,
+    CapabilityDrawParameters = 4427,
     CapabilityMax = 0x7fffffff,
 };
 
@@ -893,6 +903,8 @@ enum Op {
     OpAtomicFlagTestAndSet = 318,
     OpAtomicFlagClear = 319,
     OpImageSparseRead = 320,
+    OpSubgroupBallotKHR = 4421,
+    OpSubgroupFirstInvocationKHR = 4422,
     OpMax = 0x7fffffff,
 };
 
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 8a5e6f37ae1dcde24367066f20152daf2c96383b..e22ec8015c6becdc9c3327d1b765f6c81d498145 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -35,6 +35,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <sstream>
+#include <cctype>
 
 #include "ResourceLimits.h"
 
@@ -240,208 +241,217 @@ std::string GetDefaultTBuiltInResourceString()
 
 void DecodeResourceLimits(TBuiltInResource* resources, char* config)
 {
-    const char* delims = " \t\n\r";
-#pragma warning(suppress: 4996)
-    const char* token = strtok(config, delims);
-    while (token) {
-#pragma warning(suppress: 4996)
-        const char* valueStr = strtok(0, delims);
-        if (valueStr == 0 || ! (valueStr[0] == '-' || (valueStr[0] >= '0' && valueStr[0] <= '9'))) {
-            printf("Error: '%s' bad .conf file.  Each name must be followed by one number.\n", valueStr ? valueStr : "");
+    static const char* delims = " \t\n\r";
+
+    size_t pos     = 0;
+    std::string configStr(config);
+
+    while ((pos = configStr.find_first_not_of(delims, pos)) != std::string::npos) {
+        const size_t token_s = pos;
+        const size_t token_e = configStr.find_first_of(delims, token_s);
+        const size_t value_s = configStr.find_first_not_of(delims, token_e);
+        const size_t value_e = configStr.find_first_of(delims, value_s);
+        pos = value_e;
+
+        // Faster to use compare(), but prefering readability.
+        const std::string tokenStr = configStr.substr(token_s, token_e-token_s);
+        const std::string valueStr = configStr.substr(value_s, value_e-value_s);
+
+        if (value_s == std::string::npos || ! (valueStr[0] == '-' || isdigit(valueStr[0]))) {
+            printf("Error: '%s' bad .conf file.  Each name must be followed by one number.\n",
+                   valueStr.c_str());
             return;
         }
-        int value = atoi(valueStr);
 
-        if (strcmp(token, "MaxLights") == 0)
+        const int value = std::atoi(valueStr.c_str());
+
+        if (tokenStr == "MaxLights")
             resources->maxLights = value;
-        else if (strcmp(token, "MaxClipPlanes") == 0)
+        else if (tokenStr == "MaxClipPlanes")
             resources->maxClipPlanes = value;
-        else if (strcmp(token, "MaxTextureUnits") == 0)
+        else if (tokenStr == "MaxTextureUnits")
             resources->maxTextureUnits = value;
-        else if (strcmp(token, "MaxTextureCoords") == 0)
+        else if (tokenStr == "MaxTextureCoords")
             resources->maxTextureCoords = value;
-        else if (strcmp(token, "MaxVertexAttribs") == 0)
+        else if (tokenStr == "MaxVertexAttribs")
             resources->maxVertexAttribs = value;
-        else if (strcmp(token, "MaxVertexUniformComponents") == 0)
+        else if (tokenStr == "MaxVertexUniformComponents")
             resources->maxVertexUniformComponents = value;
-        else if (strcmp(token, "MaxVaryingFloats") == 0)
+        else if (tokenStr == "MaxVaryingFloats")
             resources->maxVaryingFloats = value;
-        else if (strcmp(token, "MaxVertexTextureImageUnits") == 0)
+        else if (tokenStr == "MaxVertexTextureImageUnits")
             resources->maxVertexTextureImageUnits = value;
-        else if (strcmp(token, "MaxCombinedTextureImageUnits") == 0)
+        else if (tokenStr == "MaxCombinedTextureImageUnits")
             resources->maxCombinedTextureImageUnits = value;
-        else if (strcmp(token, "MaxTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTextureImageUnits")
             resources->maxTextureImageUnits = value;
-        else if (strcmp(token, "MaxFragmentUniformComponents") == 0)
+        else if (tokenStr == "MaxFragmentUniformComponents")
             resources->maxFragmentUniformComponents = value;
-        else if (strcmp(token, "MaxDrawBuffers") == 0)
+        else if (tokenStr == "MaxDrawBuffers")
             resources->maxDrawBuffers = value;
-        else if (strcmp(token, "MaxVertexUniformVectors") == 0)
+        else if (tokenStr == "MaxVertexUniformVectors")
             resources->maxVertexUniformVectors = value;
-        else if (strcmp(token, "MaxVaryingVectors") == 0)
+        else if (tokenStr == "MaxVaryingVectors")
             resources->maxVaryingVectors = value;
-        else if (strcmp(token, "MaxFragmentUniformVectors") == 0)
+        else if (tokenStr == "MaxFragmentUniformVectors")
             resources->maxFragmentUniformVectors = value;
-        else if (strcmp(token, "MaxVertexOutputVectors") == 0)
+        else if (tokenStr == "MaxVertexOutputVectors")
             resources->maxVertexOutputVectors = value;
-        else if (strcmp(token, "MaxFragmentInputVectors") == 0)
+        else if (tokenStr == "MaxFragmentInputVectors")
             resources->maxFragmentInputVectors = value;
-        else if (strcmp(token, "MinProgramTexelOffset") == 0)
+        else if (tokenStr == "MinProgramTexelOffset")
             resources->minProgramTexelOffset = value;
-        else if (strcmp(token, "MaxProgramTexelOffset") == 0)
+        else if (tokenStr == "MaxProgramTexelOffset")
             resources->maxProgramTexelOffset = value;
-        else if (strcmp(token, "MaxClipDistances") == 0)
+        else if (tokenStr == "MaxClipDistances")
             resources->maxClipDistances = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountX") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountX")
             resources->maxComputeWorkGroupCountX = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountY") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountY")
             resources->maxComputeWorkGroupCountY = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountZ") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountZ")
             resources->maxComputeWorkGroupCountZ = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeX") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeX")
             resources->maxComputeWorkGroupSizeX = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeY") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeY")
             resources->maxComputeWorkGroupSizeY = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeZ") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeZ")
             resources->maxComputeWorkGroupSizeZ = value;
-        else if (strcmp(token, "MaxComputeUniformComponents") == 0)
+        else if (tokenStr == "MaxComputeUniformComponents")
             resources->maxComputeUniformComponents = value;
-        else if (strcmp(token, "MaxComputeTextureImageUnits") == 0)
+        else if (tokenStr == "MaxComputeTextureImageUnits")
             resources->maxComputeTextureImageUnits = value;
-        else if (strcmp(token, "MaxComputeImageUniforms") == 0)
+        else if (tokenStr == "MaxComputeImageUniforms")
             resources->maxComputeImageUniforms = value;
-        else if (strcmp(token, "MaxComputeAtomicCounters") == 0)
+        else if (tokenStr == "MaxComputeAtomicCounters")
             resources->maxComputeAtomicCounters = value;
-        else if (strcmp(token, "MaxComputeAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxComputeAtomicCounterBuffers")
             resources->maxComputeAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxVaryingComponents") == 0)
+        else if (tokenStr == "MaxVaryingComponents")
             resources->maxVaryingComponents = value;
-        else if (strcmp(token, "MaxVertexOutputComponents") == 0)
+        else if (tokenStr == "MaxVertexOutputComponents")
             resources->maxVertexOutputComponents = value;
-        else if (strcmp(token, "MaxGeometryInputComponents") == 0)
+        else if (tokenStr == "MaxGeometryInputComponents")
             resources->maxGeometryInputComponents = value;
-        else if (strcmp(token, "MaxGeometryOutputComponents") == 0)
+        else if (tokenStr == "MaxGeometryOutputComponents")
             resources->maxGeometryOutputComponents = value;
-        else if (strcmp(token, "MaxFragmentInputComponents") == 0)
+        else if (tokenStr == "MaxFragmentInputComponents")
             resources->maxFragmentInputComponents = value;
-        else if (strcmp(token, "MaxImageUnits") == 0)
+        else if (tokenStr == "MaxImageUnits")
             resources->maxImageUnits = value;
-        else if (strcmp(token, "MaxCombinedImageUnitsAndFragmentOutputs") == 0)
+        else if (tokenStr == "MaxCombinedImageUnitsAndFragmentOutputs")
             resources->maxCombinedImageUnitsAndFragmentOutputs = value;
-        else if (strcmp(token, "MaxCombinedShaderOutputResources") == 0)
+        else if (tokenStr == "MaxCombinedShaderOutputResources")
             resources->maxCombinedShaderOutputResources = value;
-        else if (strcmp(token, "MaxImageSamples") == 0)
+        else if (tokenStr == "MaxImageSamples")
             resources->maxImageSamples = value;
-        else if (strcmp(token, "MaxVertexImageUniforms") == 0)
+        else if (tokenStr == "MaxVertexImageUniforms")
             resources->maxVertexImageUniforms = value;
-        else if (strcmp(token, "MaxTessControlImageUniforms") == 0)
+        else if (tokenStr == "MaxTessControlImageUniforms")
             resources->maxTessControlImageUniforms = value;
-        else if (strcmp(token, "MaxTessEvaluationImageUniforms") == 0)
+        else if (tokenStr == "MaxTessEvaluationImageUniforms")
             resources->maxTessEvaluationImageUniforms = value;
-        else if (strcmp(token, "MaxGeometryImageUniforms") == 0)
+        else if (tokenStr == "MaxGeometryImageUniforms")
             resources->maxGeometryImageUniforms = value;
-        else if (strcmp(token, "MaxFragmentImageUniforms") == 0)
+        else if (tokenStr == "MaxFragmentImageUniforms")
             resources->maxFragmentImageUniforms = value;
-        else if (strcmp(token, "MaxCombinedImageUniforms") == 0)
+        else if (tokenStr == "MaxCombinedImageUniforms")
             resources->maxCombinedImageUniforms = value;
-        else if (strcmp(token, "MaxGeometryTextureImageUnits") == 0)
+        else if (tokenStr == "MaxGeometryTextureImageUnits")
             resources->maxGeometryTextureImageUnits = value;
-        else if (strcmp(token, "MaxGeometryOutputVertices") == 0)
+        else if (tokenStr == "MaxGeometryOutputVertices")
             resources->maxGeometryOutputVertices = value;
-        else if (strcmp(token, "MaxGeometryTotalOutputComponents") == 0)
+        else if (tokenStr == "MaxGeometryTotalOutputComponents")
             resources->maxGeometryTotalOutputComponents = value;
-        else if (strcmp(token, "MaxGeometryUniformComponents") == 0)
+        else if (tokenStr == "MaxGeometryUniformComponents")
             resources->maxGeometryUniformComponents = value;
-        else if (strcmp(token, "MaxGeometryVaryingComponents") == 0)
+        else if (tokenStr == "MaxGeometryVaryingComponents")
             resources->maxGeometryVaryingComponents = value;
-        else if (strcmp(token, "MaxTessControlInputComponents") == 0)
+        else if (tokenStr == "MaxTessControlInputComponents")
             resources->maxTessControlInputComponents = value;
-        else if (strcmp(token, "MaxTessControlOutputComponents") == 0)
+        else if (tokenStr == "MaxTessControlOutputComponents")
             resources->maxTessControlOutputComponents = value;
-        else if (strcmp(token, "MaxTessControlTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTessControlTextureImageUnits")
             resources->maxTessControlTextureImageUnits = value;
-        else if (strcmp(token, "MaxTessControlUniformComponents") == 0)
+        else if (tokenStr == "MaxTessControlUniformComponents")
             resources->maxTessControlUniformComponents = value;
-        else if (strcmp(token, "MaxTessControlTotalOutputComponents") == 0)
+        else if (tokenStr == "MaxTessControlTotalOutputComponents")
             resources->maxTessControlTotalOutputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationInputComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationInputComponents")
             resources->maxTessEvaluationInputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationOutputComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationOutputComponents")
             resources->maxTessEvaluationOutputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTessEvaluationTextureImageUnits")
             resources->maxTessEvaluationTextureImageUnits = value;
-        else if (strcmp(token, "MaxTessEvaluationUniformComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationUniformComponents")
             resources->maxTessEvaluationUniformComponents = value;
-        else if (strcmp(token, "MaxTessPatchComponents") == 0)
+        else if (tokenStr == "MaxTessPatchComponents")
             resources->maxTessPatchComponents = value;
-        else if (strcmp(token, "MaxPatchVertices") == 0)
+        else if (tokenStr == "MaxPatchVertices")
             resources->maxPatchVertices = value;
-        else if (strcmp(token, "MaxTessGenLevel") == 0)
+        else if (tokenStr == "MaxTessGenLevel")
             resources->maxTessGenLevel = value;
-        else if (strcmp(token, "MaxViewports") == 0)
+        else if (tokenStr == "MaxViewports")
             resources->maxViewports = value;
-        else if (strcmp(token, "MaxVertexAtomicCounters") == 0)
+        else if (tokenStr == "MaxVertexAtomicCounters")
             resources->maxVertexAtomicCounters = value;
-        else if (strcmp(token, "MaxTessControlAtomicCounters") == 0)
+        else if (tokenStr == "MaxTessControlAtomicCounters")
             resources->maxTessControlAtomicCounters = value;
-        else if (strcmp(token, "MaxTessEvaluationAtomicCounters") == 0)
+        else if (tokenStr == "MaxTessEvaluationAtomicCounters")
             resources->maxTessEvaluationAtomicCounters = value;
-        else if (strcmp(token, "MaxGeometryAtomicCounters") == 0)
+        else if (tokenStr == "MaxGeometryAtomicCounters")
             resources->maxGeometryAtomicCounters = value;
-        else if (strcmp(token, "MaxFragmentAtomicCounters") == 0)
+        else if (tokenStr == "MaxFragmentAtomicCounters")
             resources->maxFragmentAtomicCounters = value;
-        else if (strcmp(token, "MaxCombinedAtomicCounters") == 0)
+        else if (tokenStr == "MaxCombinedAtomicCounters")
             resources->maxCombinedAtomicCounters = value;
-        else if (strcmp(token, "MaxAtomicCounterBindings") == 0)
+        else if (tokenStr == "MaxAtomicCounterBindings")
             resources->maxAtomicCounterBindings = value;
-        else if (strcmp(token, "MaxVertexAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxVertexAtomicCounterBuffers")
             resources->maxVertexAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxTessControlAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxTessControlAtomicCounterBuffers")
             resources->maxTessControlAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxTessEvaluationAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxTessEvaluationAtomicCounterBuffers")
             resources->maxTessEvaluationAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxGeometryAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxGeometryAtomicCounterBuffers")
             resources->maxGeometryAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxFragmentAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxFragmentAtomicCounterBuffers")
             resources->maxFragmentAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxCombinedAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxCombinedAtomicCounterBuffers")
             resources->maxCombinedAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxAtomicCounterBufferSize") == 0)
+        else if (tokenStr == "MaxAtomicCounterBufferSize")
             resources->maxAtomicCounterBufferSize = value;
-        else if (strcmp(token, "MaxTransformFeedbackBuffers") == 0)
+        else if (tokenStr == "MaxTransformFeedbackBuffers")
             resources->maxTransformFeedbackBuffers = value;
-        else if (strcmp(token, "MaxTransformFeedbackInterleavedComponents") == 0)
+        else if (tokenStr == "MaxTransformFeedbackInterleavedComponents")
             resources->maxTransformFeedbackInterleavedComponents = value;
-        else if (strcmp(token, "MaxCullDistances") == 0)
+        else if (tokenStr == "MaxCullDistances")
             resources->maxCullDistances = value;
-        else if (strcmp(token, "MaxCombinedClipAndCullDistances") == 0)
+        else if (tokenStr == "MaxCombinedClipAndCullDistances")
             resources->maxCombinedClipAndCullDistances = value;
-        else if (strcmp(token, "MaxSamples") == 0)
+        else if (tokenStr == "MaxSamples")
             resources->maxSamples = value;
-
-        else if (strcmp(token, "nonInductiveForLoops") == 0)
+        else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
-        else if (strcmp(token, "whileLoops") == 0)
+        else if (tokenStr == "whileLoops")
             resources->limits.whileLoops = (value != 0);
-        else if (strcmp(token, "doWhileLoops") == 0)
+        else if (tokenStr == "doWhileLoops")
             resources->limits.doWhileLoops = (value != 0);
-        else if (strcmp(token, "generalUniformIndexing") == 0)
+        else if (tokenStr == "generalUniformIndexing")
             resources->limits.generalUniformIndexing = (value != 0);
-        else if (strcmp(token, "generalAttributeMatrixVectorIndexing") == 0)
+        else if (tokenStr == "generalAttributeMatrixVectorIndexing")
             resources->limits.generalAttributeMatrixVectorIndexing = (value != 0);
-        else if (strcmp(token, "generalVaryingIndexing") == 0)
+        else if (tokenStr == "generalVaryingIndexing")
             resources->limits.generalVaryingIndexing = (value != 0);
-        else if (strcmp(token, "generalSamplerIndexing") == 0)
+        else if (tokenStr == "generalSamplerIndexing")
             resources->limits.generalSamplerIndexing = (value != 0);
-        else if (strcmp(token, "generalVariableIndexing") == 0)
+        else if (tokenStr == "generalVariableIndexing")
             resources->limits.generalVariableIndexing = (value != 0);
-        else if (strcmp(token, "generalConstantMatrixVectorIndexing") == 0)
+        else if (tokenStr == "generalConstantMatrixVectorIndexing")
             resources->limits.generalConstantMatrixVectorIndexing = (value != 0);
         else
-            printf("Warning: unrecognized limit (%s) in configuration file.\n", token);
+            printf("Warning: unrecognized limit (%s) in configuration file.\n", tokenStr.c_str());
 
-#pragma warning(suppress: 4996)
-        token = strtok(0, delims);
     }
 }
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 606f24765fdcd255b263e2bbec5a5c16d1c7e5bf..d40673c155214207be5be18878c3c620474fe7cb 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -1,6 +1,6 @@
 //
 //Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
-//Copyright (C) 2013 LunarG, Inc.
+//Copyright (C) 2013-2016 LunarG, Inc.
 //
 //All rights reserved.
 //
@@ -48,7 +48,9 @@
 #include "../SPIRV/disassemble.h"
 #include <cstring>
 #include <cstdlib>
+#include <cctype>
 #include <cmath>
+#include <array>
 
 #include "../glslang/OSDependent/osinclude.h"
 
@@ -58,26 +60,30 @@ extern "C" {
 
 // Command-line options
 enum TOptions {
-    EOptionNone               = 0,
-    EOptionIntermediate       = (1 <<  0),
-    EOptionSuppressInfolog    = (1 <<  1),
-    EOptionMemoryLeakMode     = (1 <<  2),
-    EOptionRelaxedErrors      = (1 <<  3),
-    EOptionGiveWarnings       = (1 <<  4),
-    EOptionLinkProgram        = (1 <<  5),
-    EOptionMultiThreaded      = (1 <<  6),
-    EOptionDumpConfig         = (1 <<  7),
-    EOptionDumpReflection     = (1 <<  8),
-    EOptionSuppressWarnings   = (1 <<  9),
-    EOptionDumpVersions       = (1 << 10),
-    EOptionSpv                = (1 << 11),
-    EOptionHumanReadableSpv   = (1 << 12),
-    EOptionVulkanRules        = (1 << 13),
-    EOptionDefaultDesktop     = (1 << 14),
-    EOptionOutputPreprocessed = (1 << 15),
-    EOptionOutputHexadecimal  = (1 << 16),
-    EOptionReadHlsl           = (1 << 17),
-    EOptionCascadingErrors    = (1 << 18),
+    EOptionNone                 = 0,
+    EOptionIntermediate         = (1 <<  0),
+    EOptionSuppressInfolog      = (1 <<  1),
+    EOptionMemoryLeakMode       = (1 <<  2),
+    EOptionRelaxedErrors        = (1 <<  3),
+    EOptionGiveWarnings         = (1 <<  4),
+    EOptionLinkProgram          = (1 <<  5),
+    EOptionMultiThreaded        = (1 <<  6),
+    EOptionDumpConfig           = (1 <<  7),
+    EOptionDumpReflection       = (1 <<  8),
+    EOptionSuppressWarnings     = (1 <<  9),
+    EOptionDumpVersions         = (1 << 10),
+    EOptionSpv                  = (1 << 11),
+    EOptionHumanReadableSpv     = (1 << 12),
+    EOptionVulkanRules          = (1 << 13),
+    EOptionDefaultDesktop       = (1 << 14),
+    EOptionOutputPreprocessed   = (1 << 15),
+    EOptionOutputHexadecimal    = (1 << 16),
+    EOptionReadHlsl             = (1 << 17),
+    EOptionCascadingErrors      = (1 << 18),
+    EOptionAutoMapBindings      = (1 << 19),
+    EOptionFlattenUniformArrays = (1 << 20),
+    EOptionNoStorageFormat      = (1 << 21),
+    EOptionKeepUncalled         = (1 << 22),
 };
 
 //
@@ -96,7 +102,7 @@ enum TFailCode {
 //
 // Forward declarations.
 //
-EShLanguage FindLanguage(const std::string& name);
+EShLanguage FindLanguage(const std::string& name, bool parseSuffix=true);
 void CompileFile(const char* fileName, ShHandle);
 void usage();
 void FreeFileData(char** data);
@@ -155,8 +161,14 @@ int Options = 0;
 const char* ExecutableName = nullptr;
 const char* binaryFileName = nullptr;
 const char* entryPointName = nullptr;
+const char* sourceEntryPointName = nullptr;
 const char* shaderStageName = nullptr;
 
+std::array<unsigned int, EShLangCount> baseSamplerBinding;
+std::array<unsigned int, EShLangCount> baseTextureBinding;
+std::array<unsigned int, EShLangCount> baseImageBinding;
+std::array<unsigned int, EShLangCount> baseUboBinding;
+
 //
 // Create the default name for saving a binary if -o is not provided.
 //
@@ -204,6 +216,35 @@ void Error(const char* message)
     exit(EFailUsage);
 }
 
+//
+// Process an optional binding base of the form:
+//   --argname [stage] base
+// Where stage is one of the forms accepted by FindLanguage, and base is an integer
+//
+void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLangCount>& base)
+{
+    if (argc < 2)
+        usage();
+
+    if (!isdigit(argv[1][0])) {
+        if (argc < 3) // this form needs one more argument
+            usage();
+    
+        // Parse form: --argname stage base
+        const EShLanguage lang = FindLanguage(argv[1], false);
+        base[lang] = atoi(argv[2]);
+        argc-= 2;
+        argv+= 2;
+    } else {
+        // Parse form: --argname base
+        for (int lang=0; lang<EShLangCount; ++lang)
+            base[lang] = atoi(argv[1]);
+
+        argc--;
+        argv++;
+    }
+}
+
 //
 // Do all command-line argument parsing.  This includes building up the work-items
 // to be processed later, and saving all the command-line options.
@@ -212,6 +253,11 @@ void Error(const char* message)
 //
 void ProcessArguments(int argc, char* argv[])
 {
+    baseSamplerBinding.fill(0);
+    baseTextureBinding.fill(0);
+    baseImageBinding.fill(0);
+    baseUboBinding.fill(0);
+
     ExecutableName = argv[0];
     NumWorkItems = argc;  // will include some empties where the '-' options were, but it doesn't matter, they'll be 0
     Work = new glslang::TWorkItem*[NumWorkItems];
@@ -223,6 +269,56 @@ void ProcessArguments(int argc, char* argv[])
     for (; argc >= 1; argc--, argv++) {
         if (argv[0][0] == '-') {
             switch (argv[0][1]) {
+            case '-':
+                {
+                    std::string lowerword(argv[0]+2);
+                    std::transform(lowerword.begin(), lowerword.end(), lowerword.begin(), ::tolower);
+
+                    // handle --word style options
+                    if (lowerword == "shift-sampler-bindings" || // synonyms
+                        lowerword == "shift-sampler-binding"  ||
+                        lowerword == "ssb") {
+                        ProcessBindingBase(argc, argv, baseSamplerBinding);
+                    } else if (lowerword == "shift-texture-bindings" ||  // synonyms
+                               lowerword == "shift-texture-binding"  ||
+                               lowerword == "stb") {
+                        ProcessBindingBase(argc, argv, baseTextureBinding);
+                    } else if (lowerword == "shift-image-bindings" ||  // synonyms
+                               lowerword == "shift-image-binding"  ||
+                               lowerword == "sib") {
+                        ProcessBindingBase(argc, argv, baseImageBinding);
+                    } else if (lowerword == "shift-ubo-bindings" ||  // synonyms
+                               lowerword == "shift-ubo-binding"  ||
+                               lowerword == "sub") {
+                        ProcessBindingBase(argc, argv, baseUboBinding);
+                    } else if (lowerword == "auto-map-bindings" ||  // synonyms
+                               lowerword == "auto-map-binding"  || 
+                               lowerword == "amb") {
+                        Options |= EOptionAutoMapBindings;
+                    } else if (lowerword == "flatten-uniform-arrays" || // synonyms
+                               lowerword == "flatten-uniform-array"  ||
+                               lowerword == "fua") {
+                        Options |= EOptionFlattenUniformArrays;
+                    } else if (lowerword == "no-storage-format" || // synonyms
+                               lowerword == "nsf") {
+                        Options |= EOptionNoStorageFormat;
+                    } else if (lowerword == "source-entrypoint" || // synonyms
+                               lowerword == "sep") {
+                        sourceEntryPointName = argv[1];
+                        if (argc > 0) {
+                            argc--;
+                            argv++;
+                        } else
+                            Error("no <entry-point> provided for --source-entrypoint");
+                        break;
+                    } else if (lowerword == "keep-uncalled" || // synonyms
+                               lowerword == "ku") {
+                        Options |= EOptionKeepUncalled;
+                    } else {
+                        usage();
+                    }
+                }
+                break;
             case 'H':
                 Options |= EOptionHumanReadableSpv;
                 if ((Options & EOptionSpv) == 0) {
@@ -340,6 +436,10 @@ void ProcessArguments(int argc, char* argv[])
     // -o or -x makes no sense if there is no target binary
     if (binaryFileName && (Options & EOptionSpv) == 0)
         Error("no binary generation requested (e.g., -V)");
+
+    if ((Options & EOptionFlattenUniformArrays) != 0 &&
+        (Options & EOptionReadHlsl) == 0)
+        Error("uniform array flattening only valid when compiling HLSL source.");
 }
 
 //
@@ -363,6 +463,8 @@ void SetMessageOptions(EShMessages& messages)
         messages = (EShMessages)(messages | EShMsgReadHlsl);
     if (Options & EOptionCascadingErrors)
         messages = (EShMessages)(messages | EShMsgCascadingErrors);
+    if (Options & EOptionKeepUncalled)
+        messages = (EShMessages)(messages | EShMsgKeepUncalled);
 }
 
 //
@@ -461,6 +563,19 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
         shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, 1);
         if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
             shader->setEntryPoint(entryPointName);
+        if (sourceEntryPointName)
+            shader->setSourceEntryPoint(sourceEntryPointName);
+
+        shader->setShiftSamplerBinding(baseSamplerBinding[compUnit.stage]);
+        shader->setShiftTextureBinding(baseTextureBinding[compUnit.stage]);
+        shader->setShiftImageBinding(baseImageBinding[compUnit.stage]);
+        shader->setShiftUboBinding(baseUboBinding[compUnit.stage]);
+        shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
+        shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
+
+        if (Options & EOptionAutoMapBindings)
+            shader->setAutoMapBindings(true);
+                
         shaders.push_back(shader);
 
         const int defaultVersion = Options & EOptionDefaultDesktop? 110: 100;
@@ -499,6 +614,12 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
     if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages))
         LinkFailed = true;
 
+    // Map IO
+    if (Options & EOptionSpv) {
+        if (!program.mapIO())
+            LinkFailed = true;
+    }
+    
     // Report
     if (! (Options & EOptionSuppressInfolog) &&
         ! (Options & EOptionMemoryLeakMode)) {
@@ -577,11 +698,11 @@ void CompileAndLinkShaderFiles()
     // they are all getting linked together.)
     glslang::TWorkItem* workItem;
     while (Worklist.remove(workItem)) {
-        ShaderCompUnit compUnit = {
+        ShaderCompUnit compUnit(
             FindLanguage(workItem->name),
             workItem->name,
             ReadFileData(workItem->name.c_str())
-        };
+        );
 
         if (! compUnit.text) {
             usage();
@@ -705,15 +826,22 @@ int C_DECL main(int argc, char* argv[])
 //   .frag = fragment
 //   .comp = compute
 //
-EShLanguage FindLanguage(const std::string& name)
+EShLanguage FindLanguage(const std::string& name, bool parseSuffix)
 {
-    size_t ext = name.rfind('.');
-    if (ext == std::string::npos) {
-        usage();
-        return EShLangVertex;
+    size_t ext = 0;
+
+    // Search for a suffix on a filename: e.g, "myfile.frag".  If given
+    // the suffix directly, we skip looking the '.'
+    if (parseSuffix) {
+        ext = name.rfind('.');
+        if (ext == std::string::npos) {
+            usage();
+            return EShLangVertex;
+        }
+        ++ext;
     }
 
-    std::string suffix = name.substr(ext + 1, std::string::npos);
+    std::string suffix = name.substr(ext, std::string::npos);
     if (shaderStageName)
         suffix = shaderStageName;
 
@@ -831,6 +959,34 @@ void usage()
            "  -v          print version strings\n"
            "  -w          suppress warnings (except as required by #extension : warn)\n"
            "  -x          save 32-bit hexadecimal numbers as text, requires a binary option (e.g., -V)\n"
+           "\n"
+           "  --shift-sampler-binding [stage] num     set base binding number for samplers\n"
+           "  --ssb [stage] num                       synonym for --shift-sampler-binding\n"
+           "\n"
+           "  --shift-texture-binding [stage] num     set base binding number for textures\n"
+           "  --stb [stage] num                       synonym for --shift-texture-binding\n"
+           "\n"
+           "  --shift-image-binding [stage] num       set base binding number for images (uav)\n"
+           "  --sib [stage] num                       synonym for --shift-image-binding\n"
+           "\n"
+           "  --shift-UBO-binding [stage] num         set base binding number for UBOs\n"
+           "  --sub [stage] num                       synonym for --shift-UBO-binding\n"
+           "\n"
+           "  --auto-map-bindings                     automatically bind uniform variables without\n"
+           "                                          explicit bindings.\n"
+           "  --amb                                   synonym for --auto-map-bindings\n"
+           "\n"
+           "  --flatten-uniform-arrays                flatten uniform texture & sampler arrays to scalars\n"
+           "  --fua                                   synonym for --flatten-uniform-arrays\n"
+           "\n"
+           "  --no-storage-format                     use Unknown image format\n"
+           "  --nsf                                   synonym for --no-storage-format\n"
+           "\n"
+           "  --source-entrypoint name                the given shader source function is renamed to be the entry point given in -e\n"
+           "  --sep                                   synonym for --source-entrypoint\n"
+           "\n"
+           "  --keep-uncalled                         don't eliminate uncalled functions when linking\n"
+           "  --ku                                    synonym for --keep-uncalled\n"
            );
 
     exit(EFailUsage);
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index edd65ab272c9620df6b0c2080649d58d56252da8..42635d3b02255ab9004b3159f71e2a682580cb17 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -393,13 +393,13 @@ ERROR: node is still EOpNull!
 0:?     'a' (global 3-element array of mediump int)
 0:?     'uint' (global mediump int)
 0:?     'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:?     'f' (global mediump float)
+0:?     'f' (invariant global mediump float)
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int x})
 0:?     'fa' (global implicitly-sized array of mediump float)
-0:?     'f13' (global mediump float)
+0:?     'f13' (invariant global mediump float)
 0:?     'fi' (invariant temp mediump float)
-0:?     'av' (smooth in mediump 4-component vector of float)
-0:?     'uv2' (uniform mediump 2-component vector of float)
+0:?     'av' (invariant smooth in mediump 4-component vector of float)
+0:?     'uv2' (invariant uniform mediump 2-component vector of float)
 0:?     'uv3' (invariant uniform mediump 3-component vector of float)
 0:?     'glob2D' (global lowp sampler2D)
 0:?     'vary2D' (smooth in lowp sampler2D)
@@ -507,123 +507,6 @@ ERROR: node is still EOpNull!
 0:38          's2' (temp structure{temp mediump float f, temp 10-element array of mediump float a})
 0:38        true case is null
 0:40      'b' (temp mediump int)
-0:54  Function Definition: foo10( (global void)
-0:54    Function Parameters: 
-0:67  Function Definition: f11(s21; (global void)
-0:67    Function Parameters: 
-0:67      'p2d' (in lowp sampler2D)
-0:87  Function Definition: foo234( (global void)
-0:87    Function Parameters: 
-0:89    Sequence
-0:89      texture (global highp 4-component vector of float)
-0:89        's3D2' (uniform highp sampler3D)
-0:89        Constant:
-0:89          0.200000
-0:89          0.200000
-0:89          0.200000
-0:89        Constant:
-0:89          0.200000
-0:90      textureProj (global highp 4-component vector of float)
-0:90        's3D2' (uniform highp sampler3D)
-0:90        direct index (smooth temp mediump 4-component vector of float)
-0:90          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:90          Constant:
-0:90            1 (const int)
-0:90        Constant:
-0:90          0.400000
-0:91      dPdx (global mediump 4-component vector of float)
-0:91        direct index (smooth temp mediump 4-component vector of float)
-0:91          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:91          Constant:
-0:91            0 (const int)
-0:92      Constant:
-0:92        0.000000
-0:93      fwidth (global mediump float)
-0:93        'f13' (invariant global mediump float)
-0:98  Function Definition: foo236( (global void)
-0:98    Function Parameters: 
-0:100    Sequence
-0:100      dPdx (global mediump 4-component vector of float)
-0:100        direct index (smooth temp mediump 4-component vector of float)
-0:100          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:100          Constant:
-0:100            0 (const int)
-0:101      Constant:
-0:101        0.000000
-0:102      fwidth (global mediump float)
-0:102        'f13' (invariant global mediump float)
-0:103      move second child to first child (temp mediump float)
-0:103        'gl_FragDepth' (temp mediump float)
-0:103        'f13' (invariant global mediump float)
-0:104      move second child to first child (temp highp float)
-0:104        'gl_FragDepthEXT' (gl_FragDepth highp float FragDepth)
-0:104        'f13' (invariant global mediump float)
-0:109  Function Definition: foo239( (global void)
-0:109    Function Parameters: 
-0:111    Sequence
-0:111      move second child to first child (temp mediump float)
-0:111        'gl_FragDepth' (temp mediump float)
-0:111        'f13' (invariant global mediump float)
-0:112      move second child to first child (temp highp float)
-0:112        'gl_FragDepthEXT' (gl_FragDepth highp float FragDepth)
-0:112        'f13' (invariant global mediump float)
-0:119  Function Definition: foo245( (global void)
-0:119    Function Parameters: 
-0:121    Sequence
-0:121      texture (global lowp 4-component vector of float)
-0:121        'sExt' (uniform lowp samplerExternalOES)
-0:121        Constant:
-0:121          0.200000
-0:121          0.200000
-0:122      textureProj (global lowp 4-component vector of float)
-0:122        'sExt' (uniform lowp samplerExternalOES)
-0:122        Construct vec3 (temp lowp 3-component vector of float)
-0:122          'f13' (invariant global mediump float)
-0:123      textureProj (global lowp 4-component vector of float, operation at mediump)
-0:123        'sExt' (uniform lowp samplerExternalOES)
-0:123        direct index (smooth temp mediump 4-component vector of float)
-0:123          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:123          Constant:
-0:123            2 (const int)
-0:130  Function Definition: foo246( (global void)
-0:130    Function Parameters: 
-0:132    Sequence
-0:132      texture (global mediump 4-component vector of float)
-0:132        'mediumExt' (uniform mediump samplerExternalOES)
-0:132        Constant:
-0:132          0.200000
-0:132          0.200000
-0:133      textureProj (global highp 4-component vector of float)
-0:133        'highExt' (uniform highp samplerExternalOES)
-0:133        direct index (smooth temp mediump 4-component vector of float)
-0:133          'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:133          Constant:
-0:133            2 (const int)
-0:134      Constant:
-0:134        0.000000
-0:135      Constant:
-0:135        0.000000
-0:137      Bitwise not (temp mediump int)
-0:137        'a' (temp mediump int)
-0:138      inclusive-or (temp mediump int)
-0:138        'a' (temp mediump int)
-0:138        'a' (temp mediump int)
-0:139      bitwise and (temp mediump int)
-0:139        'a' (temp mediump int)
-0:139        'a' (temp mediump int)
-0:145  Function Definition: foo203940(i1;f1;f1; (global mediump int)
-0:145    Function Parameters: 
-0:145      'a' (in mediump int)
-0:145      'b' (in mediump float)
-0:147    Sequence
-0:147      textureProjGrad (global lowp 4-component vector of float, operation at mediump)
-0:147        's2Dg' (uniform lowp sampler2D)
-0:147        Construct vec3 (temp mediump 3-component vector of float)
-0:147          'f13' (invariant global mediump float)
-0:147        'uv2' (invariant uniform mediump 2-component vector of float)
-0:147        'uv2' (invariant uniform mediump 2-component vector of float)
-0:148      Branch: Return with expression
-0:148        'a' (in mediump int)
 0:151  Sequence
 0:151    move second child to first child (temp mediump float)
 0:151      'f123' (global mediump float)
@@ -634,75 +517,6 @@ ERROR: node is still EOpNull!
 0:152      'f124' (global mediump float)
 0:152      Constant:
 0:152        50000000000.000000
-0:158  Function Definition: foo323433( (global void)
-0:158    Function Parameters: 
-0:160    Sequence
-0:160      textureLod (global lowp 4-component vector of float, operation at mediump)
-0:160        's2Dg' (uniform lowp sampler2D)
-0:160        'uv2' (invariant uniform mediump 2-component vector of float)
-0:160        'f13' (invariant global mediump float)
-0:161      textureProjGrad (global lowp 4-component vector of float, operation at mediump)
-0:161        's2Dg' (uniform lowp sampler2D)
-0:161        Construct vec3 (temp mediump 3-component vector of float)
-0:161          'f13' (invariant global mediump float)
-0:161        'uv2' (invariant uniform mediump 2-component vector of float)
-0:161        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162      textureGrad (global lowp 4-component vector of float, operation at mediump)
-0:162        's2Dg' (uniform lowp sampler2D)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:162        'uv2' (invariant uniform mediump 2-component vector of float)
-0:163      textureGrad (global lowp 4-component vector of float)
-0:163        'sCube' (uniform lowp samplerCube)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:163        Construct vec3 (temp lowp 3-component vector of float)
-0:163          'f13' (invariant global mediump float)
-0:167  Function Definition: fgfg(f1;i1; (global mediump int)
-0:167    Function Parameters: 
-0:167      'f' (in mediump float)
-0:167      'i' (in highp int)
-0:167    Sequence
-0:167      Branch: Return with expression
-0:167        Constant:
-0:167          2 (const int)
-0:173  Function Definition: gggf(f1; (global mediump int)
-0:173    Function Parameters: 
-0:173      'f' (in mediump float)
-0:173    Sequence
-0:173      Branch: Return with expression
-0:173        Constant:
-0:173          2 (const int)
-0:175  Function Definition: agggf(f1; (global mediump int)
-0:175    Function Parameters: 
-0:175      'f' (in mediump float)
-0:175    Sequence
-0:175      Branch: Return with expression
-0:175        Constant:
-0:175          2 (const int)
-0:187  Function Definition: badswizzle( (global void)
-0:187    Function Parameters: 
-0:?     Sequence
-0:190      'a' (temp 5-element array of mediump 3-component vector of float)
-0:191      'a' (temp 5-element array of mediump 3-component vector of float)
-0:192      'a' (temp 5-element array of mediump 3-component vector of float)
-0:193      Constant:
-0:193        5 (const int)
-0:194      Constant:
-0:194        0.000000
-0:199  Function Definition: fooinittest( (global mediump float)
-0:199    Function Parameters: 
-0:201    Sequence
-0:201      Branch: Return with expression
-0:201        Function Call: fooinit( (global mediump float)
-0:209  Function Definition: fooinit( (global mediump float)
-0:209    Function Parameters: 
-0:211    Sequence
-0:211      Branch: Return with expression
-0:211        Constant:
-0:211          12.000000
 0:214  Sequence
 0:214    move second child to first child (temp mediump int)
 0:214      'init1' (global mediump int)
@@ -731,13 +545,13 @@ ERROR: node is still EOpNull!
 0:?     'a' (global 3-element array of mediump int)
 0:?     'uint' (global mediump int)
 0:?     'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:?     'f' (global mediump float)
+0:?     'f' (invariant global mediump float)
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int x})
 0:?     'fa' (global 1-element array of mediump float)
-0:?     'f13' (global mediump float)
+0:?     'f13' (invariant global mediump float)
 0:?     'fi' (invariant temp mediump float)
-0:?     'av' (smooth in mediump 4-component vector of float)
-0:?     'uv2' (uniform mediump 2-component vector of float)
+0:?     'av' (invariant smooth in mediump 4-component vector of float)
+0:?     'uv2' (invariant uniform mediump 2-component vector of float)
 0:?     'uv3' (invariant uniform mediump 3-component vector of float)
 0:?     'glob2D' (global lowp sampler2D)
 0:?     'vary2D' (smooth in lowp sampler2D)
diff --git a/Test/baseResults/100LimitsConf.vert.out b/Test/baseResults/100LimitsConf.vert.out
index e27c2cc70cfd6a210e60189d0ee0f5cb2dc325d5..46cb845393b0bc10d27a658317a2ba91505d52ff 100644
--- a/Test/baseResults/100LimitsConf.vert.out
+++ b/Test/baseResults/100LimitsConf.vert.out
@@ -22,7 +22,3 @@ ERROR: 0:65: 'limitations' : Non-constant-index-expression
 ERROR: 20 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
diff --git a/Test/baseResults/100scope.vert.out b/Test/baseResults/100scope.vert.out
index 2b542b0c6791e7da1f9e00f61d4c6c366665a212..17423dc2d9473a75316f72145c169e0328b5f4ec 100644
--- a/Test/baseResults/100scope.vert.out
+++ b/Test/baseResults/100scope.vert.out
@@ -128,6 +128,8 @@ ERROR: node is still EOpNull!
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 100
 ERROR: node is still EOpNull!
@@ -148,20 +150,6 @@ ERROR: node is still EOpNull!
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in highp int)
-0:25  Function Definition: cos(f1; (global highp float)
-0:25    Function Parameters: 
-0:25      'x' (in highp float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/110scope.vert.out b/Test/baseResults/110scope.vert.out
index 5f41b86bae7cd5b8d6b8600893789e4979ee3316..74002ba72b0ee57461e43a2b07ee00ef4cff57de 100644
--- a/Test/baseResults/110scope.vert.out
+++ b/Test/baseResults/110scope.vert.out
@@ -1,9 +1,8 @@
 110scope.vert
 ERROR: 0:5: 'a' : redefinition 
-ERROR: 0:34: 'f' : can't call user function from global scope 
 ERROR: 0:57: 'z' : undeclared identifier 
 ERROR: 0:57: 'z' : redefinition 
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 110
@@ -131,6 +130,10 @@ ERROR: node is still EOpNull!
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    sin(f1;
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 110
 ERROR: node is still EOpNull!
@@ -151,20 +154,6 @@ ERROR: node is still EOpNull!
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in int)
-0:25  Function Definition: cos(f1; (global float)
-0:25    Function Parameters: 
-0:25      'x' (in float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:34  Sequence
 0:34    move second child to first child (temp int)
 0:34      'gi' (global int)
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 4fa76000e5d3e7a86b9bd7822c59d5e88a232f06..79898aafc3bc37c4a98153967df0d2acdc36913e 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -630,537 +630,9 @@ Shader version: 120
 Requested GL_ARB_shader_texture_lod
 Requested GL_ARB_texture_rectangle
 ERROR: node is still EOpNull!
-0:21  Function Definition: main( (global void)
-0:21    Function Parameters: 
-0:23    Sequence
-0:23      Sequence
-0:23        move second child to first child (temp 2X3 matrix of float)
-0:23          'm23' (temp 2X3 matrix of float)
-0:23          Construct mat2x3 (temp 2X3 matrix of float)
-0:23            'm' (uniform 4X2 matrix of float)
-0:27      Sequence
-0:27        move second child to first child (temp structure{global float f})
-0:27          'sv' (temp structure{global float f})
-0:27          Construct structure (temp structure{global float f})
-0:27            Convert int to float (temp float)
-0:27              'a' (temp int)
-0:28      Sequence
-0:28        move second child to first child (temp 2-element array of float)
-0:28          'ia' (temp 2-element array of float)
-0:28          Construct float (temp 2-element array of float)
-0:28            Constant:
-0:28              3.000000
-0:28            direct index (temp float)
-0:28              'i' (smooth in 4-component vector of float)
-0:28              Constant:
-0:28                1 (const int)
-0:29      Sequence
-0:29        move second child to first child (temp float)
-0:29          'f1' (temp float)
-0:29          Constant:
-0:29            1.000000
-0:30      Sequence
-0:30        move second child to first child (temp float)
-0:30          'f' (temp float)
-0:30          Convert int to float (temp float)
-0:30            'a' (temp int)
-0:31      move second child to first child (temp float)
-0:31        'f' (temp float)
-0:31        Convert int to float (temp float)
-0:31          'a' (temp int)
-0:33      Sequence
-0:33        move second child to first child (temp 3-component vector of float)
-0:33          'v3' (temp 3-component vector of float)
-0:33          Convert int to float (temp 3-component vector of float)
-0:33            'iv3' (temp 3-component vector of int)
-0:34      move second child to first child (temp float)
-0:34        'f' (temp float)
-0:34        add (temp float)
-0:34          'f' (temp float)
-0:34          Convert int to float (temp float)
-0:34            'a' (temp int)
-0:35      move second child to first child (temp float)
-0:35        'f' (temp float)
-0:35        subtract (temp float)
-0:35          Convert int to float (temp float)
-0:35            'a' (temp int)
-0:35          'f' (temp float)
-0:36      add second child into first child (temp float)
-0:36        'f' (temp float)
-0:36        Convert int to float (temp float)
-0:36          'a' (temp int)
-0:37      move second child to first child (temp float)
-0:37        'f' (temp float)
-0:37        subtract (temp float)
-0:37          Convert int to float (temp float)
-0:37            'a' (temp int)
-0:37          'f' (temp float)
-0:38      multiply second child into first child (temp 3-component vector of float)
-0:38        'v3' (temp 3-component vector of float)
-0:38        Convert int to float (temp 3-component vector of float)
-0:38          'iv3' (temp 3-component vector of int)
-0:39      move second child to first child (temp 3-component vector of float)
-0:39        'v3' (temp 3-component vector of float)
-0:39        divide (temp 3-component vector of float)
-0:39          Convert int to float (temp 3-component vector of float)
-0:39            'iv3' (temp 3-component vector of int)
-0:39          Constant:
-0:39            2.000000
-0:40      move second child to first child (temp 3-component vector of float)
-0:40        'v3' (temp 3-component vector of float)
-0:40        vector-scale (temp 3-component vector of float)
-0:40          Constant:
-0:40            3.000000
-0:40          Convert int to float (temp 3-component vector of float)
-0:40            'iv3' (temp 3-component vector of int)
-0:41      move second child to first child (temp 3-component vector of float)
-0:41        'v3' (temp 3-component vector of float)
-0:41        vector-scale (temp 3-component vector of float)
-0:41          Constant:
-0:41            2.000000
-0:41          'v3' (temp 3-component vector of float)
-0:42      move second child to first child (temp 3-component vector of float)
-0:42        'v3' (temp 3-component vector of float)
-0:42        subtract (temp 3-component vector of float)
-0:42          'v3' (temp 3-component vector of float)
-0:42          Constant:
-0:42            2.000000
-0:43      Test condition and select (temp void)
-0:43        Condition
-0:47        logical-or (temp bool)
-0:46          logical-or (temp bool)
-0:45            logical-or (temp bool)
-0:44              logical-or (temp bool)
-0:43                logical-or (temp bool)
-0:43                  Compare Less Than (temp bool)
-0:43                    'f' (temp float)
-0:43                    Convert int to float (temp float)
-0:43                      'a' (temp int)
-0:44                  Compare Less Than or Equal (temp bool)
-0:44                    Convert int to float (temp float)
-0:44                      'a' (temp int)
-0:44                    'f' (temp float)
-0:45                Compare Greater Than (temp bool)
-0:45                  'f' (temp float)
-0:45                  Convert int to float (temp float)
-0:45                    'a' (temp int)
-0:46              Compare Greater Than or Equal (temp bool)
-0:46                'f' (temp float)
-0:46                Convert int to float (temp float)
-0:46                  'a' (temp int)
-0:47            Compare Equal (temp bool)
-0:47              Convert int to float (temp float)
-0:47                'a' (temp int)
-0:47              'f' (temp float)
-0:48          Compare Not Equal (temp bool)
-0:48            'f' (temp float)
-0:48            Convert int to float (temp float)
-0:48              'a' (temp int)
-0:43        true case is null
-0:49      move second child to first child (temp float)
-0:49        'f' (temp float)
-0:49        Test condition and select (temp float)
-0:49          Condition
-0:49          'b' (temp bool)
-0:49          true case
-0:49          Convert int to float (temp float)
-0:49            'a' (temp int)
-0:49          false case
-0:49          'f' (temp float)
-0:50      move second child to first child (temp float)
-0:50        'f' (temp float)
-0:50        Test condition and select (temp float)
-0:50          Condition
-0:50          'b' (temp bool)
-0:50          true case
-0:50          'f' (temp float)
-0:50          false case
-0:50          Convert int to float (temp float)
-0:50            'a' (temp int)
-0:51      move second child to first child (temp float)
-0:51        'f' (temp float)
-0:51        Convert int to float (temp float)
-0:51          Test condition and select (temp int)
-0:51            Condition
-0:51            'b' (temp bool)
-0:51            true case
-0:51            'a' (temp int)
-0:51            false case
-0:51            'a' (temp int)
-0:52      Sequence
-0:52        move second child to first child (temp structure{global float f})
-0:52          'news' (temp structure{global float f})
-0:52          'sv' (temp structure{global float f})
-0:54      vector swizzle (temp 2-component vector of float)
-0:54        'i' (smooth in 4-component vector of float)
-0:54        Sequence
-0:54          Constant:
-0:54            0 (const int)
-0:54          Constant:
-0:54            1 (const int)
-0:55      'm' (uniform 4X2 matrix of float)
-0:56      'm' (uniform 4X2 matrix of float)
-0:58      'f' (temp float)
-0:59      move second child to first child (temp float)
-0:59        'f' (temp float)
-0:59        Convert int to float (temp float)
-0:59          'a' (temp int)
-0:60      'f' (temp float)
-0:61      'b' (temp bool)
-0:62      move second child to first child (temp bool)
-0:62        'b' (temp bool)
-0:62        'b' (temp bool)
-0:63      'f' (temp float)
-0:65      move second child to first child (temp 4-component vector of float)
-0:65        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:65        texture (global 4-component vector of float)
-0:65          's2D' (uniform sampler2D)
-0:65          'centTexCoord' (centroid smooth in 2-component vector of float)
-0:?       Sequence
-0:79        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:82      direct index (temp float)
-0:82        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:82        Constant:
-0:82          0 (const int)
-0:83      direct index (temp float)
-0:83        'gl_FragColor' (fragColor 4-component vector of float FragColor)
-0:83        Constant:
-0:83          0 (const int)
-0:84      direct index (temp float)
-0:84        'centTexCoord' (centroid smooth in 2-component vector of float)
-0:84        Constant:
-0:84          0 (const int)
-0:85      move second child to first child (temp bool)
-0:85        Comma (temp bool)
-0:85          'a' (temp int)
-0:85          'b' (temp bool)
-0:85        Constant:
-0:85          true (const bool)
-0:91  Function Definition: main( (global int)
-0:91    Function Parameters: 
 0:92  Function Definition: main(i1; (global void)
 0:92    Function Parameters: 
 0:92      'a' (in int)
-0:97  Function Definition: foo(f1; (global int)
-0:97    Function Parameters: 
-0:97      'a' (out float)
-0:99    Sequence
-0:99      Branch: Return with expression
-0:99        Constant:
-0:99          3.200000
-0:100      Function Call: foo(f1; (global int)
-0:100        'a' (out float)
-0:103  Function Definition: gen(vf3; (global bool)
-0:103    Function Parameters: 
-0:103      'v' (in 3-component vector of float)
-0:105    Sequence
-0:105      Test condition and select (temp void)
-0:105        Condition
-0:105        logical-and (temp bool)
-0:105          Compare Less Than (temp bool)
-0:105            Absolute value (global float)
-0:105              direct index (temp float)
-0:105                'v' (in 3-component vector of float)
-0:105                Constant:
-0:105                  0 (const int)
-0:105            Constant:
-0:105              0.000100
-0:105          Compare Less Than (temp bool)
-0:105            Absolute value (global float)
-0:105              direct index (temp float)
-0:105                'v' (in 3-component vector of float)
-0:105                Constant:
-0:105                  1 (const int)
-0:105            Constant:
-0:105              0.000100
-0:105        true case
-0:106        Branch: Return with expression
-0:106          Constant:
-0:106            true (const bool)
-0:109  Function Definition: v1( (global void)
-0:109    Function Parameters: 
-0:113  Function Definition: v2( (global void)
-0:113    Function Parameters: 
-0:115    Sequence
-0:115      Branch: Return
-0:118  Function Definition: atest( (global void)
-0:118    Function Parameters: 
-0:120    Sequence
-0:120      Sequence
-0:120        move second child to first child (temp 4-component vector of float)
-0:120          'v' (temp 4-component vector of float)
-0:120          direct index (smooth temp 4-component vector of float TexCoord)
-0:120            'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:120            Constant:
-0:120              1 (const int)
-0:121      add second child into first child (temp 4-component vector of float)
-0:121        'v' (temp 4-component vector of float)
-0:121        direct index (smooth temp 4-component vector of float TexCoord)
-0:121          'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:121          Constant:
-0:121            3 (const int)
-0:139  Function Definition: foo123( (global void)
-0:139    Function Parameters: 
-0:141    Sequence
-0:141      Sequence
-0:141        move second child to first child (temp 2X2 matrix of float)
-0:141          'r2' (temp 2X2 matrix of float)
-0:141          component-wise multiply (global 2X2 matrix of float)
-0:141            'm22' (global 2X2 matrix of float)
-0:141            'm22' (global 2X2 matrix of float)
-0:142      Sequence
-0:142        move second child to first child (temp 3X3 matrix of float)
-0:142          'r3' (temp 3X3 matrix of float)
-0:142          component-wise multiply (global 3X3 matrix of float)
-0:142            'm33' (global 3X3 matrix of float)
-0:142            'm33' (global 3X3 matrix of float)
-0:143      Sequence
-0:143        move second child to first child (temp 4X4 matrix of float)
-0:143          'r4' (temp 4X4 matrix of float)
-0:143          component-wise multiply (global 4X4 matrix of float)
-0:143            'm44' (global 4X4 matrix of float)
-0:143            'm44' (global 4X4 matrix of float)
-0:145      Sequence
-0:145        move second child to first child (temp 2X3 matrix of float)
-0:145          'r23' (temp 2X3 matrix of float)
-0:145          component-wise multiply (global 2X3 matrix of float)
-0:145            'm23' (global 2X3 matrix of float)
-0:145            'm23' (global 2X3 matrix of float)
-0:146      Sequence
-0:146        move second child to first child (temp 2X4 matrix of float)
-0:146          'r24' (temp 2X4 matrix of float)
-0:146          component-wise multiply (global 2X4 matrix of float)
-0:146            'm24' (global 2X4 matrix of float)
-0:146            'm24' (global 2X4 matrix of float)
-0:147      Sequence
-0:147        move second child to first child (temp 3X2 matrix of float)
-0:147          'r32' (temp 3X2 matrix of float)
-0:147          component-wise multiply (global 3X2 matrix of float)
-0:147            'm32' (global 3X2 matrix of float)
-0:147            'm32' (global 3X2 matrix of float)
-0:148      Sequence
-0:148        move second child to first child (temp 3X4 matrix of float)
-0:148          'r34' (temp 3X4 matrix of float)
-0:148          component-wise multiply (global 3X4 matrix of float)
-0:148            'm34' (global 3X4 matrix of float)
-0:148            'm34' (global 3X4 matrix of float)
-0:149      Sequence
-0:149        move second child to first child (temp 4X2 matrix of float)
-0:149          'r42' (temp 4X2 matrix of float)
-0:149          component-wise multiply (global 4X2 matrix of float)
-0:149            'm42' (global 4X2 matrix of float)
-0:149            'm42' (global 4X2 matrix of float)
-0:150      Sequence
-0:150        move second child to first child (temp 4X3 matrix of float)
-0:150          'r43' (temp 4X3 matrix of float)
-0:150          component-wise multiply (global 4X3 matrix of float)
-0:150            'm43' (global 4X3 matrix of float)
-0:150            'm43' (global 4X3 matrix of float)
-0:156  Function Definition: matConst( (global void)
-0:156    Function Parameters: 
-0:?     Sequence
-0:162      Sequence
-0:162        move second child to first child (temp 4X4 matrix of float)
-0:162          'm4g' (temp 4X4 matrix of float)
-0:162          Construct mat4 (temp 4X4 matrix of float)
-0:162            'v2' (temp 2-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:162            'v3' (temp 3-component vector of float)
-0:163      Sequence
-0:163        move second child to first child (temp 4X4 matrix of float)
-0:163          'm4' (temp 4X4 matrix of float)
-0:163          Construct mat4 (temp 4X4 matrix of float)
-0:163            'v2' (temp 2-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v3' (temp 3-component vector of float)
-0:163            'v2' (temp 2-component vector of float)
-0:164      Sequence
-0:164        move second child to first child (temp 3X3 matrix of float)
-0:164          'm3' (temp 3X3 matrix of float)
-0:164          Construct mat3 (temp 3X3 matrix of float)
-0:164            'm4' (temp 4X4 matrix of float)
-0:165      Sequence
-0:165        move second child to first child (temp 3X3 matrix of float)
-0:165          'm3b1' (temp 3X3 matrix of float)
-0:165          Construct mat3 (temp 3X3 matrix of float)
-0:165            'm4' (temp 4X4 matrix of float)
-0:165            'v2' (temp 2-component vector of float)
-0:166      Sequence
-0:166        move second child to first child (temp 3X3 matrix of float)
-0:166          'm3b2' (temp 3X3 matrix of float)
-0:166          Construct mat3 (temp 3X3 matrix of float)
-0:166            'm4' (temp 4X4 matrix of float)
-0:166            'm4' (temp 4X4 matrix of float)
-0:167      Sequence
-0:167        move second child to first child (temp 3X2 matrix of float)
-0:167          'm32' (temp 3X2 matrix of float)
-0:167          Construct mat3x2 (temp 3X2 matrix of float)
-0:167            'm4' (temp 4X4 matrix of float)
-0:168      Sequence
-0:168        move second child to first child (temp 4X4 matrix of float)
-0:168          'm4c' (temp 4X4 matrix of float)
-0:168          Construct mat4 (temp 4X4 matrix of float)
-0:168            'm32' (temp 3X2 matrix of float)
-0:169      Sequence
-0:169        move second child to first child (temp 3X3 matrix of float)
-0:169          'm3s' (temp 3X3 matrix of float)
-0:169          Construct mat3 (temp 3X3 matrix of float)
-0:169            direct index (temp float)
-0:169              'v2' (temp 2-component vector of float)
-0:169              Constant:
-0:169                0 (const int)
-0:171      Sequence
-0:171        move second child to first child (temp 2-element array of 3X3 matrix of float)
-0:171          'm3a1' (temp 2-element array of 3X3 matrix of float)
-0:171          Construct mat3 (temp 2-element array of 3X3 matrix of float)
-0:171            'm3s' (temp 3X3 matrix of float)
-0:171            'm3s' (temp 3X3 matrix of float)
-0:179  Function Definition: foo2323( (global void)
-0:179    Function Parameters: 
-0:?     Sequence
-0:184      move second child to first child (temp 4-component vector of float)
-0:184        'v' (temp 4-component vector of float)
-0:184        textureLod (global 4-component vector of float)
-0:184          's2D' (uniform sampler2D)
-0:184          'v2' (temp 2-component vector of float)
-0:184          'f' (temp float)
-0:185      move second child to first child (temp 4-component vector of float)
-0:185        'v' (temp 4-component vector of float)
-0:185        textureProjLod (global 4-component vector of float)
-0:185          's3D' (uniform sampler3D)
-0:185          'v' (temp 4-component vector of float)
-0:185          'f' (temp float)
-0:186      move second child to first child (temp 4-component vector of float)
-0:186        'v' (temp 4-component vector of float)
-0:186        textureProjLod (global 4-component vector of float)
-0:186          's1D' (uniform sampler1D)
-0:186          'v' (temp 4-component vector of float)
-0:186          'f' (temp float)
-0:187      move second child to first child (temp 4-component vector of float)
-0:187        'v' (temp 4-component vector of float)
-0:187        textureProjLod (global 4-component vector of float)
-0:187          's2DS' (uniform sampler2DShadow)
-0:187          'v' (temp 4-component vector of float)
-0:187          'f' (temp float)
-0:189      move second child to first child (temp 4-component vector of float)
-0:189        'v' (temp 4-component vector of float)
-0:189        textureGrad (global 4-component vector of float)
-0:189          's1D' (uniform sampler1D)
-0:189          'f' (temp float)
-0:189          'f' (temp float)
-0:189          'f' (temp float)
-0:190      move second child to first child (temp 4-component vector of float)
-0:190        'v' (temp 4-component vector of float)
-0:190        textureProjGrad (global 4-component vector of float)
-0:190          's2D' (uniform sampler2D)
-0:190          'v' (temp 4-component vector of float)
-0:190          'v2' (temp 2-component vector of float)
-0:190          'v2' (temp 2-component vector of float)
-0:191      move second child to first child (temp 4-component vector of float)
-0:191        'v' (temp 4-component vector of float)
-0:191        textureProjGrad (global 4-component vector of float)
-0:191          's2DS' (uniform sampler2DShadow)
-0:191          'v' (temp 4-component vector of float)
-0:191          'v2' (temp 2-component vector of float)
-0:191          'v2' (temp 2-component vector of float)
-0:196  Function Definition: foo2324( (global void)
-0:196    Function Parameters: 
-0:?     Sequence
-0:201      move second child to first child (temp 4-component vector of float)
-0:201        'v' (temp 4-component vector of float)
-0:201        textureLod (global 4-component vector of float)
-0:201          's2D' (uniform sampler2D)
-0:201          'v2' (temp 2-component vector of float)
-0:201          'f' (temp float)
-0:202      move second child to first child (temp 4-component vector of float)
-0:202        'v' (temp 4-component vector of float)
-0:202        textureProjLod (global 4-component vector of float)
-0:202          's3D' (uniform sampler3D)
-0:202          'v' (temp 4-component vector of float)
-0:202          'f' (temp float)
-0:203      move second child to first child (temp 4-component vector of float)
-0:203        'v' (temp 4-component vector of float)
-0:203        textureProjLod (global 4-component vector of float)
-0:203          's1D' (uniform sampler1D)
-0:203          'v' (temp 4-component vector of float)
-0:203          'f' (temp float)
-0:204      move second child to first child (temp 4-component vector of float)
-0:204        'v' (temp 4-component vector of float)
-0:204        textureProjLod (global 4-component vector of float)
-0:204          's2DS' (uniform sampler2DShadow)
-0:204          'v' (temp 4-component vector of float)
-0:204          'f' (temp float)
-0:206      move second child to first child (temp 4-component vector of float)
-0:206        'v' (temp 4-component vector of float)
-0:206        textureGrad (global 4-component vector of float)
-0:206          's1D' (uniform sampler1D)
-0:206          'f' (temp float)
-0:206          'f' (temp float)
-0:206          'f' (temp float)
-0:207      move second child to first child (temp 4-component vector of float)
-0:207        'v' (temp 4-component vector of float)
-0:207        textureProjGrad (global 4-component vector of float)
-0:207          's2D' (uniform sampler2D)
-0:207          'v' (temp 4-component vector of float)
-0:207          'v2' (temp 2-component vector of float)
-0:207          'v2' (temp 2-component vector of float)
-0:208      move second child to first child (temp 4-component vector of float)
-0:208        'v' (temp 4-component vector of float)
-0:208        textureProjGrad (global 4-component vector of float)
-0:208          's2DS' (uniform sampler2DShadow)
-0:208          'v' (temp 4-component vector of float)
-0:208          'v2' (temp 2-component vector of float)
-0:208          'v2' (temp 2-component vector of float)
-0:209      'v' (temp 4-component vector of float)
-0:214  Function Definition: foo121111( (global void)
-0:214    Function Parameters: 
-0:?     Sequence
-0:217      Sequence
-0:217        move second child to first child (temp 4-component vector of float)
-0:217          'v' (temp 4-component vector of float)
-0:217          texture (global 4-component vector of float)
-0:217            's2DRbad' (uniform sampler2DRect)
-0:217            'v2' (temp 2-component vector of float)
-0:225  Function Definition: foo12111( (global void)
-0:225    Function Parameters: 
-0:?     Sequence
-0:231      move second child to first child (temp 4-component vector of float)
-0:231        'v' (temp 4-component vector of float)
-0:231        texture (global 4-component vector of float)
-0:231          's2DR' (uniform sampler2DRect)
-0:231          'v2' (temp 2-component vector of float)
-0:232      move second child to first child (temp 4-component vector of float)
-0:232        'v' (temp 4-component vector of float)
-0:232        textureProj (global 4-component vector of float)
-0:232          's2DR' (uniform sampler2DRect)
-0:232          'v3' (temp 3-component vector of float)
-0:233      move second child to first child (temp 4-component vector of float)
-0:233        'v' (temp 4-component vector of float)
-0:233        textureProj (global 4-component vector of float)
-0:233          's2DR' (uniform sampler2DRect)
-0:233          'v4' (temp 4-component vector of float)
-0:234      move second child to first child (temp 4-component vector of float)
-0:234        'v' (temp 4-component vector of float)
-0:234        texture (global 4-component vector of float)
-0:234          's2DRS' (uniform sampler2DRectShadow)
-0:234          'v3' (temp 3-component vector of float)
-0:235      move second child to first child (temp 4-component vector of float)
-0:235        'v' (temp 4-component vector of float)
-0:235        textureProj (global 4-component vector of float)
-0:235          's2DRS' (uniform sampler2DRectShadow)
-0:235          'v4' (temp 4-component vector of float)
-0:237      move second child to first child (temp 4-component vector of float)
-0:237        'v' (temp 4-component vector of float)
-0:237        textureProjGrad (global 4-component vector of float)
-0:237          's2DRS' (uniform sampler2DRectShadow)
-0:237          'v' (temp 4-component vector of float)
-0:237          'v2' (temp 2-component vector of float)
-0:237          'v2' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'lowp' (global float)
 0:?     'mediump' (global float)
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 73ced6a1e2566b338117b120b734f0b0822f4c65..c63d95a22d06606cd391228bf9557f6ebec8823e 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -77,9 +77,8 @@ ERROR: 0:192: 'gl_ClipDistance' :  left of '[' is not of type array, matrix, or
 ERROR: 0:192: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved 
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
-ERROR: 0:200: '##' : token pasting not implemented (internal error) 
-ERROR: 0:200: '' :  syntax error
-ERROR: 80 compilation errors.  No code generated.
+ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
+ERROR: 79 compilation errors.  No code generated.
 
 
 Shader version: 120
@@ -420,7 +419,6 @@ ERROR: node is still EOpNull!
 0:?     'concall' (const float)
 0:?       0.295520
 0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
 0:?     'c' (uniform int)
 0:?     'x' (in 2-component vector of int)
 0:?     'v2a' (in 2-component vector of float)
@@ -428,7 +426,8 @@ ERROR: node is still EOpNull!
 0:?     'c2D' (in 2-component vector of float)
 0:?     'c3D' (in 3-component vector of float)
 0:?     'v4' (uniform 4-component vector of float)
-0:?     'abc' (global int)
+0:?     'abcdef' (global int)
+0:?     'qrstuv' (global int)
 
 
 Linked vertex stage:
@@ -481,285 +480,6 @@ ERROR: node is still EOpNull!
 0:43        'gl_PointSize' (invariant gl_PointSize float PointSize)
 0:43        Constant:
 0:43          3.800000
-0:61  Function Definition: overloadB(f1;f1; (global void)
-0:61    Function Parameters: 
-0:61      '' (in float)
-0:61      '' (const (read only) float)
-0:78  Function Definition: foo( (global void)
-0:78    Function Parameters: 
-0:?     Sequence
-0:83      Function Call: overloadB(f1;f1; (global void)
-0:83        'f' (temp float)
-0:83        'f' (temp float)
-0:84      Function Call: overloadB(f1;f1; (global void)
-0:84        'f' (temp float)
-0:84        Constant:
-0:84          2.000000
-0:85      Function Call: overloadB(f1;f1; (global void)
-0:85        Constant:
-0:85          1.000000
-0:85        Convert int to float (temp float)
-0:85          'i' (temp int)
-0:87      Constant:
-0:87        0.000000
-0:88      Function Call: overloadC(i1;i1; (global 2-component vector of float)
-0:88        Constant:
-0:88          1 (const int)
-0:88        'i' (temp int)
-0:89      Function Call: overloadC(vf2;vf2; (global 2-component vector of float)
-0:89        Constant:
-0:89          1.000000
-0:89          1.000000
-0:89        Constant:
-0:89          2.000000
-0:89          2.000000
-0:90      Constant:
-0:90        0.000000
-0:91      Function Call: overloadC(vf2;vf2; (global 2-component vector of float)
-0:91        Constant:
-0:91          1.000000
-0:91          1.000000
-0:91        Constant:
-0:91          2.000000
-0:91          2.000000
-0:93      Function Call: overloadD(i1;f1; (global 3-component vector of float)
-0:93        'i' (temp int)
-0:93        'f' (temp float)
-0:94      Function Call: overloadD(f1;i1; (global 3-component vector of float)
-0:94        'f' (temp float)
-0:94        'i' (temp int)
-0:95      Function Call: overloadD(f1;i1; (global 3-component vector of float)
-0:95        Convert int to float (temp float)
-0:95          'i' (temp int)
-0:95        'i' (temp int)
-0:98      Constant:
-0:98        0.000000
-0:100      Constant:
-0:100        0.841471
-0:101      texture (global 4-component vector of float)
-0:101        's2D' (uniform sampler2D)
-0:101        Constant:
-0:101          0.000000
-0:101          0.000000
-0:102      clamp (global 4-component vector of float)
-0:102        'attv4' (in 4-component vector of float)
-0:102        Constant:
-0:102          0.000000
-0:102        Constant:
-0:102          1.000000
-0:103      clamp (global 4-component vector of float)
-0:103        Convert int to float (temp 4-component vector of float)
-0:103          Convert float to int (temp 4-component vector of int)
-0:103            'attv4' (in 4-component vector of float)
-0:103        Constant:
-0:103          0.000000
-0:103        Constant:
-0:103          1.000000
-0:106      Constant:
-0:106        0.000000
-0:107      Constant:
-0:107        0.000000
-0:108      Constant:
-0:108        0.000000
-0:109      Function Call: overloadE(vf2; (global 3-component vector of float)
-0:109        Constant:
-0:109          3.300000
-0:109          3.300000
-0:110      Function Call: overloadE(mf22; (global 3-component vector of float)
-0:110        Constant:
-0:110          0.500000
-0:110          0.000000
-0:110          0.000000
-0:110          0.500000
-0:111      Constant:
-0:111        0.000000
-0:112      Function Call: overloadE(vf2; (global 3-component vector of float)
-0:112        Constant:
-0:112          1.000000
-0:112          1.000000
-0:115      Function Call: overloadE(f1[2]; (global 3-component vector of float)
-0:115        'b' (temp 2-element array of float)
-0:117      Constant:
-0:117        0.000000
-0:118      Function Call: overloadF(i1; (global 3-component vector of float)
-0:118        Constant:
-0:118          1 (const int)
-0:128  Function Definition: foo2( (global void)
-0:128    Function Parameters: 
-0:?     Sequence
-0:135      Comma (global void)
-0:135        Function Call: outFun(f1;vi2;i1;f1; (global void)
-0:135          Convert int to float (temp float)
-0:135            'i' (temp int)
-0:135          'tempArg' (temp 2-component vector of int)
-0:135          'i' (temp int)
-0:135          'f' (temp float)
-0:135        move second child to first child (temp 2-component vector of float)
-0:135          'v2' (temp 2-component vector of float)
-0:135          Convert int to float (temp 2-component vector of float)
-0:135            'tempArg' (temp 2-component vector of int)
-0:136      Comma (global int)
-0:136        move second child to first child (temp int)
-0:136          'tempReturn' (global int)
-0:136          Function Call: outFunRet(f1;i1;i1;vi4; (global int)
-0:136            Convert int to float (temp float)
-0:136              'i' (temp int)
-0:136            'tempArg' (temp int)
-0:136            'i' (temp int)
-0:136            'tempArg' (temp 4-component vector of int)
-0:136        move second child to first child (temp float)
-0:136          'f' (temp float)
-0:136          Convert int to float (temp float)
-0:136            'tempArg' (temp int)
-0:136        move second child to first child (temp 4-component vector of float)
-0:136          'v4' (temp 4-component vector of float)
-0:136          Convert int to float (temp 4-component vector of float)
-0:136            'tempArg' (temp 4-component vector of int)
-0:136        'tempReturn' (global int)
-0:137      Sequence
-0:137        move second child to first child (temp float)
-0:137          'ret' (temp float)
-0:137          Convert int to float (temp float)
-0:137            Comma (global int)
-0:137              move second child to first child (temp int)
-0:137                'tempReturn' (global int)
-0:137                Function Call: outFunRet(f1;i1;i1;vi4; (global int)
-0:137                  Convert int to float (temp float)
-0:137                    'i' (temp int)
-0:137                  'tempArg' (temp int)
-0:137                  'i' (temp int)
-0:137                  'tempArg' (temp 4-component vector of int)
-0:137              move second child to first child (temp float)
-0:137                'f' (temp float)
-0:137                Convert int to float (temp float)
-0:137                  'tempArg' (temp int)
-0:137              move second child to first child (temp 4-component vector of float)
-0:137                'v4' (temp 4-component vector of float)
-0:137                Convert int to float (temp 4-component vector of float)
-0:137                  'tempArg' (temp 4-component vector of int)
-0:137              'tempReturn' (global int)
-0:138      Sequence
-0:138        move second child to first child (temp 2-component vector of float)
-0:138          'ret2' (temp 2-component vector of float)
-0:138          Convert int to float (temp 2-component vector of float)
-0:138            Comma (global 2-component vector of int)
-0:138              move second child to first child (temp 2-component vector of int)
-0:138                'tempReturn' (global 2-component vector of int)
-0:138                Function Call: outFunRet(f1;vi4;i1;vi4; (global 2-component vector of int)
-0:138                  Convert int to float (temp float)
-0:138                    'i' (temp int)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138                  'i' (temp int)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              move second child to first child (temp 4-component vector of float)
-0:138                'v4' (temp 4-component vector of float)
-0:138                Convert int to float (temp 4-component vector of float)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              move second child to first child (temp 4-component vector of float)
-0:138                'v4' (temp 4-component vector of float)
-0:138                Convert int to float (temp 4-component vector of float)
-0:138                  'tempArg' (temp 4-component vector of int)
-0:138              'tempReturn' (global 2-component vector of int)
-0:139      Sequence
-0:139        move second child to first child (temp bool)
-0:139          'b' (temp bool)
-0:139          any (global bool)
-0:139            Compare Less Than (global 4-component vector of bool)
-0:139              'v4' (temp 4-component vector of float)
-0:139              'attv4' (in 4-component vector of float)
-0:142  Function Definition: noise( (global void)
-0:142    Function Parameters: 
-0:144    Sequence
-0:144      Sequence
-0:144        move second child to first child (temp float)
-0:144          'f1' (temp float)
-0:144          noise (global float)
-0:144            Constant:
-0:144              1.000000
-0:145      Sequence
-0:145        move second child to first child (temp 2-component vector of float)
-0:145          'f2' (temp 2-component vector of float)
-0:145          noise (global 2-component vector of float)
-0:145            Constant:
-0:145              1.000000
-0:145              1.000000
-0:146      Sequence
-0:146        move second child to first child (temp 3-component vector of float)
-0:146          'f3' (temp 3-component vector of float)
-0:146          noise (global 3-component vector of float)
-0:146            Constant:
-0:146              1.000000
-0:146              1.000000
-0:146              1.000000
-0:147      Sequence
-0:147        move second child to first child (temp 4-component vector of float)
-0:147          'f4' (temp 4-component vector of float)
-0:147          noise (global 4-component vector of float)
-0:147            Constant:
-0:147              1.000000
-0:147              1.000000
-0:147              1.000000
-0:147              1.000000
-0:162  Function Definition: foo213( (global void)
-0:162    Function Parameters: 
-0:164    Sequence
-0:164      Sequence
-0:164        move second child to first child (temp float)
-0:164          'f' (temp float)
-0:164          Constant:
-0:164            3.000000
-0:165      switch
-0:165      condition
-0:165        'c' (uniform int)
-0:165      body
-0:165        Sequence
-0:166          case:  with expression
-0:166            Constant:
-0:166              1 (const int)
-0:?           Sequence
-0:167            move second child to first child (temp float)
-0:167              'f' (temp float)
-0:167              sine (global float)
-0:167                'f' (temp float)
-0:168            Branch: Break
-0:169          case:  with expression
-0:169            Constant:
-0:169              2 (const int)
-0:?           Sequence
-0:170            move second child to first child (temp float)
-0:170              'f' (temp float)
-0:170              component-wise multiply (temp float)
-0:170                'f' (temp float)
-0:170                'f' (temp float)
-0:171          default: 
-0:?           Sequence
-0:172            move second child to first child (temp float)
-0:172              'f' (temp float)
-0:172              Constant:
-0:172                3.000000
-0:176      inclusive-or (temp int)
-0:176        left-shift (temp int)
-0:176          'i' (temp int)
-0:176          Constant:
-0:176            3 (const int)
-0:176        Constant:
-0:176          69 (const int)
-0:180      Sequence
-0:180        move second child to first child (temp float)
-0:180          't' (temp float)
-0:180          Constant:
-0:180            0.000000
-0:186      Constant:
-0:186        0.000000
-0:188      Constant:
-0:188        0.000000
-0:189      Constant:
-0:189        0.000000
-0:192      move second child to first child (temp float)
-0:192        Constant:
-0:192          0.000000
-0:192        Constant:
-0:192          0.300000
 0:?   Linker Objects
 0:?     'i' (in 4-component vector of float)
 0:?     'o' (smooth out 4-component vector of float)
@@ -772,7 +492,6 @@ ERROR: node is still EOpNull!
 0:?     'concall' (const float)
 0:?       0.295520
 0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
 0:?     'c' (uniform int)
 0:?     'x' (in 2-component vector of int)
 0:?     'v2a' (in 2-component vector of float)
@@ -780,5 +499,6 @@ ERROR: node is still EOpNull!
 0:?     'c2D' (in 2-component vector of float)
 0:?     'c3D' (in 3-component vector of float)
 0:?     'v4' (uniform 4-component vector of float)
-0:?     'abc' (global int)
+0:?     'abcdef' (global int)
+0:?     'qrstuv' (global int)
 
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index b2b4dd06567c9291ccf8859088cf18c7026ccb3c..e71b3e28e38dbfaf53e7be4b29276581244758d6 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -383,8 +383,7 @@ ERROR: node is still EOpNull!
 0:?     'fnop' (noperspective in float)
 0:?     'gl_ClipDistance' (smooth in implicitly-sized array of float ClipDistance)
 0:?     'sampC' (uniform samplerCube)
-0:?     'gl_Color' (smooth in 4-component vector of float Color)
-0:?     'gl_Color' (flat in 4-component vector of float Color)
+0:?     'gl_Color' (in 4-component vector of float Color)
 0:?     'samp2D' (uniform sampler2D)
 0:?     'samp2DS' (uniform sampler2DShadow)
 0:?     'samp2DR' (uniform sampler2DRect)
@@ -428,326 +427,6 @@ ERROR: node is still EOpNull!
 0:18            'gl_ClipDistance' (smooth in 4-element array of float ClipDistance)
 0:18            Constant:
 0:18              3 (const int)
-0:23  Function Definition: foo( (global void)
-0:23    Function Parameters: 
-0:25    Sequence
-0:25      Sequence
-0:25        move second child to first child (temp 4-component vector of float)
-0:25          's' (temp 4-component vector of float)
-0:25          textureGather (global 4-component vector of float)
-0:25            'sampC' (uniform samplerCube)
-0:25            Constant:
-0:25              0.200000
-0:25              0.200000
-0:25              0.200000
-0:30  Function Definition: bar( (global void)
-0:30    Function Parameters: 
-0:32    Sequence
-0:32      Sequence
-0:32        move second child to first child (temp 4-component vector of float)
-0:32          's' (temp 4-component vector of float)
-0:32          textureGather (global 4-component vector of float)
-0:32            'sampC' (uniform samplerCube)
-0:32            Constant:
-0:32              0.200000
-0:32              0.200000
-0:32              0.200000
-0:43  Function Definition: bar2( (global void)
-0:43    Function Parameters: 
-0:45    Sequence
-0:45      Sequence
-0:45        move second child to first child (temp 4-component vector of float)
-0:45          's' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
-0:45            'sampC' (uniform samplerCube)
-0:45            Constant:
-0:45              0.200000
-0:45              0.200000
-0:45              0.200000
-0:49      move second child to first child (temp 3-component vector of bool)
-0:49        'b3' (temp 3-component vector of bool)
-0:49        Compare Less Than (global 3-component vector of bool)
-0:49          'uv3' (temp 3-component vector of uint)
-0:49          'uv3' (temp 3-component vector of uint)
-0:50      move second child to first child (temp 3-component vector of bool)
-0:50        'b3' (temp 3-component vector of bool)
-0:50        Equal (global 3-component vector of bool)
-0:50          'uv3' (temp 3-component vector of uint)
-0:50          'uv3' (temp 3-component vector of uint)
-0:56      direct index (temp int)
-0:56        'a1' (temp 1-element array of int)
-0:56        Constant:
-0:56          0 (const int)
-0:57      direct index (temp int)
-0:57        'a2' (temp 1-element array of int)
-0:57        Constant:
-0:57          0 (const int)
-0:60      direct index (temp int)
-0:60        'a3' (temp 4-element array of int)
-0:60        Constant:
-0:60          3 (const int)
-0:61      Compare Not Equal (temp bool)
-0:61        'b3' (temp 3-component vector of bool)
-0:61        'b3' (temp 3-component vector of bool)
-0:62      Constant:
-0:62        false (const bool)
-0:63      Constant:
-0:63        false (const bool)
-0:64      Constant:
-0:64        false (const bool)
-0:65      Constant:
-0:65        true (const bool)
-0:66      Constant:
-0:66        false (const bool)
-0:77  Function Definition: bar23( (global void)
-0:77    Function Parameters: 
-0:?     Sequence
-0:80      's' (temp 4-component vector of float)
-0:81      move second child to first child (temp 4-component vector of float)
-0:81        's' (temp 4-component vector of float)
-0:81        textureGatherOffset (global 4-component vector of float)
-0:81          'samp2DR' (uniform sampler2DRect)
-0:81          Constant:
-0:81            0.300000
-0:81            0.300000
-0:81          Constant:
-0:81            1 (const int)
-0:81            1 (const int)
-0:82      move second child to first child (temp 4-component vector of float)
-0:82        's' (temp 4-component vector of float)
-0:82        textureGatherOffset (global 4-component vector of float)
-0:82          'samp2D' (uniform sampler2D)
-0:82          Constant:
-0:82            0.300000
-0:82            0.300000
-0:82          Constant:
-0:82            1 (const int)
-0:82            1 (const int)
-0:83      move second child to first child (temp 4-component vector of float)
-0:83        's' (temp 4-component vector of float)
-0:83        textureGatherOffset (global 4-component vector of float)
-0:83          'samp2DA' (uniform sampler2DArray)
-0:83          Constant:
-0:83            0.300000
-0:83            0.300000
-0:83            0.300000
-0:83          Constant:
-0:83            1 (const int)
-0:83            1 (const int)
-0:84      move second child to first child (temp 4-component vector of float)
-0:84        's' (temp 4-component vector of float)
-0:84        textureGatherOffset (global 4-component vector of float)
-0:84          'samp2DS' (uniform sampler2DShadow)
-0:84          Constant:
-0:84            0.300000
-0:84            0.300000
-0:84          Constant:
-0:84            1.300000
-0:84          Constant:
-0:84            1 (const int)
-0:84            1 (const int)
-0:85      move second child to first child (temp 4-component vector of float)
-0:85        's' (temp 4-component vector of float)
-0:85        textureGatherOffset (global 4-component vector of float)
-0:85          'samp2D' (uniform sampler2D)
-0:85          Constant:
-0:85            0.300000
-0:85            0.300000
-0:85          Constant:
-0:85            1 (const int)
-0:85            1 (const int)
-0:85          Constant:
-0:85            2 (const int)
-0:90  Function Definition: bar234( (global void)
-0:90    Function Parameters: 
-0:?     Sequence
-0:93      move second child to first child (temp 4-component vector of float)
-0:93        's' (temp 4-component vector of float)
-0:93        textureGatherOffset (global 4-component vector of float)
-0:93          'samp2D' (uniform sampler2D)
-0:93          Constant:
-0:93            0.300000
-0:93            0.300000
-0:93          Constant:
-0:93            1 (const int)
-0:93            1 (const int)
-0:94      move second child to first child (temp 4-component vector of float)
-0:94        's' (temp 4-component vector of float)
-0:94        textureGatherOffset (global 4-component vector of float)
-0:94          'samp2DA' (uniform sampler2DArray)
-0:94          Constant:
-0:94            0.300000
-0:94            0.300000
-0:94            0.300000
-0:94          Constant:
-0:94            1 (const int)
-0:94            1 (const int)
-0:95      move second child to first child (temp 4-component vector of float)
-0:95        's' (temp 4-component vector of float)
-0:95        textureGatherOffset (global 4-component vector of float)
-0:95          'samp2DR' (uniform sampler2DRect)
-0:95          Constant:
-0:95            0.300000
-0:95            0.300000
-0:95          Constant:
-0:95            1 (const int)
-0:95            1 (const int)
-0:96      move second child to first child (temp 4-component vector of float)
-0:96        's' (temp 4-component vector of float)
-0:96        textureGatherOffset (global 4-component vector of float)
-0:96          'samp2DS' (uniform sampler2DShadow)
-0:96          Constant:
-0:96            0.300000
-0:96            0.300000
-0:96          Constant:
-0:96            1.300000
-0:96          Constant:
-0:96            1 (const int)
-0:96            1 (const int)
-0:97      move second child to first child (temp 4-component vector of float)
-0:97        's' (temp 4-component vector of float)
-0:97        textureGatherOffset (global 4-component vector of float)
-0:97          'samp2D' (uniform sampler2D)
-0:97          Constant:
-0:97            0.300000
-0:97            0.300000
-0:97          Constant:
-0:97            1 (const int)
-0:97            1 (const int)
-0:97          Constant:
-0:97            2 (const int)
-0:107  Function Definition: bar235( (global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Sequence
-0:109        move second child to first child (temp 3-component vector of int)
-0:109          'a' (temp 3-component vector of int)
-0:109          textureSize (global 3-component vector of int)
-0:109            'Sca' (uniform samplerCubeArray)
-0:109            Constant:
-0:109              3 (const int)
-0:110      Sequence
-0:110        move second child to first child (temp 4-component vector of float)
-0:110          'b' (temp 4-component vector of float)
-0:110          texture (global 4-component vector of float)
-0:110            'Sca' (uniform samplerCubeArray)
-0:110            'i' (smooth in 4-component vector of float)
-0:111      Sequence
-0:111        move second child to first child (temp 4-component vector of int)
-0:111          'c' (temp 4-component vector of int)
-0:111          texture (global 4-component vector of int)
-0:111            'Isca' (uniform isamplerCubeArray)
-0:111            'i' (smooth in 4-component vector of float)
-0:111            Constant:
-0:111              0.700000
-0:112      Sequence
-0:112        move second child to first child (temp 4-component vector of uint)
-0:112          'd' (temp 4-component vector of uint)
-0:112          texture (global 4-component vector of uint)
-0:112            'Usca' (uniform usamplerCubeArray)
-0:112            'i' (smooth in 4-component vector of float)
-0:114      move second child to first child (temp 4-component vector of float)
-0:114        'b' (temp 4-component vector of float)
-0:114        textureLod (global 4-component vector of float)
-0:114          'Sca' (uniform samplerCubeArray)
-0:114          'i' (smooth in 4-component vector of float)
-0:114          Constant:
-0:114            1.700000
-0:115      move second child to first child (temp 3-component vector of int)
-0:115        'a' (temp 3-component vector of int)
-0:115        textureSize (global 3-component vector of int)
-0:115          'Scas' (uniform samplerCubeArrayShadow)
-0:115          direct index (temp int)
-0:115            'a' (temp 3-component vector of int)
-0:115            Constant:
-0:115              0 (const int)
-0:116      Sequence
-0:116        move second child to first child (temp float)
-0:116          'f' (temp float)
-0:116          texture (global float)
-0:116            'Scas' (uniform samplerCubeArrayShadow)
-0:116            'i' (smooth in 4-component vector of float)
-0:116            direct index (temp float)
-0:116              'b' (temp 4-component vector of float)
-0:116              Constant:
-0:116                1 (const int)
-0:117      move second child to first child (temp 4-component vector of int)
-0:117        'c' (temp 4-component vector of int)
-0:117        textureGrad (global 4-component vector of int)
-0:117          'Isca' (uniform isamplerCubeArray)
-0:117          'i' (smooth in 4-component vector of float)
-0:117          Constant:
-0:117            0.100000
-0:117            0.100000
-0:117            0.100000
-0:117          Constant:
-0:117            0.200000
-0:117            0.200000
-0:117            0.200000
-0:129  Function Definition: bar23444( (global void)
-0:129    Function Parameters: 
-0:?     Sequence
-0:132      Sequence
-0:132        move second child to first child (temp float)
-0:132          'a1' (temp float)
-0:132          direct index (temp float)
-0:132            direct index (temp 3-component vector of float)
-0:132              'm43' (temp 4X3 matrix of float)
-0:132              Constant:
-0:132                3 (const int)
-0:132            Constant:
-0:132              1 (const int)
-0:134      Sequence
-0:134        move second child to first child (temp int)
-0:134          'a2' (temp int)
-0:134          Constant:
-0:134            4 (const int)
-0:135      add second child into first child (temp int)
-0:135        'a2' (temp int)
-0:135        Constant:
-0:135          3 (const int)
-0:136      add second child into first child (temp int)
-0:136        'a2' (temp int)
-0:136        Constant:
-0:136          3 (const int)
-0:137      Sequence
-0:137        move second child to first child (temp float)
-0:137          'b' (const (read only) float)
-0:137          component-wise multiply (temp float)
-0:137            Constant:
-0:137              2.000000
-0:137            'a1' (temp float)
-0:138      move second child to first child (temp float)
-0:138        direct index (temp float)
-0:138          'a' (global 3-component vector of float)
-0:138          Constant:
-0:138            0 (const int)
-0:138        Constant:
-0:138          -1.000000
-0:140      Constant:
-0:140        0.000000
-0:141      Constant:
-0:141        0.000000
-0:143      Constant:
-0:143        1 (const int)
-0:162  Function Definition: qux2( (global void)
-0:162    Function Parameters: 
-0:?     Sequence
-0:165      imageAtomicCompSwap (global int)
-0:165        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:165        Construct ivec2 (temp 2-component vector of int)
-0:165          'i' (temp int)
-0:165          'i' (temp int)
-0:165        'i' (temp int)
-0:165        'i' (temp int)
-0:166      Sequence
-0:166        move second child to first child (temp 4-component vector of int)
-0:166          'pos' (temp 4-component vector of int)
-0:166          imageLoad (global 4-component vector of int)
-0:166            'iimg2D' (layout(r32i ) uniform iimage2D)
-0:166            Construct ivec2 (temp 2-component vector of int)
-0:166              'i' (temp int)
-0:166              'i' (temp int)
 0:?   Linker Objects
 0:?     'a' (global 3-component vector of float)
 0:?     'b' (global float)
@@ -759,8 +438,7 @@ ERROR: node is still EOpNull!
 0:?     'fnop' (noperspective in float)
 0:?     'gl_ClipDistance' (smooth in 4-element array of float ClipDistance)
 0:?     'sampC' (uniform samplerCube)
-0:?     'gl_Color' (smooth in 4-component vector of float Color)
-0:?     'gl_Color' (flat in 4-component vector of float Color)
+0:?     'gl_Color' (in 4-component vector of float Color)
 0:?     'samp2D' (uniform sampler2D)
 0:?     'samp2DS' (uniform sampler2DShadow)
 0:?     'samp2DR' (uniform sampler2DRect)
diff --git a/Test/baseResults/130.vert.out b/Test/baseResults/130.vert.out
index 7cfeb19d8e332cfb9add095edf186706ff3bb5e7..7ca32a13aa1cf0454df152fc0ae58d61c70e5683 100644
--- a/Test/baseResults/130.vert.out
+++ b/Test/baseResults/130.vert.out
@@ -3,9 +3,7 @@ ERROR: 0:59: 'gl_InstanceID' : undeclared identifier
 ERROR: 0:59: '=' :  cannot convert from 'temp float' to 'temp int'
 ERROR: 0:61: 'texelFetch' : no matching overloaded function found 
 ERROR: 0:61: 'assign' :  cannot convert from 'const float' to 'temp int'
-ERROR: 0:75: '##' : token pasting not implemented (internal error) 
-ERROR: 0:75: '' :  syntax error
-ERROR: 6 compilation errors.  No code generated.
+ERROR: 4 compilation errors.  No code generated.
 
 
 Shader version: 130
@@ -149,7 +147,8 @@ ERROR: node is still EOpNull!
 0:?     'v4' (uniform 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth out implicitly-sized array of float ClipDistance)
 0:?     'gl_TexCoord' (smooth out implicitly-sized array of 4-component vector of float TexCoord)
-0:?     'abc' (global int)
+0:?     'abcdef' (global int)
+0:?     'qrstuv' (global int)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
 
@@ -269,23 +268,6 @@ ERROR: node is still EOpNull!
 0:46            1 (const int)
 0:46        Constant:
 0:46          0.300000
-0:57  Function Definition: foo88( (global void)
-0:57    Function Parameters: 
-0:?     Sequence
-0:61      'id' (temp int)
-0:63      'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:64      'gl_Color' (in 4-component vector of float Color)
-0:65      direct index (temp structure{global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation})
-0:65        'gl_LightSource' (uniform 32-element array of structure{global 4-component vector of float ambient, global 4-component vector of float diffuse, global 4-component vector of float specular, global 4-component vector of float position, global 4-component vector of float halfVector, global 3-component vector of float spotDirection, global float spotExponent, global float spotCutoff, global float spotCosCutoff, global float constantAttenuation, global float linearAttenuation, global float quadraticAttenuation})
-0:65        Constant:
-0:65          0 (const int)
-0:66      far: direct index for structure (global float)
-0:66        'gl_DepthRange' (uniform structure{global float near, global float far, global float diff})
-0:66        Constant:
-0:66          1 (const int)
-0:67      'gl_TexCoord' (smooth out 1-element array of 4-component vector of float TexCoord)
-0:68      'gl_FogFragCoord' (smooth out float FogFragCoord)
-0:69      'gl_FrontColor' (smooth out 4-component vector of float FrontColor)
 0:?   Linker Objects
 0:?     'c' (uniform int)
 0:?     'us2D' (uniform usampler2D)
@@ -298,6 +280,7 @@ ERROR: node is still EOpNull!
 0:?     'v4' (uniform 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth out 2-element array of float ClipDistance)
 0:?     'gl_TexCoord' (smooth out 1-element array of 4-component vector of float TexCoord)
-0:?     'abc' (global int)
+0:?     'abcdef' (global int)
+0:?     'qrstuv' (global int)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index fbeee83a7641f0527f941cb95d6d8ebefeb77a9a..224cd30d8e7bdca7fe5db6c14a5803d8f76e919d 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -104,7 +104,6 @@ ERROR: node is still EOpNull!
 0:?     'i' (smooth in 4-component vector of float)
 0:?     'o' (out 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
 0:?     'vl' (layout(location=3 ) smooth in 4-component vector of float)
@@ -137,51 +136,6 @@ ERROR: node is still EOpNull!
 0:22      'patch' (global float)
 0:22      Constant:
 0:22        3.100000
-0:38  Function Definition: foo( (global void)
-0:38    Function Parameters: 
-0:40    Sequence
-0:40      Sequence
-0:40        move second child to first child (temp 2-component vector of float)
-0:40          'r1' (temp 2-component vector of float)
-0:40          modf (global 2-component vector of float)
-0:40            vector swizzle (temp 2-component vector of float)
-0:40              'v' (smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:40            vector swizzle (temp 2-component vector of float)
-0:40              'v' (smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  2 (const int)
-0:40                Constant:
-0:40                  3 (const int)
-0:41      Sequence
-0:41        move second child to first child (temp 2-component vector of float)
-0:41          'r2' (temp 2-component vector of float)
-0:41          modf (global 2-component vector of float)
-0:41            vector swizzle (temp 2-component vector of float)
-0:41              'o' (out 4-component vector of float)
-0:41              Sequence
-0:41                Constant:
-0:41                  0 (const int)
-0:41                Constant:
-0:41                  1 (const int)
-0:41            vector swizzle (temp 2-component vector of float)
-0:41              'o' (out 4-component vector of float)
-0:41              Sequence
-0:41                Constant:
-0:41                  2 (const int)
-0:41                Constant:
-0:41                  3 (const int)
-0:42      move second child to first child (temp float)
-0:42        direct index (temp float)
-0:42          'o' (out 4-component vector of float)
-0:42          Constant:
-0:42            2 (const int)
-0:42        Function Call: fooi( (global float)
 0:47  Sequence
 0:47    move second child to first child (temp float)
 0:47      'i1' (global float)
@@ -199,19 +153,11 @@ ERROR: node is still EOpNull!
 0:48      'i2' (global float)
 0:48      Constant:
 0:48        102.000000
-0:50  Function Definition: fooi( (global float)
-0:50    Function Parameters: 
-0:52    Sequence
-0:52      Branch: Return with expression
-0:52        add (temp float)
-0:52          'i1' (global float)
-0:52          'i2' (global float)
 0:?   Linker Objects
 0:?     'v' (smooth in 4-component vector of float)
 0:?     'i' (smooth in 4-component vector of float)
 0:?     'o' (out 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
 0:?     'vl' (layout(location=3 ) smooth in 4-component vector of float)
diff --git a/Test/baseResults/140.vert.out b/Test/baseResults/140.vert.out
index 634458cd11dfb1268544b4751483f5a87ba8843a..e7f88e320750fa7512346f9c34d95fea9093a7c0 100644
--- a/Test/baseResults/140.vert.out
+++ b/Test/baseResults/140.vert.out
@@ -124,11 +124,8 @@ ERROR: node is still EOpNull!
 0:?     'locBad' (layout(location=9 ) in 4-component vector of float)
 0:?     'loc' (layout(location=9 ) in 4-component vector of float)
 0:?     'gl_PointSize' (gl_PointSize float PointSize)
-0:?     'gl_PointSize' (gl_PointSize float PointSize)
-0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
 0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
 0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
-0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     's2dr' (uniform sampler2DRect)
 0:?     's2drs' (uniform sampler2DRectShadow)
 0:?     'itloc2' (in 2-component vector of int)
@@ -181,71 +178,6 @@ ERROR: node is still EOpNull!
 0:18      'gl_TexCoord' (smooth out 1-element array of 4-component vector of float TexCoord)
 0:19      'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:20      'gl_FrontColor' (smooth out 4-component vector of float FrontColor)
-0:48  Function Definition: foo( (global void)
-0:48    Function Parameters: 
-0:50    Sequence
-0:50      Sequence
-0:50        move second child to first child (temp 4-component vector of float)
-0:50          'v' (temp 4-component vector of float)
-0:50          textureFetch (global 4-component vector of float)
-0:50            's2dr' (uniform sampler2DRect)
-0:50            'itloc2' (in 2-component vector of int)
-0:51      add second child into first child (temp 4-component vector of float)
-0:51        'v' (temp 4-component vector of float)
-0:51        Constant:
-0:51          0.000000
-0:52      add second child into first child (temp 4-component vector of float)
-0:52        'v' (temp 4-component vector of float)
-0:52        texture (global 4-component vector of float)
-0:52          's2dr' (uniform sampler2DRect)
-0:52          'tloc2' (in 2-component vector of float)
-0:53      add second child into first child (temp 4-component vector of float)
-0:53        'v' (temp 4-component vector of float)
-0:53        Constant:
-0:53          0.000000
-0:54      add second child into first child (temp 4-component vector of float)
-0:54        'v' (temp 4-component vector of float)
-0:54        texture (global float)
-0:54          's2drs' (uniform sampler2DRectShadow)
-0:54          'tloc3' (in 3-component vector of float)
-0:55      add second child into first child (temp 4-component vector of float)
-0:55        'v' (temp 4-component vector of float)
-0:55        textureProj (global 4-component vector of float)
-0:55          's2dr' (uniform sampler2DRect)
-0:55          'tloc3' (in 3-component vector of float)
-0:56      add second child into first child (temp 4-component vector of float)
-0:56        'v' (temp 4-component vector of float)
-0:56        textureProj (global 4-component vector of float)
-0:56          's2dr' (uniform sampler2DRect)
-0:56          'tloc4' (in 4-component vector of float)
-0:57      add second child into first child (temp 4-component vector of float)
-0:57        'v' (temp 4-component vector of float)
-0:57        textureProjGradOffset (global 4-component vector of float)
-0:57          's2dr' (uniform sampler2DRect)
-0:57          'tloc4' (in 4-component vector of float)
-0:57          Constant:
-0:57            0.000000
-0:57            0.000000
-0:57          Constant:
-0:57            0.000000
-0:57            0.000000
-0:57          Constant:
-0:57            1 (const int)
-0:57            2 (const int)
-0:58      add second child into first child (temp 4-component vector of float)
-0:58        'v' (temp 4-component vector of float)
-0:58        textureProjGradOffset (global float)
-0:58          's2drs' (uniform sampler2DRectShadow)
-0:58          'tloc4' (in 4-component vector of float)
-0:58          Constant:
-0:58            0.000000
-0:58            0.000000
-0:58          Constant:
-0:58            0.000000
-0:58            0.000000
-0:58          Constant:
-0:58            1 (const int)
-0:58            2 (const int)
 0:?   Linker Objects
 0:?     'sbuf' (uniform isamplerBuffer)
 0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 offset=0 ) uniform int anonMem})
@@ -254,10 +186,7 @@ ERROR: node is still EOpNull!
 0:?     'locBad' (layout(location=9 ) in 4-component vector of float)
 0:?     'loc' (layout(location=9 ) in 4-component vector of float)
 0:?     'gl_PointSize' (gl_PointSize float PointSize)
-0:?     'gl_PointSize' (gl_PointSize float PointSize)
 0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     's2dr' (uniform sampler2DRect)
 0:?     's2drs' (uniform sampler2DRectShadow)
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 082a8274c00717f28df55309da2f9748e051b379..143de3b5a15dc67d940776d554709a03a5f6e3ac 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -108,7 +108,6 @@ ERROR: node is still EOpNull!
 0:49        'gl_PrimitiveID' (flat in int PrimitiveID)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' (smooth in 4-component vector of float)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
@@ -142,93 +141,8 @@ ERROR: node is still EOpNull!
 0:18      'patch' (global float)
 0:18      Constant:
 0:18        3.100000
-0:31  Function Definition: barWxyz( (global void)
-0:31    Function Parameters: 
-0:33    Sequence
-0:33      Sequence
-0:33        move second child to first child (temp 2-component vector of int)
-0:33          't11' (temp 2-component vector of int)
-0:33          textureSize (global 2-component vector of int)
-0:33            'sms' (uniform sampler2DMS)
-0:34      Sequence
-0:34        move second child to first child (temp 2-component vector of int)
-0:34          't12' (temp 2-component vector of int)
-0:34          textureSize (global 2-component vector of int)
-0:34            'isms' (uniform isampler2DMS)
-0:35      Sequence
-0:35        move second child to first child (temp 2-component vector of int)
-0:35          't13' (temp 2-component vector of int)
-0:35          textureSize (global 2-component vector of int)
-0:35            'usms' (uniform usampler2DMS)
-0:36      Sequence
-0:36        move second child to first child (temp 3-component vector of int)
-0:36          't21' (temp 3-component vector of int)
-0:36          textureSize (global 3-component vector of int)
-0:36            'smsa' (uniform sampler2DMSArray)
-0:37      Sequence
-0:37        move second child to first child (temp 3-component vector of int)
-0:37          't22' (temp 3-component vector of int)
-0:37          textureSize (global 3-component vector of int)
-0:37            'ismsa' (uniform isampler2DMSArray)
-0:38      Sequence
-0:38        move second child to first child (temp 3-component vector of int)
-0:38          't23' (temp 3-component vector of int)
-0:38          textureSize (global 3-component vector of int)
-0:38            'usmsa' (uniform usampler2DMSArray)
-0:39      Sequence
-0:39        move second child to first child (temp 4-component vector of float)
-0:39          't31' (temp 4-component vector of float)
-0:39          textureFetch (global 4-component vector of float)
-0:39            'sms' (uniform sampler2DMS)
-0:39            'p2' (flat in 2-component vector of int)
-0:39            'samp' (flat in int)
-0:40      Sequence
-0:40        move second child to first child (temp 4-component vector of int)
-0:40          't32' (temp 4-component vector of int)
-0:40          textureFetch (global 4-component vector of int)
-0:40            'isms' (uniform isampler2DMS)
-0:40            'p2' (flat in 2-component vector of int)
-0:40            'samp' (flat in int)
-0:41      Sequence
-0:41        move second child to first child (temp 4-component vector of uint)
-0:41          't33' (temp 4-component vector of uint)
-0:41          textureFetch (global 4-component vector of uint)
-0:41            'usms' (uniform usampler2DMS)
-0:41            'p2' (flat in 2-component vector of int)
-0:41            Constant:
-0:41              3 (const int)
-0:42      Sequence
-0:42        move second child to first child (temp 4-component vector of float)
-0:42          't41' (temp 4-component vector of float)
-0:42          textureFetch (global 4-component vector of float)
-0:42            'smsa' (uniform sampler2DMSArray)
-0:42            'p3' (flat in 3-component vector of int)
-0:42            'samp' (flat in int)
-0:43      Sequence
-0:43        move second child to first child (temp 4-component vector of int)
-0:43          't42' (temp 4-component vector of int)
-0:43          textureFetch (global 4-component vector of int)
-0:43            'ismsa' (uniform isampler2DMSArray)
-0:43            Constant:
-0:43              2 (const int)
-0:43              2 (const int)
-0:43              2 (const int)
-0:43            'samp' (flat in int)
-0:44      Sequence
-0:44        move second child to first child (temp 4-component vector of uint)
-0:44          't43' (temp 4-component vector of uint)
-0:44          textureFetch (global 4-component vector of uint)
-0:44            'usmsa' (uniform usampler2DMSArray)
-0:44            'p3' (flat in 3-component vector of int)
-0:44            'samp' (flat in int)
-0:47  Function Definition: primitiveID( (global int)
-0:47    Function Parameters: 
-0:49    Sequence
-0:49      Branch: Return with expression
-0:49        'gl_PrimitiveID' (flat in int PrimitiveID)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' (smooth in 4-component vector of float)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index 48b7925fc4d0410d0b7c65bbf24f9eab3c0f360f..dc5a41a27b9383a4646b97f4cb2efeefd050184a 100644
--- a/Test/baseResults/150.geom.out
+++ b/Test/baseResults/150.geom.out
@@ -255,39 +255,11 @@ ERROR: node is still EOpNull!
 0:37        'gl_Layer' (layout(stream=0 ) out int Layer)
 0:37        Constant:
 0:37          2 (const int)
-0:67  Function Definition: foo(i1; (global void)
-0:67    Function Parameters: 
-0:67      'a' (in int)
-0:69    Sequence
-0:69      move second child to first child (temp 4-component vector of float)
-0:69        a: direct index for structure (layout(stream=6 ) out 4-component vector of float)
-0:69          'ouuaa6' (layout(stream=6 ) out block{layout(stream=6 ) out 4-component vector of float a})
-0:69          Constant:
-0:69            0 (const int)
-0:69        Constant:
-0:69          1.000000
-0:69          1.000000
-0:69          1.000000
-0:69          1.000000
 0:107  Sequence
 0:107    move second child to first child (temp float)
 0:107      'summ' (global float)
 0:107      Constant:
 0:107        11332.000000
-0:127  Function Definition: fooe1( (global void)
-0:127    Function Parameters: 
-0:129    Sequence
-0:129      move second child to first child (temp int)
-0:129        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
-0:129        Constant:
-0:129          15 (const int)
-0:134  Function Definition: fooe2( (global void)
-0:134    Function Parameters: 
-0:136    Sequence
-0:136      move second child to first child (temp int)
-0:136        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
-0:136        Constant:
-0:136          15 (const int)
 0:?   Linker Objects
 0:?     'fromV' (in 4-element array of block{in 3-component vector of float color})
 0:?     'toF' (layout(stream=0 ) out block{layout(stream=0 ) out 3-component vector of float color})
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 1736bf0e3ffd280759909f3ed7867b2e36952579..21fade77b967c962701f34c58736f17d0f6d98c8 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -910,8 +910,10 @@ ERROR: node is still EOpNull!
 
 Linked tessellation control stage:
 
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Contradictory layout vertices values
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
@@ -921,6 +923,7 @@ ERROR: Linking tessellation control stage: Types must match:
     gl_out: "out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus "out implicitly-sized array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance}"
 ERROR: Linking tessellation control stage: Types must match:
     outa: "global 4-element array of int" versus "global 1-element array of int"
+ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
@@ -934,8 +937,10 @@ ERROR: Linking tessellation control stage: Types must match:
 
 Linked tessellation evaluation stage:
 
+ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
+ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation evaluation stage: Contradictory input layout primitives
 ERROR: Linking tessellation evaluation stage: Contradictory input vertex spacing
 ERROR: Linking tessellation evaluation stage: Contradictory triangle ordering
@@ -1184,35 +1189,6 @@ vertices = 4
 0:56        Barrier (global void)
 0:59      Branch: Return
 0:61      Barrier (global void)
-0:67  Function Definition: foo( (global void)
-0:67    Function Parameters: 
-0:69    Sequence
-0:69      gl_PointSize: direct index for structure (out float PointSize)
-0:69        direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          Constant:
-0:69            4 (const int)
-0:69        Constant:
-0:69          1 (const int)
-0:71      Barrier (global void)
-0:91  Function Definition: foop( (global void)
-0:91    Function Parameters: 
-0:?     Sequence
-0:95      multiply second child into first child (temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:96      move second child to first child (temp 3-component vector of float)
-0:96        'pv3' (noContraction temp 3-component vector of float)
-0:96        fma (global 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:97      move second child to first child (temp double)
-0:97        'd' (noContraction temp double)
-0:97        fma (global double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
 0:8  Function Definition: main( (global void)
 0:8    Function Parameters: 
 0:15  Function Definition: main( (global void)
@@ -1274,41 +1250,6 @@ vertices = 4
 0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:26        'gl_InvocationID' (in int InvocationID)
-0:34  Function Definition: foo( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Test condition and select (temp void)
-0:36        Condition
-0:36        logical-or (temp bool)
-0:36          Compare Not Equal (temp bool)
-0:36            Constant:
-0:36              -0.625000
-0:36              -0.500000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.125000
-0:36              0.000000
-0:36            direct index (layout(location=0 ) temp 2X4 matrix of double)
-0:36              'vs_tcs_first' (layout(location=0 ) in 32-element array of 2X4 matrix of double)
-0:36              Constant:
-0:36                0 (const int)
-0:37          Compare Not Equal (temp bool)
-0:37            Constant:
-0:37              0.375000
-0:37              0.500000
-0:37              0.625000
-0:37              0.750000
-0:37              0.625000
-0:37              0.750000
-0:37              0.875000
-0:37              -0.625000
-0:37            direct index (layout(location=12 ) temp 2X4 matrix of double)
-0:37              'vs_tcs_last' (layout(location=12 ) in 32-element array of 2X4 matrix of double)
-0:37              Constant:
-0:37                0 (const int)
-0:36        true case is null
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' (global 4-element array of int)
diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out
index 2a3341ac7483d07fff3a987c65d511ac52e19736..cca6abd7efb4baa618284ac82c2502486f900096 100644
--- a/Test/baseResults/300.frag.out
+++ b/Test/baseResults/300.frag.out
@@ -28,7 +28,7 @@ ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled
 ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'array-of-array of block' : not supported with this profile: es
-ERROR: 0:111: 'variable indexing fragment shader ouput array' : not supported with this profile: es
+ERROR: 0:111: 'variable indexing fragment shader output array' : not supported with this profile: es
 ERROR: 0:119: '==' : can't use with samplers or structs containing samplers 
 ERROR: 0:120: '!=' : can't use with samplers or structs containing samplers 
 ERROR: 0:121: '==' : can't use with samplers or structs containing samplers 
@@ -592,131 +592,6 @@ ERROR: node is still EOpNull!
 0:96          'c4D' (smooth temp lowp 4-component vector of float)
 0:97      arc hyp. tangent (global lowp 3-component vector of float)
 0:97        'c3D' (smooth in lowp 3-component vector of float)
-0:108  Function Definition: foo( (global void)
-0:108    Function Parameters: 
-0:110    Sequence
-0:110      move second child to first child (temp lowp 4-component vector of float)
-0:110        direct index (temp lowp 4-component vector of float)
-0:110          'colors' (out 4-element array of lowp 4-component vector of float)
-0:110          Constant:
-0:110            2 (const int)
-0:110        'c4D' (smooth temp lowp 4-component vector of float)
-0:111      move second child to first child (temp lowp 4-component vector of float)
-0:111        indirect index (temp lowp 4-component vector of float)
-0:111          'colors' (out 4-element array of lowp 4-component vector of float)
-0:111          'ic1D' (flat in mediump int)
-0:111        'c4D' (smooth temp lowp 4-component vector of float)
-0:117  Function Definition: foo13(struct-s-i1-s211; (global void)
-0:117    Function Parameters: 
-0:117      'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:119    Sequence
-0:119      Test condition and select (temp void)
-0:119        Condition
-0:119        Compare Equal (temp bool)
-0:119          'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:119          'st2' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:119        true case is null
-0:120      Test condition and select (temp void)
-0:120        Condition
-0:120        Compare Not Equal (temp bool)
-0:120          'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:120          'st2' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:120        true case is null
-0:121      Constant:
-0:121        false (const bool)
-0:122      move second child to first child (temp structure{global mediump int i, global lowp sampler2D s})
-0:122        'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:122        'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:123      Compare Equal (temp bool)
-0:123        'inSt2' (in structure{global mediump int i, global lowp sampler2D s})
-0:123        'st1' (uniform structure{global mediump int i, global lowp sampler2D s})
-0:126  Function Definition: foo23( (global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      textureOffset (global lowp float)
-0:128        's2DShadow' (uniform lowp sampler2DShadow)
-0:128        'c3D' (smooth in lowp 3-component vector of float)
-0:128        Constant:
-0:128          -8 (const int)
-0:128          7 (const int)
-0:128        'c1D' (smooth in lowp float)
-0:129      textureOffset (global lowp float)
-0:129        's2DShadow' (uniform lowp sampler2DShadow)
-0:129        'c3D' (smooth in lowp 3-component vector of float)
-0:129        Constant:
-0:129          -9 (const int)
-0:129          8 (const int)
-0:129        'c1D' (smooth in lowp float)
-0:132  Function Definition: foo324( (global void)
-0:132    Function Parameters: 
-0:134    Sequence
-0:134      Sequence
-0:134        move second child to first child (temp lowp float)
-0:134          'p' (temp lowp float)
-0:134          Constant:
-0:134            210.712306
-0:135      add second child into first child (temp lowp float)
-0:135        'p' (temp lowp float)
-0:135        Constant:
-0:135          0.389418
-0:136      add second child into first child (temp lowp float)
-0:136        'p' (temp lowp float)
-0:136        Constant:
-0:136          5.000000
-0:137      add second child into first child (temp lowp float)
-0:137        'p' (temp lowp float)
-0:137        Constant:
-0:137          13.000000
-0:138      Sequence
-0:138        move second child to first child (temp lowp 3-component vector of float)
-0:138          'c3' (temp lowp 3-component vector of float)
-0:138          Constant:
-0:138            -15.000000
-0:138            -2.000000
-0:138            39.000000
-0:139      add second child into first child (temp lowp 3-component vector of float)
-0:139        'c3' (temp lowp 3-component vector of float)
-0:139        Constant:
-0:139          -1.000000
-0:139          -2.000000
-0:139          -3.000000
-0:140      add second child into first child (temp lowp 3-component vector of float)
-0:140        'c3' (temp lowp 3-component vector of float)
-0:140        Constant:
-0:140          1.000000
-0:140          2.000000
-0:140          3.000000
-0:141      Sequence
-0:141        move second child to first child (temp lowp 2-component vector of float)
-0:141          'c2' (temp lowp 2-component vector of float)
-0:141          Constant:
-0:141            1.000000
-0:141            -3.000000
-0:142      add second child into first child (temp lowp 2-component vector of float)
-0:142        'c2' (temp lowp 2-component vector of float)
-0:142        Constant:
-0:142          1.000000
-0:142          -3.000000
-0:143      add second child into first child (temp lowp 2-component vector of float)
-0:143        'c2' (temp lowp 2-component vector of float)
-0:143        Constant:
-0:143          3.000000
-0:143          -8.544004
-0:144      add second child into first child (temp lowp 2-component vector of float)
-0:144        'c2' (temp lowp 2-component vector of float)
-0:144        Constant:
-0:144          0.000000
-0:144          0.000000
-0:145      Sequence
-0:145        move second child to first child (temp lowp 3X2 matrix of float)
-0:145          'm32' (temp lowp 3X2 matrix of float)
-0:145          Constant:
-0:145            10.000000
-0:145            15.000000
-0:145            14.000000
-0:145            21.000000
-0:145            22.000000
-0:145            33.000000
 0:?   Linker Objects
 0:?     's2D' (uniform lowp sampler2D)
 0:?     's3D' (uniform lowp sampler3D)
diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out
index 66a06517d363c900baad0a89b58c4f032ec13003..5f060cba8e6d0f0f5873f3d833a32bf8c506b63e 100644
--- a/Test/baseResults/300.vert.out
+++ b/Test/baseResults/300.vert.out
@@ -9,7 +9,7 @@ ERROR: 0:12: '' : vertex input cannot be further qualified
 ERROR: 0:13: '' : interpolation qualifiers must appear before storage and precision qualifiers 
 ERROR: 0:14: '' : in/out must appear before const 
 ERROR: 0:15: '' : precision qualifier must appear as last qualifier 
-ERROR: 0:16: '' : can only have one interpolation qualifier (flat, smooth, noperspective) 
+ERROR: 0:16: '' : can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD) 
 ERROR: 0:17: 'sample' : Reserved word. 
 ERROR: 0:17: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
 ERROR: 0:18: 'uniform' : too many storage qualifiers 
@@ -308,9 +308,9 @@ ERROR: node is still EOpNull!
 0:?     'badsize2' (global implicitly-sized array of highp float)
 0:?     'ubInst' (layout(column_major shared ) uniform implicitly-sized array of block{layout(column_major shared ) uniform implicitly-sized array of highp int a})
 0:?     'okayA' (global 2-element array of highp float)
-0:?     'newV' (smooth out highp 3-component vector of float)
-0:?     'invIn' (in highp 4-component vector of float)
-0:?     's2' (smooth out structure{global highp 3-component vector of float c, global highp float f})
+0:?     'newV' (invariant smooth out highp 3-component vector of float)
+0:?     'invIn' (invariant in highp 4-component vector of float)
+0:?     's2' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     's3' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     'a' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform highp float f})
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b23})
@@ -447,132 +447,6 @@ ERROR: node is still EOpNull!
 0:68      Constant:
 0:68        3.000000
 0:68        4.000000
-0:71  Function Definition: newVFun( (global void)
-0:71    Function Parameters: 
-0:73    Sequence
-0:73      move second child to first child (temp highp 3-component vector of float)
-0:73        'newV' (smooth out highp 3-component vector of float)
-0:73        'v3' (in highp 3-component vector of float)
-0:118  Function Definition: foo23( (global void)
-0:118    Function Parameters: 
-0:120    Sequence
-0:120      Sequence
-0:120        move second child to first child (temp highp 2-component vector of int)
-0:120          'x1' (temp highp 2-component vector of int)
-0:120          textureSize (global highp 2-component vector of int, operation at lowp)
-0:120            's2D' (uniform lowp sampler2D)
-0:120            Constant:
-0:120              2 (const int)
-0:121      Constant:
-0:121        0.000000
-0:122      Sequence
-0:122        move second child to first child (temp highp 3-component vector of int)
-0:122          'x3' (temp highp 3-component vector of int)
-0:122          textureSize (global highp 3-component vector of int, operation at lowp)
-0:122            's2DAS' (uniform lowp sampler2DArrayShadow)
-0:122            Constant:
-0:122              -1 (const int)
-0:123      Constant:
-0:123        0.000000
-0:124      Sequence
-0:124        move second child to first child (temp highp 4-component vector of float)
-0:124          'x4' (temp highp 4-component vector of float)
-0:124          texture (global lowp 4-component vector of float, operation at highp)
-0:124            's2D' (uniform lowp sampler2D)
-0:124            'c2D' (in highp 2-component vector of float)
-0:125      Constant:
-0:125        0.000000
-0:126      Sequence
-0:126        move second child to first child (temp highp 4-component vector of float)
-0:126          'x5' (temp highp 4-component vector of float)
-0:126          textureProjOffset (global lowp 4-component vector of float)
-0:126            's3D' (uniform lowp sampler3D)
-0:126            Constant:
-0:126              0.200000
-0:126              0.200000
-0:126              0.200000
-0:126              0.200000
-0:126            Constant:
-0:126              1 (const int)
-0:126              1 (const int)
-0:126              1 (const int)
-0:127      Constant:
-0:127        0.000000
-0:128      Sequence
-0:128        move second child to first child (temp highp float)
-0:128          'x6' (temp highp float)
-0:128          textureProjGradOffset (global lowp float, operation at highp)
-0:128            's2DS' (uniform lowp sampler2DShadow)
-0:128            'invIn' (invariant in highp 4-component vector of float)
-0:128            Constant:
-0:128              4.200000
-0:128              4.200000
-0:128            Constant:
-0:128              5.300000
-0:128              5.300000
-0:128            Constant:
-0:128              1 (const int)
-0:128              1 (const int)
-0:137  Function Definition: foo2349( (global void)
-0:137    Function Parameters: 
-0:139    Sequence
-0:139      Sequence
-0:139        move second child to first child (temp 3-element array of highp float)
-0:139          'x' (temp 3-element array of highp float)
-0:139          Constant:
-0:139            1.000000
-0:139            2.000000
-0:139            3.000000
-0:140      Sequence
-0:140        move second child to first child (temp 3-element array of highp float)
-0:140          'y' (temp 3-element array of highp float)
-0:140          'x' (temp 3-element array of highp float)
-0:141      Sequence
-0:141        move second child to first child (temp 3-element array of highp float)
-0:141          'z' (temp 3-element array of highp float)
-0:141          'x' (temp 3-element array of highp float)
-0:143      move second child to first child (temp 3-element array of highp float)
-0:143        'w' (temp 3-element array of highp float)
-0:143        'y' (temp 3-element array of highp float)
-0:155  Function Definition: gggf(f1; (global highp int)
-0:155    Function Parameters: 
-0:155      'f' (in highp float)
-0:155    Sequence
-0:155      Branch: Return with expression
-0:155        Constant:
-0:155          2 (const int)
-0:158  Function Definition: agggf(f1; (global highp int)
-0:158    Function Parameters: 
-0:158      'f' (in highp float)
-0:158    Sequence
-0:158      Branch: Return with expression
-0:158        Constant:
-0:158          2 (const int)
-0:178  Function Definition: fooDeeparray( (global void)
-0:178    Function Parameters: 
-0:181    Sequence
-0:181      Sequence
-0:180        move second child to first child (temp 3-element array of highp float)
-0:180          'x' (temp 3-element array of highp float)
-0:180          Constant:
-0:180            1.000000
-0:180            2.000000
-0:180            3.000000
-0:181        move second child to first child (temp 4-element array of highp float)
-0:181          'y' (temp 4-element array of highp float)
-0:181          Constant:
-0:181            1.000000
-0:181            2.000000
-0:181            3.000000
-0:181            4.000000
-0:183      move second child to first child (temp 3-element array of highp float)
-0:183        'xp' (temp 3-element array of highp float)
-0:183        'x' (temp 3-element array of highp float)
-0:184      move second child to first child (temp 4-element array of highp float)
-0:184        'yp' (temp 4-element array of highp float)
-0:184        'y' (temp 4-element array of highp float)
-0:185      'xp' (temp 3-element array of highp float)
-0:186      'yp' (temp 4-element array of highp float)
 0:?   Linker Objects
 0:?     'm43' (uniform highp 4X3 matrix of float)
 0:?     'm33' (uniform highp 3X3 matrix of float)
@@ -592,9 +466,9 @@ ERROR: node is still EOpNull!
 0:?     'badsize2' (global 1-element array of highp float)
 0:?     'ubInst' (layout(column_major shared ) uniform 1-element array of block{layout(column_major shared ) uniform 1-element array of highp int a})
 0:?     'okayA' (global 2-element array of highp float)
-0:?     'newV' (smooth out highp 3-component vector of float)
-0:?     'invIn' (in highp 4-component vector of float)
-0:?     's2' (smooth out structure{global highp 3-component vector of float c, global highp float f})
+0:?     'newV' (invariant smooth out highp 3-component vector of float)
+0:?     'invIn' (invariant in highp 4-component vector of float)
+0:?     's2' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     's3' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     'a' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform highp float f})
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b23})
diff --git a/Test/baseResults/300scope.vert.out b/Test/baseResults/300scope.vert.out
index 2a9a945d01d2739581ff59344a93857fb5d33473..e340cf6aab5cff3e4b7cf82194f07f06ab56d62f 100644
--- a/Test/baseResults/300scope.vert.out
+++ b/Test/baseResults/300scope.vert.out
@@ -131,6 +131,8 @@ ERROR: node is still EOpNull!
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 300
 ERROR: node is still EOpNull!
@@ -151,16 +153,6 @@ ERROR: node is still EOpNull!
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in highp int)
-0:25  Function Definition: cos(f1; (global highp float)
-0:25    Function Parameters: 
-0:25      'x' (in highp float)
-0:27    Sequence
-0:27      Branch: Return
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index 9a5e4e89f4c6dde38af418e536a427a1f94745d7..a5be10e13eb2e4a9464ac25008252084e5025196 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -536,340 +536,6 @@ ERROR: node is still EOpNull!
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' (in highp uint LocalInvocationIndex)
-0:59  Function Definition: foo( (global void)
-0:59    Function Parameters: 
-0:61    Sequence
-0:61      move second child to first child (temp highp float)
-0:61        direct index (layout(column_major shared ) temp highp float)
-0:61          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:61            'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:61            Constant:
-0:61              1 (const int)
-0:61          Constant:
-0:61            2 (const int)
-0:61        Constant:
-0:61          4.700000
-0:62      array length (temp int)
-0:62        values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:62          'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:62          Constant:
-0:62            1 (const int)
-0:63      Pre-Increment (temp highp 4-component vector of float)
-0:63        's' (shared highp 4-component vector of float)
-0:84  Function Definition: qux( (global void)
-0:84    Function Parameters: 
-0:86    Sequence
-0:86      Sequence
-0:86        move second child to first child (temp highp int)
-0:86          'i' (temp highp int)
-0:86          Constant:
-0:86            4 (const int)
-0:87      imageAtomicCompSwap (global highp int)
-0:87        'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:87        Construct ivec2 (temp highp 2-component vector of int)
-0:87          'i' (temp highp int)
-0:87          'i' (temp highp int)
-0:87        'i' (temp highp int)
-0:87        'i' (temp highp int)
-0:88      imageAtomicAdd (global highp uint)
-0:88        'uimg2D' (layout(r32ui ) uniform mediump uimage2D)
-0:88        Construct ivec2 (temp highp 2-component vector of int)
-0:88          'i' (temp highp int)
-0:88          'i' (temp highp int)
-0:88        Convert int to uint (temp highp uint)
-0:88          'i' (temp highp int)
-0:89      imageAtomicMin (global highp int)
-0:89        'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D)
-0:89        Construct ivec2 (temp highp 2-component vector of int)
-0:89          'i' (temp highp int)
-0:89          'i' (temp highp int)
-0:89        'i' (temp highp int)
-0:90      Constant:
-0:90        0.000000
-0:91      Sequence
-0:91        move second child to first child (temp highp 4-component vector of int)
-0:91          'pos' (temp highp 4-component vector of int)
-0:91          imageLoad (global highp 4-component vector of int)
-0:91            'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:91            Construct ivec2 (temp highp 2-component vector of int)
-0:91              'i' (temp highp int)
-0:91              'i' (temp highp int)
-0:92      imageStore (global highp void)
-0:92        'ii2da' (writeonly uniform highp iimage2DArray)
-0:92        Construct ivec3 (temp 3-component vector of int)
-0:92          'i' (temp highp int)
-0:92          'i' (temp highp int)
-0:92          'i' (temp highp int)
-0:92        Constant:
-0:92          0 (const int)
-0:92          0 (const int)
-0:92          0 (const int)
-0:92          0 (const int)
-0:93      imageLoad (global mediump 4-component vector of float)
-0:93        'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D)
-0:93        Construct ivec2 (temp mediump 2-component vector of int)
-0:93          'i' (temp highp int)
-0:93          'i' (temp highp int)
-0:94      imageLoad (global highp 4-component vector of int)
-0:94        'ii2da' (writeonly uniform highp iimage2DArray)
-0:94        Construct ivec3 (temp highp 3-component vector of int)
-0:94          'i' (temp highp int)
-0:94          'i' (temp highp int)
-0:94          'i' (temp highp int)
-0:100  Function Definition: passr(iI21; (global void)
-0:100    Function Parameters: 
-0:100      'image' (coherent readonly in highp iimage2D)
-0:107  Function Definition: passrc( (global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Function Call: passr(iI21; (global void)
-0:109        'qualim1' (layout(r32i ) coherent readonly uniform highp iimage2D)
-0:110      Function Call: passr(iI21; (global void)
-0:110        'qualim2' (layout(r32i ) coherent restrict readonly uniform highp iimage2D)
-0:111      Function Call: passr(iI21; (global void)
-0:111        'iimg2D' (layout(r32i ) uniform highp iimage2D)
-0:123  Function Definition: func(au1; (global highp uint)
-0:123    Function Parameters: 
-0:123      'c' (in highp atomic_uint)
-0:125    Sequence
-0:125      Branch: Return with expression
-0:125        AtomicCounterIncrement (global highp uint)
-0:125          'c' (in highp atomic_uint)
-0:128  Function Definition: func2(au1; (global highp uint)
-0:128    Function Parameters: 
-0:128      'c' (out highp atomic_uint)
-0:130    Sequence
-0:130      Branch: Return with expression
-0:130        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:131      Branch: Return with expression
-0:131        AtomicCounter (global highp uint)
-0:131          'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:134  Function Definition: mainAC( (global void)
-0:134    Function Parameters: 
-0:?     Sequence
-0:137      Sequence
-0:137        move second child to first child (temp highp uint)
-0:137          'val' (temp highp uint)
-0:137          AtomicCounter (global highp uint)
-0:137            'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:138      AtomicCounterDecrement (global highp uint)
-0:138        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:146  Function Definition: opac( (global void)
-0:146    Function Parameters: 
-0:?     Sequence
-0:149      indirect index (temp highp int)
-0:149        'a' (temp 3-element array of highp int)
-0:149        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:150      direct index (layout(binding=2 offset=4 ) temp highp atomic_uint)
-0:150        'countArr' (layout(binding=2 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:150        Constant:
-0:150          2 (const int)
-0:151      indirect index (layout(binding=2 offset=4 ) temp highp atomic_uint)
-0:151        'countArr' (layout(binding=2 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:151        'i' (uniform highp int)
-0:157  Function Definition: atoms( (global void)
-0:157    Function Parameters: 
-0:159    Sequence
-0:159      Sequence
-0:159        move second child to first child (temp highp int)
-0:159          'origi' (temp highp int)
-0:159          AtomicAdd (global highp int)
-0:159            'atomi' (shared highp int)
-0:159            Constant:
-0:159              3 (const int)
-0:160      Sequence
-0:160        move second child to first child (temp highp uint)
-0:160          'origu' (temp highp uint)
-0:160          AtomicAnd (global highp uint)
-0:160            'atomu' (shared highp uint)
-0:160            Constant:
-0:160              7 (const uint)
-0:161      move second child to first child (temp highp int)
-0:161        'origi' (temp highp int)
-0:161        AtomicExchange (global highp int)
-0:161          'atomi' (shared highp int)
-0:161          Constant:
-0:161            4 (const int)
-0:162      move second child to first child (temp highp uint)
-0:162        'origu' (temp highp uint)
-0:162        AtomicCompSwap (global highp uint)
-0:162          'atomu' (shared highp uint)
-0:162          Constant:
-0:162            10 (const uint)
-0:162          Constant:
-0:162            8 (const uint)
-0:191  Function Definition: foowo( (global void)
-0:191    Function Parameters: 
-0:?     Sequence
-0:194      move second child to first child (temp highp float)
-0:194        'g' (temp highp float)
-0:194        direct index (layout(column_major shared ) temp highp float)
-0:194          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:194            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:194            Constant:
-0:194              1 (const int)
-0:194          Constant:
-0:194            2 (const int)
-0:195      Sequence
-0:195        move second child to first child (temp highp float)
-0:195          'f' (temp highp float)
-0:195          direct index (layout(column_major shared ) temp highp float)
-0:195            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:195              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:195              Constant:
-0:195                1 (const int)
-0:195            Constant:
-0:195              2 (const int)
-0:196      Pre-Increment (temp highp float)
-0:196        direct index (layout(column_major shared ) temp highp float)
-0:196          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:196            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:196            Constant:
-0:196              1 (const int)
-0:196          Constant:
-0:196            2 (const int)
-0:197      Post-Decrement (temp highp float)
-0:197        direct index (layout(column_major shared ) temp highp float)
-0:197          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:197            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:197            Constant:
-0:197              1 (const int)
-0:197          Constant:
-0:197            2 (const int)
-0:198      add (temp highp float)
-0:198        'f' (temp highp float)
-0:198        direct index (layout(column_major shared ) temp highp float)
-0:198          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:198            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:198            Constant:
-0:198              1 (const int)
-0:198          Constant:
-0:198            2 (const int)
-0:199      subtract (temp highp float)
-0:199        direct index (layout(column_major shared ) temp highp float)
-0:199          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:199            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:199            Constant:
-0:199              1 (const int)
-0:199          Constant:
-0:199            2 (const int)
-0:199        'f' (temp highp float)
-0:201      Test condition and select (temp highp float)
-0:201        Condition
-0:201        'b' (temp bool)
-0:201        true case
-0:201        'f' (temp highp float)
-0:201        false case
-0:201        direct index (layout(column_major shared ) temp highp float)
-0:201          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:201            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:201            Constant:
-0:201              1 (const int)
-0:201          Constant:
-0:201            2 (const int)
-0:202      Test condition and select (temp highp float)
-0:202        Condition
-0:202        'b' (temp bool)
-0:202        true case
-0:202        direct index (layout(column_major shared ) temp highp float)
-0:202          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:202            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:202            Constant:
-0:202              1 (const int)
-0:202          Constant:
-0:202            2 (const int)
-0:202        false case
-0:202        'f' (temp highp float)
-0:203      Test condition and select (temp void)
-0:203        Condition
-0:203        Compare Equal (temp bool)
-0:203          'f' (temp highp float)
-0:203          direct index (layout(column_major shared ) temp highp float)
-0:203            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:203              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:203              Constant:
-0:203                1 (const int)
-0:203            Constant:
-0:203              2 (const int)
-0:203        true case
-0:204        Pre-Increment (temp highp float)
-0:204          'f' (temp highp float)
-0:205      Test condition and select (temp void)
-0:205        Condition
-0:205        Compare Greater Than or Equal (temp bool)
-0:205          'f' (temp highp float)
-0:205          direct index (layout(column_major shared ) temp highp float)
-0:205            values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:205              'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:205              Constant:
-0:205                1 (const int)
-0:205            Constant:
-0:205              2 (const int)
-0:205        true case
-0:206        Pre-Increment (temp highp float)
-0:206          'f' (temp highp float)
-0:207      move second child to first child (temp highp float)
-0:207        'f' (temp highp float)
-0:207        direct index (temp highp float)
-0:207          Construct vec3 (temp highp 3-component vector of float)
-0:207            direct index (layout(column_major shared ) temp highp float)
-0:207              values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:207                'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:207                Constant:
-0:207                  1 (const int)
-0:207              Constant:
-0:207                2 (const int)
-0:207          Constant:
-0:207            0 (const int)
-0:208      Bitwise not (temp highp int)
-0:208        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:208          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:208          Constant:
-0:208            0 (const int)
-0:209      move second child to first child (temp highp float)
-0:209        direct index (layout(column_major shared ) temp highp float)
-0:209          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:209            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:209            Constant:
-0:209              1 (const int)
-0:209          Constant:
-0:209            2 (const int)
-0:209        Constant:
-0:209          3.400000
-0:218  Function Definition: foomultio( (global void)
-0:218    Function Parameters: 
-0:?     Sequence
-0:221      move second child to first child (temp highp float)
-0:221        'g' (temp highp float)
-0:221        direct index (layout(column_major shared ) temp highp float)
-0:221          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:221            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:221            Constant:
-0:221              1 (const int)
-0:221          Constant:
-0:221            2 (const int)
-0:222      Bitwise not (temp highp int)
-0:222        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:222          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:222          Constant:
-0:222            0 (const int)
-0:223      move second child to first child (temp highp float)
-0:223        direct index (layout(column_major shared ) temp highp float)
-0:223          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp float)
-0:223            'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:223            Constant:
-0:223              1 (const int)
-0:223          Constant:
-0:223            2 (const int)
-0:223        Constant:
-0:223          3.400000
-0:224      move second child to first child (temp highp int)
-0:224        value: direct index for structure (layout(column_major shared ) buffer highp int)
-0:224          'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values})
-0:224          Constant:
-0:224            0 (const int)
-0:224        Constant:
-0:224          2 (const int)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const highp 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 6cfd3f44318c3e7e3e15491881dbb9f0b6da9dcf..34cae953bd24df06c86480497ccf41365b3bc299 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -963,7 +963,6 @@ ERROR: node is still EOpNull!
 0:?     'aliased' (layout(location=13 ) smooth in mediump 4-component vector of float)
 0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 0:?     'inf' (smooth in mediump 2-component vector of float)
 0:?     'ing' (smooth in mediump 2-component vector of float)
 0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
@@ -1126,677 +1125,6 @@ ERROR: node is still EOpNull!
 0:34            0.100000
 0:34          Construct ivec2 (temp highp 2-component vector of int)
 0:34            'i' (uniform mediump int)
-0:38  Function Definition: foo23( (global void)
-0:38    Function Parameters: 
-0:?     Sequence
-0:42      textureProjGradOffset (global highp 4-component vector of uint)
-0:42        'usamp2d' (uniform highp usampler2D)
-0:42        'outp' (out mediump 4-component vector of float)
-0:42        Constant:
-0:42          0.000000
-0:42          0.000000
-0:42        Constant:
-0:42          0.000000
-0:42          0.000000
-0:42        Convert float to int (temp highp 2-component vector of int)
-0:42          'c2D' (smooth in mediump 2-component vector of float)
-0:43      textureProjGradOffset (global highp 4-component vector of uint)
-0:43        'usamp2d' (uniform highp usampler2D)
-0:43        'outp' (out mediump 4-component vector of float)
-0:43        Constant:
-0:43          0.000000
-0:43          0.000000
-0:43        Constant:
-0:43          0.000000
-0:43          0.000000
-0:43        Constant:
-0:43          3 (const int)
-0:43          4 (const int)
-0:44      textureProjGradOffset (global highp 4-component vector of uint)
-0:44        'usamp2d' (uniform highp usampler2D)
-0:44        'outp' (out mediump 4-component vector of float)
-0:44        Constant:
-0:44          0.000000
-0:44          0.000000
-0:44        Constant:
-0:44          0.000000
-0:44          0.000000
-0:44        Constant:
-0:44          15 (const int)
-0:44          16 (const int)
-0:45      textureProjGradOffset (global highp 4-component vector of uint)
-0:45        'usamp2d' (uniform highp usampler2D)
-0:45        'outp' (out mediump 4-component vector of float)
-0:45        Constant:
-0:45          0.000000
-0:45          0.000000
-0:45        Constant:
-0:45          0.000000
-0:45          0.000000
-0:45        Constant:
-0:45          -10 (const int)
-0:45          20 (const int)
-0:47      Test condition and select (temp void)
-0:47        Condition
-0:47        'gl_HelperInvocation' (in bool HelperInvocation)
-0:47        true case
-0:48        Pre-Increment (temp mediump 4-component vector of float)
-0:48          'outp' (out mediump 4-component vector of float)
-0:50      Sequence
-0:50        move second child to first child (temp mediump int)
-0:50          'sum' (temp mediump int)
-0:50          Constant:
-0:50            32 (const int)
-0:58      move second child to first child (temp bool)
-0:58        'b1' (temp bool)
-0:58        mix (global bool)
-0:58          'b2' (temp bool)
-0:58          'b3' (temp bool)
-0:58          'b' (temp bool)
-0:59      Sequence
-0:59        move second child to first child (temp mediump 3-component vector of uint)
-0:59          'um3' (temp mediump 3-component vector of uint)
-0:59          mix (global mediump 3-component vector of uint)
-0:59            Construct uvec3 (temp mediump 3-component vector of uint)
-0:59              Convert int to uint (temp mediump uint)
-0:59                'i' (uniform mediump int)
-0:59            Construct uvec3 (temp mediump 3-component vector of uint)
-0:59              Convert int to uint (temp mediump uint)
-0:59                'i' (uniform mediump int)
-0:59            Construct bvec3 (temp 3-component vector of bool)
-0:59              'b' (temp bool)
-0:60      Sequence
-0:60        move second child to first child (temp mediump 4-component vector of int)
-0:60          'im4' (temp mediump 4-component vector of int)
-0:60          mix (global mediump 4-component vector of int)
-0:60            Construct ivec4 (temp mediump 4-component vector of int)
-0:60              'i' (uniform mediump int)
-0:60            Construct ivec4 (temp mediump 4-component vector of int)
-0:60              'i' (uniform mediump int)
-0:60            Construct bvec4 (temp 4-component vector of bool)
-0:60              'b' (temp bool)
-0:98  Function Definition: foots( (global void)
-0:98    Function Parameters: 
-0:100    Sequence
-0:100      Sequence
-0:100        move second child to first child (temp highp 2-component vector of int)
-0:100          'v2' (temp highp 2-component vector of int)
-0:100          textureSize (global highp 2-component vector of int)
-0:100            's1' (layout(binding=3 ) uniform highp sampler2D)
-0:100            Constant:
-0:100              2 (const int)
-0:101      Sequence
-0:101        move second child to first child (temp highp 3-component vector of int)
-0:101          'v3' (temp highp 3-component vector of int)
-0:101          textureSize (global highp 3-component vector of int)
-0:101            'isamp2DA' (uniform highp isampler2DArray)
-0:101            Constant:
-0:101              3 (const int)
-0:102      move second child to first child (temp highp 2-component vector of int)
-0:102        'v2' (temp highp 2-component vector of int)
-0:102        textureSize (global highp 2-component vector of int, operation at mediump)
-0:102          's2dms' (uniform mediump sampler2DMS)
-0:103      move second child to first child (temp highp 2-component vector of int)
-0:103        'v2' (temp highp 2-component vector of int)
-0:103        imageQuerySize (global highp 2-component vector of int)
-0:103          'i2D' (layout(binding=2 ) writeonly uniform highp image2D)
-0:104      move second child to first child (temp highp 3-component vector of int)
-0:104        'v3' (temp highp 3-component vector of int)
-0:104        imageQuerySize (global highp 3-component vector of int, operation at mediump)
-0:104          'i3D' (layout(binding=4 ) readonly uniform mediump image3D)
-0:105      move second child to first child (temp highp 2-component vector of int)
-0:105        'v2' (temp highp 2-component vector of int)
-0:105        imageQuerySize (global highp 2-component vector of int, operation at mediump)
-0:105          'iCube' (layout(binding=5 ) uniform mediump imageCube)
-0:106      move second child to first child (temp highp 3-component vector of int)
-0:106        'v3' (temp highp 3-component vector of int)
-0:106        imageQuerySize (global highp 3-component vector of int, operation at mediump)
-0:106          'i2DA' (layout(binding=6 ) uniform mediump image2DArray)
-0:107      move second child to first child (temp highp 2-component vector of int)
-0:107        'v2' (temp highp 2-component vector of int)
-0:107        imageQuerySize (global highp 2-component vector of int, operation at mediump)
-0:107          'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D)
-0:165  Function Definition: fooIO( (global void)
-0:165    Function Parameters: 
-0:167    Sequence
-0:167      Sequence
-0:167        move second child to first child (temp mediump 4-component vector of float)
-0:167          'v' (temp mediump 4-component vector of float)
-0:167          add (temp mediump 4-component vector of float)
-0:167            v: direct index for structure (in mediump 4-component vector of float)
-0:167              'inbinst' (in block{in mediump int a, in mediump 4-component vector of float v, in structure{global mediump int b} s})
-0:167              Constant:
-0:167                1 (const int)
-0:167            vAnon: direct index for structure (layout(location=13 ) centroid in mediump 4-component vector of float)
-0:167              'anon@0' (in block{layout(location=12 ) in mediump int aAnon, layout(location=13 ) centroid in mediump 4-component vector of float vAnon})
-0:167              Constant:
-0:167                1 (const uint)
-0:168      vector scale second child into first child (temp mediump 4-component vector of float)
-0:168        'v' (temp mediump 4-component vector of float)
-0:168        f: direct index for structure (in mediump float)
-0:168          direct index (temp block{in mediump float f})
-0:168            'arrayedInst' (in 4-element array of block{in mediump float f})
-0:168            Constant:
-0:168              2 (const int)
-0:168          Constant:
-0:168            0 (const int)
-0:169      vector scale second child into first child (temp mediump 4-component vector of float)
-0:169        'v' (temp mediump 4-component vector of float)
-0:169        f: direct index for structure (in mediump float)
-0:169          indirect index (temp block{in mediump float f})
-0:169            'arrayedInst' (in 4-element array of block{in mediump float f})
-0:169            'i' (uniform mediump int)
-0:169          Constant:
-0:169            0 (const int)
-0:179  Function Definition: foo_IO( (global void)
-0:179    Function Parameters: 
-0:181    Sequence
-0:181      move second child to first child (temp highp float)
-0:181        'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:181        Constant:
-0:181          0.200000
-0:182      'gl_Layer' (flat in highp int Layer)
-0:183      'gl_PrimitiveID' (flat in highp int PrimitiveID)
-0:184      Sequence
-0:184        move second child to first child (temp bool)
-0:184          'f' (temp bool)
-0:184          'gl_FrontFacing' (gl_FrontFacing bool Face)
-0:191  Function Definition: foo_GS( (global void)
-0:191    Function Parameters: 
-0:193    Sequence
-0:193      Sequence
-0:193        move second child to first child (temp highp int)
-0:193          'l' (temp highp int)
-0:193          'gl_Layer' (flat in highp int Layer)
-0:194      Sequence
-0:194        move second child to first child (temp highp int)
-0:194          'p' (temp highp int)
-0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
-0:207  Function Definition: pfooBad( (global void)
-0:207    Function Parameters: 
-0:?     Sequence
-0:210      move second child to first child (temp mediump 2-component vector of float)
-0:210        'h' (noContraction temp mediump 2-component vector of float)
-0:210        fma (global mediump 2-component vector of float)
-0:210          'inf' (smooth in mediump 2-component vector of float)
-0:210          'ing' (smooth in mediump 2-component vector of float)
-0:210          'h' (noContraction temp mediump 2-component vector of float)
-0:211      textureGatherOffset (global highp 4-component vector of float)
-0:211        direct index (temp highp sampler2D)
-0:211          'sArray' (uniform 4-element array of highp sampler2D)
-0:211          Constant:
-0:211            0 (const int)
-0:211        Constant:
-0:211          0.100000
-0:211          0.100000
-0:211        Convert float to int (temp highp 2-component vector of int)
-0:211          'inf' (smooth in mediump 2-component vector of float)
-0:212      textureGatherOffsets (global highp 4-component vector of float)
-0:212        direct index (temp highp sampler2D)
-0:212          'sArray' (uniform 4-element array of highp sampler2D)
-0:212          Constant:
-0:212            0 (const int)
-0:212        Constant:
-0:212          0.100000
-0:212          0.100000
-0:212        Constant:
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:212          0 (const int)
-0:217  Function Definition: pfoo( (global void)
-0:217    Function Parameters: 
-0:?     Sequence
-0:220      move second child to first child (temp mediump 2-component vector of float)
-0:220        'h' (noContraction temp mediump 2-component vector of float)
-0:220        fma (global mediump 2-component vector of float)
-0:220          'inf' (smooth in mediump 2-component vector of float)
-0:220          'ing' (smooth in mediump 2-component vector of float)
-0:220          'h' (noContraction temp mediump 2-component vector of float)
-0:221      textureGatherOffset (global highp 4-component vector of float)
-0:221        direct index (temp highp sampler2D)
-0:221          'sArray' (uniform 4-element array of highp sampler2D)
-0:221          Constant:
-0:221            0 (const int)
-0:221        Constant:
-0:221          0.100000
-0:221          0.100000
-0:221        Convert float to int (temp highp 2-component vector of int)
-0:221          'inf' (smooth in mediump 2-component vector of float)
-0:222      textureGatherOffsets (global highp 4-component vector of float)
-0:222        direct index (temp highp sampler2D)
-0:222          'sArray' (uniform 4-element array of highp sampler2D)
-0:222          Constant:
-0:222            0 (const int)
-0:222        Constant:
-0:222          0.100000
-0:222          0.100000
-0:222        Constant:
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:222          0 (const int)
-0:223      textureGatherOffsets (global highp 4-component vector of float)
-0:223        direct index (temp highp sampler2D)
-0:223          'sArray' (uniform 4-element array of highp sampler2D)
-0:223          Constant:
-0:223            0 (const int)
-0:223        Constant:
-0:223          0.100000
-0:223          0.100000
-0:223        'offsets' (uniform 4-element array of mediump 2-component vector of int)
-0:248  Function Definition: CAT( (global void)
-0:248    Function Parameters: 
-0:250    Sequence
-0:250      Sequence
-0:250        move second child to first child (temp highp 4-component vector of float)
-0:250          'b4' (temp highp 4-component vector of float)
-0:250          texture (global highp 4-component vector of float)
-0:250            'CA4' (uniform highp samplerCubeArray)
-0:250            Constant:
-0:250              0.500000
-0:250              0.500000
-0:250              0.500000
-0:250              0.500000
-0:250            Constant:
-0:250              0.240000
-0:251      Sequence
-0:251        move second child to first child (temp highp 4-component vector of int)
-0:251          'b6' (temp highp 4-component vector of int)
-0:251          texture (global highp 4-component vector of int)
-0:251            'CA6' (uniform highp isamplerCubeArray)
-0:251            Constant:
-0:251              0.500000
-0:251              0.500000
-0:251              0.500000
-0:251              0.500000
-0:251            Constant:
-0:251              0.260000
-0:252      Sequence
-0:252        move second child to first child (temp highp 4-component vector of uint)
-0:252          'b7' (temp highp 4-component vector of uint)
-0:252          texture (global highp 4-component vector of uint)
-0:252            'CA7' (uniform highp usamplerCubeArray)
-0:252            Constant:
-0:252              0.500000
-0:252              0.500000
-0:252              0.500000
-0:252              0.500000
-0:252            Constant:
-0:252              0.270000
-0:255  Function Definition: badSample( (global void)
-0:255    Function Parameters: 
-0:257    Sequence
-0:257      Sequence
-0:257        move second child to first child (temp lowp int)
-0:257          'a1' (temp lowp int)
-0:257          'gl_SampleID' (flat in lowp int SampleId)
-0:258      Sequence
-0:258        move second child to first child (temp mediump 2-component vector of float)
-0:258          'a2' (temp mediump 2-component vector of float)
-0:258          'gl_SamplePosition' (smooth in mediump 2-component vector of float SamplePosition)
-0:259      Sequence
-0:259        move second child to first child (temp highp int)
-0:259          'a3' (temp highp int)
-0:259          direct index (flat temp highp int SampleMaskIn)
-0:259            'gl_SampleMaskIn' (flat in 1-element array of highp int SampleMaskIn)
-0:259            Constant:
-0:259              0 (const int)
-0:260      move second child to first child (temp highp int)
-0:260        direct index (temp highp int SampleMaskIn)
-0:260          'gl_SampleMask' (out 1-element array of highp int SampleMaskIn)
-0:260          Constant:
-0:260            0 (const int)
-0:260        'a3' (temp highp int)
-0:261      Sequence
-0:261        move second child to first child (temp mediump int)
-0:261          'n' (temp mediump int)
-0:261          'gl_NumSamples' (uniform lowp int)
-0:268  Function Definition: goodSample( (global void)
-0:268    Function Parameters: 
-0:270    Sequence
-0:270      Sequence
-0:270        move second child to first child (temp lowp int)
-0:270          'a1' (temp lowp int)
-0:270          'gl_SampleID' (flat in lowp int SampleId)
-0:271      Sequence
-0:271        move second child to first child (temp mediump 2-component vector of float)
-0:271          'a2' (temp mediump 2-component vector of float)
-0:271          'gl_SamplePosition' (smooth in mediump 2-component vector of float SamplePosition)
-0:272      Sequence
-0:272        move second child to first child (temp highp int)
-0:272          'a3' (temp highp int)
-0:272          direct index (flat temp highp int SampleMaskIn)
-0:272            'gl_SampleMaskIn' (flat in 1-element array of highp int SampleMaskIn)
-0:272            Constant:
-0:272              0 (const int)
-0:273      move second child to first child (temp highp int)
-0:273        direct index (temp highp int SampleMaskIn)
-0:273          'gl_SampleMask' (out 1-element array of highp int SampleMaskIn)
-0:273          Constant:
-0:273            0 (const int)
-0:273        'a3' (temp highp int)
-0:274      Sequence
-0:274        move second child to first child (temp mediump int)
-0:274          'n1' (temp mediump int)
-0:274          Constant:
-0:274            4 (const int)
-0:275      Sequence
-0:275        move second child to first child (temp mediump int)
-0:275          'n2' (temp mediump int)
-0:275          'gl_NumSamples' (uniform lowp int)
-0:283  Function Definition: badImageAtom( (global void)
-0:283    Function Parameters: 
-0:?     Sequence
-0:289      imageAtomicAdd (global highp int)
-0:289        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:289        'P' (uniform mediump 2-component vector of int)
-0:289        'dati' (temp mediump int)
-0:290      imageAtomicAdd (global highp uint)
-0:290        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:290        'P' (uniform mediump 2-component vector of int)
-0:290        'datu' (temp mediump uint)
-0:291      imageAtomicMin (global highp int)
-0:291        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:291        'P' (uniform mediump 2-component vector of int)
-0:291        'dati' (temp mediump int)
-0:292      imageAtomicMin (global highp uint)
-0:292        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:292        'P' (uniform mediump 2-component vector of int)
-0:292        'datu' (temp mediump uint)
-0:293      imageAtomicMax (global highp int)
-0:293        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:293        'P' (uniform mediump 2-component vector of int)
-0:293        'dati' (temp mediump int)
-0:294      imageAtomicMax (global highp uint)
-0:294        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:294        'P' (uniform mediump 2-component vector of int)
-0:294        'datu' (temp mediump uint)
-0:295      imageAtomicAnd (global highp int)
-0:295        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:295        'P' (uniform mediump 2-component vector of int)
-0:295        'dati' (temp mediump int)
-0:296      imageAtomicAnd (global highp uint)
-0:296        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:296        'P' (uniform mediump 2-component vector of int)
-0:296        'datu' (temp mediump uint)
-0:297      imageAtomicOr (global highp int)
-0:297        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:297        'P' (uniform mediump 2-component vector of int)
-0:297        'dati' (temp mediump int)
-0:298      imageAtomicOr (global highp uint)
-0:298        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:298        'P' (uniform mediump 2-component vector of int)
-0:298        'datu' (temp mediump uint)
-0:299      imageAtomicXor (global highp int)
-0:299        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:299        'P' (uniform mediump 2-component vector of int)
-0:299        'dati' (temp mediump int)
-0:300      imageAtomicXor (global highp uint)
-0:300        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:300        'P' (uniform mediump 2-component vector of int)
-0:300        'datu' (temp mediump uint)
-0:301      imageAtomicExchange (global highp int)
-0:301        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:301        'P' (uniform mediump 2-component vector of int)
-0:301        'dati' (temp mediump int)
-0:302      imageAtomicExchange (global highp uint)
-0:302        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:302        'P' (uniform mediump 2-component vector of int)
-0:302        'datu' (temp mediump uint)
-0:303      imageAtomicExchange (global highp float)
-0:303        'im2Df' (layout(r32f ) uniform highp image2D)
-0:303        'P' (uniform mediump 2-component vector of int)
-0:303        'datf' (temp mediump float)
-0:304      imageAtomicCompSwap (global highp int)
-0:304        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:304        'P' (uniform mediump 2-component vector of int)
-0:304        Constant:
-0:304          3 (const int)
-0:304        'dati' (temp mediump int)
-0:305      imageAtomicCompSwap (global highp uint)
-0:305        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:305        'P' (uniform mediump 2-component vector of int)
-0:305        Constant:
-0:305          5 (const uint)
-0:305        'datu' (temp mediump uint)
-0:316  Function Definition: goodImageAtom( (global void)
-0:316    Function Parameters: 
-0:?     Sequence
-0:322      imageAtomicAdd (global highp int)
-0:322        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:322        'P' (uniform mediump 2-component vector of int)
-0:322        'dati' (temp mediump int)
-0:323      imageAtomicAdd (global highp uint)
-0:323        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:323        'P' (uniform mediump 2-component vector of int)
-0:323        'datu' (temp mediump uint)
-0:324      imageAtomicMin (global highp int)
-0:324        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:324        'P' (uniform mediump 2-component vector of int)
-0:324        'dati' (temp mediump int)
-0:325      imageAtomicMin (global highp uint)
-0:325        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:325        'P' (uniform mediump 2-component vector of int)
-0:325        'datu' (temp mediump uint)
-0:326      imageAtomicMax (global highp int)
-0:326        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:326        'P' (uniform mediump 2-component vector of int)
-0:326        'dati' (temp mediump int)
-0:327      imageAtomicMax (global highp uint)
-0:327        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:327        'P' (uniform mediump 2-component vector of int)
-0:327        'datu' (temp mediump uint)
-0:328      imageAtomicAnd (global highp int)
-0:328        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:328        'P' (uniform mediump 2-component vector of int)
-0:328        'dati' (temp mediump int)
-0:329      imageAtomicAnd (global highp uint)
-0:329        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:329        'P' (uniform mediump 2-component vector of int)
-0:329        'datu' (temp mediump uint)
-0:330      imageAtomicOr (global highp int)
-0:330        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:330        'P' (uniform mediump 2-component vector of int)
-0:330        'dati' (temp mediump int)
-0:331      imageAtomicOr (global highp uint)
-0:331        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:331        'P' (uniform mediump 2-component vector of int)
-0:331        'datu' (temp mediump uint)
-0:332      imageAtomicXor (global highp int)
-0:332        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:332        'P' (uniform mediump 2-component vector of int)
-0:332        'dati' (temp mediump int)
-0:333      imageAtomicXor (global highp uint)
-0:333        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:333        'P' (uniform mediump 2-component vector of int)
-0:333        'datu' (temp mediump uint)
-0:334      imageAtomicExchange (global highp int)
-0:334        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:334        'P' (uniform mediump 2-component vector of int)
-0:334        'dati' (temp mediump int)
-0:335      imageAtomicExchange (global highp uint)
-0:335        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:335        'P' (uniform mediump 2-component vector of int)
-0:335        'datu' (temp mediump uint)
-0:336      imageAtomicExchange (global highp float)
-0:336        'im2Df' (layout(r32f ) uniform highp image2D)
-0:336        'P' (uniform mediump 2-component vector of int)
-0:336        'datf' (temp mediump float)
-0:337      imageAtomicCompSwap (global highp int)
-0:337        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:337        'P' (uniform mediump 2-component vector of int)
-0:337        Constant:
-0:337          3 (const int)
-0:337        'dati' (temp mediump int)
-0:338      imageAtomicCompSwap (global highp uint)
-0:338        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:338        'P' (uniform mediump 2-component vector of int)
-0:338        Constant:
-0:338          5 (const uint)
-0:338        'datu' (temp mediump uint)
-0:340      imageAtomicMax (global highp int)
-0:340        'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)
-0:340        'P' (uniform mediump 2-component vector of int)
-0:340        'dati' (temp mediump int)
-0:341      imageAtomicMax (global highp uint)
-0:341        'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)
-0:341        'P' (uniform mediump 2-component vector of int)
-0:341        'datu' (temp mediump uint)
-0:342      imageAtomicExchange (global highp float)
-0:342        'badIm2Df' (layout(rgba32f ) uniform highp image2D)
-0:342        'P' (uniform mediump 2-component vector of int)
-0:342        'datf' (temp mediump float)
-0:353  Function Definition: badInterp( (global void)
-0:353    Function Parameters: 
-0:355    Sequence
-0:355      interpolateAtCentroid (global mediump 2-component vector of float)
-0:355        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:356      interpolateAtSample (global mediump 2-component vector of float)
-0:356        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:356        Constant:
-0:356          1 (const int)
-0:357      interpolateAtOffset (global mediump 2-component vector of float)
-0:357        'colorfc' (centroid flat in mediump 2-component vector of float)
-0:357        Constant:
-0:357          0.200000
-0:357          0.200000
-0:369  Function Definition: interp( (global void)
-0:369    Function Parameters: 
-0:?     Sequence
-0:376      move second child to first child (temp mediump 2-component vector of float)
-0:376        'res2' (temp mediump 2-component vector of float)
-0:376        interpolateAtCentroid (global mediump 2-component vector of float)
-0:376          'colorfc' (centroid flat in mediump 2-component vector of float)
-0:377      move second child to first child (temp mediump 4-component vector of float)
-0:377        'res4' (temp mediump 4-component vector of float)
-0:377        interpolateAtCentroid (global mediump 4-component vector of float)
-0:377          'colorSampIn' (smooth sample in mediump 4-component vector of float)
-0:378      move second child to first child (temp mediump 4-component vector of float)
-0:378        'res4' (temp mediump 4-component vector of float)
-0:378        interpolateAtCentroid (global mediump 4-component vector of float)
-0:378          'colorfsi' (flat sample in mediump 4-component vector of float)
-0:379      move second child to first child (temp mediump float)
-0:379        'res' (temp mediump float)
-0:379        interpolateAtCentroid (global mediump float)
-0:379          'scalarIn' (smooth in mediump float)
-0:380      'res3' (temp mediump 3-component vector of float)
-0:381      move second child to first child (temp mediump 3-component vector of float)
-0:381        'res3' (temp mediump 3-component vector of float)
-0:381        interpolateAtCentroid (global mediump 3-component vector of float)
-0:381          direct index (smooth sample temp mediump 3-component vector of float)
-0:381            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:381            Constant:
-0:381              2 (const int)
-0:382      move second child to first child (temp mediump 2-component vector of float)
-0:382        'res2' (temp mediump 2-component vector of float)
-0:382        interpolateAtCentroid (global mediump 2-component vector of float)
-0:382          vector swizzle (temp mediump 2-component vector of float)
-0:382            direct index (smooth sample temp mediump 3-component vector of float)
-0:382              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:382              Constant:
-0:382                2 (const int)
-0:382            Sequence
-0:382              Constant:
-0:382                0 (const int)
-0:382              Constant:
-0:382                1 (const int)
-0:384      'res3' (temp mediump 3-component vector of float)
-0:385      move second child to first child (temp mediump 3-component vector of float)
-0:385        'res3' (temp mediump 3-component vector of float)
-0:385        interpolateAtSample (global mediump 3-component vector of float)
-0:385          indirect index (smooth sample temp mediump 3-component vector of float)
-0:385            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:385            'i' (uniform mediump int)
-0:385          Constant:
-0:385            0 (const int)
-0:386      move second child to first child (temp mediump 2-component vector of float)
-0:386        'res2' (temp mediump 2-component vector of float)
-0:386        interpolateAtSample (global mediump 2-component vector of float)
-0:386          vector swizzle (temp mediump 2-component vector of float)
-0:386            direct index (smooth sample temp mediump 3-component vector of float)
-0:386              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:386              Constant:
-0:386                2 (const int)
-0:386            Sequence
-0:386              Constant:
-0:386                0 (const int)
-0:386              Constant:
-0:386                1 (const int)
-0:386          Constant:
-0:386            2 (const int)
-0:387      move second child to first child (temp mediump float)
-0:387        'res' (temp mediump float)
-0:387        interpolateAtSample (global mediump float)
-0:387          'scalarIn' (smooth in mediump float)
-0:387          Constant:
-0:387            1 (const int)
-0:389      'res3' (temp mediump 3-component vector of float)
-0:390      move second child to first child (temp mediump 3-component vector of float)
-0:390        'res3' (temp mediump 3-component vector of float)
-0:390        interpolateAtOffset (global mediump 3-component vector of float)
-0:390          direct index (smooth sample temp mediump 3-component vector of float)
-0:390            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:390            Constant:
-0:390              2 (const int)
-0:390          Constant:
-0:390            0.200000
-0:390            0.200000
-0:391      move second child to first child (temp mediump 2-component vector of float)
-0:391        'res2' (temp mediump 2-component vector of float)
-0:391        interpolateAtOffset (global mediump 2-component vector of float)
-0:391          vector swizzle (temp mediump 2-component vector of float)
-0:391            direct index (smooth sample temp mediump 3-component vector of float)
-0:391              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)
-0:391              Constant:
-0:391                2 (const int)
-0:391            Sequence
-0:391              Constant:
-0:391                0 (const int)
-0:391              Constant:
-0:391                1 (const int)
-0:391          Constant:
-0:391            0.200000
-0:391            0.200000
-0:392      move second child to first child (temp mediump float)
-0:392        'res' (temp mediump float)
-0:392        interpolateAtOffset (global mediump float)
-0:392          add (temp mediump float)
-0:392            'scalarIn' (smooth in mediump float)
-0:392            'scalarIn' (smooth in mediump float)
-0:392          Constant:
-0:392            0.200000
-0:392            0.200000
-0:393      move second child to first child (temp mediump float)
-0:393        'res' (temp mediump float)
-0:393        interpolateAtOffset (global mediump float)
-0:393          'scalarIn' (smooth in mediump float)
-0:393          Constant:
-0:393            0.200000
-0:393            0.200000
-0:396      move second child to first child (temp mediump float)
-0:396        'res' (temp mediump float)
-0:396        interpolateAtCentroid (global mediump float)
-0:396          'f' (temp mediump float)
-0:397      move second child to first child (temp mediump 4-component vector of float)
-0:397        'res4' (temp mediump 4-component vector of float)
-0:397        interpolateAtSample (global mediump 4-component vector of float)
-0:397          'outp' (out mediump 4-component vector of float)
-0:397          Constant:
-0:397            0 (const int)
-0:427  Function Definition: blendFoo( (temp void)
-0:427    Function Parameters: 
-0:428  Function Definition: blendFoo(vf3; (global void)
-0:428    Function Parameters: 
-0:428      'v' (in mediump 3-component vector of float)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
@@ -1844,7 +1172,6 @@ ERROR: node is still EOpNull!
 0:?     'aliased' (layout(location=13 ) smooth in mediump 4-component vector of float)
 0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 0:?     'inf' (smooth in mediump 2-component vector of float)
 0:?     'ing' (smooth in mediump 2-component vector of float)
 0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
diff --git a/Test/baseResults/310.geom.out b/Test/baseResults/310.geom.out
index 888c14233f742fd402ebbfefb427c9d9fa899e19..def6b7ab310aa4ba5e402691aeee36720a76a9af 100644
--- a/Test/baseResults/310.geom.out
+++ b/Test/baseResults/310.geom.out
@@ -250,74 +250,6 @@ ERROR: node is still EOpNull!
 0:52        'gl_Layer' (layout(stream=0 ) out highp int Layer)
 0:52        Constant:
 0:52          2 (const int)
-0:63  Function Definition: foo(i1; (global void)
-0:63    Function Parameters: 
-0:63      'a' (in highp int)
-0:65    Sequence
-0:65      move second child to first child (temp mediump 4-component vector of float)
-0:65        a: direct index for structure (layout(stream=0 ) out mediump 4-component vector of float)
-0:65          'ouuaa6' (layout(stream=0 ) out block{layout(stream=0 ) out mediump 4-component vector of float a})
-0:65          Constant:
-0:65            0 (const int)
-0:65        Constant:
-0:65          1.000000
-0:65          1.000000
-0:65          1.000000
-0:65          1.000000
-0:114  Function Definition: fooe1( (global void)
-0:114    Function Parameters: 
-0:116    Sequence
-0:116      'gl_ViewportIndex' (temp float)
-0:117      'gl_MaxViewports' (temp float)
-0:118      Constant:
-0:118        4 (const int)
-0:119      Sequence
-0:119        move second child to first child (temp highp int)
-0:119          'inv' (temp highp int)
-0:119          'gl_InvocationID' (in highp int InvocationID)
-0:134  Function Definition: notHere( (global void)
-0:134    Function Parameters: 
-0:136    Sequence
-0:136      'gl_MaxGeometryVaryingComponents' (temp float)
-0:137      'gl_VerticesIn' (temp float)
-0:140  Function Definition: pointSize1( (global void)
-0:140    Function Parameters: 
-0:142    Sequence
-0:142      Sequence
-0:142        move second child to first child (temp highp float)
-0:142          'ps' (temp highp float)
-0:142          gl_PointSize: direct index for structure (in highp float PointSize)
-0:142            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:142              'gl_in' (in 4-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:142              Constant:
-0:142                3 (const int)
-0:142            Constant:
-0:142              1 (const int)
-0:143      move second child to first child (temp highp float)
-0:143        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize highp float PointSize)
-0:143          'anon@1' (layout(stream=0 ) out block{layout(stream=0 ) gl_Position highp 4-component vector of float Position gl_Position, layout(stream=0 ) gl_PointSize highp float PointSize gl_PointSize})
-0:143          Constant:
-0:143            1 (const uint)
-0:143        'ps' (temp highp float)
-0:148  Function Definition: pointSize2( (global void)
-0:148    Function Parameters: 
-0:150    Sequence
-0:150      Sequence
-0:150        move second child to first child (temp highp float)
-0:150          'ps' (temp highp float)
-0:150          gl_PointSize: direct index for structure (in highp float PointSize)
-0:150            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:150              'gl_in' (in 4-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:150              Constant:
-0:150                3 (const int)
-0:150            Constant:
-0:150              1 (const int)
-0:151      move second child to first child (temp highp float)
-0:151        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize highp float PointSize)
-0:151          'anon@1' (layout(stream=0 ) out block{layout(stream=0 ) gl_Position highp 4-component vector of float Position gl_Position, layout(stream=0 ) gl_PointSize highp float PointSize gl_PointSize})
-0:151          Constant:
-0:151            1 (const uint)
-0:151        'ps' (temp highp float)
 0:?   Linker Objects
 0:?     'fromV' (in 4-element array of block{in mediump 3-component vector of float color})
 0:?     'nonBlockUnsized' (in 4-element array of mediump 4-component vector of float)
diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out
index 24e3d209594a570019cc43ebff89d44464491c58..ab27198f61e9d442fce03fa594bb813633a10dbc 100644
--- a/Test/baseResults/310.tesc.out
+++ b/Test/baseResults/310.tesc.out
@@ -514,172 +514,6 @@ ERROR: node is still EOpNull!
 0:58        Barrier (global void)
 0:61      Branch: Return
 0:63      Barrier (global void)
-0:69  Function Definition: foo( (global void)
-0:69    Function Parameters: 
-0:71    Sequence
-0:71      gl_Position: direct index for structure (out highp 4-component vector of float Position)
-0:71        direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:71          'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:71          Constant:
-0:71            4 (const int)
-0:71        Constant:
-0:71          0 (const int)
-0:73      Barrier (global void)
-0:92  Function Definition: foop( (global void)
-0:92    Function Parameters: 
-0:?     Sequence
-0:95      move second child to first child (temp highp float)
-0:95        'd' (noContraction temp highp float)
-0:95        fma (global highp float)
-0:95          'd' (noContraction temp highp float)
-0:95          'd' (noContraction temp highp float)
-0:95          'd' (noContraction temp highp float)
-0:112  Function Definition: pointSize2( (global void)
-0:112    Function Parameters: 
-0:114    Sequence
-0:114      Sequence
-0:114        move second child to first child (temp highp float)
-0:114          'ps' (temp highp float)
-0:114          gl_PointSize: direct index for structure (in highp float PointSize)
-0:114            direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:114              'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
-0:114              Constant:
-0:114                1 (const int)
-0:114            Constant:
-0:114              1 (const int)
-0:115      move second child to first child (temp highp float)
-0:115        gl_PointSize: direct index for structure (out highp float PointSize)
-0:115          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:115            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:115            'gl_InvocationID' (in highp int InvocationID)
-0:115          Constant:
-0:115            1 (const int)
-0:115        'ps' (temp highp float)
-0:122  Function Definition: goodfoop( (global void)
-0:122    Function Parameters: 
-0:?     Sequence
-0:126      multiply second child into first child (temp highp 3-component vector of float)
-0:126        'pv3' (noContraction temp highp 3-component vector of float)
-0:126        'pv3' (noContraction temp highp 3-component vector of float)
-0:127      move second child to first child (temp highp 3-component vector of float)
-0:127        'pv3' (noContraction temp highp 3-component vector of float)
-0:127        fma (global highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:127          'pv3' (noContraction temp highp 3-component vector of float)
-0:128      move second child to first child (temp highp float)
-0:128        'd' (noContraction temp highp float)
-0:128        fma (global highp float)
-0:128          'd' (noContraction temp highp float)
-0:128          'd' (noContraction temp highp float)
-0:128          'd' (noContraction temp highp float)
-0:131  Function Definition: bbBad( (global void)
-0:131    Function Parameters: 
-0:133    Sequence
-0:133      'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:138  Function Definition: bb( (global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      move second child to first child (temp highp 4-component vector of float)
-0:140        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:140          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:140          Constant:
-0:140            0 (const int)
-0:140        Constant:
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
-0:141      move second child to first child (temp highp 4-component vector of float)
-0:141        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:141          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:141          Constant:
-0:141            1 (const int)
-0:141        Constant:
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
-0:142      move second child to first child (temp highp 4-component vector of float)
-0:142        direct index (patch temp highp 4-component vector of float BoundingBox)
-0:142          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:142          Constant:
-0:142            2 (const int)
-0:142        Constant:
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:153  Function Definition: outputtingOutparam(i1; (global void)
-0:153    Function Parameters: 
-0:153      'a' (out highp int)
-0:155    Sequence
-0:155      move second child to first child (temp highp int)
-0:155        'a' (out highp int)
-0:155        Constant:
-0:155          2 (const int)
-0:158  Function Definition: outputting( (global void)
-0:158    Function Parameters: 
-0:160    Sequence
-0:160      move second child to first child (temp highp int)
-0:160        indirect index (temp highp int)
-0:160          'outa' (out 4-element array of highp int)
-0:160          'gl_InvocationID' (in highp int InvocationID)
-0:160        Constant:
-0:160          2 (const int)
-0:161      move second child to first child (temp highp int)
-0:161        direct index (temp highp int)
-0:161          'outa' (out 4-element array of highp int)
-0:161          Constant:
-0:161            1 (const int)
-0:161        Constant:
-0:161          2 (const int)
-0:162      move second child to first child (temp highp 4-component vector of float)
-0:162        gl_Position: direct index for structure (out highp 4-component vector of float Position)
-0:162          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:162            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:162            Constant:
-0:162              0 (const int)
-0:162          Constant:
-0:162            0 (const int)
-0:162        Constant:
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:163      direct index (temp highp int)
-0:163        'outa' (out 4-element array of highp int)
-0:163        Constant:
-0:163          1 (const int)
-0:164      direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:164        'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:164        Constant:
-0:164          0 (const int)
-0:165      Function Call: outputtingOutparam(i1; (global void)
-0:165        direct index (temp highp int)
-0:165          'outa' (out 4-element array of highp int)
-0:165          Constant:
-0:165            0 (const int)
-0:166      Function Call: outputtingOutparam(i1; (global void)
-0:166        indirect index (temp highp int)
-0:166          'outa' (out 4-element array of highp int)
-0:166          'gl_InvocationID' (in highp int InvocationID)
-0:167      move second child to first child (temp highp float)
-0:167        f: direct index for structure (out highp float)
-0:167          direct index (patch temp block{out highp float f})
-0:167            'patchIName' (patch out 4-element array of block{out highp float f})
-0:167            Constant:
-0:167              1 (const int)
-0:167          Constant:
-0:167            0 (const int)
-0:167        Constant:
-0:167          3.140000
-0:168      move second child to first child (temp highp int)
-0:168        indirect index (temp highp int)
-0:168          'outa' (out 4-element array of highp int)
-0:168          'gl_InvocationID' (in highp int InvocationID)
-0:168        Constant:
-0:168          2 (const int)
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
 0:?     'outa' (out 4-element array of highp int)
diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out
index aacfedbd6ef7058bed6765656876692cacd8541b..62894ec79786e3f3bdec4c35949127394dfc37d7 100644
--- a/Test/baseResults/310.tese.out
+++ b/Test/baseResults/310.tese.out
@@ -274,19 +274,6 @@ ERROR: node is still EOpNull!
 0:48        Constant:
 0:48          0.000000
 0:48        'cd' (temp highp float)
-0:117  Function Definition: pointSize2( (global void)
-0:117    Function Parameters: 
-0:?     Sequence
-0:120      move second child to first child (temp highp float)
-0:120        gl_PointSize: direct index for structure (gl_PointSize highp float PointSize)
-0:120          'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
-0:120          Constant:
-0:120            1 (const uint)
-0:120        'ps' (temp highp float)
-0:125  Function Definition: bbbad( (global void)
-0:125    Function Parameters: 
-0:127    Sequence
-0:127      'gl_BoundingBoxOES' (temp float)
 0:?   Linker Objects
 0:?     'patchIn' (patch in highp 4-component vector of float)
 0:?     'patchOut' (patch out highp 4-component vector of float)
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index 84a50e89c95ecb8ccf4903fa3018a09ce82bf9eb..d0dfedf218e70f0b0d29358eb0b0c30ddba19456 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -1158,693 +1158,6 @@ ERROR: node is still EOpNull!
 0:48        'v4' (temp mediump 4-component vector of float)
 0:48        UnpackSnorm4x8 (global mediump 4-component vector of float, operation at highp)
 0:48          'u1' (temp highp uint)
-0:60  Function Definition: foo( (global void)
-0:60    Function Parameters: 
-0:?     Sequence
-0:63      move second child to first child (temp highp 2-component vector of int)
-0:63        'v2' (temp highp 2-component vector of int)
-0:63        textureSize (global highp 2-component vector of int)
-0:63          's2dms' (uniform highp sampler2DMS)
-0:64      move second child to first child (temp highp 2-component vector of int)
-0:64        'v2' (temp highp 2-component vector of int)
-0:64        textureSize (global highp 2-component vector of int)
-0:64          'us2dms' (uniform highp usampler2DMS)
-0:65      Sequence
-0:65        move second child to first child (temp highp 4-component vector of float)
-0:65          'v4' (temp highp 4-component vector of float)
-0:65          textureFetch (global highp 4-component vector of float)
-0:65            's2dms' (uniform highp sampler2DMS)
-0:65            'v2' (temp highp 2-component vector of int)
-0:65            Constant:
-0:65              2 (const int)
-0:66      Sequence
-0:66        move second child to first child (temp highp 4-component vector of int)
-0:66          'iv4' (temp highp 4-component vector of int)
-0:66          textureFetch (global highp 4-component vector of int)
-0:66            'is2dms' (uniform highp isampler2DMS)
-0:66            'v2' (temp highp 2-component vector of int)
-0:66            Constant:
-0:66              2 (const int)
-0:67      Constant:
-0:67        0.000000
-0:69      frexp (global highp float)
-0:69        'f' (temp highp float)
-0:69        'ini' (in highp int)
-0:114  Function Definition: foo_IO( (global void)
-0:114    Function Parameters: 
-0:116    Sequence
-0:116      Sequence
-0:116        move second child to first child (temp highp int)
-0:116          'sum' (temp highp int)
-0:116          add (temp highp int)
-0:116            'gl_VertexID' (gl_VertexId highp int VertexId)
-0:117            'gl_InstanceID' (gl_InstanceId highp int InstanceId)
-0:118      move second child to first child (temp highp 4-component vector of float)
-0:118        gl_Position: direct index for structure (gl_Position highp 4-component vector of float Position)
-0:118          'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
-0:118          Constant:
-0:118            0 (const uint)
-0:118        Constant:
-0:118          1.000000
-0:118          1.000000
-0:118          1.000000
-0:118          1.000000
-0:119      gl_PointSize: direct index for structure (gl_PointSize highp void PointSize)
-0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
-0:119        Constant:
-0:119          1 (const uint)
-0:153  Function Definition: pfooBad( (global void)
-0:153    Function Parameters: 
-0:?     Sequence
-0:156      move second child to first child (temp highp 2-component vector of float)
-0:156        'h' (noContraction temp highp 2-component vector of float)
-0:156        fma (global highp 2-component vector of float)
-0:156          'inf' (in highp 2-component vector of float)
-0:156          'ing' (in highp 2-component vector of float)
-0:156          'h' (noContraction temp highp 2-component vector of float)
-0:157      indirect index (temp lowp sampler2D)
-0:157        'sArray' (uniform 4-element array of lowp sampler2D)
-0:157        add (temp highp int)
-0:157          'sIndex' (uniform highp int)
-0:157          Constant:
-0:157            1 (const int)
-0:158      indirect index (layout(binding=0 offset=0 ) temp highp atomic_uint)
-0:158        'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
-0:158        add (temp highp int)
-0:158          'sIndex' (uniform highp int)
-0:158          Constant:
-0:158            1 (const int)
-0:159      direct index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:159        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:159        Constant:
-0:159          1 (const int)
-0:160      direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:160        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:160        Constant:
-0:160          2 (const int)
-0:161      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:161        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:161        add (temp highp int)
-0:161          'sIndex' (uniform highp int)
-0:161          Constant:
-0:161            1 (const int)
-0:162      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:162        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:162        'sIndex' (uniform highp int)
-0:163      direct index (writeonly temp highp image2D)
-0:163        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:163        Constant:
-0:163          2 (const int)
-0:164      indirect index (writeonly temp highp image2D)
-0:164        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:164        component-wise multiply (temp highp int)
-0:164          'sIndex' (uniform highp int)
-0:164          Constant:
-0:164            2 (const int)
-0:165      textureGatherOffset (global lowp 4-component vector of float)
-0:165        direct index (temp lowp sampler2D)
-0:165          'sArray' (uniform 4-element array of lowp sampler2D)
-0:165          Constant:
-0:165            0 (const int)
-0:165        Constant:
-0:165          0.100000
-0:165          0.100000
-0:165        Convert float to int (temp lowp 2-component vector of int)
-0:165          'inf' (in highp 2-component vector of float)
-0:166      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:166        direct index (temp lowp sampler2D)
-0:166          'sArray' (uniform 4-element array of lowp sampler2D)
-0:166          Constant:
-0:166            0 (const int)
-0:166        Constant:
-0:166          0.100000
-0:166          0.100000
-0:166        Constant:
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:166          0 (const int)
-0:171  Function Definition: pfoo( (global void)
-0:171    Function Parameters: 
-0:?     Sequence
-0:174      move second child to first child (temp highp 2-component vector of float)
-0:174        'h' (noContraction temp highp 2-component vector of float)
-0:174        fma (global highp 2-component vector of float)
-0:174          'inf' (in highp 2-component vector of float)
-0:174          'ing' (in highp 2-component vector of float)
-0:174          'h' (noContraction temp highp 2-component vector of float)
-0:175      indirect index (temp lowp sampler2D)
-0:175        'sArray' (uniform 4-element array of lowp sampler2D)
-0:175        add (temp highp int)
-0:175          'sIndex' (uniform highp int)
-0:175          Constant:
-0:175            1 (const int)
-0:176      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
-0:176        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
-0:176        add (temp highp int)
-0:176          'sIndex' (uniform highp int)
-0:176          Constant:
-0:176            1 (const int)
-0:177      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
-0:177        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
-0:177        subtract (temp highp int)
-0:177          'sIndex' (uniform highp int)
-0:177          Constant:
-0:177            2 (const int)
-0:178      direct index (writeonly temp highp image2D)
-0:178        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:178        Constant:
-0:178          2 (const int)
-0:179      indirect index (writeonly temp highp image2D)
-0:179        'iArray' (writeonly uniform 5-element array of highp image2D)
-0:179        subtract (temp highp int)
-0:179          'sIndex' (uniform highp int)
-0:179          Constant:
-0:179            2 (const int)
-0:180      textureGatherOffset (global lowp 4-component vector of float)
-0:180        direct index (temp lowp sampler2D)
-0:180          'sArray' (uniform 4-element array of lowp sampler2D)
-0:180          Constant:
-0:180            0 (const int)
-0:180        Constant:
-0:180          0.100000
-0:180          0.100000
-0:180        Convert float to int (temp lowp 2-component vector of int)
-0:180          'inf' (in highp 2-component vector of float)
-0:181      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:181        direct index (temp lowp sampler2D)
-0:181          'sArray' (uniform 4-element array of lowp sampler2D)
-0:181          Constant:
-0:181            0 (const int)
-0:181        Constant:
-0:181          0.100000
-0:181          0.100000
-0:181        Constant:
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:181          0 (const int)
-0:182      textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
-0:182        direct index (temp lowp sampler2D)
-0:182          'sArray' (uniform 4-element array of lowp sampler2D)
-0:182          Constant:
-0:182            0 (const int)
-0:182        Constant:
-0:182          0.100000
-0:182          0.100000
-0:182        'offsets' (uniform 4-element array of highp 2-component vector of int)
-0:220  Function Definition: bufferT( (global void)
-0:220    Function Parameters: 
-0:222    Sequence
-0:222      Sequence
-0:222        move second child to first child (temp highp int)
-0:222          's1' (temp highp int)
-0:222          textureSize (global highp int)
-0:222            'bufSamp1' (uniform highp samplerBuffer)
-0:223      Sequence
-0:223        move second child to first child (temp highp int)
-0:223          's2' (temp highp int)
-0:223          textureSize (global highp int)
-0:223            'bufSamp2' (uniform highp isamplerBuffer)
-0:224      Sequence
-0:224        move second child to first child (temp highp int)
-0:224          's3' (temp highp int)
-0:224          textureSize (global highp int)
-0:224            'bufSamp3' (uniform highp usamplerBuffer)
-0:226      Sequence
-0:226        move second child to first child (temp highp int)
-0:226          's4' (temp highp int)
-0:226          imageQuerySize (global highp int)
-0:226            'bufSamp4' (writeonly uniform highp imageBuffer)
-0:227      Sequence
-0:227        move second child to first child (temp highp int)
-0:227          's5' (temp highp int)
-0:227          imageQuerySize (global highp int)
-0:227            'bufSamp5' (writeonly uniform highp iimageBuffer)
-0:228      Sequence
-0:228        move second child to first child (temp highp int)
-0:228          's6' (temp highp int)
-0:228          imageQuerySize (global highp int)
-0:228            'bufSamp6' (writeonly uniform highp uimageBuffer)
-0:230      Sequence
-0:230        move second child to first child (temp highp 4-component vector of float)
-0:230          'f1' (temp highp 4-component vector of float)
-0:230          textureFetch (global highp 4-component vector of float)
-0:230            'bufSamp1' (uniform highp samplerBuffer)
-0:230            's1' (temp highp int)
-0:231      Sequence
-0:231        move second child to first child (temp highp 4-component vector of int)
-0:231          'f2' (temp highp 4-component vector of int)
-0:231          textureFetch (global highp 4-component vector of int)
-0:231            'bufSamp2' (uniform highp isamplerBuffer)
-0:231            's2' (temp highp int)
-0:232      Sequence
-0:232        move second child to first child (temp highp 4-component vector of uint)
-0:232          'f3' (temp highp 4-component vector of uint)
-0:232          textureFetch (global highp 4-component vector of uint)
-0:232            'bufSamp3' (uniform highp usamplerBuffer)
-0:232            's3' (temp highp int)
-0:279  Function Definition: CAT( (global void)
-0:279    Function Parameters: 
-0:281    Sequence
-0:281      Sequence
-0:281        move second child to first child (temp highp 3-component vector of int)
-0:281          's4' (temp highp 3-component vector of int)
-0:281          textureSize (global highp 3-component vector of int)
-0:281            'CA4' (uniform highp samplerCubeArray)
-0:281            Constant:
-0:281              1 (const int)
-0:282      Sequence
-0:282        move second child to first child (temp highp 3-component vector of int)
-0:282          's5' (temp highp 3-component vector of int)
-0:282          textureSize (global highp 3-component vector of int)
-0:282            'CA5' (uniform highp samplerCubeArrayShadow)
-0:282            Constant:
-0:282              1 (const int)
-0:283      Sequence
-0:283        move second child to first child (temp highp 3-component vector of int)
-0:283          's6' (temp highp 3-component vector of int)
-0:283          textureSize (global highp 3-component vector of int)
-0:283            'CA6' (uniform highp isamplerCubeArray)
-0:283            Constant:
-0:283              1 (const int)
-0:284      Sequence
-0:284        move second child to first child (temp highp 3-component vector of int)
-0:284          's7' (temp highp 3-component vector of int)
-0:284          textureSize (global highp 3-component vector of int)
-0:284            'CA7' (uniform highp usamplerCubeArray)
-0:284            Constant:
-0:284              1 (const int)
-0:286      Sequence
-0:286        move second child to first child (temp highp 4-component vector of float)
-0:286          't4' (temp highp 4-component vector of float)
-0:286          texture (global highp 4-component vector of float)
-0:286            'CA4' (uniform highp samplerCubeArray)
-0:286            Constant:
-0:286              0.500000
-0:286              0.500000
-0:286              0.500000
-0:286              0.500000
-0:287      Sequence
-0:287        move second child to first child (temp highp float)
-0:287          't5' (temp highp float)
-0:287          texture (global highp float)
-0:287            'CA5' (uniform highp samplerCubeArrayShadow)
-0:287            Constant:
-0:287              0.500000
-0:287              0.500000
-0:287              0.500000
-0:287              0.500000
-0:287            Constant:
-0:287              3.000000
-0:288      Sequence
-0:288        move second child to first child (temp highp 4-component vector of int)
-0:288          't6' (temp highp 4-component vector of int)
-0:288          texture (global highp 4-component vector of int)
-0:288            'CA6' (uniform highp isamplerCubeArray)
-0:288            Constant:
-0:288              0.500000
-0:288              0.500000
-0:288              0.500000
-0:288              0.500000
-0:289      Sequence
-0:289        move second child to first child (temp highp 4-component vector of uint)
-0:289          't7' (temp highp 4-component vector of uint)
-0:289          texture (global highp 4-component vector of uint)
-0:289            'CA7' (uniform highp usamplerCubeArray)
-0:289            Constant:
-0:289              0.500000
-0:289              0.500000
-0:289              0.500000
-0:289              0.500000
-0:291      Sequence
-0:291        move second child to first child (temp highp 4-component vector of float)
-0:291          'L4' (temp highp 4-component vector of float)
-0:291          textureLod (global highp 4-component vector of float)
-0:291            'CA4' (uniform highp samplerCubeArray)
-0:291            Constant:
-0:291              0.500000
-0:291              0.500000
-0:291              0.500000
-0:291              0.500000
-0:291            Constant:
-0:291              0.240000
-0:292      Sequence
-0:292        move second child to first child (temp highp 4-component vector of int)
-0:292          'L6' (temp highp 4-component vector of int)
-0:292          textureLod (global highp 4-component vector of int)
-0:292            'CA6' (uniform highp isamplerCubeArray)
-0:292            Constant:
-0:292              0.500000
-0:292              0.500000
-0:292              0.500000
-0:292              0.500000
-0:292            Constant:
-0:292              0.260000
-0:293      Sequence
-0:293        move second child to first child (temp highp 4-component vector of uint)
-0:293          'L7' (temp highp 4-component vector of uint)
-0:293          textureLod (global highp 4-component vector of uint)
-0:293            'CA7' (uniform highp usamplerCubeArray)
-0:293            Constant:
-0:293              0.500000
-0:293              0.500000
-0:293              0.500000
-0:293              0.500000
-0:293            Constant:
-0:293              0.270000
-0:295      Sequence
-0:295        move second child to first child (temp highp 4-component vector of float)
-0:295          'g4' (temp highp 4-component vector of float)
-0:295          textureGrad (global highp 4-component vector of float)
-0:295            'CA4' (uniform highp samplerCubeArray)
-0:295            Constant:
-0:295              0.500000
-0:295              0.500000
-0:295              0.500000
-0:295              0.500000
-0:295            Constant:
-0:295              0.100000
-0:295              0.100000
-0:295              0.100000
-0:295            Constant:
-0:295              0.200000
-0:295              0.200000
-0:295              0.200000
-0:296      Sequence
-0:296        move second child to first child (temp highp 4-component vector of int)
-0:296          'g6' (temp highp 4-component vector of int)
-0:296          textureGrad (global highp 4-component vector of int)
-0:296            'CA6' (uniform highp isamplerCubeArray)
-0:296            Constant:
-0:296              0.500000
-0:296              0.500000
-0:296              0.500000
-0:296              0.500000
-0:296            Constant:
-0:296              0.100000
-0:296              0.100000
-0:296              0.100000
-0:296            Constant:
-0:296              0.200000
-0:296              0.200000
-0:296              0.200000
-0:297      Sequence
-0:297        move second child to first child (temp highp 4-component vector of uint)
-0:297          'g7' (temp highp 4-component vector of uint)
-0:297          textureGrad (global highp 4-component vector of uint)
-0:297            'CA7' (uniform highp usamplerCubeArray)
-0:297            Constant:
-0:297              0.500000
-0:297              0.500000
-0:297              0.500000
-0:297              0.500000
-0:297            Constant:
-0:297              0.100000
-0:297              0.100000
-0:297              0.100000
-0:297            Constant:
-0:297              0.200000
-0:297              0.200000
-0:297              0.200000
-0:299      Sequence
-0:299        move second child to first child (temp highp 4-component vector of float)
-0:299          'gath4' (temp highp 4-component vector of float)
-0:299          textureGather (global highp 4-component vector of float)
-0:299            'CA4' (uniform highp samplerCubeArray)
-0:299            Constant:
-0:299              0.500000
-0:299              0.500000
-0:299              0.500000
-0:299              0.500000
-0:300      Sequence
-0:300        move second child to first child (temp highp 4-component vector of float)
-0:300          'gathC4' (temp highp 4-component vector of float)
-0:300          textureGather (global highp 4-component vector of float)
-0:300            'CA4' (uniform highp samplerCubeArray)
-0:300            Constant:
-0:300              0.500000
-0:300              0.500000
-0:300              0.500000
-0:300              0.500000
-0:300            Constant:
-0:300              2 (const int)
-0:301      Sequence
-0:301        move second child to first child (temp highp 4-component vector of int)
-0:301          'gath6' (temp highp 4-component vector of int)
-0:301          textureGather (global highp 4-component vector of int)
-0:301            'CA6' (uniform highp isamplerCubeArray)
-0:301            Constant:
-0:301              0.500000
-0:301              0.500000
-0:301              0.500000
-0:301              0.500000
-0:302      Sequence
-0:302        move second child to first child (temp highp 4-component vector of int)
-0:302          'gathC6' (temp highp 4-component vector of int)
-0:302          textureGather (global highp 4-component vector of int)
-0:302            'CA6' (uniform highp isamplerCubeArray)
-0:302            Constant:
-0:302              0.500000
-0:302              0.500000
-0:302              0.500000
-0:302              0.500000
-0:302            Constant:
-0:302              1 (const int)
-0:303      Sequence
-0:303        move second child to first child (temp highp 4-component vector of uint)
-0:303          'gath7' (temp highp 4-component vector of uint)
-0:303          textureGather (global highp 4-component vector of uint)
-0:303            'CA7' (uniform highp usamplerCubeArray)
-0:303            Constant:
-0:303              0.500000
-0:303              0.500000
-0:303              0.500000
-0:303              0.500000
-0:304      Sequence
-0:304        move second child to first child (temp highp 4-component vector of uint)
-0:304          'gathC7' (temp highp 4-component vector of uint)
-0:304          textureGather (global highp 4-component vector of uint)
-0:304            'CA7' (uniform highp usamplerCubeArray)
-0:304            Constant:
-0:304              0.500000
-0:304              0.500000
-0:304              0.500000
-0:304              0.500000
-0:304            Constant:
-0:304              0 (const int)
-0:306      Sequence
-0:306        move second child to first child (temp highp 4-component vector of float)
-0:306          'gath5' (temp highp 4-component vector of float)
-0:306          textureGather (global highp 4-component vector of float)
-0:306            'CA5' (uniform highp samplerCubeArrayShadow)
-0:306            Constant:
-0:306              0.500000
-0:306              0.500000
-0:306              0.500000
-0:306              0.500000
-0:306            Constant:
-0:306              2.500000
-0:308      Sequence
-0:308        move second child to first child (temp highp 3-component vector of int)
-0:308          's1' (temp highp 3-component vector of int)
-0:308          imageQuerySize (global highp 3-component vector of int)
-0:308            'CA1' (writeonly uniform highp imageCubeArray)
-0:309      Sequence
-0:309        move second child to first child (temp highp 3-component vector of int)
-0:309          's2' (temp highp 3-component vector of int)
-0:309          imageQuerySize (global highp 3-component vector of int)
-0:309            'CA2' (writeonly uniform highp iimageCubeArray)
-0:310      Sequence
-0:310        move second child to first child (temp highp 3-component vector of int)
-0:310          's3' (temp highp 3-component vector of int)
-0:310          imageQuerySize (global highp 3-component vector of int)
-0:310            'CA3' (writeonly uniform highp uimageCubeArray)
-0:312      imageStore (global highp void)
-0:312        'CA1' (writeonly uniform highp imageCubeArray)
-0:312        's3' (temp highp 3-component vector of int)
-0:312        Constant:
-0:312          1.000000
-0:312          1.000000
-0:312          1.000000
-0:312          1.000000
-0:313      imageStore (global highp void)
-0:313        'CA2' (writeonly uniform highp iimageCubeArray)
-0:313        's3' (temp highp 3-component vector of int)
-0:313        Constant:
-0:313          1 (const int)
-0:313          1 (const int)
-0:313          1 (const int)
-0:313          1 (const int)
-0:314      imageStore (global highp void)
-0:314        'CA3' (writeonly uniform highp uimageCubeArray)
-0:314        's3' (temp highp 3-component vector of int)
-0:314        Constant:
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:314          1 (const uint)
-0:316      Sequence
-0:316        move second child to first child (temp highp 4-component vector of float)
-0:316          'cl1' (temp highp 4-component vector of float)
-0:316          imageLoad (global highp 4-component vector of float)
-0:316            'rCA1' (layout(rgba16f ) readonly uniform highp imageCubeArray)
-0:316            's3' (temp highp 3-component vector of int)
-0:317      Sequence
-0:317        move second child to first child (temp highp 4-component vector of int)
-0:317          'cl2' (temp highp 4-component vector of int)
-0:317          imageLoad (global highp 4-component vector of int)
-0:317            'rCA2' (layout(rgba32i ) readonly uniform highp iimageCubeArray)
-0:317            's3' (temp highp 3-component vector of int)
-0:318      Sequence
-0:318        move second child to first child (temp highp 4-component vector of uint)
-0:318          'cl3' (temp highp 4-component vector of uint)
-0:318          imageLoad (global highp 4-component vector of uint)
-0:318            'rCA3' (layout(r32ui ) readonly uniform highp uimageCubeArray)
-0:318            's3' (temp highp 3-component vector of int)
-0:343  Function Definition: MSA( (global void)
-0:343    Function Parameters: 
-0:345    Sequence
-0:345      Sequence
-0:345        move second child to first child (temp highp 4-component vector of float)
-0:345          'tf' (temp highp 4-component vector of float)
-0:345          textureFetch (global highp 4-component vector of float)
-0:345            'samp2DMSA' (uniform highp sampler2DMSArray)
-0:345            Constant:
-0:345              5 (const int)
-0:345              5 (const int)
-0:345              5 (const int)
-0:345            Constant:
-0:345              2 (const int)
-0:346      Sequence
-0:346        move second child to first child (temp highp 4-component vector of int)
-0:346          'tfi' (temp highp 4-component vector of int)
-0:346          textureFetch (global highp 4-component vector of int)
-0:346            'samp2DMSAi' (uniform highp isampler2DMSArray)
-0:346            Constant:
-0:346              5 (const int)
-0:346              5 (const int)
-0:346              5 (const int)
-0:346            Constant:
-0:346              2 (const int)
-0:347      Sequence
-0:347        move second child to first child (temp highp 4-component vector of uint)
-0:347          'tfu' (temp highp 4-component vector of uint)
-0:347          textureFetch (global highp 4-component vector of uint)
-0:347            'samp2DMSAu' (uniform highp usampler2DMSArray)
-0:347            Constant:
-0:347              5 (const int)
-0:347              5 (const int)
-0:347              5 (const int)
-0:347            Constant:
-0:347              2 (const int)
-0:349      Sequence
-0:349        move second child to first child (temp highp 3-component vector of int)
-0:349          'tfs' (temp highp 3-component vector of int)
-0:349          textureSize (global highp 3-component vector of int)
-0:349            'samp2DMSA' (uniform highp sampler2DMSArray)
-0:350      Sequence
-0:350        move second child to first child (temp highp 3-component vector of int)
-0:350          'tfsi' (temp highp 3-component vector of int)
-0:350          textureSize (global highp 3-component vector of int)
-0:350            'samp2DMSAi' (uniform highp isampler2DMSArray)
-0:352      Sequence
-0:352        move second child to first child (temp highp 3-component vector of int)
-0:352          'tfsu' (temp highp 3-component vector of int)
-0:352          textureSize (global highp 3-component vector of int)
-0:352            'samp2DMSAu' (uniform highp usampler2DMSArray)
-0:364  Function Definition: goodImageAtom( (global void)
-0:364    Function Parameters: 
-0:?     Sequence
-0:370      imageAtomicAdd (global highp int)
-0:370        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:370        'P' (uniform highp 2-component vector of int)
-0:370        'dati' (temp highp int)
-0:371      imageAtomicAdd (global highp uint)
-0:371        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:371        'P' (uniform highp 2-component vector of int)
-0:371        'datu' (temp highp uint)
-0:372      imageAtomicMin (global highp int)
-0:372        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:372        'P' (uniform highp 2-component vector of int)
-0:372        'dati' (temp highp int)
-0:373      imageAtomicMin (global highp uint)
-0:373        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:373        'P' (uniform highp 2-component vector of int)
-0:373        'datu' (temp highp uint)
-0:374      imageAtomicMax (global highp int)
-0:374        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:374        'P' (uniform highp 2-component vector of int)
-0:374        'dati' (temp highp int)
-0:375      imageAtomicMax (global highp uint)
-0:375        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:375        'P' (uniform highp 2-component vector of int)
-0:375        'datu' (temp highp uint)
-0:376      imageAtomicAnd (global highp int)
-0:376        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:376        'P' (uniform highp 2-component vector of int)
-0:376        'dati' (temp highp int)
-0:377      imageAtomicAnd (global highp uint)
-0:377        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:377        'P' (uniform highp 2-component vector of int)
-0:377        'datu' (temp highp uint)
-0:378      imageAtomicOr (global highp int)
-0:378        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:378        'P' (uniform highp 2-component vector of int)
-0:378        'dati' (temp highp int)
-0:379      imageAtomicOr (global highp uint)
-0:379        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:379        'P' (uniform highp 2-component vector of int)
-0:379        'datu' (temp highp uint)
-0:380      imageAtomicXor (global highp int)
-0:380        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:380        'P' (uniform highp 2-component vector of int)
-0:380        'dati' (temp highp int)
-0:381      imageAtomicXor (global highp uint)
-0:381        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:381        'P' (uniform highp 2-component vector of int)
-0:381        'datu' (temp highp uint)
-0:382      imageAtomicExchange (global highp int)
-0:382        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:382        'P' (uniform highp 2-component vector of int)
-0:382        'dati' (temp highp int)
-0:383      imageAtomicExchange (global highp uint)
-0:383        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:383        'P' (uniform highp 2-component vector of int)
-0:383        'datu' (temp highp uint)
-0:384      imageAtomicExchange (global highp float)
-0:384        'im2Df' (layout(r32f ) uniform highp image2D)
-0:384        'P' (uniform highp 2-component vector of int)
-0:384        'datf' (temp highp float)
-0:385      imageAtomicCompSwap (global highp int)
-0:385        'im2Di' (layout(r32i ) uniform highp iimage2D)
-0:385        'P' (uniform highp 2-component vector of int)
-0:385        Constant:
-0:385          3 (const int)
-0:385        'dati' (temp highp int)
-0:386      imageAtomicCompSwap (global highp uint)
-0:386        'im2Du' (layout(r32ui ) uniform highp uimage2D)
-0:386        'P' (uniform highp 2-component vector of int)
-0:386        Constant:
-0:386          5 (const uint)
-0:386        'datu' (temp highp uint)
-0:398  Function Definition: badInterp( (global void)
-0:398    Function Parameters: 
-0:400    Sequence
-0:400      Constant:
-0:400        0.000000
-0:401      Constant:
-0:401        0.000000
-0:402      Constant:
-0:402        0.000000
 0:?   Linker Objects
 0:?     's' (shared highp 4-component vector of float)
 0:?     'v' (buffer highp 4-component vector of float)
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 83f105ca1af70e95f8118cc5156ffdcea732dd12..6b69e71e8ec4dc0ff09888a2a996c1a6253027b2 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -5,7 +5,7 @@ ERROR: 0:23: '' : array size required
 ERROR: 0:28: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
 ERROR: 0:40: '' : array size required 
 ERROR: 0:48: 'constructor' : constructing non-array constituent from array argument 
-ERROR: 0:49: 'constructior' : array constructor argument not correct type to construct array element 
+ERROR: 0:49: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:62: '[' :  array index out of range '4'
 ERROR: 0:78: 'assign' :  cannot convert from 'global 4-element array of 7-element array of highp float' to 'global 5-element array of 7-element array of highp float'
 ERROR: 0:79: 'assign' :  cannot convert from 'global 4-element array of 7-element array of highp float' to 'global implicitly-sized array of 7-element array of highp float'
@@ -359,277 +359,6 @@ ERROR: node is still EOpNull!
 0:13          1 (const uint)
 0:13          2 (const uint)
 0:13        'd' (temp 3-element array of 2-element array of highp int)
-0:44  Function Definition: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:44    Function Parameters: 
-0:44      'a' (in 5-element array of 7-element array of highp float)
-0:?     Sequence
-0:47      move second child to first child (temp 7-element array of highp float)
-0:47        'r' (temp 7-element array of highp float)
-0:47        direct index (temp 7-element array of highp float)
-0:47          'a' (in 5-element array of 7-element array of highp float)
-0:47          Constant:
-0:47            2 (const int)
-0:48      Constant:
-0:48        0.000000
-0:49      Constant:
-0:49        0.000000
-0:50      Branch: Return with expression
-0:50        Construct float (temp 4-element array of 7-element array of float)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              0 (const int)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              1 (const int)
-0:50          'r' (temp 7-element array of highp float)
-0:50          direct index (temp 7-element array of highp float)
-0:50            'a' (in 5-element array of 7-element array of highp float)
-0:50            Constant:
-0:50              3 (const int)
-0:51      Branch: Return with expression
-0:51        Construct float (temp 4-element array of 7-element array of float)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              0 (const int)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              1 (const int)
-0:51          'r' (temp 7-element array of highp float)
-0:51          direct index (temp 7-element array of highp float)
-0:51            'a' (in 5-element array of 7-element array of highp float)
-0:51            Constant:
-0:51              3 (const int)
-0:52      Branch: Return with expression
-0:52        Construct float (temp 4-element array of 7-element array of float)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              0 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              1 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              2 (const int)
-0:52          direct index (temp 7-element array of highp float)
-0:52            'a' (in 5-element array of 7-element array of highp float)
-0:52            Constant:
-0:52              3 (const int)
-0:55  Function Definition: bar(f1[5][7]; (global void)
-0:55    Function Parameters: 
-0:55      '' (in 5-element array of 7-element array of highp float)
-0:57  Function Definition: foo2( (global void)
-0:57    Function Parameters: 
-0:?     Sequence
-0:?       Sequence
-0:62        move second child to first child (temp highp float)
-0:62          direct index (temp highp float)
-0:62            direct index (temp 2-element array of highp float)
-0:62              direct index (temp 4-element array of 2-element array of highp float)
-0:62                'gu' (temp 3-element array of 4-element array of 2-element array of highp float)
-0:62                Constant:
-0:62                  2 (const int)
-0:62              Constant:
-0:62                4 (const int)
-0:62            Constant:
-0:62              1 (const int)
-0:62          Constant:
-0:62            4.000000
-0:64      Sequence
-0:64        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:64          'ca4' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:66          Constant:
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            0.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:66            1.000000
-0:67      Sequence
-0:67        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:67          'caim' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:69          Constant:
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            4.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:69            2.000000
-0:70      Sequence
-0:70        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:70          'caim2' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:72          Constant:
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            4.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:72            2.000000
-0:73      Sequence
-0:73        move second child to first child (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:73          'caim3' (temp 3-element array of 2-element array of highp 4-component vector of float)
-0:75          Constant:
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            4.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:75            2.000000
-0:77      move second child to first child (temp 4-element array of 7-element array of highp float)
-0:77        'g4' (global 4-element array of 7-element array of highp float)
-0:77        Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:77          'g5' (global 5-element array of 7-element array of highp float)
-0:78      'g5' (global 5-element array of 7-element array of highp float)
-0:79      'gu' (global 1-element array of 7-element array of highp float)
-0:81      Constant:
-0:81        0.000000
-0:82      Function Call: bar(f1[5][7]; (global void)
-0:82        'g5' (global 5-element array of 7-element array of highp float)
-0:84      Test condition and select (temp void)
-0:84        Condition
-0:84        Compare Equal (temp bool)
-0:84          Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:84            'g5' (global 5-element array of 7-element array of highp float)
-0:84          'g4' (global 4-element array of 7-element array of highp float)
-0:84        true case is null
-0:86      Test condition and select (temp void)
-0:86        Condition
-0:86        Constant:
-0:86          false (const bool)
-0:86        true case is null
-0:90      move second child to first child (temp highp float)
-0:90        direct index (temp highp float)
-0:90          direct index (temp 7-element array of highp float)
-0:90            'u' (temp 5-element array of 7-element array of highp float)
-0:90            Constant:
-0:90              5 (const int)
-0:90          Constant:
-0:90            2 (const int)
-0:90        Constant:
-0:90          5.000000
-0:91      Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of highp float)
-0:91        'u' (temp 5-element array of 7-element array of highp float)
-0:94      direct index (layout(column_major shared ) temp highp 4-component vector of float)
-0:94        v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:94          direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            Constant:
-0:94              1 (const int)
-0:94          Constant:
-0:94            1 (const int)
-0:94        Constant:
-0:94          -1 (const int)
-0:95      move second child to first child (temp highp 4-component vector of float)
-0:95        direct index (layout(column_major shared ) temp highp 4-component vector of float)
-0:95          v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:95            direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              Constant:
-0:95                1 (const int)
-0:95            Constant:
-0:95              1 (const int)
-0:95          Constant:
-0:95            1 (const int)
-0:95        Constant:
-0:95          4.300000
-0:95          4.300000
-0:95          4.300000
-0:95          4.300000
-0:96      v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float)
-0:96        direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          Constant:
-0:96            1 (const int)
-0:96        Constant:
-0:96          1 (const int)
-0:98      Constant:
-0:98        7 (const int)
-0:99      array length (temp int)
-0:99        v: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float)
-0:99          direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp float u, layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            'name3' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer highp float u, layout(column_major shared ) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            Constant:
-0:99              0 (const int)
-0:99          Constant:
-0:99            1 (const int)
 0:?   Linker Objects
 0:?     'name' (layout(column_major shared ) buffer 3-element array of block{layout(column_major shared ) buffer implicitly-sized array of highp float u, layout(column_major shared ) buffer implicitly-sized array of highp 4-component vector of float v})
 0:?     'uname' (layout(column_major shared ) uniform 3-element array of block{layout(column_major shared ) uniform highp float u, layout(column_major shared ) uniform 1-element array of highp 4-component vector of float v})
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 904ad3edf38cc1ce0e78c24bfeab6102891535ab..d3c54fcf7331cd2af22c3f0d5063550870be40c3 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -152,31 +152,6 @@ ERROR: node is still EOpNull!
 0:12          'buffer' (temp int)
 0:12          Constant:
 0:12            4 (const int)
-0:21  Function Definition: foo( (global void)
-0:21    Function Parameters: 
-0:23    Sequence
-0:23      Sequence
-0:23        move second child to first child (temp 4-component vector of float)
-0:23          'c' (temp 4-component vector of float)
-0:23          gl_Color: direct index for structure (in 4-component vector of float Color)
-0:23            'anon@0' (in block{in 4-component vector of float Color gl_Color, })
-0:23            Constant:
-0:23              2 (const uint)
-0:24      move second child to first child (temp 4-component vector of float)
-0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
-0:24        'inVar' (smooth in 4-component vector of float)
-0:133  Function Definition: qlod( (global void)
-0:133    Function Parameters: 
-0:?     Sequence
-0:140      'lod' (temp 2-component vector of float)
-0:141      'lod' (temp 2-component vector of float)
-0:147  Function Definition: fooKeyMem( (global void)
-0:147    Function Parameters: 
-0:149    Sequence
-0:149      precise: direct index for structure (global int)
-0:149        'KeyMem' (global structure{global int precise})
-0:149        Constant:
-0:149          0 (const int)
 0:?   Linker Objects
 0:?     'inVar' (smooth in 4-component vector of float)
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index 33a8c9ab05f73617d43bdbbf06c0fe3757a0b551..aea4e49b3d5dde791c4106f610a4be0cc8c0dc0c 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -481,8 +481,6 @@ ERROR: node is still EOpNull!
 0:?     'vl2' (layout(location=6 ) smooth in 4-component vector of float)
 0:?     'uv3' (layout(location=3 ) uniform 3-component vector of float)
 0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' (uniform sampler2DRectShadow)
 0:?     'patchIn' (smooth patch in 4-component vector of float)
@@ -644,312 +642,6 @@ ERROR: node is still EOpNull!
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'c' (temp 4-component vector of float)
 0:27          'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:47  Function Definition: foo23( (global void)
-0:47    Function Parameters: 
-0:?     Sequence
-0:51      textureProjGradOffset (global float)
-0:51        'u2drs' (uniform sampler2DRectShadow)
-0:51        'outp' (out 4-component vector of float)
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Convert float to int (temp 2-component vector of int)
-0:51          'c2D' (smooth in 2-component vector of float)
-0:52      textureProjGradOffset (global float)
-0:52        'u2drs' (uniform sampler2DRectShadow)
-0:52        'outp' (out 4-component vector of float)
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          3 (const int)
-0:52          4 (const int)
-0:53      textureProjGradOffset (global float)
-0:53        'u2drs' (uniform sampler2DRectShadow)
-0:53        'outp' (out 4-component vector of float)
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          15 (const int)
-0:53          16 (const int)
-0:54      textureProjGradOffset (global float)
-0:54        'u2drs' (uniform sampler2DRectShadow)
-0:54        'outp' (out 4-component vector of float)
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          -10 (const int)
-0:54          20 (const int)
-0:60  Function Definition: foo24( (global void)
-0:60    Function Parameters: 
-0:?     Sequence
-0:63      move second child to first child (temp 3-component vector of double)
-0:63        'df' (temp 3-component vector of double)
-0:63        modf (global 3-component vector of double)
-0:63          Convert float to double (temp 3-component vector of double)
-0:63            vector swizzle (temp 3-component vector of float)
-0:63              'outp' (out 4-component vector of float)
-0:63              Sequence
-0:63                Constant:
-0:63                  0 (const int)
-0:63                Constant:
-0:63                  1 (const int)
-0:63                Constant:
-0:63                  2 (const int)
-0:63          'di' (temp 3-component vector of double)
-0:71  Function Definition: foodc1( (global void)
-0:71    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child (temp 2-component vector of float)
-0:73          'v2' (temp 2-component vector of float)
-0:73          dPdxFine (global 2-component vector of float)
-0:73            'in2' (smooth in 2-component vector of float)
-0:74      Sequence
-0:74        move second child to first child (temp 3-component vector of float)
-0:74          'v3' (temp 3-component vector of float)
-0:74          dPdyCoarse (global 3-component vector of float)
-0:74            'in3' (smooth in 3-component vector of float)
-0:75      Sequence
-0:75        move second child to first child (temp 4-component vector of float)
-0:75          'v4' (temp 4-component vector of float)
-0:75          add (temp 4-component vector of float)
-0:75            fwidthCoarse (global 4-component vector of float)
-0:75              'in4' (smooth in 4-component vector of float)
-0:75            fwidthFine (global 4-component vector of float)
-0:75              'in4' (smooth in 4-component vector of float)
-0:80  Function Definition: foodc2( (global void)
-0:80    Function Parameters: 
-0:82    Sequence
-0:82      Sequence
-0:82        move second child to first child (temp 2-component vector of float)
-0:82          'v2' (temp 2-component vector of float)
-0:82          dPdxFine (global 2-component vector of float)
-0:82            'in2' (smooth in 2-component vector of float)
-0:83      Sequence
-0:83        move second child to first child (temp 3-component vector of float)
-0:83          'v3' (temp 3-component vector of float)
-0:83          dPdyCoarse (global 3-component vector of float)
-0:83            'in3' (smooth in 3-component vector of float)
-0:84      Sequence
-0:84        move second child to first child (temp 4-component vector of float)
-0:84          'v4' (temp 4-component vector of float)
-0:84          add (temp 4-component vector of float)
-0:84            fwidthCoarse (global 4-component vector of float)
-0:84              'in4' (smooth in 4-component vector of float)
-0:84            fwidthFine (global 4-component vector of float)
-0:84              'in4' (smooth in 4-component vector of float)
-0:89      move second child to first child (temp 2-component vector of float)
-0:89        'v2' (temp 2-component vector of float)
-0:89        frexp (global 2-component vector of float)
-0:89          'v2' (temp 2-component vector of float)
-0:89          'i2' (temp 2-component vector of int)
-0:90      move second child to first child (temp 3-component vector of float)
-0:90        'v3' (temp 3-component vector of float)
-0:90        ldexp (global 3-component vector of float)
-0:90          'v3' (temp 3-component vector of float)
-0:90          'i3' (temp 3-component vector of int)
-0:92      move second child to first child (temp uint)
-0:92        'u1' (temp uint)
-0:92        PackUnorm4x8 (global uint)
-0:92          'v4' (temp 4-component vector of float)
-0:93      move second child to first child (temp uint)
-0:93        'u1' (temp uint)
-0:93        PackSnorm4x8 (global uint)
-0:93          'v4' (temp 4-component vector of float)
-0:94      move second child to first child (temp 4-component vector of float)
-0:94        'v4' (temp 4-component vector of float)
-0:94        UnpackUnorm4x8 (global 4-component vector of float)
-0:94          'u1' (temp uint)
-0:95      move second child to first child (temp 4-component vector of float)
-0:95        'v4' (temp 4-component vector of float)
-0:95        UnpackSnorm4x8 (global 4-component vector of float)
-0:95          'u1' (temp uint)
-0:99      move second child to first child (temp double)
-0:99        'd' (temp double)
-0:99        PackDouble2x32 (global double)
-0:99          'u2' (temp 2-component vector of uint)
-0:100      move second child to first child (temp 2-component vector of uint)
-0:100        'u2' (temp 2-component vector of uint)
-0:100        UnpackDouble2x32 (global 2-component vector of uint)
-0:100          'd' (temp double)
-0:117  Function Definition: interp( (global void)
-0:117    Function Parameters: 
-0:119    Sequence
-0:119      interpolateAtCentroid (global 2-component vector of float)
-0:119        'colorfc' (centroid flat in 2-component vector of float)
-0:120      interpolateAtCentroid (global 4-component vector of float)
-0:120        'colorSampIn' (smooth sample in 4-component vector of float)
-0:121      interpolateAtCentroid (global 4-component vector of float)
-0:121        'colorfsi' (noperspective in 4-component vector of float)
-0:122      interpolateAtCentroid (global float)
-0:122        'scalarIn' (smooth in float)
-0:123      Constant:
-0:123        0.000000
-0:124      interpolateAtCentroid (global 3-component vector of float)
-0:124        direct index (smooth sample temp 3-component vector of float)
-0:124          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:124          Constant:
-0:124            2 (const int)
-0:125      interpolateAtCentroid (global 2-component vector of float)
-0:125        vector swizzle (temp 2-component vector of float)
-0:125          direct index (smooth sample temp 3-component vector of float)
-0:125            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:125            Constant:
-0:125              2 (const int)
-0:125          Sequence
-0:125            Constant:
-0:125              0 (const int)
-0:125            Constant:
-0:125              1 (const int)
-0:127      Constant:
-0:127        0.000000
-0:128      interpolateAtSample (global 3-component vector of float)
-0:128        indirect index (smooth sample temp 3-component vector of float)
-0:128          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:128          'i' (flat in int)
-0:128        Constant:
-0:128          0 (const int)
-0:129      interpolateAtSample (global float)
-0:129        x: direct index for structure (global float)
-0:129          's1' (smooth in structure{global float x})
-0:129          Constant:
-0:129            0 (const int)
-0:129        Constant:
-0:129          2 (const int)
-0:130      interpolateAtSample (global float)
-0:130        'scalarIn' (smooth in float)
-0:130        Constant:
-0:130          1 (const int)
-0:132      Constant:
-0:132        0.000000
-0:133      interpolateAtOffset (global 3-component vector of float)
-0:133        direct index (smooth sample temp 3-component vector of float)
-0:133          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:133          Constant:
-0:133            2 (const int)
-0:133        Constant:
-0:133          0.200000
-0:133          0.200000
-0:134      interpolateAtOffset (global 2-component vector of float)
-0:134        vector swizzle (temp 2-component vector of float)
-0:134          direct index (smooth sample temp 3-component vector of float)
-0:134            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:134            Constant:
-0:134              2 (const int)
-0:134          Sequence
-0:134            Constant:
-0:134              0 (const int)
-0:134            Constant:
-0:134              1 (const int)
-0:134        Constant:
-0:134          0.200000
-0:134          0.200000
-0:135      interpolateAtOffset (global float)
-0:135        add (temp float)
-0:135          'scalarIn' (smooth in float)
-0:135          'scalarIn' (smooth in float)
-0:135        Constant:
-0:135          0.200000
-0:135          0.200000
-0:136      interpolateAtOffset (global float)
-0:136        x: direct index for structure (global float)
-0:136          's2' (sample temp structure{global float x})
-0:136          Constant:
-0:136            0 (const int)
-0:136        Constant:
-0:136          0.200000
-0:136          0.200000
-0:139      interpolateAtCentroid (global float)
-0:139        'f' (temp float)
-0:140      interpolateAtSample (global 4-component vector of float)
-0:140        'outp' (out 4-component vector of float)
-0:140        Constant:
-0:140          0 (const int)
-0:161  Function Definition: qlod( (global void)
-0:161    Function Parameters: 
-0:?     Sequence
-0:168      move second child to first child (temp 2-component vector of float)
-0:168        'lod' (temp 2-component vector of float)
-0:168        textureQueryLod (global 2-component vector of float)
-0:168          'samp1D' (uniform sampler1D)
-0:168          'pf' (temp float)
-0:169      move second child to first child (temp 2-component vector of float)
-0:169        'lod' (temp 2-component vector of float)
-0:169        textureQueryLod (global 2-component vector of float)
-0:169          'isamp2D' (uniform isampler2D)
-0:169          'pf2' (temp 2-component vector of float)
-0:170      move second child to first child (temp 2-component vector of float)
-0:170        'lod' (temp 2-component vector of float)
-0:170        textureQueryLod (global 2-component vector of float)
-0:170          'usamp3D' (uniform usampler3D)
-0:170          'pf3' (temp 3-component vector of float)
-0:171      move second child to first child (temp 2-component vector of float)
-0:171        'lod' (temp 2-component vector of float)
-0:171        textureQueryLod (global 2-component vector of float)
-0:171          'sampCube' (uniform samplerCube)
-0:171          'pf3' (temp 3-component vector of float)
-0:172      move second child to first child (temp 2-component vector of float)
-0:172        'lod' (temp 2-component vector of float)
-0:172        textureQueryLod (global 2-component vector of float)
-0:172          'isamp1DA' (uniform isampler1DArray)
-0:172          'pf' (temp float)
-0:173      move second child to first child (temp 2-component vector of float)
-0:173        'lod' (temp 2-component vector of float)
-0:173        textureQueryLod (global 2-component vector of float)
-0:173          'usamp2DA' (uniform usampler2DArray)
-0:173          'pf2' (temp 2-component vector of float)
-0:174      move second child to first child (temp 2-component vector of float)
-0:174        'lod' (temp 2-component vector of float)
-0:174        textureQueryLod (global 2-component vector of float)
-0:174          'isampCubeA' (uniform isamplerCubeArray)
-0:174          'pf3' (temp 3-component vector of float)
-0:176      move second child to first child (temp 2-component vector of float)
-0:176        'lod' (temp 2-component vector of float)
-0:176        textureQueryLod (global 2-component vector of float)
-0:176          'samp1Ds' (uniform sampler1DShadow)
-0:176          'pf' (temp float)
-0:177      move second child to first child (temp 2-component vector of float)
-0:177        'lod' (temp 2-component vector of float)
-0:177        textureQueryLod (global 2-component vector of float)
-0:177          'samp2Ds' (uniform sampler2DShadow)
-0:177          'pf2' (temp 2-component vector of float)
-0:178      move second child to first child (temp 2-component vector of float)
-0:178        'lod' (temp 2-component vector of float)
-0:178        textureQueryLod (global 2-component vector of float)
-0:178          'sampCubes' (uniform samplerCubeShadow)
-0:178          'pf3' (temp 3-component vector of float)
-0:179      move second child to first child (temp 2-component vector of float)
-0:179        'lod' (temp 2-component vector of float)
-0:179        textureQueryLod (global 2-component vector of float)
-0:179          'samp1DAs' (uniform sampler1DArrayShadow)
-0:179          'pf' (temp float)
-0:180      move second child to first child (temp 2-component vector of float)
-0:180        'lod' (temp 2-component vector of float)
-0:180        textureQueryLod (global 2-component vector of float)
-0:180          'samp2DAs' (uniform sampler2DArrayShadow)
-0:180          'pf2' (temp 2-component vector of float)
-0:181      move second child to first child (temp 2-component vector of float)
-0:181        'lod' (temp 2-component vector of float)
-0:181        textureQueryLod (global 2-component vector of float)
-0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)
-0:181          'pf3' (temp 3-component vector of float)
-0:183      'lod' (temp 2-component vector of float)
-0:184      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'c2D' (smooth in 2-component vector of float)
 0:?     'i' (flat in int)
@@ -962,8 +654,6 @@ ERROR: node is still EOpNull!
 0:?     'vl2' (layout(location=6 ) smooth in 4-component vector of float)
 0:?     'uv3' (layout(location=3 ) uniform 3-component vector of float)
 0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' (uniform sampler2DRectShadow)
 0:?     'patchIn' (smooth patch in 4-component vector of float)
diff --git a/Test/baseResults/400.geom.out b/Test/baseResults/400.geom.out
index 16117e62a23ff003549c73859b52b2361535676a..86e2b8ffa6b5a467ef6305ce75b382d902eb62e6 100644
--- a/Test/baseResults/400.geom.out
+++ b/Test/baseResults/400.geom.out
@@ -1070,981 +1070,6 @@ ERROR: node is still EOpNull!
 0:9        move second child to first child (temp int)
 0:9          'id' (temp int)
 0:9          'gl_InvocationID' (in int InvocationID)
-0:23  Function Definition: foo( (global void)
-0:23    Function Parameters: 
-0:25    Sequence
-0:25      Constant:
-0:25        1 (const int)
-0:26      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:26        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
-0:26          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
-0:26          Constant:
-0:26            1 (const int)
-0:26        Constant:
-0:26          0 (const int)
-0:34  Function Definition: foo2( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Constant:
-0:36        1 (const int)
-0:37      Constant:
-0:37        3 (const int)
-0:46  Function Definition: foo3( (global void)
-0:46    Function Parameters: 
-0:48    Sequence
-0:48      Constant:
-0:48        3 (const int)
-0:49      Constant:
-0:49        3 (const int)
-0:50      Constant:
-0:50        3 (const int)
-0:51      Constant:
-0:51        3 (const int)
-0:75  Function Definition: bits( (global void)
-0:75    Function Parameters: 
-0:?     Sequence
-0:78      move second child to first child (temp 2-component vector of uint)
-0:78        'u2' (temp 2-component vector of uint)
-0:78        addCarry (global 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:78          'u2' (temp 2-component vector of uint)
-0:80      move second child to first child (temp uint)
-0:80        'u1' (temp uint)
-0:80        subBorrow (global uint)
-0:80          'u1' (temp uint)
-0:80          'u1' (temp uint)
-0:80          'u1' (temp uint)
-0:82      uMulExtended (global void)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:82        'u4' (temp 4-component vector of uint)
-0:84      iMulExtended (global void)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:84        'i4' (temp 4-component vector of int)
-0:86      move second child to first child (temp int)
-0:86        'i1' (temp int)
-0:86        bitfieldExtract (global int)
-0:86          'i1' (temp int)
-0:86          Constant:
-0:86            4 (const int)
-0:86          Constant:
-0:86            5 (const int)
-0:88      move second child to first child (temp 3-component vector of uint)
-0:88        'u3' (temp 3-component vector of uint)
-0:88        bitfieldExtract (global 3-component vector of uint)
-0:88          'u3' (temp 3-component vector of uint)
-0:88          Constant:
-0:88            4 (const int)
-0:88          Constant:
-0:88            5 (const int)
-0:90      move second child to first child (temp 3-component vector of int)
-0:90        'i3' (temp 3-component vector of int)
-0:90        bitfieldInsert (global 3-component vector of int)
-0:90          'i3' (temp 3-component vector of int)
-0:90          'i3' (temp 3-component vector of int)
-0:90          Constant:
-0:90            4 (const int)
-0:90          Constant:
-0:90            5 (const int)
-0:91      move second child to first child (temp uint)
-0:91        'u1' (temp uint)
-0:91        bitfieldInsert (global uint)
-0:91          'u1' (temp uint)
-0:91          'u1' (temp uint)
-0:91          Constant:
-0:91            4 (const int)
-0:91          Constant:
-0:91            5 (const int)
-0:93      move second child to first child (temp 2-component vector of int)
-0:93        'i2' (temp 2-component vector of int)
-0:93        bitFieldReverse (global 2-component vector of int)
-0:93          'i2' (temp 2-component vector of int)
-0:94      move second child to first child (temp 4-component vector of uint)
-0:94        'u4' (temp 4-component vector of uint)
-0:94        bitFieldReverse (global 4-component vector of uint)
-0:94          'u4' (temp 4-component vector of uint)
-0:95      move second child to first child (temp int)
-0:95        'i1' (temp int)
-0:95        bitCount (global int)
-0:95          'i1' (temp int)
-0:96      move second child to first child (temp 3-component vector of int)
-0:96        'i3' (temp 3-component vector of int)
-0:96        bitCount (global 3-component vector of int)
-0:96          'u3' (temp 3-component vector of uint)
-0:97      move second child to first child (temp 2-component vector of int)
-0:97        'i2' (temp 2-component vector of int)
-0:97        findLSB (global 2-component vector of int)
-0:97          'i2' (temp 2-component vector of int)
-0:98      move second child to first child (temp 4-component vector of int)
-0:98        'i4' (temp 4-component vector of int)
-0:98        findLSB (global 4-component vector of int)
-0:98          'u4' (temp 4-component vector of uint)
-0:99      move second child to first child (temp int)
-0:99        'i1' (temp int)
-0:99        findMSB (global int)
-0:99          'i1' (temp int)
-0:100      move second child to first child (temp 2-component vector of int)
-0:100        'i2' (temp 2-component vector of int)
-0:100        findMSB (global 2-component vector of int)
-0:100          'u2' (temp 2-component vector of uint)
-0:108  Function Definition: qlod( (global void)
-0:108    Function Parameters: 
-0:?     Sequence
-0:115      'lod' (temp 2-component vector of float)
-0:116      'lod' (temp 2-component vector of float)
-0:119  Function Definition: doubles( (global void)
-0:119    Function Parameters: 
-0:?     Sequence
-0:131      move second child to first child (temp double)
-0:131        'doublev' (temp double)
-0:131        Constant:
-0:131          1.702939
-0:132      move second child to first child (temp 2-component vector of double)
-0:132        'dvec2v' (temp 2-component vector of double)
-0:132        Constant:
-0:132          1.643168
-0:132          1.643168
-0:133      move second child to first child (temp 3-component vector of double)
-0:133        'dvec3v' (temp 3-component vector of double)
-0:133        Constant:
-0:133          1.414214
-0:133          1.414214
-0:133          1.414214
-0:134      move second child to first child (temp 4-component vector of double)
-0:134        'dvec4v' (temp 4-component vector of double)
-0:134        Constant:
-0:134          1.449138
-0:134          1.449138
-0:134          1.449138
-0:134          1.449138
-0:136      add second child into first child (temp double)
-0:136        'doublev' (temp double)
-0:136        inverse sqrt (global double)
-0:136          'doublev' (temp double)
-0:137      add second child into first child (temp 2-component vector of double)
-0:137        'dvec2v' (temp 2-component vector of double)
-0:137        inverse sqrt (global 2-component vector of double)
-0:137          'dvec2v' (temp 2-component vector of double)
-0:138      add second child into first child (temp 3-component vector of double)
-0:138        'dvec3v' (temp 3-component vector of double)
-0:138        inverse sqrt (global 3-component vector of double)
-0:138          'dvec3v' (temp 3-component vector of double)
-0:139      add second child into first child (temp 4-component vector of double)
-0:139        'dvec4v' (temp 4-component vector of double)
-0:139        inverse sqrt (global 4-component vector of double)
-0:139          'dvec4v' (temp 4-component vector of double)
-0:141      add second child into first child (temp double)
-0:141        'doublev' (temp double)
-0:141        Absolute value (global double)
-0:141          'doublev' (temp double)
-0:142      add second child into first child (temp 2-component vector of double)
-0:142        'dvec2v' (temp 2-component vector of double)
-0:142        Absolute value (global 2-component vector of double)
-0:142          'dvec2v' (temp 2-component vector of double)
-0:143      add second child into first child (temp 3-component vector of double)
-0:143        'dvec3v' (temp 3-component vector of double)
-0:143        Absolute value (global 3-component vector of double)
-0:143          'dvec3v' (temp 3-component vector of double)
-0:144      add second child into first child (temp 4-component vector of double)
-0:144        'dvec4v' (temp 4-component vector of double)
-0:144        Absolute value (global 4-component vector of double)
-0:144          'dvec4v' (temp 4-component vector of double)
-0:146      add second child into first child (temp double)
-0:146        'doublev' (temp double)
-0:146        Sign (global double)
-0:146          'doublev' (temp double)
-0:147      add second child into first child (temp 2-component vector of double)
-0:147        'dvec2v' (temp 2-component vector of double)
-0:147        Sign (global 2-component vector of double)
-0:147          'dvec2v' (temp 2-component vector of double)
-0:148      add second child into first child (temp 3-component vector of double)
-0:148        'dvec3v' (temp 3-component vector of double)
-0:148        Sign (global 3-component vector of double)
-0:148          'dvec3v' (temp 3-component vector of double)
-0:149      add second child into first child (temp 4-component vector of double)
-0:149        'dvec4v' (temp 4-component vector of double)
-0:149        Sign (global 4-component vector of double)
-0:149          'dvec4v' (temp 4-component vector of double)
-0:151      add second child into first child (temp double)
-0:151        'doublev' (temp double)
-0:151        Floor (global double)
-0:151          'doublev' (temp double)
-0:152      add second child into first child (temp 2-component vector of double)
-0:152        'dvec2v' (temp 2-component vector of double)
-0:152        Floor (global 2-component vector of double)
-0:152          'dvec2v' (temp 2-component vector of double)
-0:153      add second child into first child (temp 3-component vector of double)
-0:153        'dvec3v' (temp 3-component vector of double)
-0:153        Floor (global 3-component vector of double)
-0:153          'dvec3v' (temp 3-component vector of double)
-0:154      add second child into first child (temp 4-component vector of double)
-0:154        'dvec4v' (temp 4-component vector of double)
-0:154        Floor (global 4-component vector of double)
-0:154          'dvec4v' (temp 4-component vector of double)
-0:156      add second child into first child (temp double)
-0:156        'doublev' (temp double)
-0:156        trunc (global double)
-0:156          'doublev' (temp double)
-0:157      add second child into first child (temp 2-component vector of double)
-0:157        'dvec2v' (temp 2-component vector of double)
-0:157        trunc (global 2-component vector of double)
-0:157          'dvec2v' (temp 2-component vector of double)
-0:158      add second child into first child (temp 3-component vector of double)
-0:158        'dvec3v' (temp 3-component vector of double)
-0:158        trunc (global 3-component vector of double)
-0:158          'dvec3v' (temp 3-component vector of double)
-0:159      add second child into first child (temp 4-component vector of double)
-0:159        'dvec4v' (temp 4-component vector of double)
-0:159        trunc (global 4-component vector of double)
-0:159          'dvec4v' (temp 4-component vector of double)
-0:161      add second child into first child (temp double)
-0:161        'doublev' (temp double)
-0:161        round (global double)
-0:161          'doublev' (temp double)
-0:162      add second child into first child (temp 2-component vector of double)
-0:162        'dvec2v' (temp 2-component vector of double)
-0:162        round (global 2-component vector of double)
-0:162          'dvec2v' (temp 2-component vector of double)
-0:163      add second child into first child (temp 3-component vector of double)
-0:163        'dvec3v' (temp 3-component vector of double)
-0:163        round (global 3-component vector of double)
-0:163          'dvec3v' (temp 3-component vector of double)
-0:164      add second child into first child (temp 4-component vector of double)
-0:164        'dvec4v' (temp 4-component vector of double)
-0:164        round (global 4-component vector of double)
-0:164          'dvec4v' (temp 4-component vector of double)
-0:166      add second child into first child (temp double)
-0:166        'doublev' (temp double)
-0:166        roundEven (global double)
-0:166          'doublev' (temp double)
-0:167      add second child into first child (temp 2-component vector of double)
-0:167        'dvec2v' (temp 2-component vector of double)
-0:167        roundEven (global 2-component vector of double)
-0:167          'dvec2v' (temp 2-component vector of double)
-0:168      add second child into first child (temp 3-component vector of double)
-0:168        'dvec3v' (temp 3-component vector of double)
-0:168        roundEven (global 3-component vector of double)
-0:168          'dvec3v' (temp 3-component vector of double)
-0:169      add second child into first child (temp 4-component vector of double)
-0:169        'dvec4v' (temp 4-component vector of double)
-0:169        roundEven (global 4-component vector of double)
-0:169          'dvec4v' (temp 4-component vector of double)
-0:171      add second child into first child (temp double)
-0:171        'doublev' (temp double)
-0:171        Ceiling (global double)
-0:171          'doublev' (temp double)
-0:172      add second child into first child (temp 2-component vector of double)
-0:172        'dvec2v' (temp 2-component vector of double)
-0:172        Ceiling (global 2-component vector of double)
-0:172          'dvec2v' (temp 2-component vector of double)
-0:173      add second child into first child (temp 3-component vector of double)
-0:173        'dvec3v' (temp 3-component vector of double)
-0:173        Ceiling (global 3-component vector of double)
-0:173          'dvec3v' (temp 3-component vector of double)
-0:174      add second child into first child (temp 4-component vector of double)
-0:174        'dvec4v' (temp 4-component vector of double)
-0:174        Ceiling (global 4-component vector of double)
-0:174          'dvec4v' (temp 4-component vector of double)
-0:176      add second child into first child (temp double)
-0:176        'doublev' (temp double)
-0:176        Fraction (global double)
-0:176          'doublev' (temp double)
-0:177      add second child into first child (temp 2-component vector of double)
-0:177        'dvec2v' (temp 2-component vector of double)
-0:177        Fraction (global 2-component vector of double)
-0:177          'dvec2v' (temp 2-component vector of double)
-0:178      add second child into first child (temp 3-component vector of double)
-0:178        'dvec3v' (temp 3-component vector of double)
-0:178        Fraction (global 3-component vector of double)
-0:178          'dvec3v' (temp 3-component vector of double)
-0:179      add second child into first child (temp 4-component vector of double)
-0:179        'dvec4v' (temp 4-component vector of double)
-0:179        Fraction (global 4-component vector of double)
-0:179          'dvec4v' (temp 4-component vector of double)
-0:181      add second child into first child (temp double)
-0:181        'doublev' (temp double)
-0:181        mod (global double)
-0:181          'doublev' (temp double)
-0:181          'doublev' (temp double)
-0:182      add second child into first child (temp 2-component vector of double)
-0:182        'dvec2v' (temp 2-component vector of double)
-0:182        mod (global 2-component vector of double)
-0:182          'dvec2v' (temp 2-component vector of double)
-0:182          'doublev' (temp double)
-0:183      add second child into first child (temp 3-component vector of double)
-0:183        'dvec3v' (temp 3-component vector of double)
-0:183        mod (global 3-component vector of double)
-0:183          'dvec3v' (temp 3-component vector of double)
-0:183          'doublev' (temp double)
-0:184      add second child into first child (temp 4-component vector of double)
-0:184        'dvec4v' (temp 4-component vector of double)
-0:184        mod (global 4-component vector of double)
-0:184          'dvec4v' (temp 4-component vector of double)
-0:184          'doublev' (temp double)
-0:185      add second child into first child (temp 2-component vector of double)
-0:185        'dvec2v' (temp 2-component vector of double)
-0:185        mod (global 2-component vector of double)
-0:185          'dvec2v' (temp 2-component vector of double)
-0:185          'dvec2v' (temp 2-component vector of double)
-0:186      add second child into first child (temp 3-component vector of double)
-0:186        'dvec3v' (temp 3-component vector of double)
-0:186        mod (global 3-component vector of double)
-0:186          'dvec3v' (temp 3-component vector of double)
-0:186          'dvec3v' (temp 3-component vector of double)
-0:187      add second child into first child (temp 4-component vector of double)
-0:187        'dvec4v' (temp 4-component vector of double)
-0:187        mod (global 4-component vector of double)
-0:187          'dvec4v' (temp 4-component vector of double)
-0:187          'dvec4v' (temp 4-component vector of double)
-0:189      add second child into first child (temp double)
-0:189        'doublev' (temp double)
-0:189        modf (global double)
-0:189          'doublev' (temp double)
-0:189          'doublev' (temp double)
-0:190      add second child into first child (temp 2-component vector of double)
-0:190        'dvec2v' (temp 2-component vector of double)
-0:190        modf (global 2-component vector of double)
-0:190          'dvec2v' (temp 2-component vector of double)
-0:190          'dvec2v' (temp 2-component vector of double)
-0:191      add second child into first child (temp 3-component vector of double)
-0:191        'dvec3v' (temp 3-component vector of double)
-0:191        modf (global 3-component vector of double)
-0:191          'dvec3v' (temp 3-component vector of double)
-0:191          'dvec3v' (temp 3-component vector of double)
-0:192      add second child into first child (temp 4-component vector of double)
-0:192        'dvec4v' (temp 4-component vector of double)
-0:192        modf (global 4-component vector of double)
-0:192          'dvec4v' (temp 4-component vector of double)
-0:192          'dvec4v' (temp 4-component vector of double)
-0:194      add second child into first child (temp double)
-0:194        'doublev' (temp double)
-0:194        min (global double)
-0:194          'doublev' (temp double)
-0:194          'doublev' (temp double)
-0:195      add second child into first child (temp 2-component vector of double)
-0:195        'dvec2v' (temp 2-component vector of double)
-0:195        min (global 2-component vector of double)
-0:195          'dvec2v' (temp 2-component vector of double)
-0:195          'doublev' (temp double)
-0:196      add second child into first child (temp 3-component vector of double)
-0:196        'dvec3v' (temp 3-component vector of double)
-0:196        min (global 3-component vector of double)
-0:196          'dvec3v' (temp 3-component vector of double)
-0:196          'doublev' (temp double)
-0:197      add second child into first child (temp 4-component vector of double)
-0:197        'dvec4v' (temp 4-component vector of double)
-0:197        min (global 4-component vector of double)
-0:197          'dvec4v' (temp 4-component vector of double)
-0:197          'doublev' (temp double)
-0:198      add second child into first child (temp 2-component vector of double)
-0:198        'dvec2v' (temp 2-component vector of double)
-0:198        min (global 2-component vector of double)
-0:198          'dvec2v' (temp 2-component vector of double)
-0:198          'dvec2v' (temp 2-component vector of double)
-0:199      add second child into first child (temp 3-component vector of double)
-0:199        'dvec3v' (temp 3-component vector of double)
-0:199        min (global 3-component vector of double)
-0:199          'dvec3v' (temp 3-component vector of double)
-0:199          'dvec3v' (temp 3-component vector of double)
-0:200      add second child into first child (temp 4-component vector of double)
-0:200        'dvec4v' (temp 4-component vector of double)
-0:200        min (global 4-component vector of double)
-0:200          'dvec4v' (temp 4-component vector of double)
-0:200          'dvec4v' (temp 4-component vector of double)
-0:202      add second child into first child (temp double)
-0:202        'doublev' (temp double)
-0:202        max (global double)
-0:202          'doublev' (temp double)
-0:202          'doublev' (temp double)
-0:203      add second child into first child (temp 2-component vector of double)
-0:203        'dvec2v' (temp 2-component vector of double)
-0:203        max (global 2-component vector of double)
-0:203          'dvec2v' (temp 2-component vector of double)
-0:203          'doublev' (temp double)
-0:204      add second child into first child (temp 3-component vector of double)
-0:204        'dvec3v' (temp 3-component vector of double)
-0:204        max (global 3-component vector of double)
-0:204          'dvec3v' (temp 3-component vector of double)
-0:204          'doublev' (temp double)
-0:205      add second child into first child (temp 4-component vector of double)
-0:205        'dvec4v' (temp 4-component vector of double)
-0:205        max (global 4-component vector of double)
-0:205          'dvec4v' (temp 4-component vector of double)
-0:205          'doublev' (temp double)
-0:206      add second child into first child (temp 2-component vector of double)
-0:206        'dvec2v' (temp 2-component vector of double)
-0:206        max (global 2-component vector of double)
-0:206          'dvec2v' (temp 2-component vector of double)
-0:206          'dvec2v' (temp 2-component vector of double)
-0:207      add second child into first child (temp 3-component vector of double)
-0:207        'dvec3v' (temp 3-component vector of double)
-0:207        max (global 3-component vector of double)
-0:207          'dvec3v' (temp 3-component vector of double)
-0:207          'dvec3v' (temp 3-component vector of double)
-0:208      add second child into first child (temp 4-component vector of double)
-0:208        'dvec4v' (temp 4-component vector of double)
-0:208        max (global 4-component vector of double)
-0:208          'dvec4v' (temp 4-component vector of double)
-0:208          'dvec4v' (temp 4-component vector of double)
-0:210      add second child into first child (temp double)
-0:210        'doublev' (temp double)
-0:210        clamp (global double)
-0:210          'doublev' (temp double)
-0:210          'doublev' (temp double)
-0:210          'doublev' (temp double)
-0:211      add second child into first child (temp 2-component vector of double)
-0:211        'dvec2v' (temp 2-component vector of double)
-0:211        clamp (global 2-component vector of double)
-0:211          'dvec2v' (temp 2-component vector of double)
-0:211          'doublev' (temp double)
-0:211          'doublev' (temp double)
-0:212      add second child into first child (temp 3-component vector of double)
-0:212        'dvec3v' (temp 3-component vector of double)
-0:212        clamp (global 3-component vector of double)
-0:212          'dvec3v' (temp 3-component vector of double)
-0:212          'doublev' (temp double)
-0:212          'doublev' (temp double)
-0:213      add second child into first child (temp 4-component vector of double)
-0:213        'dvec4v' (temp 4-component vector of double)
-0:213        clamp (global 4-component vector of double)
-0:213          'dvec4v' (temp 4-component vector of double)
-0:213          'doublev' (temp double)
-0:213          'doublev' (temp double)
-0:214      add second child into first child (temp 2-component vector of double)
-0:214        'dvec2v' (temp 2-component vector of double)
-0:214        clamp (global 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:214          'dvec2v' (temp 2-component vector of double)
-0:215      add second child into first child (temp 3-component vector of double)
-0:215        'dvec3v' (temp 3-component vector of double)
-0:215        clamp (global 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:215          'dvec3v' (temp 3-component vector of double)
-0:216      add second child into first child (temp 4-component vector of double)
-0:216        'dvec4v' (temp 4-component vector of double)
-0:216        clamp (global 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:216          'dvec4v' (temp 4-component vector of double)
-0:218      add second child into first child (temp double)
-0:218        'doublev' (temp double)
-0:218        mix (global double)
-0:218          'doublev' (temp double)
-0:218          'doublev' (temp double)
-0:218          'doublev' (temp double)
-0:219      add second child into first child (temp 2-component vector of double)
-0:219        'dvec2v' (temp 2-component vector of double)
-0:219        mix (global 2-component vector of double)
-0:219          'dvec2v' (temp 2-component vector of double)
-0:219          'dvec2v' (temp 2-component vector of double)
-0:219          'doublev' (temp double)
-0:220      add second child into first child (temp 3-component vector of double)
-0:220        'dvec3v' (temp 3-component vector of double)
-0:220        mix (global 3-component vector of double)
-0:220          'dvec3v' (temp 3-component vector of double)
-0:220          'dvec3v' (temp 3-component vector of double)
-0:220          'doublev' (temp double)
-0:221      add second child into first child (temp 4-component vector of double)
-0:221        'dvec4v' (temp 4-component vector of double)
-0:221        mix (global 4-component vector of double)
-0:221          'dvec4v' (temp 4-component vector of double)
-0:221          'dvec4v' (temp 4-component vector of double)
-0:221          'doublev' (temp double)
-0:222      add second child into first child (temp 2-component vector of double)
-0:222        'dvec2v' (temp 2-component vector of double)
-0:222        mix (global 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:222          'dvec2v' (temp 2-component vector of double)
-0:223      add second child into first child (temp 3-component vector of double)
-0:223        'dvec3v' (temp 3-component vector of double)
-0:223        mix (global 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:223          'dvec3v' (temp 3-component vector of double)
-0:224      add second child into first child (temp 4-component vector of double)
-0:224        'dvec4v' (temp 4-component vector of double)
-0:224        mix (global 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:224          'dvec4v' (temp 4-component vector of double)
-0:225      add second child into first child (temp double)
-0:225        'doublev' (temp double)
-0:225        mix (global double)
-0:225          'doublev' (temp double)
-0:225          'doublev' (temp double)
-0:225          'boolv' (temp bool)
-0:226      add second child into first child (temp 2-component vector of double)
-0:226        'dvec2v' (temp 2-component vector of double)
-0:226        mix (global 2-component vector of double)
-0:226          'dvec2v' (temp 2-component vector of double)
-0:226          'dvec2v' (temp 2-component vector of double)
-0:226          'bvec2v' (temp 2-component vector of bool)
-0:227      add second child into first child (temp 3-component vector of double)
-0:227        'dvec3v' (temp 3-component vector of double)
-0:227        mix (global 3-component vector of double)
-0:227          'dvec3v' (temp 3-component vector of double)
-0:227          'dvec3v' (temp 3-component vector of double)
-0:227          'bvec3v' (temp 3-component vector of bool)
-0:228      add second child into first child (temp 4-component vector of double)
-0:228        'dvec4v' (temp 4-component vector of double)
-0:228        mix (global 4-component vector of double)
-0:228          'dvec4v' (temp 4-component vector of double)
-0:228          'dvec4v' (temp 4-component vector of double)
-0:228          'bvec4v' (temp 4-component vector of bool)
-0:230      add second child into first child (temp double)
-0:230        'doublev' (temp double)
-0:230        step (global double)
-0:230          'doublev' (temp double)
-0:230          'doublev' (temp double)
-0:231      add second child into first child (temp 2-component vector of double)
-0:231        'dvec2v' (temp 2-component vector of double)
-0:231        step (global 2-component vector of double)
-0:231          'dvec2v' (temp 2-component vector of double)
-0:231          'dvec2v' (temp 2-component vector of double)
-0:232      add second child into first child (temp 3-component vector of double)
-0:232        'dvec3v' (temp 3-component vector of double)
-0:232        step (global 3-component vector of double)
-0:232          'dvec3v' (temp 3-component vector of double)
-0:232          'dvec3v' (temp 3-component vector of double)
-0:233      add second child into first child (temp 4-component vector of double)
-0:233        'dvec4v' (temp 4-component vector of double)
-0:233        step (global 4-component vector of double)
-0:233          'dvec4v' (temp 4-component vector of double)
-0:233          'dvec4v' (temp 4-component vector of double)
-0:234      add second child into first child (temp 2-component vector of double)
-0:234        'dvec2v' (temp 2-component vector of double)
-0:234        step (global 2-component vector of double)
-0:234          'doublev' (temp double)
-0:234          'dvec2v' (temp 2-component vector of double)
-0:235      add second child into first child (temp 3-component vector of double)
-0:235        'dvec3v' (temp 3-component vector of double)
-0:235        step (global 3-component vector of double)
-0:235          'doublev' (temp double)
-0:235          'dvec3v' (temp 3-component vector of double)
-0:236      add second child into first child (temp 4-component vector of double)
-0:236        'dvec4v' (temp 4-component vector of double)
-0:236        step (global 4-component vector of double)
-0:236          'doublev' (temp double)
-0:236          'dvec4v' (temp 4-component vector of double)
-0:238      add second child into first child (temp double)
-0:238        'doublev' (temp double)
-0:238        smoothstep (global double)
-0:238          'doublev' (temp double)
-0:238          'doublev' (temp double)
-0:238          'doublev' (temp double)
-0:239      add second child into first child (temp 2-component vector of double)
-0:239        'dvec2v' (temp 2-component vector of double)
-0:239        smoothstep (global 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:239          'dvec2v' (temp 2-component vector of double)
-0:240      add second child into first child (temp 3-component vector of double)
-0:240        'dvec3v' (temp 3-component vector of double)
-0:240        smoothstep (global 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:240          'dvec3v' (temp 3-component vector of double)
-0:241      add second child into first child (temp 4-component vector of double)
-0:241        'dvec4v' (temp 4-component vector of double)
-0:241        smoothstep (global 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:241          'dvec4v' (temp 4-component vector of double)
-0:242      add second child into first child (temp 2-component vector of double)
-0:242        'dvec2v' (temp 2-component vector of double)
-0:242        smoothstep (global 2-component vector of double)
-0:242          'doublev' (temp double)
-0:242          'doublev' (temp double)
-0:242          'dvec2v' (temp 2-component vector of double)
-0:243      add second child into first child (temp 3-component vector of double)
-0:243        'dvec3v' (temp 3-component vector of double)
-0:243        smoothstep (global 3-component vector of double)
-0:243          'doublev' (temp double)
-0:243          'doublev' (temp double)
-0:243          'dvec3v' (temp 3-component vector of double)
-0:244      add second child into first child (temp 4-component vector of double)
-0:244        'dvec4v' (temp 4-component vector of double)
-0:244        smoothstep (global 4-component vector of double)
-0:244          'doublev' (temp double)
-0:244          'doublev' (temp double)
-0:244          'dvec4v' (temp 4-component vector of double)
-0:246      move second child to first child (temp bool)
-0:246        'boolv' (temp bool)
-0:246        isnan (global bool)
-0:246          'doublev' (temp double)
-0:247      move second child to first child (temp 2-component vector of bool)
-0:247        'bvec2v' (temp 2-component vector of bool)
-0:247        isnan (global 2-component vector of bool)
-0:247          'dvec2v' (temp 2-component vector of double)
-0:248      move second child to first child (temp 3-component vector of bool)
-0:248        'bvec3v' (temp 3-component vector of bool)
-0:248        isnan (global 3-component vector of bool)
-0:248          'dvec3v' (temp 3-component vector of double)
-0:249      move second child to first child (temp 4-component vector of bool)
-0:249        'bvec4v' (temp 4-component vector of bool)
-0:249        isnan (global 4-component vector of bool)
-0:249          'dvec4v' (temp 4-component vector of double)
-0:251      move second child to first child (temp bool)
-0:251        'boolv' (temp bool)
-0:251        Test condition and select (temp bool)
-0:251          Condition
-0:251          'boolv' (temp bool)
-0:251          true case
-0:251          isinf (global bool)
-0:251            'doublev' (temp double)
-0:251          false case
-0:251          Constant:
-0:251            false (const bool)
-0:252      move second child to first child (temp 2-component vector of bool)
-0:252        'bvec2v' (temp 2-component vector of bool)
-0:252        Test condition and select (temp 2-component vector of bool)
-0:252          Condition
-0:252          'boolv' (temp bool)
-0:252          true case
-0:252          isinf (global 2-component vector of bool)
-0:252            'dvec2v' (temp 2-component vector of double)
-0:252          false case
-0:252          Constant:
-0:252            false (const bool)
-0:252            false (const bool)
-0:253      move second child to first child (temp 3-component vector of bool)
-0:253        'bvec3v' (temp 3-component vector of bool)
-0:253        Test condition and select (temp 3-component vector of bool)
-0:253          Condition
-0:253          'boolv' (temp bool)
-0:253          true case
-0:253          isinf (global 3-component vector of bool)
-0:253            'dvec3v' (temp 3-component vector of double)
-0:253          false case
-0:253          Constant:
-0:253            false (const bool)
-0:253            false (const bool)
-0:253            false (const bool)
-0:254      move second child to first child (temp 4-component vector of bool)
-0:254        'bvec4v' (temp 4-component vector of bool)
-0:254        Test condition and select (temp 4-component vector of bool)
-0:254          Condition
-0:254          'boolv' (temp bool)
-0:254          true case
-0:254          isinf (global 4-component vector of bool)
-0:254            'dvec4v' (temp 4-component vector of double)
-0:254          false case
-0:254          Constant:
-0:254            false (const bool)
-0:254            false (const bool)
-0:254            false (const bool)
-0:254            false (const bool)
-0:256      add second child into first child (temp double)
-0:256        'doublev' (temp double)
-0:256        length (global double)
-0:256          'doublev' (temp double)
-0:257      add second child into first child (temp double)
-0:257        'doublev' (temp double)
-0:257        length (global double)
-0:257          'dvec2v' (temp 2-component vector of double)
-0:258      add second child into first child (temp double)
-0:258        'doublev' (temp double)
-0:258        length (global double)
-0:258          'dvec3v' (temp 3-component vector of double)
-0:259      add second child into first child (temp double)
-0:259        'doublev' (temp double)
-0:259        length (global double)
-0:259          'dvec4v' (temp 4-component vector of double)
-0:261      add second child into first child (temp double)
-0:261        'doublev' (temp double)
-0:261        distance (global double)
-0:261          'doublev' (temp double)
-0:261          'doublev' (temp double)
-0:262      add second child into first child (temp double)
-0:262        'doublev' (temp double)
-0:262        distance (global double)
-0:262          'dvec2v' (temp 2-component vector of double)
-0:262          'dvec2v' (temp 2-component vector of double)
-0:263      add second child into first child (temp double)
-0:263        'doublev' (temp double)
-0:263        distance (global double)
-0:263          'dvec3v' (temp 3-component vector of double)
-0:263          'dvec3v' (temp 3-component vector of double)
-0:264      add second child into first child (temp double)
-0:264        'doublev' (temp double)
-0:264        distance (global double)
-0:264          'dvec4v' (temp 4-component vector of double)
-0:264          'dvec4v' (temp 4-component vector of double)
-0:266      add second child into first child (temp double)
-0:266        'doublev' (temp double)
-0:266        dot-product (global double)
-0:266          'doublev' (temp double)
-0:266          'doublev' (temp double)
-0:267      add second child into first child (temp double)
-0:267        'doublev' (temp double)
-0:267        dot-product (global double)
-0:267          'dvec2v' (temp 2-component vector of double)
-0:267          'dvec2v' (temp 2-component vector of double)
-0:268      add second child into first child (temp double)
-0:268        'doublev' (temp double)
-0:268        dot-product (global double)
-0:268          'dvec3v' (temp 3-component vector of double)
-0:268          'dvec3v' (temp 3-component vector of double)
-0:269      add second child into first child (temp double)
-0:269        'doublev' (temp double)
-0:269        dot-product (global double)
-0:269          'dvec4v' (temp 4-component vector of double)
-0:269          'dvec4v' (temp 4-component vector of double)
-0:271      add second child into first child (temp 3-component vector of double)
-0:271        'dvec3v' (temp 3-component vector of double)
-0:271        cross-product (global 3-component vector of double)
-0:271          'dvec3v' (temp 3-component vector of double)
-0:271          'dvec3v' (temp 3-component vector of double)
-0:273      add second child into first child (temp double)
-0:273        'doublev' (temp double)
-0:273        normalize (global double)
-0:273          'doublev' (temp double)
-0:274      add second child into first child (temp 2-component vector of double)
-0:274        'dvec2v' (temp 2-component vector of double)
-0:274        normalize (global 2-component vector of double)
-0:274          'dvec2v' (temp 2-component vector of double)
-0:275      add second child into first child (temp 3-component vector of double)
-0:275        'dvec3v' (temp 3-component vector of double)
-0:275        normalize (global 3-component vector of double)
-0:275          'dvec3v' (temp 3-component vector of double)
-0:276      add second child into first child (temp 4-component vector of double)
-0:276        'dvec4v' (temp 4-component vector of double)
-0:276        normalize (global 4-component vector of double)
-0:276          'dvec4v' (temp 4-component vector of double)
-0:278      add second child into first child (temp double)
-0:278        'doublev' (temp double)
-0:278        face-forward (global double)
-0:278          'doublev' (temp double)
-0:278          'doublev' (temp double)
-0:278          'doublev' (temp double)
-0:279      add second child into first child (temp 2-component vector of double)
-0:279        'dvec2v' (temp 2-component vector of double)
-0:279        face-forward (global 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:279          'dvec2v' (temp 2-component vector of double)
-0:280      add second child into first child (temp 3-component vector of double)
-0:280        'dvec3v' (temp 3-component vector of double)
-0:280        face-forward (global 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:280          'dvec3v' (temp 3-component vector of double)
-0:281      add second child into first child (temp 4-component vector of double)
-0:281        'dvec4v' (temp 4-component vector of double)
-0:281        face-forward (global 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:281          'dvec4v' (temp 4-component vector of double)
-0:283      add second child into first child (temp double)
-0:283        'doublev' (temp double)
-0:283        reflect (global double)
-0:283          'doublev' (temp double)
-0:283          'doublev' (temp double)
-0:284      add second child into first child (temp 2-component vector of double)
-0:284        'dvec2v' (temp 2-component vector of double)
-0:284        reflect (global 2-component vector of double)
-0:284          'dvec2v' (temp 2-component vector of double)
-0:284          'dvec2v' (temp 2-component vector of double)
-0:285      add second child into first child (temp 3-component vector of double)
-0:285        'dvec3v' (temp 3-component vector of double)
-0:285        reflect (global 3-component vector of double)
-0:285          'dvec3v' (temp 3-component vector of double)
-0:285          'dvec3v' (temp 3-component vector of double)
-0:286      add second child into first child (temp 4-component vector of double)
-0:286        'dvec4v' (temp 4-component vector of double)
-0:286        reflect (global 4-component vector of double)
-0:286          'dvec4v' (temp 4-component vector of double)
-0:286          'dvec4v' (temp 4-component vector of double)
-0:288      add second child into first child (temp double)
-0:288        'doublev' (temp double)
-0:288        refract (global double)
-0:288          'doublev' (temp double)
-0:288          'doublev' (temp double)
-0:288          'doublev' (temp double)
-0:289      add second child into first child (temp 2-component vector of double)
-0:289        'dvec2v' (temp 2-component vector of double)
-0:289        refract (global 2-component vector of double)
-0:289          'dvec2v' (temp 2-component vector of double)
-0:289          'dvec2v' (temp 2-component vector of double)
-0:289          'doublev' (temp double)
-0:290      add second child into first child (temp 3-component vector of double)
-0:290        'dvec3v' (temp 3-component vector of double)
-0:290        refract (global 3-component vector of double)
-0:290          'dvec3v' (temp 3-component vector of double)
-0:290          'dvec3v' (temp 3-component vector of double)
-0:290          'doublev' (temp double)
-0:291      add second child into first child (temp 4-component vector of double)
-0:291        'dvec4v' (temp 4-component vector of double)
-0:291        refract (global 4-component vector of double)
-0:291          'dvec4v' (temp 4-component vector of double)
-0:291          'dvec4v' (temp 4-component vector of double)
-0:291          'doublev' (temp double)
-0:293      Sequence
-0:293        move second child to first child (temp 2X2 matrix of double)
-0:293          'dmat2v' (temp 2X2 matrix of double)
-0:293          outer product (global 2X2 matrix of double)
-0:293            'dvec2v' (temp 2-component vector of double)
-0:293            'dvec2v' (temp 2-component vector of double)
-0:294      Sequence
-0:294        move second child to first child (temp 3X3 matrix of double)
-0:294          'dmat3v' (temp 3X3 matrix of double)
-0:294          outer product (global 3X3 matrix of double)
-0:294            'dvec3v' (temp 3-component vector of double)
-0:294            'dvec3v' (temp 3-component vector of double)
-0:295      Sequence
-0:295        move second child to first child (temp 4X4 matrix of double)
-0:295          'dmat4v' (temp 4X4 matrix of double)
-0:295          outer product (global 4X4 matrix of double)
-0:295            'dvec4v' (temp 4-component vector of double)
-0:295            'dvec4v' (temp 4-component vector of double)
-0:296      Sequence
-0:296        move second child to first child (temp 2X3 matrix of double)
-0:296          'dmat2x3v' (temp 2X3 matrix of double)
-0:296          outer product (global 2X3 matrix of double)
-0:296            'dvec3v' (temp 3-component vector of double)
-0:296            'dvec2v' (temp 2-component vector of double)
-0:297      Sequence
-0:297        move second child to first child (temp 3X2 matrix of double)
-0:297          'dmat3x2v' (temp 3X2 matrix of double)
-0:297          outer product (global 3X2 matrix of double)
-0:297            'dvec2v' (temp 2-component vector of double)
-0:297            'dvec3v' (temp 3-component vector of double)
-0:298      Sequence
-0:298        move second child to first child (temp 2X4 matrix of double)
-0:298          'dmat2x4v' (temp 2X4 matrix of double)
-0:298          outer product (global 2X4 matrix of double)
-0:298            'dvec4v' (temp 4-component vector of double)
-0:298            'dvec2v' (temp 2-component vector of double)
-0:299      Sequence
-0:299        move second child to first child (temp 4X2 matrix of double)
-0:299          'dmat4x2v' (temp 4X2 matrix of double)
-0:299          outer product (global 4X2 matrix of double)
-0:299            'dvec2v' (temp 2-component vector of double)
-0:299            'dvec4v' (temp 4-component vector of double)
-0:300      Sequence
-0:300        move second child to first child (temp 3X4 matrix of double)
-0:300          'dmat3x4v' (temp 3X4 matrix of double)
-0:300          outer product (global 3X4 matrix of double)
-0:300            'dvec4v' (temp 4-component vector of double)
-0:300            'dvec3v' (temp 3-component vector of double)
-0:301      Sequence
-0:301        move second child to first child (temp 4X3 matrix of double)
-0:301          'dmat4x3v' (temp 4X3 matrix of double)
-0:301          outer product (global 4X3 matrix of double)
-0:301            'dvec3v' (temp 3-component vector of double)
-0:301            'dvec4v' (temp 4-component vector of double)
-0:303      matrix mult second child into first child (temp 2X2 matrix of double)
-0:303        'dmat2v' (temp 2X2 matrix of double)
-0:303        component-wise multiply (global 2X2 matrix of double)
-0:303          'dmat2v' (temp 2X2 matrix of double)
-0:303          'dmat2v' (temp 2X2 matrix of double)
-0:304      matrix mult second child into first child (temp 3X3 matrix of double)
-0:304        'dmat3v' (temp 3X3 matrix of double)
-0:304        component-wise multiply (global 3X3 matrix of double)
-0:304          'dmat3v' (temp 3X3 matrix of double)
-0:304          'dmat3v' (temp 3X3 matrix of double)
-0:305      matrix mult second child into first child (temp 4X4 matrix of double)
-0:305        'dmat4v' (temp 4X4 matrix of double)
-0:305        component-wise multiply (global 4X4 matrix of double)
-0:305          'dmat4v' (temp 4X4 matrix of double)
-0:305          'dmat4v' (temp 4X4 matrix of double)
-0:306      move second child to first child (temp 2X3 matrix of double)
-0:306        'dmat2x3v' (temp 2X3 matrix of double)
-0:306        component-wise multiply (global 2X3 matrix of double)
-0:306          'dmat2x3v' (temp 2X3 matrix of double)
-0:306          'dmat2x3v' (temp 2X3 matrix of double)
-0:307      move second child to first child (temp 2X4 matrix of double)
-0:307        'dmat2x4v' (temp 2X4 matrix of double)
-0:307        component-wise multiply (global 2X4 matrix of double)
-0:307          'dmat2x4v' (temp 2X4 matrix of double)
-0:307          'dmat2x4v' (temp 2X4 matrix of double)
-0:308      move second child to first child (temp 3X2 matrix of double)
-0:308        'dmat3x2v' (temp 3X2 matrix of double)
-0:308        component-wise multiply (global 3X2 matrix of double)
-0:308          'dmat3x2v' (temp 3X2 matrix of double)
-0:308          'dmat3x2v' (temp 3X2 matrix of double)
-0:309      move second child to first child (temp 3X4 matrix of double)
-0:309        'dmat3x4v' (temp 3X4 matrix of double)
-0:309        component-wise multiply (global 3X4 matrix of double)
-0:309          'dmat3x4v' (temp 3X4 matrix of double)
-0:309          'dmat3x4v' (temp 3X4 matrix of double)
-0:310      move second child to first child (temp 4X2 matrix of double)
-0:310        'dmat4x2v' (temp 4X2 matrix of double)
-0:310        component-wise multiply (global 4X2 matrix of double)
-0:310          'dmat4x2v' (temp 4X2 matrix of double)
-0:310          'dmat4x2v' (temp 4X2 matrix of double)
-0:311      move second child to first child (temp 4X3 matrix of double)
-0:311        'dmat4x3v' (temp 4X3 matrix of double)
-0:311        component-wise multiply (global 4X3 matrix of double)
-0:311          'dmat4x3v' (temp 4X3 matrix of double)
-0:311          'dmat4x3v' (temp 4X3 matrix of double)
-0:313      matrix mult second child into first child (temp 2X2 matrix of double)
-0:313        'dmat2v' (temp 2X2 matrix of double)
-0:313        transpose (global 2X2 matrix of double)
-0:313          'dmat2v' (temp 2X2 matrix of double)
-0:314      matrix mult second child into first child (temp 3X3 matrix of double)
-0:314        'dmat3v' (temp 3X3 matrix of double)
-0:314        transpose (global 3X3 matrix of double)
-0:314          'dmat3v' (temp 3X3 matrix of double)
-0:315      matrix mult second child into first child (temp 4X4 matrix of double)
-0:315        'dmat4v' (temp 4X4 matrix of double)
-0:315        transpose (global 4X4 matrix of double)
-0:315          'dmat4v' (temp 4X4 matrix of double)
-0:316      move second child to first child (temp 2X3 matrix of double)
-0:316        'dmat2x3v' (temp 2X3 matrix of double)
-0:316        transpose (global 2X3 matrix of double)
-0:316          'dmat3x2v' (temp 3X2 matrix of double)
-0:317      move second child to first child (temp 3X2 matrix of double)
-0:317        'dmat3x2v' (temp 3X2 matrix of double)
-0:317        transpose (global 3X2 matrix of double)
-0:317          'dmat2x3v' (temp 2X3 matrix of double)
-0:318      move second child to first child (temp 2X4 matrix of double)
-0:318        'dmat2x4v' (temp 2X4 matrix of double)
-0:318        transpose (global 2X4 matrix of double)
-0:318          'dmat4x2v' (temp 4X2 matrix of double)
-0:319      move second child to first child (temp 4X2 matrix of double)
-0:319        'dmat4x2v' (temp 4X2 matrix of double)
-0:319        transpose (global 4X2 matrix of double)
-0:319          'dmat2x4v' (temp 2X4 matrix of double)
-0:320      move second child to first child (temp 3X4 matrix of double)
-0:320        'dmat3x4v' (temp 3X4 matrix of double)
-0:320        transpose (global 3X4 matrix of double)
-0:320          'dmat4x3v' (temp 4X3 matrix of double)
-0:321      move second child to first child (temp 4X3 matrix of double)
-0:321        'dmat4x3v' (temp 4X3 matrix of double)
-0:321        transpose (global 4X3 matrix of double)
-0:321          'dmat3x4v' (temp 3X4 matrix of double)
-0:323      add second child into first child (temp double)
-0:323        'doublev' (temp double)
-0:323        determinant (global double)
-0:323          'dmat2v' (temp 2X2 matrix of double)
-0:324      add second child into first child (temp double)
-0:324        'doublev' (temp double)
-0:324        determinant (global double)
-0:324          'dmat3v' (temp 3X3 matrix of double)
-0:325      add second child into first child (temp double)
-0:325        'doublev' (temp double)
-0:325        determinant (global double)
-0:325          'dmat4v' (temp 4X4 matrix of double)
-0:327      matrix mult second child into first child (temp 2X2 matrix of double)
-0:327        'dmat2v' (temp 2X2 matrix of double)
-0:327        inverse (global 2X2 matrix of double)
-0:327          'dmat2v' (temp 2X2 matrix of double)
-0:328      matrix mult second child into first child (temp 3X3 matrix of double)
-0:328        'dmat3v' (temp 3X3 matrix of double)
-0:328        inverse (global 3X3 matrix of double)
-0:328          'dmat3v' (temp 3X3 matrix of double)
-0:329      matrix mult second child into first child (temp 4X4 matrix of double)
-0:329        'dmat4v' (temp 4X4 matrix of double)
-0:329        inverse (global 4X4 matrix of double)
-0:329          'dmat4v' (temp 4X4 matrix of double)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
diff --git a/Test/baseResults/400.tesc.out b/Test/baseResults/400.tesc.out
index 58a8a32732d9b96aefc78d65f10d08baac69499a..f3e7b8bb68b581344f65d4fe4f79b37bff88598a 100644
--- a/Test/baseResults/400.tesc.out
+++ b/Test/baseResults/400.tesc.out
@@ -364,35 +364,6 @@ ERROR: node is still EOpNull!
 0:56        Barrier (global void)
 0:59      Branch: Return
 0:61      Barrier (global void)
-0:67  Function Definition: foo( (global void)
-0:67    Function Parameters: 
-0:69    Sequence
-0:69      gl_PointSize: direct index for structure (out float PointSize)
-0:69        direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
-0:69          Constant:
-0:69            4 (const int)
-0:69        Constant:
-0:69          1 (const int)
-0:71      Barrier (global void)
-0:91  Function Definition: foop( (global void)
-0:91    Function Parameters: 
-0:?     Sequence
-0:95      multiply second child into first child (temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:95        'pv3' (noContraction temp 3-component vector of float)
-0:96      move second child to first child (temp 3-component vector of float)
-0:96        'pv3' (noContraction temp 3-component vector of float)
-0:96        fma (global 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:96          'pv3' (noContraction temp 3-component vector of float)
-0:97      move second child to first child (temp double)
-0:97        'd' (noContraction temp double)
-0:97        fma (global double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
-0:97          'd' (noContraction temp double)
 0:?   Linker Objects
 0:?     'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' (global 4-element array of int)
diff --git a/Test/baseResults/400.vert.out b/Test/baseResults/400.vert.out
index 2b0d63da19a1c3cb16027185f22b45068e94c4a9..bf07887558c74b43b14ec0450190ed09478076fb 100755
--- a/Test/baseResults/400.vert.out
+++ b/Test/baseResults/400.vert.out
@@ -340,11 +340,6 @@ ERROR: node is still EOpNull!
 0:20      '' (in uint)
 0:20      '' (in float)
 0:20      '' (in double)
-0:21  Function Definition: ftd(f1;d1;d1; (global void)
-0:21    Function Parameters: 
-0:21      '' (in float)
-0:21      '' (in double)
-0:21      '' (in double)
 0:23  Function Definition: main( (global void)
 0:23    Function Parameters: 
 0:?     Sequence
@@ -552,19 +547,6 @@ ERROR: node is still EOpNull!
 0:91        'f' (temp float)
 0:91        Convert float to double (temp double)
 0:91          'f' (temp float)
-0:97  Function Definition: tf( (global void)
-0:97    Function Parameters: 
-0:?     Sequence
-0:104      Function Call: itf(i1;f1;i1; (global void)
-0:104        'i' (temp int)
-0:104        Convert int to float (temp float)
-0:104          'i' (temp int)
-0:104        'i' (temp int)
-0:105      Function Call: itf(i1;f1;i1; (global void)
-0:105        'i' (temp int)
-0:105        Convert uint to float (temp float)
-0:105          'u' (temp uint)
-0:105        'i' (temp int)
 0:?   Linker Objects
 0:?     'd' (in double)
 0:?     'd3' (in 3-component vector of double)
diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out
index 6f7252c980794cb91418140658694d6ad63e8657..aa421dbe8bf496a59e40e58bf4330b4c3c3b8705 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -77,35 +77,6 @@ ERROR: node is still EOpNull!
 0:5        'gl_ViewportIndex' (layout(stream=0 ) out int ViewportIndex)
 0:5        Constant:
 0:5          7 (const int)
-0:28  Function Definition: foo( (global void)
-0:28    Function Parameters: 
-0:30    Sequence
-0:30      Sequence
-0:30        move second child to first child (temp float)
-0:30          'p' (temp float)
-0:30          gl_PointSize: direct index for structure (in float PointSize)
-0:30            direct index (temp block{in float PointSize gl_PointSize})
-0:30              'gl_in' (in 2-element array of block{in float PointSize gl_PointSize})
-0:30              Constant:
-0:30                1 (const int)
-0:30            Constant:
-0:30              0 (const int)
-0:31      move second child to first child (temp float)
-0:31        gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize float PointSize)
-0:31          'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
-0:31          Constant:
-0:31            1 (const uint)
-0:31        'p' (temp float)
-0:33      gl_Position: direct index for structure (layout(stream=0 ) gl_Position void Position)
-0:33        'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
-0:33        Constant:
-0:33          0 (const uint)
-0:36  Function Definition: foo5( (global float)
-0:36    Function Parameters: 
-0:38    Sequence
-0:38      Branch: Return with expression
-0:38        Constant:
-0:38          4.000000
 0:?   Linker Objects
 0:?     'gl_in' (in 2-element array of block{in float PointSize gl_PointSize})
 0:?     'anon@0' (layout(stream=0 ) out block{layout(stream=0 ) gl_PointSize float PointSize gl_PointSize, })
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index 784cdb4b5b04fe85b6d73363cb161660fff35b4d..3b4c9be30513c5e1a3fc525e8e96007a6ea06c4f 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -19,7 +19,6 @@ ERROR: node is still EOpNull!
 0:8          0.300000
 0:?   Linker Objects
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
 0:?     'depth' (smooth in float)
 0:?     'a' (layout(binding=0 offset=0 ) uniform implicitly-sized array of atomic_uint)
 
@@ -39,7 +38,6 @@ ERROR: node is still EOpNull!
 0:8          0.300000
 0:?   Linker Objects
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
 0:?     'depth' (smooth in float)
 0:?     'a' (layout(binding=0 offset=0 ) uniform 1-element array of atomic_uint)
 
diff --git a/Test/baseResults/420.geom.out b/Test/baseResults/420.geom.out
index 625feea7b41e101a65bcd12458c7b25d89d9f4c0..ca459a64a2d89888eec9b6c31e3e0d09306f51e1 100644
--- a/Test/baseResults/420.geom.out
+++ b/Test/baseResults/420.geom.out
@@ -142,111 +142,6 @@ max_vertices = -1
 input primitive = triangles
 output primitive = none
 ERROR: node is still EOpNull!
-0:7  Function Definition: foo( (global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      Constant:
-0:9        1 (const int)
-0:10      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:10        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:10          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:10          Constant:
-0:10            1 (const int)
-0:10        Constant:
-0:10          0 (const int)
-0:11      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:11        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:11          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:11          'i' (global int)
-0:11        Constant:
-0:11          0 (const int)
-0:18  Function Definition: foo3( (global void)
-0:18    Function Parameters: 
-0:20    Sequence
-0:20      Constant:
-0:20        3 (const int)
-0:21      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:21        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:21          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:21          'i' (global int)
-0:21        Constant:
-0:21          0 (const int)
-0:22      Constant:
-0:22        3 (const int)
-0:29  Function Definition: foo4( (global void)
-0:29    Function Parameters: 
-0:?     Sequence
-0:40      Sequence
-0:40        move second child to first child (temp 4-component vector of float)
-0:40          'v' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
-0:40            's2D' (uniform sampler2D)
-0:40            direct index (temp 2-component vector of float)
-0:40              'coord' (in 3-element array of 2-component vector of float)
-0:40              Constant:
-0:40                0 (const int)
-0:40            vector swizzle (temp 2-component vector of int)
-0:40              indirect index (temp 2-component vector of int)
-0:40                Constant:
-0:40                  0 (const int)
-0:40                  1 (const int)
-0:40                  1 (const int)
-0:40                  -2 (const int)
-0:40                  0 (const int)
-0:40                  3 (const int)
-0:40                  -3 (const int)
-0:40                  0 (const int)
-0:40                  2 (const int)
-0:40                  1 (const int)
-0:40                'i' (global int)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:42      move second child to first child (temp 2-component vector of int)
-0:42        vector swizzle (temp 2-component vector of int)
-0:42          indirect index (temp 2-component vector of int)
-0:42            Constant:
-0:42              0 (const int)
-0:42              1 (const int)
-0:42              1 (const int)
-0:42              -2 (const int)
-0:42              0 (const int)
-0:42              3 (const int)
-0:42              -3 (const int)
-0:42              0 (const int)
-0:42              2 (const int)
-0:42              1 (const int)
-0:42            'i' (global int)
-0:42          Sequence
-0:42            Constant:
-0:42              0 (const int)
-0:42            Constant:
-0:42              1 (const int)
-0:42        Constant:
-0:42          3 (const int)
-0:42          3 (const int)
-0:43      move second child to first child (temp float)
-0:43        direct index (temp float)
-0:43          'v4' (uniform 4-component vector of float)
-0:43          Constant:
-0:43            0 (const int)
-0:43        Constant:
-0:43          3.200000
-0:44      vector swizzle (temp 2-component vector of float)
-0:44        'v4' (uniform 4-component vector of float)
-0:44        Sequence
-0:44          Constant:
-0:44            0 (const int)
-0:44          Constant:
-0:44            1 (const int)
-0:52  Function Definition: foo5( (global float)
-0:52    Function Parameters: 
-0:54    Sequence
-0:54      Branch: Return with expression
-0:54        Convert int to float (temp float)
-0:54          'i' (global int)
 0:?   Linker Objects
 0:?     'i' (global int)
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out
index 594e1302833eb5fca8e1c7ce985f5979a2e9e1b2..30839ec8db8dcb3384b7377f120bb88aafaaf8bf 100644
--- a/Test/baseResults/420.tesc.out
+++ b/Test/baseResults/420.tesc.out
@@ -184,41 +184,6 @@ ERROR: node is still EOpNull!
 0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:26        'gl_InvocationID' (in int InvocationID)
-0:34  Function Definition: foo( (global void)
-0:34    Function Parameters: 
-0:36    Sequence
-0:36      Test condition and select (temp void)
-0:36        Condition
-0:36        logical-or (temp bool)
-0:36          Compare Not Equal (temp bool)
-0:36            Constant:
-0:36              -0.625000
-0:36              -0.500000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.375000
-0:36              -0.250000
-0:36              -0.125000
-0:36              0.000000
-0:36            direct index (layout(location=0 ) temp 2X4 matrix of double)
-0:36              'vs_tcs_first' (layout(location=0 ) in 32-element array of 2X4 matrix of double)
-0:36              Constant:
-0:36                0 (const int)
-0:37          Compare Not Equal (temp bool)
-0:37            Constant:
-0:37              0.375000
-0:37              0.500000
-0:37              0.625000
-0:37              0.750000
-0:37              0.625000
-0:37              0.750000
-0:37              0.875000
-0:37              -0.625000
-0:37            direct index (layout(location=12 ) temp 2X4 matrix of double)
-0:37              'vs_tcs_last' (layout(location=12 ) in 32-element array of 2X4 matrix of double)
-0:37              Constant:
-0:37                0 (const int)
-0:36        true case is null
 0:?   Linker Objects
 0:?     'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
 0:?     'a' (out 3-element array of int)
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index a234970c588e164bf4d0e5121299294d9ad1d06e..a70b44e78972cc21562d96bc2ca0b589146d9f2e 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -4,7 +4,7 @@ ERROR: 0:2: '#version' : must occur first in shader
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 ERROR: 0:3: 'varying' : no longer supported in core profile; removed in version 420
 ERROR: 0:7: '' : vertex input cannot be further qualified 
-ERROR: 0:11: '' : can only have one interpolation qualifier (flat, smooth, noperspective) 
+ERROR: 0:11: '' : can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD) 
 ERROR: 0:12: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
 ERROR: 0:13: 'uniform' : too many storage qualifiers 
 ERROR: 0:18: '=' : global const initializers must be constant 'const int'
@@ -310,19 +310,6 @@ Linked vertex stage:
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:20  Function Definition: foo( (const int)
-0:20    Function Parameters: 
-0:?     Sequence
-0:23      Sequence
-0:23        move second child to first child (temp int)
-0:23          'b' (const (read only) int)
-0:23          'anonconst' (global int)
-0:25      Sequence
-0:25        move second child to first child (temp int)
-0:25          'd' (const (read only) int)
-0:25          'b' (const (read only) int)
-0:29      Branch: Return with expression
-0:29        'b' (const (read only) int)
 0:32  Function Definition: main( (global void)
 0:32    Function Parameters: 
 0:?     Sequence
@@ -342,164 +329,6 @@ ERROR: node is still EOpNull!
 0:42        Constant:
 0:42          true (const bool)
 0:42        No loop body
-0:50  Function Definition: bar(vf4; (global void)
-0:50    Function Parameters: 
-0:50      'v' (volatile in 4-component vector of float)
-0:?     Sequence
-0:53      's' (temp int)
-0:54      's' (temp int)
-0:55      Test condition and select (temp void)
-0:55        Condition
-0:55        Compare Equal (temp bool)
-0:55          direct index (temp float)
-0:55            direct index (temp 4-component vector of float)
-0:55              'bad' (in 10-element array of 4-component vector of float)
-0:55              Constant:
-0:55                0 (const int)
-0:55            Constant:
-0:55              0 (const int)
-0:55          Constant:
-0:55            4.200000
-0:55        true case is null
-0:57      Test condition and select (temp void)
-0:57        Condition
-0:57        Constant:
-0:57          true (const bool)
-0:57        true case
-0:58        move second child to first child (temp 4-component vector of float)
-0:58          'badorder3' (flat out 4-component vector of float)
-0:58          direct index (temp 4-component vector of float)
-0:58            'bad' (in 10-element array of 4-component vector of float)
-0:58            Constant:
-0:58              0 (const int)
-0:61      Sequence
-0:61        move second child to first child (temp 3-component vector of float)
-0:61          'smeared' (temp 3-component vector of float)
-0:61          Construct vec3 (temp 3-component vector of float)
-0:61            'f' (temp float)
-0:62      'f' (temp float)
-0:63      'f' (temp float)
-0:88  Function Definition: bar23444( (global void)
-0:88    Function Parameters: 
-0:?     Sequence
-0:91      Sequence
-0:91        move second child to first child (temp float)
-0:91          'a1' (temp float)
-0:91          direct index (temp float)
-0:91            direct index (temp 3-component vector of float)
-0:91              'm43' (temp 4X3 matrix of float)
-0:91              Constant:
-0:91                3 (const int)
-0:91            Constant:
-0:91              1 (const int)
-0:93      Sequence
-0:93        move second child to first child (temp int)
-0:93          'a2' (temp int)
-0:93          Constant:
-0:93            4 (const int)
-0:94      add second child into first child (temp int)
-0:94        'a2' (temp int)
-0:94        Constant:
-0:94          3 (const int)
-0:95      add second child into first child (temp int)
-0:95        'a2' (temp int)
-0:95        Constant:
-0:95          3 (const int)
-0:96      Sequence
-0:96        move second child to first child (temp float)
-0:96          'b' (const (read only) float)
-0:96          component-wise multiply (temp float)
-0:96            Constant:
-0:96              2.000000
-0:96            'a1' (temp float)
-0:97      Sequence
-0:97        move second child to first child (temp int)
-0:97          'a' (temp int)
-0:97          Constant:
-0:97            -1 (const int)
-0:109  Function Definition: qux( (global void)
-0:109    Function Parameters: 
-0:111    Sequence
-0:111      Sequence
-0:111        move second child to first child (temp int)
-0:111          'i' (temp int)
-0:111          aoeu: direct index for structure (layout(column_major shared ) uniform int)
-0:111            'anon@0' (layout(binding=7 column_major shared ) uniform block{layout(column_major shared ) uniform int aoeu})
-0:111            Constant:
-0:111              0 (const uint)
-0:112      imageAtomicCompSwap (global int)
-0:112        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:112        Construct ivec2 (temp 2-component vector of int)
-0:112          'i' (temp int)
-0:112          'i' (temp int)
-0:112        'i' (temp int)
-0:112        'i' (temp int)
-0:113      imageAtomicAdd (global uint)
-0:113        'uimg2D' (layout(r32ui ) uniform uimage2D)
-0:113        Construct ivec2 (temp 2-component vector of int)
-0:113          'i' (temp int)
-0:113          'i' (temp int)
-0:113        Convert int to uint (temp uint)
-0:113          'i' (temp int)
-0:114      imageAtomicMin (global int)
-0:114        'iimg2Drgba' (layout(rgba32i ) uniform iimage2D)
-0:114        Construct ivec2 (temp 2-component vector of int)
-0:114          'i' (temp int)
-0:114          'i' (temp int)
-0:114        'i' (temp int)
-0:115      Constant:
-0:115        0.000000
-0:116      Sequence
-0:116        move second child to first child (temp 4-component vector of int)
-0:116          'pos' (temp 4-component vector of int)
-0:116          imageLoad (global 4-component vector of int)
-0:116            'iimg2D' (layout(r32i ) uniform iimage2D)
-0:116            Construct ivec2 (temp 2-component vector of int)
-0:116              'i' (temp int)
-0:116              'i' (temp int)
-0:117      Sequence
-0:117        move second child to first child (temp 4-component vector of float)
-0:117          'col' (temp 4-component vector of float)
-0:117          imageLoad (global 4-component vector of float)
-0:117            'img2DMS' (uniform image2DMS)
-0:117            Construct ivec2 (temp 2-component vector of int)
-0:117              'i' (temp int)
-0:117              'i' (temp int)
-0:117            'i' (temp int)
-0:118      imageStore (global void)
-0:118        'img2DMSWO' (writeonly uniform image2DMS)
-0:118        Construct ivec2 (temp 2-component vector of int)
-0:118          'i' (temp int)
-0:118          'i' (temp int)
-0:118        'i' (temp int)
-0:118        Constant:
-0:118          0.000000
-0:118          0.000000
-0:118          0.000000
-0:118          0.000000
-0:119      imageLoad (global 4-component vector of float)
-0:119        'img2DMSWO' (writeonly uniform image2DMS)
-0:119        Construct ivec2 (temp 2-component vector of int)
-0:119          'i' (temp int)
-0:119          'i' (temp int)
-0:119        'i' (temp int)
-0:125  Function Definition: passr(iI21; (global void)
-0:125    Function Parameters: 
-0:125      'image' (coherent readonly in iimage2D)
-0:132  Function Definition: passrc( (global void)
-0:132    Function Parameters: 
-0:134    Sequence
-0:134      Function Call: passr(iI21; (global void)
-0:134        'qualim1' (layout(r32i ) coherent readonly uniform iimage2D)
-0:135      Function Call: passr(iI21; (global void)
-0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
-0:136      Function Call: passr(iI21; (global void)
-0:136        'iimg2D' (layout(r32i ) uniform iimage2D)
-0:153  Function Definition: qlod( (global void)
-0:153    Function Parameters: 
-0:?     Sequence
-0:157      'levels' (temp int)
-0:158      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v2' (smooth out 2-component vector of float)
 0:?     'bad' (in 10-element array of 4-component vector of float)
diff --git a/Test/baseResults/420_size_gl_in.geom.out b/Test/baseResults/420_size_gl_in.geom.out
index 28d09a6df0ccd1fc74b903c83e67bc405b99a2d3..54ec99ea868c2573e123e61311b892d1a21fe9c7 100644
--- a/Test/baseResults/420_size_gl_in.geom.out
+++ b/Test/baseResults/420_size_gl_in.geom.out
@@ -49,26 +49,6 @@ max_vertices = -1
 input primitive = triangles
 output primitive = none
 ERROR: node is still EOpNull!
-0:11  Function Definition: foo( (global void)
-0:11    Function Parameters: 
-0:13    Sequence
-0:13      Constant:
-0:13        3 (const int)
-0:14      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:14        direct index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:14          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:14          Constant:
-0:14            1 (const int)
-0:14        Constant:
-0:14          0 (const int)
-0:15      Constant:
-0:15        3 (const int)
-0:16      gl_Position: direct index for structure (in 4-component vector of float Position)
-0:16        indirect index (temp block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:16          'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
-0:16          'i' (global int)
-0:16        Constant:
-0:16          0 (const int)
 0:?   Linker Objects
 0:?     'i' (global int)
 0:?     'colorun' (in 3-element array of 4-component vector of float)
diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out
index aecf42fcf6d8e23943e0b03d86fde72f042cbb2d..ed61346fba0e6a986c5cfcb73d1238b73e90c525 100644
--- a/Test/baseResults/430.comp.out
+++ b/Test/baseResults/430.comp.out
@@ -184,77 +184,6 @@ ERROR: node is still EOpNull!
 0:39            10 (const int)
 0:39        true case
 0:40        Barrier (global void)
-0:63  Function Definition: foo( (global void)
-0:63    Function Parameters: 
-0:65    Sequence
-0:65      move second child to first child (temp float)
-0:65        direct index (layout(column_major shared ) temp float)
-0:65          values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of float)
-0:65            'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer int value, layout(column_major shared ) buffer implicitly-sized array of float values})
-0:65            Constant:
-0:65              1 (const int)
-0:65          Constant:
-0:65            2 (const int)
-0:65        Constant:
-0:65          4.700000
-0:66      array length (temp int)
-0:66        values: direct index for structure (layout(column_major shared ) buffer implicitly-sized array of float)
-0:66          'ro' (layout(column_major shared ) readonly buffer block{layout(column_major shared ) buffer int value, layout(column_major shared ) buffer implicitly-sized array of float values})
-0:66          Constant:
-0:66            1 (const int)
-0:67      Barrier (global void)
-0:72  Function Definition: fooaoeu( (global void)
-0:72    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child (temp 2-component vector of int)
-0:73          'storePos' (temp 2-component vector of int)
-0:73          Convert uint to int (temp 2-component vector of int)
-0:73            vector swizzle (temp 2-component vector of uint)
-0:73              'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID)
-0:73              Sequence
-0:73                Constant:
-0:73                  0 (const int)
-0:73                Constant:
-0:73                  1 (const int)
-0:74      Sequence
-0:74        move second child to first child (temp double)
-0:74          'localCoef' (temp double)
-0:74          Convert float to double (temp double)
-0:74            length (global float)
-0:74              divide (temp 2-component vector of float)
-0:74                Convert int to float (temp 2-component vector of float)
-0:74                  subtract (temp 2-component vector of int)
-0:74                    Convert uint to int (temp 2-component vector of int)
-0:74                      vector swizzle (temp 2-component vector of uint)
-0:74                        'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID)
-0:74                        Sequence
-0:74                          Constant:
-0:74                            0 (const int)
-0:74                          Constant:
-0:74                            1 (const int)
-0:74                    Constant:
-0:74                      8 (const int)
-0:74                Constant:
-0:74                  8.000000
-0:75      Sequence
-0:75        move second child to first child (temp 4-component vector of double)
-0:75          'aa' (temp 4-component vector of double)
-0:75          Constant:
-0:75            0.400000
-0:75            0.200000
-0:75            0.300000
-0:75            0.400000
-0:76      Sequence
-0:76        move second child to first child (temp double)
-0:76          'globalCoef' (temp double)
-0:76          Constant:
-0:76            1.000000
-0:78      Sequence
-0:78        move second child to first child (temp double)
-0:78          'di' (temp double)
-0:78          Convert int to double (temp double)
-0:78            'i' (temp int)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index 676fcd3f99c0448d69ae4d46c808c1ae8303a048..8cd1156b5acf1ec923c05821a6381fcd12547f48 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -275,135 +275,6 @@ Requested GL_ARB_enhanced_layouts
 Requested GL_ARB_shader_texture_image_samples
 in xfb mode
 ERROR: node is still EOpNull!
-0:14  Function Definition: foo( (global void)
-0:14    Function Parameters: 
-0:16    Sequence
-0:16      move second child to first child (temp float)
-0:16        direct index (temp float ClipDistance)
-0:16          gl_ClipDistance: direct index for structure (out 17-element array of float ClipDistance)
-0:16            'anon@0' (out block{out 17-element array of float ClipDistance gl_ClipDistance, })
-0:16            Constant:
-0:16              2 (const uint)
-0:16          Constant:
-0:16            2 (const int)
-0:16        Constant:
-0:16          3.700000
-0:31  Function Definition: foo3(vf4;vf3;vf2;vf3; (global void)
-0:31    Function Parameters: 
-0:31      'v4' (in 4-component vector of float)
-0:31      'v3' (volatile in 3-component vector of float)
-0:31      'v2' (in 2-component vector of float)
-0:31      'cv3' (in 3-component vector of float)
-0:148  Function Definition: fooBarrier( (global void)
-0:148    Function Parameters: 
-0:150    Sequence
-0:150      Constant:
-0:150        0.000000
-0:151      MemoryBarrier (global void)
-0:152      MemoryBarrierAtomicCounter (global void)
-0:153      MemoryBarrierBuffer (global void)
-0:154      Constant:
-0:154        0.000000
-0:155      MemoryBarrierImage (global void)
-0:156      Constant:
-0:156        0.000000
-0:166  Function Definition: fooq( (global void)
-0:166    Function Parameters: 
-0:168    Sequence
-0:168      Sequence
-0:168        move second child to first child (temp int)
-0:168          's' (temp int)
-0:168          textureSamples (global int)
-0:168            's2dms' (uniform sampler2DMS)
-0:169      add second child into first child (temp int)
-0:169        's' (temp int)
-0:169        textureSamples (global int)
-0:169          'us2dmsa' (uniform usampler2DMSArray)
-0:170      add second child into first child (temp int)
-0:170        's' (temp int)
-0:170        imageQuerySamples (global int)
-0:170          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:171      add second child into first child (temp int)
-0:171        's' (temp int)
-0:171        imageQuerySamples (global int)
-0:171          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:176  Function Definition: fooq2( (global void)
-0:176    Function Parameters: 
-0:178    Sequence
-0:178      Sequence
-0:178        move second child to first child (temp int)
-0:178          's' (temp int)
-0:178          textureSamples (global int)
-0:178            's2dms' (uniform sampler2DMS)
-0:179      add second child into first child (temp int)
-0:179        's' (temp int)
-0:179        textureSamples (global int)
-0:179          'us2dmsa' (uniform usampler2DMSArray)
-0:180      add second child into first child (temp int)
-0:180        's' (temp int)
-0:180        imageQuerySamples (global int)
-0:180          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:181      add second child into first child (temp int)
-0:181        's' (temp int)
-0:181        imageQuerySamples (global int)
-0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:202  Function Definition: qlod( (global void)
-0:202    Function Parameters: 
-0:?     Sequence
-0:206      move second child to first child (temp int)
-0:206        'levels' (temp int)
-0:206        textureQueryLevels (global int)
-0:206          'samp1D' (uniform sampler1D)
-0:207      move second child to first child (temp int)
-0:207        'levels' (temp int)
-0:207        textureQueryLevels (global int)
-0:207          'usamp2D' (uniform usampler2D)
-0:208      move second child to first child (temp int)
-0:208        'levels' (temp int)
-0:208        textureQueryLevels (global int)
-0:208          'isamp3D' (uniform isampler3D)
-0:209      move second child to first child (temp int)
-0:209        'levels' (temp int)
-0:209        textureQueryLevels (global int)
-0:209          'isampCube' (uniform isamplerCube)
-0:210      move second child to first child (temp int)
-0:210        'levels' (temp int)
-0:210        textureQueryLevels (global int)
-0:210          'isamp1DA' (uniform isampler1DArray)
-0:211      move second child to first child (temp int)
-0:211        'levels' (temp int)
-0:211        textureQueryLevels (global int)
-0:211          'samp2DA' (uniform sampler2DArray)
-0:212      move second child to first child (temp int)
-0:212        'levels' (temp int)
-0:212        textureQueryLevels (global int)
-0:212          'usampCubeA' (uniform usamplerCubeArray)
-0:214      move second child to first child (temp int)
-0:214        'levels' (temp int)
-0:214        textureQueryLevels (global int)
-0:214          'samp1Ds' (uniform sampler1DShadow)
-0:215      move second child to first child (temp int)
-0:215        'levels' (temp int)
-0:215        textureQueryLevels (global int)
-0:215          'samp2Ds' (uniform sampler2DShadow)
-0:216      move second child to first child (temp int)
-0:216        'levels' (temp int)
-0:216        textureQueryLevels (global int)
-0:216          'sampCubes' (uniform samplerCubeShadow)
-0:217      move second child to first child (temp int)
-0:217        'levels' (temp int)
-0:217        textureQueryLevels (global int)
-0:217          'samp1DAs' (uniform sampler1DArrayShadow)
-0:218      move second child to first child (temp int)
-0:218        'levels' (temp int)
-0:218        textureQueryLevels (global int)
-0:218          'samp2DAs' (uniform sampler2DArrayShadow)
-0:219      move second child to first child (temp int)
-0:219        'levels' (temp int)
-0:219        textureQueryLevels (global int)
-0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)
-0:221      'levels' (temp int)
-0:222      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)
diff --git a/Test/baseResults/430AofA.frag.out b/Test/baseResults/430AofA.frag.out
index 68285f7378b8fbd559ef154926f7279e35608f0f..fd3892dc497352d24780e6aafc89e19a23fe40f0 100644
--- a/Test/baseResults/430AofA.frag.out
+++ b/Test/baseResults/430AofA.frag.out
@@ -2,7 +2,7 @@
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 ERROR: 0:6: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
 ERROR: 0:14: 'constructor' : constructing non-array constituent from array argument 
-ERROR: 0:15: 'constructior' : array constructor argument not correct type to construct array element 
+ERROR: 0:15: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:28: '[' :  array index out of range '4'
 ERROR: 0:56: 'constructor' :  cannot convert parameter 2 from 'const 3-element array of 4-component vector of float' to 'temp 2-element array of 4-component vector of float'
 ERROR: 0:60: 'constructor' :  cannot convert parameter 2 from 'const 2-element array of 4-component vector of float' to 'temp 3-element array of 4-component vector of float'
@@ -766,34 +766,6 @@ ERROR: node is still EOpNull!
 0:84          5.000000
 0:85      Function Call: foo(f1[5][7]; (global 4-element array of 7-element array of float)
 0:85        'u' (temp 5-element array of 7-element array of float)
-0:88  Function Definition: foo3( (global void)
-0:88    Function Parameters: 
-0:?     Sequence
-0:91      Constant:
-0:91        1 (const int)
-0:92      move second child to first child (temp float)
-0:92        direct index (temp float)
-0:92          direct index (temp 7-element array of float)
-0:92            direct index (temp 5-element array of 7-element array of float)
-0:92              'resize1' (temp 3-element array of 5-element array of 7-element array of float)
-0:92              Constant:
-0:92                1 (const int)
-0:92            Constant:
-0:92              4 (const int)
-0:92          Constant:
-0:92            5 (const int)
-0:92        Constant:
-0:92          2.000000
-0:93      Constant:
-0:93        1 (const int)
-0:95      Constant:
-0:95        3 (const int)
-0:96      Constant:
-0:96        5 (const int)
-0:97      Constant:
-0:97        7 (const int)
-0:98      Constant:
-0:98        0.000000
 0:?   Linker Objects
 0:?     'many' (global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
 0:?     'gu' (global 1-element array of 7-element array of float)
diff --git a/Test/baseResults/430scope.vert.out b/Test/baseResults/430scope.vert.out
index 0a097a219153b1c26ae5c47f800b6398d73680d9..c7d05038f9c21cb1f5f84178ac06dd2d5f42df33 100644
--- a/Test/baseResults/430scope.vert.out
+++ b/Test/baseResults/430scope.vert.out
@@ -127,6 +127,8 @@ ERROR: node is still EOpNull!
 
 Linked vertex stage:
 
+ERROR: Linking vertex stage: No function definition (body) found: 
+    g(
 
 Shader version: 430
 ERROR: node is still EOpNull!
@@ -147,20 +149,6 @@ ERROR: node is still EOpNull!
 0:8                1.000000
 0:11      Branch: Return with expression
 0:11        'a' (in int)
-0:25  Function Definition: cos(f1; (global float)
-0:25    Function Parameters: 
-0:25      'x' (in float)
-0:27    Sequence
-0:27      Branch: Return with expression
-0:27        Constant:
-0:27          1.000000
-0:29  Function Definition: radians(b1; (global bool)
-0:29    Function Parameters: 
-0:29      'x' (in bool)
-0:31    Sequence
-0:31      Branch: Return with expression
-0:31        Constant:
-0:31          true (const bool)
 0:36  Function Definition: main( (global void)
 0:36    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out
index 064fe19e4fb03e222e344f06355ff23f8ccdcd3c..bdc1b09561d699c952134abe82070e8614fc6ea9 100644
--- a/Test/baseResults/440.frag.out
+++ b/Test/baseResults/440.frag.out
@@ -126,35 +126,6 @@ ERROR: Linking fragment stage: Missing entry point: Each stage requires one entr
 
 Shader version: 440
 ERROR: node is still EOpNull!
-0:144  Function Definition: interp( (global void)
-0:144    Function Parameters: 
-0:146    Sequence
-0:146      interpolateAtCentroid (global 2-component vector of float)
-0:146        vector swizzle (temp 2-component vector of float)
-0:146          direct index (smooth sample temp 3-component vector of float)
-0:146            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:146            Constant:
-0:146              2 (const int)
-0:146          Sequence
-0:146            Constant:
-0:146              0 (const int)
-0:146            Constant:
-0:146              1 (const int)
-0:147      interpolateAtSample (global float)
-0:147        direct index (temp float)
-0:147          direct index (smooth sample temp 3-component vector of float)
-0:147            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)
-0:147            Constant:
-0:147              2 (const int)
-0:147          Constant:
-0:147            0 (const int)
-0:147        Constant:
-0:147          2 (const int)
-0:150  Function Definition: layer( (global int)
-0:150    Function Parameters: 
-0:152    Sequence
-0:152      Branch: Return with expression
-0:152        'gl_Layer' (flat in int Layer)
 0:?   Linker Objects
 0:?     'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)
 0:?     'b' (layout(location=4 component=1 ) smooth in float)
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 022ddec47c7eb50e569f4b280c975db8846aaea7..bf625c8a776fa37438b31d7d4a7e6bc95e12f420 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -174,37 +174,6 @@ Shader version: 440
 Requested GL_ARB_shader_draw_parameters
 in xfb mode
 ERROR: node is still EOpNull!
-0:177  Function Definition: drawParamsBad( (global int)
-0:177    Function Parameters: 
-0:179    Sequence
-0:179      Branch: Return with expression
-0:179        add (temp int)
-0:179          add (temp int)
-0:179            'gl_BaseVertexARB' (in int BaseVertex)
-0:179            'gl_BaseInstanceARB' (in int BaseInstance)
-0:179          'gl_DrawIDARB' (in int DrawId)
-0:184  Function Definition: drawParams( (global int)
-0:184    Function Parameters: 
-0:186    Sequence
-0:186      Branch: Return with expression
-0:186        add (temp int)
-0:186          add (temp int)
-0:186            'gl_BaseVertexARB' (in int BaseVertex)
-0:186            'gl_BaseInstanceARB' (in int BaseInstance)
-0:186          'gl_DrawIDARB' (in int DrawId)
-0:187      move second child to first child (temp int)
-0:187        'gl_BaseVertexARB' (in int BaseVertex)
-0:187        Constant:
-0:187          3 (const int)
-0:188      move second child to first child (temp int)
-0:188        'gl_BaseInstanceARB' (in int BaseInstance)
-0:188        Constant:
-0:188          3 (const int)
-0:189      move second child to first child (temp int)
-0:189        'gl_DrawIDARB' (in int DrawId)
-0:189        Constant:
-0:189          3 (const int)
-0:190      'glBaseInstanceARB' (temp float)
 0:?   Linker Objects
 0:?     'a' (layout(location=2 component=2 ) in 2-component vector of float)
 0:?     'b' (layout(location=2 component=1 ) in float)
diff --git a/Test/baseResults/450.frag.out b/Test/baseResults/450.frag.out
index 23682e8a17aa9df7adb4df446aed89987722e969..038267335d26dcf745310bd9211ede45eb38c9ea 100644
--- a/Test/baseResults/450.frag.out
+++ b/Test/baseResults/450.frag.out
@@ -263,57 +263,6 @@ Shader version: 450
 0:34                'uin' (temp uint)
 0:34            Construct bvec3 (temp 3-component vector of bool)
 0:34              'b' (temp bool)
-0:42  Function Definition: foo( (global void)
-0:42    Function Parameters: 
-0:44    Sequence
-0:44      Sequence
-0:44        move second child to first child (temp int)
-0:44          's' (temp int)
-0:44          textureSamples (global int)
-0:44            's2dms' (uniform sampler2DMS)
-0:45      add second child into first child (temp int)
-0:45        's' (temp int)
-0:45        textureSamples (global int)
-0:45          'us2dmsa' (uniform usampler2DMSArray)
-0:46      add second child into first child (temp int)
-0:46        's' (temp int)
-0:46        imageQuerySamples (global int)
-0:46          'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
-0:47      add second child into first child (temp int)
-0:47        's' (temp int)
-0:47        imageQuerySamples (global int)
-0:47          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:48      Sequence
-0:48        move second child to first child (temp float)
-0:48          'f' (temp float)
-0:48          imageAtomicExchange (global float)
-0:48            'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
-0:48            Convert float to int (temp 3-component vector of int)
-0:48              'in3' (smooth in 3-component vector of float)
-0:48            Constant:
-0:48              2 (const int)
-0:48            Constant:
-0:48              4.500000
-0:53  Function Definition: cull(i1; (global float)
-0:53    Function Parameters: 
-0:53      'i' (in int)
-0:55    Sequence
-0:55      Branch: Return with expression
-0:55        Test condition and select (temp float)
-0:55          Condition
-0:55          Compare Greater Than or Equal (temp bool)
-0:55            'i' (in int)
-0:55            Constant:
-0:55              6 (const int)
-0:55          true case
-0:55          direct index (smooth temp float CullDistance)
-0:55            'gl_CullDistance' (smooth in 6-element array of float CullDistance)
-0:55            Constant:
-0:55              5 (const int)
-0:55          false case
-0:55          indirect index (smooth temp float CullDistance)
-0:55            'gl_CullDistance' (smooth in 6-element array of float CullDistance)
-0:55            'i' (in int)
 0:?   Linker Objects
 0:?     'in1' (smooth in float)
 0:?     'in2' (smooth in 2-component vector of float)
diff --git a/Test/baseResults/array.frag.out b/Test/baseResults/array.frag.out
index 8b3cf807a4856071d933208bc7081e601e77a8c4..e254bf1397f7c43390bce21206cf5121b1cfbf88 100644
--- a/Test/baseResults/array.frag.out
+++ b/Test/baseResults/array.frag.out
@@ -446,71 +446,6 @@ ERROR: node is still EOpNull!
 0:58              1 (const int)
 0:58        Constant:
 0:58          4 (const int)
-0:68  Function Definition: foo( (global void)
-0:68    Function Parameters: 
-0:?     Sequence
-0:71      move second child to first child (temp int)
-0:71        direct index (temp int)
-0:71          'uns' (temp 4-element array of int)
-0:71          Constant:
-0:71            3 (const int)
-0:71        Constant:
-0:71          40 (const int)
-0:72      move second child to first child (temp int)
-0:72        direct index (temp int)
-0:72          'uns' (temp 4-element array of int)
-0:72          Constant:
-0:72            1 (const int)
-0:72        Constant:
-0:72          30 (const int)
-0:73      move second child to first child (temp 3-component vector of float)
-0:73        direct index (temp 3-component vector of float)
-0:73          'guns' (global 8-element array of 3-component vector of float)
-0:73          Constant:
-0:73            2 (const int)
-0:73        Constant:
-0:73          2.400000
-0:73          2.400000
-0:73          2.400000
-0:76      Constant:
-0:76        0.000000
-0:79  Function Definition: foo2( (global implicitly-sized array of float)
-0:79    Function Parameters: 
-0:?     Sequence
-0:82      Branch: Return with expression
-0:82        'f' (temp 1-element array of float)
-0:84      Branch: Return with expression
-0:84        'g' (temp 9-element array of float)
-0:89  Function Definition: foo3( (global void)
-0:89    Function Parameters: 
-0:?     Sequence
-0:92      move second child to first child (temp float)
-0:92        direct index (temp float)
-0:92          'resize1' (temp 3-element array of float)
-0:92          Constant:
-0:92            2 (const int)
-0:92        Constant:
-0:92          4.000000
-0:93      Constant:
-0:93        1 (const int)
-0:95      Constant:
-0:95        3 (const int)
-0:98      move second child to first child (temp float)
-0:98        direct index (temp float)
-0:98          'resize2' (temp 5-element array of float)
-0:98          Constant:
-0:98            5 (const int)
-0:98        Constant:
-0:98          4.000000
-0:100      Constant:
-0:100        5 (const int)
-0:101      move second child to first child (temp float)
-0:101        direct index (temp float)
-0:101          'resize2' (temp 5-element array of float)
-0:101          Constant:
-0:101            5 (const int)
-0:101        Constant:
-0:101          4.000000
 0:106  Sequence
 0:106    move second child to first child (temp float)
 0:106      'b' (global float)
diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out
index b44f6a02cbc0f0313a7a20314f75c00fa5724975..cf54361420e653d1702eaf4a5ee7d909bcd35558 100644
--- a/Test/baseResults/array100.frag.out
+++ b/Test/baseResults/array100.frag.out
@@ -265,29 +265,6 @@ ERROR: node is still EOpNull!
 0:40          1.000000
 0:40          1.000000
 0:40          1.000000
-0:53  Function Definition: bar9( (global structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:53    Function Parameters: 
-0:?     Sequence
-0:56      Branch: Return with expression
-0:56        's' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:59  Function Definition: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (global void)
-0:59    Function Parameters: 
-0:59      's' (in structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:63  Function Definition: bar11( (global void)
-0:63    Function Parameters: 
-0:?     Sequence
-0:66      move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:66        's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:66        's2' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:67      Function Call: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (global void)
-0:67        's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68      move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68        's2' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:68        Function Call: bar9( (global structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69      Sequence
-0:69        move second child to first child (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69          'initSb' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
-0:69          's1' (temp structure{global mediump 4-component vector of float v4, global structure{global mediump 3-component vector of float v3, global 4-element array of mediump 2-component vector of float v2} sa})
 0:?   Linker Objects
 0:?     'gu' (global 1-element array of mediump float)
 0:?     'g4' (global 4-element array of mediump float)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index 4d05756ca074a695335a8981a7f4f6799c5c770d..e54b5dcf1ed9a03464cf4c9eefc5cf16cdcbccc9 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -86,22 +86,6 @@ Linked fragment stage:
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:5  Function Definition: func(au1; (global uint)
-0:5    Function Parameters: 
-0:5      'c' (in atomic_uint)
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        AtomicCounterIncrement (global uint)
-0:7          'c' (in atomic_uint)
-0:10  Function Definition: func2(au1; (global uint)
-0:10    Function Parameters: 
-0:10      'c' (out atomic_uint)
-0:12    Sequence
-0:12      Branch: Return with expression
-0:12        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:13      Branch: Return with expression
-0:13        AtomicCounter (global uint)
-0:13          'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:16  Function Definition: main( (global void)
 0:16    Function Parameters: 
 0:?     Sequence
@@ -112,22 +96,6 @@ ERROR: node is still EOpNull!
 0:19            'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:20      AtomicCounterDecrement (global uint)
 0:20        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:26  Function Definition: opac( (global void)
-0:26    Function Parameters: 
-0:28    Sequence
-0:28      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:29      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:31      indirect index (temp int)
-0:31        'a' (temp 3-element array of int)
-0:31        'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
-0:32      direct index (layout(binding=1 offset=3 ) temp atomic_uint)
-0:32        'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
-0:32        Constant:
-0:32          2 (const int)
-0:33      indirect index (layout(binding=1 offset=3 ) temp atomic_uint)
-0:33        'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
-0:33        'i' (uniform int)
-0:34      'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout(binding=0 offset=0 ) uniform atomic_uint)
 0:?     'countArr' (layout(binding=1 offset=3 ) uniform 4-element array of atomic_uint)
diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out
index 2e784688035c8bfaacd9252e895119625c035004..33bf51306d22a09e9eee32d112ef84dacd898fa5 100644
--- a/Test/baseResults/constFold.frag.out
+++ b/Test/baseResults/constFold.frag.out
@@ -546,120 +546,6 @@ ERROR: node is still EOpNull!
 0:69          0.028000
 0:69          0.500000
 0:69          1.000000
-0:78  Function Definition: foo( (global void)
-0:78    Function Parameters: 
-0:?     Sequence
-0:81      move second child to first child (temp float)
-0:81        direct index (temp float)
-0:81          'a' (temp 3-element array of float)
-0:81          Constant:
-0:81            0 (const int)
-0:81        Constant:
-0:81          7.000000
-0:82      Constant:
-0:82        2 (const int)
-0:83      Constant:
-0:83        2147483647 (const int)
-0:84      Constant:
-0:84        inf
-0:88      Constant:
-0:88        2 (const uint)
-0:88        3 (const uint)
-0:89      Constant:
-0:89        0 (const uint)
-0:90      Constant:
-0:90        6 (const uint)
-0:90        7 (const uint)
-0:103  Function Definition: foo2( (global void)
-0:103    Function Parameters: 
-0:105    Sequence
-0:105      direct index (temp float)
-0:105        'a1' (global 1-element array of float)
-0:105        Constant:
-0:105          0 (const int)
-0:106      direct index (temp float)
-0:106        'a2' (global 2-element array of float)
-0:106        Constant:
-0:106          0 (const int)
-0:107      direct index (temp float)
-0:107        'a3' (global 4-element array of float)
-0:107        Constant:
-0:107          0 (const int)
-0:108      direct index (temp float)
-0:108        'a4' (global 2-element array of float)
-0:108        Constant:
-0:108          0 (const int)
-0:109      Constant:
-0:109        1.000000
-0:110      Constant:
-0:110        5.000000
-0:111      Constant:
-0:111        2.000000
-0:112      Constant:
-0:112        3.000000
-0:113      Constant:
-0:113        0.000000
-0:114      Constant:
-0:114        0.000000
-0:116      move second child to first child (temp int)
-0:116        'p' (temp int)
-0:116        Constant:
-0:116          2147483647 (const int)
-0:117      move second child to first child (temp int)
-0:117        'p' (temp int)
-0:117        Constant:
-0:117          -2147483648 (const int)
-0:118      move second child to first child (temp int)
-0:118        'p' (temp int)
-0:118        Constant:
-0:118          -2147483647 (const int)
-0:119      Sequence
-0:119        move second child to first child (temp float)
-0:119          'f' (temp float)
-0:119          Constant:
-0:119            1.444000
-0:120      move second child to first child (temp float)
-0:120        'f' (temp float)
-0:120        direct index (temp float)
-0:120          Construct vec4 (temp 4-component vector of float)
-0:120            Test condition and select (temp float)
-0:120              Condition
-0:120              Compare Less Than (temp bool)
-0:120                direct index (temp float)
-0:120                  'inv' (smooth in 4-component vector of float)
-0:120                  Constant:
-0:120                    0 (const int)
-0:120                Constant:
-0:120                  2.400000
-0:120              true case
-0:120              Constant:
-0:120                -1.000000
-0:120              false case
-0:120              Constant:
-0:120                1.000000
-0:120          Constant:
-0:120            3 (const int)
-0:126  Function Definition: foo3( (global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      Sequence
-0:128        move second child to first child (temp 3X2 matrix of float)
-0:128          'r32' (temp 3X2 matrix of float)
-0:128          Constant:
-0:128            43.000000
-0:128            64.000000
-0:128            51.000000
-0:128            76.000000
-0:128            59.000000
-0:128            88.000000
-0:138  Function Definition: foo4( (global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      Sequence
-0:140        move second child to first child (temp int)
-0:140          'a' (temp int)
-0:140          Constant:
-0:140            9 (const int)
 0:?   Linker Objects
 0:?     'a' (const int)
 0:?       1 (const int)
diff --git a/Test/baseResults/cppComplexExpr.vert.out b/Test/baseResults/cppComplexExpr.vert.out
index aa73a069d382b6bf46f0f313605c270bfac428e5..352dcac1815387092b24f9d971a2184a66a4fa25 100644
--- a/Test/baseResults/cppComplexExpr.vert.out
+++ b/Test/baseResults/cppComplexExpr.vert.out
@@ -152,41 +152,6 @@ ERROR: node is still EOpNull!
 0:39        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:39        Construct vec4 (temp highp 4-component vector of float)
 0:39          'sum' (global highp float)
-0:44  Function Definition: foo( (global highp float)
-0:44    Function Parameters: 
-0:46    Sequence
-0:46      Branch: Return with expression
-0:46        add (temp highp float)
-0:46          add (temp highp float)
-0:46            direct index (temp highp float)
-0:46              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:46              Constant:
-0:46                0 (const int)
-0:46            Constant:
-0:46              3.000000
-0:46          add (temp highp float)
-0:46            direct index (temp highp float)
-0:46              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:46              Constant:
-0:46                0 (const int)
-0:46            Constant:
-0:46              3.000000
-0:47      Branch: Return with expression
-0:47        add (temp highp float)
-0:47          add (temp highp float)
-0:47            direct index (temp highp float)
-0:47              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:47              Constant:
-0:47                1 (const int)
-0:47            Constant:
-0:47              3.000000
-0:47          add (temp highp float)
-0:47            direct index (temp highp float)
-0:47              'gl_Position' (gl_Position highp 4-component vector of float Position)
-0:47              Constant:
-0:47                1 (const int)
-0:47            Constant:
-0:47              3.000000
 0:97  Sequence
 0:97    move second child to first child (temp highp float)
 0:97      'c' (global highp float)
diff --git a/Test/baseResults/cppNest.vert.out b/Test/baseResults/cppNest.vert.out
index df905579f094f260f7f5ca60b6ec2466e37a7ec5..2077ec33792ebd03f0849f84cb2eb23e9af354dc 100644
--- a/Test/baseResults/cppNest.vert.out
+++ b/Test/baseResults/cppNest.vert.out
@@ -135,17 +135,6 @@ ERROR: node is still EOpNull!
 0:133      'selected3' (global int)
 0:133      Constant:
 0:133        3 (const int)
-0:175  Function Definition: foo985( (global void)
-0:175    Function Parameters: 
-0:175    Sequence
-0:175      add (temp int)
-0:175        Constant:
-0:175          2 (const int)
-0:175        Comma (temp int)
-0:175          Constant:
-0:175            3 (const int)
-0:175          Constant:
-0:175            4 (const int)
 0:?   Linker Objects
 0:?     'sum' (global float)
 0:?     'selected4' (global int)
diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out
index 366770d13d7ae2f8750ce3b5cf73e67b88fe5b0f..bf4b42aeef002d4189e24b4d4b39eae7b678f642 100644
--- a/Test/baseResults/cppSimple.vert.out
+++ b/Test/baseResults/cppSimple.vert.out
@@ -282,19 +282,6 @@ ERROR: node is still EOpNull!
 0:202      'f' (global double)
 0:202      Constant:
 0:202        0.000800
-12:20031  Function Definition: foo234( (global void)
-12:20031    Function Parameters: 
-12:20033    Sequence
-12:20033      move second child to first child (temp 4-component vector of float)
-12:20033        gl_Position: direct index for structure (gl_Position 4-component vector of float Position)
-12:20033          'anon@0' (out block{gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
-12:20033          Constant:
-12:20033            0 (const uint)
-12:20033        Constant:
-12:20033          6.000000
-12:20033          6.000000
-12:20033          6.000000
-12:20033          6.000000
 12:9011  Sequence
 12:9011    move second child to first child (temp int)
 12:9011      'R1' (global int)
diff --git a/Test/baseResults/dce.frag.out b/Test/baseResults/dce.frag.out
index 2846abd577b9df0d1f749932839890b335a7ad47..6707ae72f5ff50c1086c7ba54c68210884efab71 100644
--- a/Test/baseResults/dce.frag.out
+++ b/Test/baseResults/dce.frag.out
@@ -147,128 +147,6 @@ Shader version: 400
 0:5      'c' (global int)
 0:5      Constant:
 0:5        0 (const int)
-0:7  Function Definition: bar( (global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      Test condition and select (temp void)
-0:9        Condition
-0:9        Constant:
-0:9          false (const bool)
-0:9        true case
-0:10        Pre-Increment (temp int)
-0:10          'c' (global int)
-0:9        false case
-0:12        Pre-Increment (temp int)
-0:12          'c' (global int)
-0:14      Test condition and select (temp int)
-0:14        Condition
-0:14        Constant:
-0:14          false (const bool)
-0:14        true case
-0:14        Pre-Increment (temp int)
-0:14          'c' (global int)
-0:14        false case
-0:14        Pre-Increment (temp int)
-0:14          'c' (global int)
-0:16      switch
-0:16      condition
-0:16        'c' (global int)
-0:16      body
-0:16        Sequence
-0:17          case:  with expression
-0:17            Constant:
-0:17              1 (const int)
-0:?           Sequence
-0:18            Pre-Increment (temp int)
-0:18              'c' (global int)
-0:19            Branch: Break
-0:20            Pre-Increment (temp int)
-0:20              'c' (global int)
-0:21          case:  with expression
-0:21            Constant:
-0:21              2 (const int)
-0:?           Sequence
-0:22            Branch: Break
-0:23            Pre-Increment (temp int)
-0:23              'c' (global int)
-0:24          default: 
-0:?           Sequence
-0:25            Branch: Break
-0:28      Sequence
-0:28        Sequence
-0:28          move second child to first child (temp int)
-0:28            'i' (temp int)
-0:28            Constant:
-0:28              0 (const int)
-0:28        Loop with condition tested first
-0:28          Loop Condition
-0:28          Compare Less Than (temp bool)
-0:28            'i' (temp int)
-0:28            Constant:
-0:28              0 (const int)
-0:28          Loop Body
-0:29          Pre-Increment (temp int)
-0:29            'c' (global int)
-0:28          Loop Terminal Expression
-0:28          Pre-Increment (temp int)
-0:28            'i' (temp int)
-0:31      Sequence
-0:31        Sequence
-0:31          move second child to first child (temp int)
-0:31            'i' (temp int)
-0:31            Constant:
-0:31              0 (const int)
-0:31        Loop with condition tested first
-0:31          Loop Condition
-0:31          Compare Less Than (temp bool)
-0:31            'i' (temp int)
-0:31            Constant:
-0:31              10 (const int)
-0:31          Loop Body
-0:32          Sequence
-0:32            Test condition and select (temp void)
-0:32              Condition
-0:32              Compare Less Than (temp bool)
-0:32                'c' (global int)
-0:32                Constant:
-0:32                  3 (const int)
-0:32              true case
-0:33              Sequence
-0:33                Branch: Break
-0:34                Pre-Increment (temp int)
-0:34                  'c' (global int)
-0:32              false case
-0:36              Sequence
-0:36                Branch: Continue
-0:37                Pre-Increment (temp int)
-0:37                  'c' (global int)
-0:31          Loop Terminal Expression
-0:31          Pre-Increment (temp int)
-0:31            'i' (temp int)
-0:41      Branch: Return
-0:43      Pre-Increment (temp int)
-0:43        'c' (global int)
-0:46  Function Definition: foo( (global int)
-0:46    Function Parameters: 
-0:48    Sequence
-0:48      Test condition and select (temp void)
-0:48        Condition
-0:48        Compare Greater Than (temp bool)
-0:48          'c' (global int)
-0:48          Constant:
-0:48            4 (const int)
-0:48        true case
-0:49        Sequence
-0:49          Branch: Return with expression
-0:49            Constant:
-0:49              4 (const int)
-0:50          Pre-Increment (temp int)
-0:50            'c' (global int)
-0:53      Branch: Return with expression
-0:53        Constant:
-0:53          5 (const int)
-0:55      Pre-Increment (temp int)
-0:55        'c' (global int)
 0:?   Linker Objects
 0:?     'flag' (const bool)
 0:?       false (const bool)
diff --git a/Test/baseResults/functionSemantics.frag.out b/Test/baseResults/functionSemantics.frag.out
index 1ea7dbd68edb670b143e2c818c4839c3e37190ea..e0fd0767a883943ed7aa0d438712ef041ca8cfa9 100644
--- a/Test/baseResults/functionSemantics.frag.out
+++ b/Test/baseResults/functionSemantics.frag.out
@@ -397,19 +397,6 @@ ERROR: node is still EOpNull!
 0:62        Construct vec4 (temp 4-component vector of float)
 0:62          Convert int to float (temp float)
 0:62            'color' (temp int)
-0:66  Function Definition: aggCall( (global void)
-0:66    Function Parameters: 
-0:?     Sequence
-0:69      Function Call: m(vf2; (global 3-component vector of float)
-0:69        Convert int to float (temp 2-component vector of float)
-0:69          Construct ivec2 (temp 2-component vector of int)
-0:69            Convert float to int (temp int)
-0:69              'F' (temp float)
-0:72  Function Definition: badConv( (global 4-component vector of float)
-0:72    Function Parameters: 
-0:74    Sequence
-0:74      Branch: Return with expression
-0:74        'u' (uniform float)
 0:?   Linker Objects
 0:?     'u' (uniform float)
 
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index ef406a183d4743a33093462b890922adb3cbe3e2..8e4b3b883cd6ef4c2d3b600d99ebf1b8ecdf26af 100755
--- a/Test/baseResults/glspv.esversion.vert.out
+++ b/Test/baseResults/glspv.esversion.vert.out
@@ -4,8 +4,4 @@ Warning, version 310 is not yet complete; most version-specific features are pre
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.frag.out b/Test/baseResults/glspv.frag.out
index 5df46c5b60f9e35a36f081b45d0a4a2f0da2b980..daa1dc1e424a0d021f0efbae2eb8d08ee181f6a5 100755
--- a/Test/baseResults/glspv.frag.out
+++ b/Test/baseResults/glspv.frag.out
@@ -6,8 +6,4 @@ ERROR: 0:14: '' :  syntax error
 ERROR: 4 compilation errors.  No code generated.
 
 
-
-Linked fragment stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index 7f44889ff783e485a32c60e3475382d2aee2f22c..3e8e8c4b00831fa0d98a1bc640b18b33cacbe001 100755
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -1,10 +1,6 @@
 glspv.version.frag
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 6
diff --git a/Test/baseResults/glspv.version.vert.out b/Test/baseResults/glspv.version.vert.out
index eb003dffc70497b70b7fcddcf3f4ccb5fc8f05f7..9683b3bd906946228bf3f319af98215e20974d17 100755
--- a/Test/baseResults/glspv.version.vert.out
+++ b/Test/baseResults/glspv.version.vert.out
@@ -3,8 +3,4 @@ ERROR: #version: Desktop shaders for OpenGL SPIR-V require version 330 or higher
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.vert.out b/Test/baseResults/glspv.vert.out
index b91ab507e537571481482da16c26072415b2870d..5f6d9bbd54be8ab03e6e61e4babb02f0ca326f88 100755
--- a/Test/baseResults/glspv.vert.out
+++ b/Test/baseResults/glspv.vert.out
@@ -11,8 +11,4 @@ ERROR: 0:20: '' :  syntax error
 ERROR: 8 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
new file mode 100755
index 0000000000000000000000000000000000000000..44d7655296f72e180562c1d61406b914e322830d
--- /dev/null
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -0,0 +1,207 @@
+hlsl.amend.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: f1( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      vector-scale (temp 4-component vector of float)
+0:6        a: 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 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            0 (const uint)
+0:6        b: direct index for structure (layout(offset=16 ) uniform float)
+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:12  Function Definition: f2( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      add (temp float)
+0:13        add (temp float)
+0:13          direct index (temp float)
+0:13            a: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:13              '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:13              Constant:
+0:13                0 (const uint)
+0:13            Constant:
+0:13              0 (const int)
+0:13          b: direct index for structure (layout(offset=16 ) uniform float)
+0:13            '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:13            Constant:
+0:13              1 (const uint)
+0:13        direct index (temp float)
+0:13          c: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:13            '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:13            Constant:
+0:13              2 (const uint)
+0:13          Constant:
+0:13            0 (const int)
+0:17  Function Definition: f3( (temp void)
+0:17    Function Parameters: 
+0:?     Sequence
+0:18      c: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:18        '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:18        Constant:
+0:18          2 (const uint)
+0:24  Function Definition: f4( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:25      vector-scale (temp 4-component vector of float)
+0:25        Convert int to float (temp float)
+0:25          d: direct index for structure (layout(offset=44 ) uniform int)
+0:25            '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:25            Constant:
+0:25              3 (const uint)
+0:25        a: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:25          '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:25          Constant:
+0:25            0 (const uint)
+0:?   Linker Objects
+0:?     '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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: f1( (temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      vector-scale (temp 4-component vector of float)
+0:6        a: 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 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            0 (const uint)
+0:6        b: direct index for structure (layout(offset=16 ) uniform float)
+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:12  Function Definition: f2( (temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      add (temp float)
+0:13        add (temp float)
+0:13          direct index (temp float)
+0:13            a: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:13              '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:13              Constant:
+0:13                0 (const uint)
+0:13            Constant:
+0:13              0 (const int)
+0:13          b: direct index for structure (layout(offset=16 ) uniform float)
+0:13            '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:13            Constant:
+0:13              1 (const uint)
+0:13        direct index (temp float)
+0:13          c: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:13            '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:13            Constant:
+0:13              2 (const uint)
+0:13          Constant:
+0:13            0 (const int)
+0:17  Function Definition: f3( (temp void)
+0:17    Function Parameters: 
+0:?     Sequence
+0:18      c: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:18        '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:18        Constant:
+0:18          2 (const uint)
+0:24  Function Definition: f4( (temp void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:25      vector-scale (temp 4-component vector of float)
+0:25        Convert int to float (temp float)
+0:25          d: direct index for structure (layout(offset=44 ) uniform int)
+0:25            '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:25            Constant:
+0:25              3 (const uint)
+0:25        a: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
+0:25          '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:25          Constant:
+0:25            0 (const uint)
+0:?   Linker Objects
+0:?     '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})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 47
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              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
+               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)
+           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
+                              Return
+                              FunctionEnd
+          6(f2():           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
+                              Return
+                              FunctionEnd
+          8(f3():           2 Function None 3
+               9:             Label
+                              Return
+                              FunctionEnd
+         10(f4():           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
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..74a348a2ede6bb18cec8a805d4b7b1d4b7fcdcf1
--- /dev/null
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -0,0 +1,526 @@
+hlsl.array.flatten.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: TestFn1( (temp 4-component vector of float)
+0:17    Function Parameters: 
+0:?     Sequence
+0:18      Branch: Return with expression
+0:18        texture (temp 4-component vector of float)
+0:18          Construct combined texture-sampler (temp sampler1D)
+0:?             'g_tex[1]' (uniform texture1D)
+0:?             'g_samp[1]' (uniform sampler)
+0:18          Constant:
+0:18            0.200000
+0:22  Function Definition: TestFn2(t11[3];p1[3]; (temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'l_tex' (in 3-element array of texture1D)
+0:22      'l_samp' (in 3-element array of sampler)
+0:?     Sequence
+0:23      Branch: Return with expression
+0:23        texture (temp 4-component vector of float)
+0:23          Construct combined texture-sampler (temp sampler1D)
+0:23            direct index (temp texture1D)
+0:23              'l_tex' (in 3-element array of texture1D)
+0:23              Constant:
+0:23                2 (const int)
+0:23            direct index (temp sampler)
+0:23              'l_samp' (in 3-element array of sampler)
+0:23              Constant:
+0:23                2 (const int)
+0:23          Constant:
+0:23            0.200000
+0:26  Sequence
+0:26    move second child to first child (temp 5-element array of int)
+0:26      'not_flattened_a' (global 5-element array of int)
+0:26      Constant:
+0:26        1 (const int)
+0:26        2 (const int)
+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 Parameters: 
+0:31      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:33      Sequence
+0:33        Sequence
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                0 (const int)
+0:?             'g_samp[0]' (uniform sampler)
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                1 (const int)
+0:?             'g_samp[1]' (uniform sampler)
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                2 (const int)
+0:?             'g_samp[2]' (uniform sampler)
+0:34      Sequence
+0:34        Sequence
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                0 (const int)
+0:?             'g_tex[0]' (uniform texture1D)
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                1 (const int)
+0:?             'g_tex[1]' (uniform texture1D)
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                2 (const int)
+0:?             'g_tex[2]' (uniform texture1D)
+0:35      Sequence
+0:35        move second child to first child (temp 4-element array of float)
+0:35          'local_float_array' (temp 4-element array of float)
+0:35          g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
+0:35            '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: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        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)
+0:37            Comma (temp 3-element array of texture1D)
+0:37              Sequence
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      0 (const int)
+0:?                   'g_tex[0]' (uniform texture1D)
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      1 (const int)
+0:?                   'g_tex[1]' (uniform texture1D)
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      2 (const int)
+0:?                   'g_tex[2]' (uniform texture1D)
+0:37              'aggShadow' (temp 3-element array of texture1D)
+0:37            Comma (temp 3-element array of sampler)
+0:37              Sequence
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      0 (const int)
+0:?                   'g_samp[0]' (uniform sampler)
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      1 (const int)
+0:?                   'g_samp[1]' (uniform sampler)
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      2 (const int)
+0:?                   'g_samp[2]' (uniform sampler)
+0:37              'aggShadow' (temp 3-element array of sampler)
+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)
+0:?     'g_tex_explicit[0]' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tex_explicit[1]' (layout(binding=2 ) uniform texture1D)
+0:?     'g_tex_explicit[2]' (layout(binding=3 ) uniform texture1D)
+0:?     'g_samp[0]' (uniform sampler)
+0:?     'g_samp[1]' (uniform sampler)
+0:?     'g_samp[2]' (uniform sampler)
+0:?     'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
+0:?     'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
+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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: TestFn1( (temp 4-component vector of float)
+0:17    Function Parameters: 
+0:?     Sequence
+0:18      Branch: Return with expression
+0:18        texture (temp 4-component vector of float)
+0:18          Construct combined texture-sampler (temp sampler1D)
+0:?             'g_tex[1]' (uniform texture1D)
+0:?             'g_samp[1]' (uniform sampler)
+0:18          Constant:
+0:18            0.200000
+0:22  Function Definition: TestFn2(t11[3];p1[3]; (temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'l_tex' (in 3-element array of texture1D)
+0:22      'l_samp' (in 3-element array of sampler)
+0:?     Sequence
+0:23      Branch: Return with expression
+0:23        texture (temp 4-component vector of float)
+0:23          Construct combined texture-sampler (temp sampler1D)
+0:23            direct index (temp texture1D)
+0:23              'l_tex' (in 3-element array of texture1D)
+0:23              Constant:
+0:23                2 (const int)
+0:23            direct index (temp sampler)
+0:23              'l_samp' (in 3-element array of sampler)
+0:23              Constant:
+0:23                2 (const int)
+0:23          Constant:
+0:23            0.200000
+0:26  Sequence
+0:26    move second child to first child (temp 5-element array of int)
+0:26      'not_flattened_a' (global 5-element array of int)
+0:26      Constant:
+0:26        1 (const int)
+0:26        2 (const int)
+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 Parameters: 
+0:31      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:33      Sequence
+0:33        Sequence
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                0 (const int)
+0:?             'g_samp[0]' (uniform sampler)
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                1 (const int)
+0:?             'g_samp[1]' (uniform sampler)
+0:33          move second child to first child (temp sampler)
+0:33            direct index (temp sampler)
+0:33              'local_sampler_array' (temp 3-element array of sampler)
+0:33              Constant:
+0:33                2 (const int)
+0:?             'g_samp[2]' (uniform sampler)
+0:34      Sequence
+0:34        Sequence
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                0 (const int)
+0:?             'g_tex[0]' (uniform texture1D)
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                1 (const int)
+0:?             'g_tex[1]' (uniform texture1D)
+0:34          move second child to first child (temp texture1D)
+0:34            direct index (temp texture1D)
+0:34              'local_texture_array' (temp 3-element array of texture1D)
+0:34              Constant:
+0:34                2 (const int)
+0:?             'g_tex[2]' (uniform texture1D)
+0:35      Sequence
+0:35        move second child to first child (temp 4-element array of float)
+0:35          'local_float_array' (temp 4-element array of float)
+0:35          g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
+0:35            '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: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        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)
+0:37            Comma (temp 3-element array of texture1D)
+0:37              Sequence
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      0 (const int)
+0:?                   'g_tex[0]' (uniform texture1D)
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      1 (const int)
+0:?                   'g_tex[1]' (uniform texture1D)
+0:37                move second child to first child (temp texture1D)
+0:37                  direct index (temp texture1D)
+0:37                    'aggShadow' (temp 3-element array of texture1D)
+0:37                    Constant:
+0:37                      2 (const int)
+0:?                   'g_tex[2]' (uniform texture1D)
+0:37              'aggShadow' (temp 3-element array of texture1D)
+0:37            Comma (temp 3-element array of sampler)
+0:37              Sequence
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      0 (const int)
+0:?                   'g_samp[0]' (uniform sampler)
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      1 (const int)
+0:?                   'g_samp[1]' (uniform sampler)
+0:37                move second child to first child (temp sampler)
+0:37                  direct index (temp sampler)
+0:37                    'aggShadow' (temp 3-element array of sampler)
+0:37                    Constant:
+0:37                      2 (const int)
+0:?                   'g_samp[2]' (uniform sampler)
+0:37              'aggShadow' (temp 3-element array of sampler)
+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)
+0:?     'g_tex_explicit[0]' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tex_explicit[1]' (layout(binding=2 ) uniform texture1D)
+0:?     'g_tex_explicit[2]' (layout(binding=3 ) uniform texture1D)
+0:?     'g_samp[0]' (uniform sampler)
+0:?     'g_samp[1]' (uniform sampler)
+0:?     'g_samp[2]' (uniform sampler)
+0:?     'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
+0:?     'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
+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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 123
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 99
+                              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
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeImage 6(float) 1D sampled format:Unknown
+              12:             TypeInt 32 0
+              13:     12(int) Constant 3
+              14:             TypeArray 11 13
+              15:             TypePointer UniformConstant 14
+              16:             TypeSampler
+              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
+         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
+                              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
+                              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
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 359f62f8224bd0afd19f1783cd6965cbe94d00b4..e04a5e81611c94db160bf71da67916cf03bb2210 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -2,7 +2,7 @@ hlsl.array.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(i1;vf4[3]; (global 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)
@@ -16,12 +16,18 @@ gl_FragCoord origin is upper left
 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 (temp 4-component vector of float)
-0:10                        'a' (global 4-element array of 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                        Constant:
 0:10                          1 (const int)
-0:10                      indirect index (temp 4-component vector of float)
-0:10                        'a' (global 4-element array of 4-component vector of float)
+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)
@@ -39,19 +45,21 @@ gl_FragCoord origin is upper left
 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 (temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
+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' (layout(location=0 ) in int)
 0:10                Constant:
 0:10                  0 (const int)
 0:10              'i' (layout(location=0 ) in int)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'a' (global 4-element array of 4-component vector of float)
-0:?     's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in int)
 0:?     'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:?     '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})
 
 
 Linked fragment stage:
@@ -60,7 +68,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(i1;vf4[3]; (global 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)
@@ -74,12 +82,18 @@ gl_FragCoord origin is upper left
 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 (temp 4-component vector of float)
-0:10                        'a' (global 4-element array of 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                        Constant:
 0:10                          1 (const int)
-0:10                      indirect index (temp 4-component vector of float)
-0:10                        'a' (global 4-element array of 4-component vector of float)
+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)
@@ -97,41 +111,53 @@ gl_FragCoord origin is upper left
 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 (temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
+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' (layout(location=0 ) in int)
 0:10                Constant:
 0:10                  0 (const int)
 0:10              'i' (layout(location=0 ) in int)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'a' (global 4-element array of 4-component vector of float)
-0:?     's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'i' (layout(location=0 ) in int)
 0:?     'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:?     '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})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 66
+// Id's are bound by 65
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 21 29
+                              EntryPoint Fragment 4  "PixelShaderFunction" 9 28 36
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 9  "@entryPointOutput"
-                              Name 14  "a"
-                              Name 21  "i"
-                              Name 29  "input"
-                              Name 42  "b"
-                              Name 54  ""
-                              MemberName 54 0  "m"
-                              Name 58  "s"
+                              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 21(i) Location 0
-                              Decorate 29(input) Location 1
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -141,60 +167,59 @@ gl_FragCoord origin is upper left
               10:             TypeInt 32 0
               11:     10(int) Constant 4
               12:             TypeArray 7(fvec4) 11
-              13:             TypePointer Private 12
-           14(a):     13(ptr) Variable Private
-              15:             TypeInt 32 1
-              16:     15(int) Constant 1
-              17:             TypePointer Private 7(fvec4)
-              20:             TypePointer Input 15(int)
-           21(i):     20(ptr) Variable Input
-              26:     10(int) Constant 3
-              27:             TypeArray 7(fvec4) 26
-              28:             TypePointer Input 27
-       29(input):     28(ptr) Variable Input
-              30:     15(int) Constant 2
-              31:             TypePointer Input 7(fvec4)
-              39:     10(int) Constant 10
-              40:             TypeArray 7(fvec4) 39
-              41:             TypePointer Function 40
-              43:     15(int) Constant 5
-              44:             TypePointer Function 7(fvec4)
-              52:     10(int) Constant 7
-              53:             TypeArray 7(fvec4) 52
-              54:             TypeStruct 53
-              55:     10(int) Constant 11
-              56:             TypeArray 54(struct) 55
-              57:             TypePointer Private 56
-           58(s):     57(ptr) Variable Private
-              60:     15(int) Constant 0
+              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)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           42(b):     41(ptr) Variable Function
-              18:     17(ptr) AccessChain 14(a) 16
-              19:    7(fvec4) Load 18
-              22:     15(int) Load 21(i)
-              23:     17(ptr) AccessChain 14(a) 22
-              24:    7(fvec4) Load 23
-              25:    7(fvec4) FAdd 19 24
-              32:     31(ptr) AccessChain 29(input) 30
-              33:    7(fvec4) Load 32
-              34:    7(fvec4) FAdd 25 33
-              35:     15(int) Load 21(i)
-              36:     31(ptr) AccessChain 29(input) 35
-              37:    7(fvec4) Load 36
-              38:    7(fvec4) FAdd 34 37
-              45:     44(ptr) AccessChain 42(b) 43
-              46:    7(fvec4) Load 45
-              47:    7(fvec4) FAdd 38 46
-              48:     15(int) Load 21(i)
-              49:     44(ptr) AccessChain 42(b) 48
-              50:    7(fvec4) Load 49
-              51:    7(fvec4) FAdd 47 50
-              59:     15(int) Load 21(i)
-              61:     15(int) Load 21(i)
-              62:     17(ptr) AccessChain 58(s) 59 60 61
-              63:    7(fvec4) Load 62
-              64:    7(fvec4) FAdd 51 63
-                              Store 9(@entryPointOutput) 64
+           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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..5f2036226580b8b67c95b59e724fc74569cb567b
--- /dev/null
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -0,0 +1,265 @@
+hlsl.array.implicit-size.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Sequence
+0:3    move second child to first child (temp 5-element array of float)
+0:3      'g_array' (global 5-element array of float)
+0:3      Constant:
+0:3        1.000000
+0:3        2.000000
+0:3        3.000000
+0:3        4.000000
+0:3        5.000000
+0:6  Sequence
+0:6    move second child to first child (temp 7-element array of float)
+0:6      'g_array_unused' (global 7-element array of float)
+0:6      Constant:
+0:6        1.000000
+0:6        2.000000
+0:6        3.000000
+0:6        4.000000
+0:6        5.000000
+0:6        6.000000
+0:6        7.000000
+0:12  Sequence
+0:12    move second child to first child (temp 2-element array of structure{temp int i, temp float f})
+0:12      'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+0:12      Constant:
+0:12        1 (const int)
+0:12        2.000000
+0:12        3 (const int)
+0:12        4.000000
+0:26  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:26    Function Parameters: 
+0:26      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp 3-element array of float)
+0:28          'l_array' (temp 3-element array of float)
+0:28          Constant:
+0:28            1.000000
+0:28            2.000000
+0:28            3.000000
+0:31      move second child to first child (temp 4-component vector of float)
+0:31        color: direct index for structure (temp 4-component vector of float)
+0:31          'ps_output' (out structure{temp 4-component vector of float color})
+0:31          Constant:
+0:31            0 (const int)
+0:31        Construct vec4 (temp 4-component vector of float)
+0:31          add (temp float)
+0:31            add (temp float)
+0:31              add (temp float)
+0:31                add (temp float)
+0:31                  direct index (temp float)
+0:31                    'g_array' (global 5-element array of float)
+0:31                    Constant:
+0:31                      0 (const int)
+0:31                  direct index (temp float)
+0:31                    'g_array' (global 5-element array of float)
+0:31                    Constant:
+0:31                      4 (const int)
+0:31                direct index (temp float)
+0:31                  'l_array' (temp 3-element array of float)
+0:31                  Constant:
+0:31                    1 (const int)
+0:31              f: direct index for structure (temp float)
+0:31                direct index (temp structure{temp int i, temp float f})
+0:31                  'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+0:31                  Constant:
+0:31                    0 (const int)
+0:31                Constant:
+0:31                  1 (const int)
+0:31            indirect index (temp float)
+0:31              'g_array' (global 5-element array of float)
+0:31              'idx' (temp int)
+0:?   Linker Objects
+0:?     'g_array' (global 5-element array of float)
+0:?     'g_array_unused' (global 7-element array of float)
+0:?     'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+
+
+Linked fragment stage:
+
+WARNING: Linking fragment stage: Entry point not found
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Sequence
+0:3    move second child to first child (temp 5-element array of float)
+0:3      'g_array' (global 5-element array of float)
+0:3      Constant:
+0:3        1.000000
+0:3        2.000000
+0:3        3.000000
+0:3        4.000000
+0:3        5.000000
+0:6  Sequence
+0:6    move second child to first child (temp 7-element array of float)
+0:6      'g_array_unused' (global 7-element array of float)
+0:6      Constant:
+0:6        1.000000
+0:6        2.000000
+0:6        3.000000
+0:6        4.000000
+0:6        5.000000
+0:6        6.000000
+0:6        7.000000
+0:12  Sequence
+0:12    move second child to first child (temp 2-element array of structure{temp int i, temp float f})
+0:12      'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+0:12      Constant:
+0:12        1 (const int)
+0:12        2.000000
+0:12        3 (const int)
+0:12        4.000000
+0:26  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:26    Function Parameters: 
+0:26      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp 3-element array of float)
+0:28          'l_array' (temp 3-element array of float)
+0:28          Constant:
+0:28            1.000000
+0:28            2.000000
+0:28            3.000000
+0:31      move second child to first child (temp 4-component vector of float)
+0:31        color: direct index for structure (temp 4-component vector of float)
+0:31          'ps_output' (out structure{temp 4-component vector of float color})
+0:31          Constant:
+0:31            0 (const int)
+0:31        Construct vec4 (temp 4-component vector of float)
+0:31          add (temp float)
+0:31            add (temp float)
+0:31              add (temp float)
+0:31                add (temp float)
+0:31                  direct index (temp float)
+0:31                    'g_array' (global 5-element array of float)
+0:31                    Constant:
+0:31                      0 (const int)
+0:31                  direct index (temp float)
+0:31                    'g_array' (global 5-element array of float)
+0:31                    Constant:
+0:31                      4 (const int)
+0:31                direct index (temp float)
+0:31                  'l_array' (temp 3-element array of float)
+0:31                  Constant:
+0:31                    1 (const int)
+0:31              f: direct index for structure (temp float)
+0:31                direct index (temp structure{temp int i, temp float f})
+0:31                  'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+0:31                  Constant:
+0:31                    0 (const int)
+0:31                Constant:
+0:31                  1 (const int)
+0:31            indirect index (temp float)
+0:31              'g_array' (global 5-element array of float)
+0:31              'idx' (temp int)
+0:?   Linker Objects
+0:?     'g_array' (global 5-element array of float)
+0:?     'g_array_unused' (global 7-element array of float)
+0:?     'g_mystruct' (global 2-element array of structure{temp int i, temp float f})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 72
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "PixelShaderFunction"
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              Name 12  "main(struct-PS_OUTPUT-vf41;"
+                              Name 11  "ps_output"
+                              Name 18  "g_array"
+                              Name 28  "g_array_unused"
+                              Name 33  "mystruct"
+                              MemberName 33(mystruct) 0  "i"
+                              MemberName 33(mystruct) 1  "f"
+                              Name 37  "g_mystruct"
+                              Name 46  "l_array"
+                              Name 64  "idx"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypePointer Function 8(PS_OUTPUT)
+              10:             TypeFunction 2 9(ptr)
+              14:             TypeInt 32 0
+              15:     14(int) Constant 5
+              16:             TypeArray 6(float) 15
+              17:             TypePointer Private 16
+     18(g_array):     17(ptr) Variable Private
+              19:    6(float) Constant 1065353216
+              20:    6(float) Constant 1073741824
+              21:    6(float) Constant 1077936128
+              22:    6(float) Constant 1082130432
+              23:    6(float) Constant 1084227584
+              24:          16 ConstantComposite 19 20 21 22 23
+              25:     14(int) Constant 7
+              26:             TypeArray 6(float) 25
+              27:             TypePointer Private 26
+28(g_array_unused):     27(ptr) Variable Private
+              29:    6(float) Constant 1086324736
+              30:    6(float) Constant 1088421888
+              31:          26 ConstantComposite 19 20 21 22 23 29 30
+              32:             TypeInt 32 1
+    33(mystruct):             TypeStruct 32(int) 6(float)
+              34:     14(int) Constant 2
+              35:             TypeArray 33(mystruct) 34
+              36:             TypePointer Private 35
+  37(g_mystruct):     36(ptr) Variable Private
+              38:     32(int) Constant 1
+              39:33(mystruct) ConstantComposite 38 20
+              40:     32(int) Constant 3
+              41:33(mystruct) ConstantComposite 40 22
+              42:          35 ConstantComposite 39 41
+              43:     14(int) Constant 3
+              44:             TypeArray 6(float) 43
+              45:             TypePointer Function 44
+              47:          44 ConstantComposite 19 20 21
+              48:     32(int) Constant 0
+              49:             TypePointer Private 6(float)
+              52:     32(int) Constant 4
+              56:             TypePointer Function 6(float)
+              63:             TypePointer Function 32(int)
+              70:             TypePointer Function 7(fvec4)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+                              Store 18(g_array) 24
+                              Store 28(g_array_unused) 31
+                              Store 37(g_mystruct) 42
+                              Return
+                              FunctionEnd
+12(main(struct-PS_OUTPUT-vf41;):           2 Function None 10
+   11(ps_output):      9(ptr) FunctionParameter
+              13:             Label
+     46(l_array):     45(ptr) Variable Function
+         64(idx):     63(ptr) Variable Function
+                              Store 46(l_array) 47
+              50:     49(ptr) AccessChain 18(g_array) 48
+              51:    6(float) Load 50
+              53:     49(ptr) AccessChain 18(g_array) 52
+              54:    6(float) Load 53
+              55:    6(float) FAdd 51 54
+              57:     56(ptr) AccessChain 46(l_array) 38
+              58:    6(float) Load 57
+              59:    6(float) FAdd 55 58
+              60:     49(ptr) AccessChain 37(g_mystruct) 48 38
+              61:    6(float) Load 60
+              62:    6(float) FAdd 59 61
+              65:     32(int) Load 64(idx)
+              66:     49(ptr) AccessChain 18(g_array) 65
+              67:    6(float) Load 66
+              68:    6(float) FAdd 62 67
+              69:    7(fvec4) CompositeConstruct 68 68 68 68
+              71:     70(ptr) AccessChain 11(ps_output) 48
+                              Store 71 69
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..66890b52ce9b7a7cd63f18fea2c0444825acce69
--- /dev/null
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -0,0 +1,210 @@
+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 Parameters: 
+0:?     Sequence
+0:14      move second child to first child (temp 4-component vector of float)
+0:14        direct index (temp 4-component vector of float)
+0:14          direct index (temp 3-element array of 4-component vector of float)
+0:14            'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:14            Constant:
+0:14              1 (const int)
+0:14          Constant:
+0:14            2 (const int)
+0:14        Construct vec4 (temp 4-component vector of float)
+0:14          direct index (layout(offset=0 ) temp float)
+0:14            direct index (layout(offset=0 ) temp 3-element array of float)
+0:14              direct index (layout(offset=0 ) temp 4-element array of 3-element array of float)
+0:14                float_array: direct index for structure (layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float)
+0:14                  '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})
+0:14                  Constant:
+0:14                    0 (const uint)
+0:14                Constant:
+0:14                  2 (const int)
+0:14              Constant:
+0:14                3 (const int)
+0:14            Constant:
+0:14              1 (const int)
+0:15      move second child to first child (temp 3-element array of 4-component vector of float)
+0:15        direct index (temp 3-element array of 4-component vector of float)
+0:15          'float4_array_2' (temp 5-element array of 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            1 (const int)
+0:15        direct index (temp 3-element array of 4-component vector of float)
+0:15          'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:18      move second child to first child (temp 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        direct index (temp 4-component vector of float)
+0:18          direct index (temp 3-element array of 4-component vector of float)
+0:18            'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:18            Constant:
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:14      move second child to first child (temp 4-component vector of float)
+0:14        direct index (temp 4-component vector of float)
+0:14          direct index (temp 3-element array of 4-component vector of float)
+0:14            'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:14            Constant:
+0:14              1 (const int)
+0:14          Constant:
+0:14            2 (const int)
+0:14        Construct vec4 (temp 4-component vector of float)
+0:14          direct index (layout(offset=0 ) temp float)
+0:14            direct index (layout(offset=0 ) temp 3-element array of float)
+0:14              direct index (layout(offset=0 ) temp 4-element array of 3-element array of float)
+0:14                float_array: direct index for structure (layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float)
+0:14                  '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})
+0:14                  Constant:
+0:14                    0 (const uint)
+0:14                Constant:
+0:14                  2 (const int)
+0:14              Constant:
+0:14                3 (const int)
+0:14            Constant:
+0:14              1 (const int)
+0:15      move second child to first child (temp 3-element array of 4-component vector of float)
+0:15        direct index (temp 3-element array of 4-component vector of float)
+0:15          'float4_array_2' (temp 5-element array of 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            1 (const int)
+0:15        direct index (temp 3-element array of 4-component vector of float)
+0:15          'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:18      move second child to first child (temp 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        direct index (temp 4-component vector of float)
+0:18          direct index (temp 3-element array of 4-component vector of float)
+0:18            'float4_array_1' (temp 2-element array of 3-element array of 4-component vector of float)
+0:18            Constant:
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 48
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index d54d467434a1e8f493d2b31b57f74883f56fcb4e..bcd160369101acc151a509de1720bdd40db04060 100755
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -2,7 +2,7 @@ hlsl.assoc.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (global 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)
@@ -47,7 +47,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (global 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)
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
new file mode 100644
index 0000000000000000000000000000000000000000..2316cd9b9d8a24fa41cdd4be03fdd1f82b6c6165
--- /dev/null
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -0,0 +1,138 @@
+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 Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'x' (temp int)
+0:11          Constant:
+0:11            0 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'x' (temp int)
+0:11            bound: direct index for structure (layout(offset=0 ) uniform int)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+0:11              Constant:
+0:11                0 (const uint)
+0:11          No loop body
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'x' (temp int)
+0:11          Constant:
+0:11            0 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'x' (temp int)
+0:11            bound: direct index for structure (layout(offset=0 ) uniform int)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+0:11              Constant:
+0:11                0 (const uint)
+0:11          No loop body
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 30
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
index 38421a88a4cc0e06c0d934a15b6f831c7b1e502b..a3ce657da0f8785615d1769c654adda747ff7dff 100755
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -2,7 +2,7 @@ hlsl.attribute.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -21,7 +21,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
new file mode 100755
index 0000000000000000000000000000000000000000..9101e22f8e6d363ff89b999301a943adcf616a8f
--- /dev/null
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -0,0 +1,58 @@
+hlsl.basic.comp
+Shader version: 450
+local_size = (1, 1, 1)
+0:? Sequence
+0:4  Function Definition: main(i1; (temp void)
+0:4    Function Parameters: 
+0:4      'dti' (in int LocalInvocationID)
+0:?     Sequence
+0:5      'dti' (in int LocalInvocationID)
+0:?   Linker Objects
+0:?     'dti' (in int LocalInvocationID)
+0:?     'a' (shared 100-element array of 4-component vector of float)
+
+
+Linked compute stage:
+
+
+Shader version: 450
+local_size = (1, 1, 1)
+0:? Sequence
+0:4  Function Definition: main(i1; (temp void)
+0:4    Function Parameters: 
+0:4      'dti' (in int LocalInvocationID)
+0:?     Sequence
+0:5      'dti' (in int LocalInvocationID)
+0:?   Linker Objects
+0:?     'dti' (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 16
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 8
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Name 4  "main"
+                              Name 8  "dti"
+                              Name 15  "a"
+                              Decorate 8(dti) BuiltIn LocalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+          8(dti):      7(ptr) Variable Input
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 4
+              11:             TypeInt 32 0
+              12:     11(int) Constant 100
+              13:             TypeArray 10(fvec4) 12
+              14:             TypePointer Workgroup 13
+           15(a):     14(ptr) Variable Workgroup
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
new file mode 100644
index 0000000000000000000000000000000000000000..2c20b439c149f92d10605059be4a6f00d004699f
--- /dev/null
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -0,0 +1,201 @@
+hlsl.basic.geom
+Shader version: 450
+invocations = -1
+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 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' (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)
+0:19          'Vert' (temp structure{temp float myfloat, temp int something})
+0:19          Constant:
+0:19            0 (const int)
+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                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                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              Constant:
+0:19                2 (const int)
+0:20      move second child to first child (temp int)
+0:20        something: direct index for structure (temp int)
+0:20          'Vert' (temp structure{temp float myfloat, temp int something})
+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            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' (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' (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:?   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:?     'myfloat' (layout(location=0 ) out float)
+0:?     'something' (layout(location=1 ) out int)
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+invocations = 1
+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 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' (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)
+0:19          'Vert' (temp structure{temp float myfloat, temp int something})
+0:19          Constant:
+0:19            0 (const int)
+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                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                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              Constant:
+0:19                2 (const int)
+0:20      move second child to first child (temp int)
+0:20        something: direct index for structure (temp int)
+0:20          'Vert' (temp structure{temp float myfloat, temp int something})
+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            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' (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' (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:?   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:?     'myfloat' (layout(location=0 ) out float)
+0:?     'something' (layout(location=1 ) out int)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 45
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 16 31 38 42 44
+                              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 16  "test"
+                              Name 31  "VertexID"
+                              Name 38  "OutputStream"
+                              Name 42  "myfloat"
+                              Name 44  "something"
+                              Decorate 16(test) Location 3
+                              Decorate 31(VertexID) Location 0
+                              Decorate 42(myfloat) Location 0
+                              Decorate 44(something) Location 1
+               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
+              41:             TypePointer Output 6(float)
+     42(myfloat):     41(ptr) Variable Output
+              43:             TypePointer Output 7(int)
+   44(something):     43(ptr) Variable Output
+         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
+                              EmitVertex
+              40:  8(PSInput) Load 10(Vert)
+                              Store 38(OutputStream) 40
+                              EmitVertex
+                              EndPrimitive
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 78a8e738933ae112d8ca9ec466b02133b36ea84a..dbb2b5e1c46e534d2730ef94985e2f9ea76e3f7d 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -2,42 +2,42 @@ hlsl.buffer.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:26  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
-0:26    Function Parameters: 
-0:26      'input' (layout(location=0 ) in 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:?     Sequence
-0:27      Sequence
-0:27        move second child to first child (temp 4-component vector of float)
+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:27          add (temp 4-component vector of float)
-0:27            add (temp 4-component vector of float)
-0:27              add (temp 4-component vector of float)
-0:27                add (temp 4-component vector of float)
-0:27                  'input' (layout(location=0 ) in 4-component vector of float)
-0:27                  v1: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                    'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
-0:27                    Constant:
-0:27                      0 (const uint)
-0:27                v2: direct index for structure (layout(column_major std430 ) buffer 4-component vector of float)
-0:27                  'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:27                  Constant:
-0:27                    0 (const uint)
-0:27              v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                'anon@2' (layout(set=10 binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:27                Constant:
-0:27                  0 (const uint)
-0:27            v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:27              'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
-0:27              Constant:
-0:27                0 (const uint)
-0:27        Branch: Return
+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                  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                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              Constant:
+0:31                0 (const uint)
+0:31        Branch: Return
 0:?   Linker Objects
-0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
-0:?     'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:?     'anon@2' (layout(set=10 binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:?     'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 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, ...})
 
 
 Linked fragment stage:
@@ -46,46 +46,46 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:26  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
-0:26    Function Parameters: 
-0:26      'input' (layout(location=0 ) in 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:?     Sequence
-0:27      Sequence
-0:27        move second child to first child (temp 4-component vector of float)
+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:27          add (temp 4-component vector of float)
-0:27            add (temp 4-component vector of float)
-0:27              add (temp 4-component vector of float)
-0:27                add (temp 4-component vector of float)
-0:27                  'input' (layout(location=0 ) in 4-component vector of float)
-0:27                  v1: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                    'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
-0:27                    Constant:
-0:27                      0 (const uint)
-0:27                v2: direct index for structure (layout(column_major std430 ) buffer 4-component vector of float)
-0:27                  'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:27                  Constant:
-0:27                    0 (const uint)
-0:27              v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
-0:27                'anon@2' (layout(set=10 binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:27                Constant:
-0:27                  0 (const uint)
-0:27            v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:27              'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
-0:27              Constant:
-0:27                0 (const uint)
-0:27        Branch: Return
+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                  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                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              Constant:
+0:31                0 (const uint)
+0:31        Branch: Return
 0:?   Linker Objects
-0:?     'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
-0:?     'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
-0:?     'anon@2' (layout(set=10 binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
-0:?     'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
 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, ...})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 41
+// Id's are bound by 42
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -101,20 +101,24 @@ gl_FragCoord origin is upper left
                               Name 22  ""
                               MemberName 22 0  "v2"
                               Name 24  ""
-                              Name 28  ""
-                              MemberName 28 0  "v3"
-                              MemberName 28 1  "i3"
+                              Name 28  "cbufName"
+                              MemberName 28(cbufName) 0  "v3"
+                              MemberName 28(cbufName) 1  "i3"
                               Name 30  ""
-                              Name 34  ""
-                              MemberName 34 0  "v4"
-                              MemberName 34 1  "i4"
-                              MemberName 34 2  "f1"
-                              MemberName 34 3  "f3"
-                              MemberName 34 4  "f4"
-                              MemberName 34 5  "f5"
-                              MemberName 34 6  "f6"
-                              MemberName 34 7  "f7"
-                              Name 36  ""
+                              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
@@ -123,22 +127,34 @@ gl_FragCoord origin is upper left
                               MemberDecorate 22 0 Offset 0
                               Decorate 22 BufferBlock
                               Decorate 24 DescriptorSet 0
-                              MemberDecorate 28 0 Offset 0
-                              MemberDecorate 28 1 Offset 20
-                              Decorate 28 Block
+                              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 34 0 Offset 16
-                              MemberDecorate 34 1 Offset 48
-                              MemberDecorate 34 2 Offset 60
-                              MemberDecorate 34 3 Offset 64
-                              MemberDecorate 34 4 Offset 68
-                              MemberDecorate 34 5 Offset 72
-                              MemberDecorate 34 6 Offset 76
-                              MemberDecorate 34 7 Offset 80
-                              Decorate 34 BufferBlock
-                              Decorate 36 DescriptorSet 0
-                              Decorate 36 Binding 8
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -156,12 +172,13 @@ gl_FragCoord origin is upper left
               22:             TypeStruct 7(fvec4)
               23:             TypePointer Uniform 22(struct)
               24:     23(ptr) Variable Uniform
-              28:             TypeStruct 7(fvec4) 16(int)
-              29:             TypePointer Uniform 28(struct)
+    28(cbufName):             TypeStruct 7(fvec4) 16(int)
+              29:             TypePointer Uniform 28(cbufName)
               30:     29(ptr) Variable Uniform
-              34:             TypeStruct 7(fvec4) 16(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float)
-              35:             TypePointer Uniform 34(struct)
-              36:     35(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
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
               12:    7(fvec4) Load 11(input)
@@ -174,9 +191,9 @@ gl_FragCoord origin is upper left
               31:     18(ptr) AccessChain 30 17
               32:    7(fvec4) Load 31
               33:    7(fvec4) FAdd 27 32
-              37:     18(ptr) AccessChain 36 17
-              38:    7(fvec4) Load 37
-              39:    7(fvec4) FAdd 33 38
-                              Store 9(@entryPointOutput) 39
+              38:     18(ptr) AccessChain 37 17
+              39:    7(fvec4) Load 38
+              40:    7(fvec4) FAdd 33 39
+                              Store 9(@entryPointOutput) 40
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index 68eee1a0b67f39bd27338f9d1e4b350f050c4f77..56a2ce869e4f1533a231ca8056565fd7fd37a7aa 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/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( (global 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,8 +139,8 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -155,6 +155,8 @@ gl_FragCoord origin is upper left
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -166,8 +168,6 @@ 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 +176,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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,8 +313,8 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -329,6 +329,8 @@ gl_FragCoord origin is upper left
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -340,12 +342,10 @@ 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 150
+// Id's are bound by 141
 
                               Capability Shader
                               Capability Sampled1D
@@ -353,51 +353,51 @@ gl_FragCoord origin is upper left
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 141 145
+                              EntryPoint Fragment 4  "main" 132 136
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "txval10"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 26  "txval11"
-                              Name 29  "g_tTex1di4a"
-                              Name 38  "txval12"
-                              Name 42  "g_tTex1du4a"
-                              Name 51  "txval20"
-                              Name 54  "g_tTex2df4a"
-                              Name 63  "txval21"
-                              Name 66  "g_tTex2di4a"
-                              Name 76  "txval22"
-                              Name 79  "g_tTex2du4a"
-                              Name 90  "txval40"
-                              Name 93  "g_tTexcdf4a"
-                              Name 103  "txval41"
-                              Name 106  "g_tTexcdi4a"
-                              Name 115  "txval42"
-                              Name 118  "g_tTexcdu4a"
-                              Name 131  "PS_OUTPUT"
-                              MemberName 131(PS_OUTPUT) 0  "Color"
-                              MemberName 131(PS_OUTPUT) 1  "Depth"
-                              Name 133  "psout"
-                              Name 141  "Color"
-                              Name 145  "Depth"
-                              Name 149  "g_tTex1df4"
+                              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 29(g_tTex1di4a) DescriptorSet 0
-                              Decorate 42(g_tTex1du4a) DescriptorSet 0
-                              Decorate 54(g_tTex2df4a) DescriptorSet 0
-                              Decorate 66(g_tTex2di4a) DescriptorSet 0
-                              Decorate 79(g_tTex2du4a) DescriptorSet 0
-                              Decorate 93(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 106(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 118(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 141(Color) Location 0
-                              Decorate 145(Depth) BuiltIn FragDepth
-                              Decorate 149(g_tTex1df4) DescriptorSet 0
-                              Decorate 149(g_tTex1df4) 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -410,153 +410,144 @@ gl_FragCoord origin is upper left
      15(g_sSamp):     14(ptr) Variable UniformConstant
               17:             TypeSampledImage 9
               19:    6(float) Constant 1036831949
-              21:             TypeVector 6(float) 2
-              23:             TypeInt 32 1
-              24:     23(int) Constant 0
-              27:             TypeImage 23(int) 1D array sampled format:Unknown
-              28:             TypePointer UniformConstant 27
- 29(g_tTex1di4a):     28(ptr) Variable UniformConstant
-              32:             TypeSampledImage 27
-              34:    6(float) Constant 1045220557
-              39:             TypeInt 32 0
-              40:             TypeImage 39(int) 1D array sampled format:Unknown
-              41:             TypePointer UniformConstant 40
- 42(g_tTex1du4a):     41(ptr) Variable UniformConstant
-              45:             TypeSampledImage 40
-              47:    6(float) Constant 1050253722
-              52:             TypeImage 6(float) 2D array sampled format:Unknown
-              53:             TypePointer UniformConstant 52
- 54(g_tTex2df4a):     53(ptr) Variable UniformConstant
-              57:             TypeSampledImage 52
-              59:   21(fvec2) ConstantComposite 19 34
-              64:             TypeImage 23(int) 2D array sampled format:Unknown
-              65:             TypePointer UniformConstant 64
- 66(g_tTex2di4a):     65(ptr) Variable UniformConstant
-              69:             TypeSampledImage 64
-              71:    6(float) Constant 1053609165
-              72:   21(fvec2) ConstantComposite 47 71
-              77:             TypeImage 39(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:   21(fvec2) ConstantComposite 84 85
-              91:             TypeImage 6(float) Cube array sampled format:Unknown
-              92:             TypePointer UniformConstant 91
- 93(g_tTexcdf4a):     92(ptr) Variable UniformConstant
-              96:             TypeSampledImage 91
-              98:             TypeVector 6(float) 3
-              99:   98(fvec3) ConstantComposite 19 34 47
-             104:             TypeImage 23(int) Cube array sampled format:Unknown
-             105:             TypePointer UniformConstant 104
-106(g_tTexcdi4a):    105(ptr) Variable UniformConstant
-             109:             TypeSampledImage 104
-             111:   98(fvec3) ConstantComposite 71 84 85
-             116:             TypeImage 39(int) Cube array sampled format:Unknown
-             117:             TypePointer UniformConstant 116
-118(g_tTexcdu4a):    117(ptr) Variable UniformConstant
-             121:             TypeSampledImage 116
-             123:    6(float) Constant 1060320051
-             124:    6(float) Constant 1061997773
-             125:    6(float) Constant 1063675494
-             126:   98(fvec3) ConstantComposite 123 124 125
-             130:             TypeVector 6(float) 4
-  131(PS_OUTPUT):             TypeStruct 130(fvec4) 6(float)
-             132:             TypePointer Function 131(PS_OUTPUT)
-             134:    6(float) Constant 1065353216
-             135:  130(fvec4) ConstantComposite 134 134 134 134
-             136:             TypePointer Function 130(fvec4)
-             138:     23(int) Constant 1
-             140:             TypePointer Output 130(fvec4)
-      141(Color):    140(ptr) Variable Output
-             144:             TypePointer Output 6(float)
-      145(Depth):    144(ptr) Variable Output
- 149(g_tTex1df4):     10(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
       8(txval10):      7(ptr) Variable Function
-     26(txval11):      7(ptr) Variable Function
-     38(txval12):      7(ptr) Variable Function
-     51(txval20):      7(ptr) Variable Function
-     63(txval21):      7(ptr) Variable Function
-     76(txval22):      7(ptr) Variable Function
-     90(txval40):      7(ptr) Variable Function
-    103(txval41):      7(ptr) Variable Function
-    115(txval42):      7(ptr) Variable Function
-      133(psout):    132(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
-              20:           9 Image 18
-              22:   21(fvec2) ImageQueryLod 20 19
-              25:    6(float) CompositeExtract 22 0
-                              Store 8(txval10) 25
-              30:          27 Load 29(g_tTex1di4a)
-              31:          13 Load 15(g_sSamp)
-              33:          32 SampledImage 30 31
-              35:          27 Image 33
-              36:   21(fvec2) ImageQueryLod 35 34
-              37:    6(float) CompositeExtract 36 0
-                              Store 26(txval11) 37
-              43:          40 Load 42(g_tTex1du4a)
-              44:          13 Load 15(g_sSamp)
-              46:          45 SampledImage 43 44
-              48:          40 Image 46
-              49:   21(fvec2) ImageQueryLod 48 47
-              50:    6(float) CompositeExtract 49 0
-                              Store 38(txval12) 50
-              55:          52 Load 54(g_tTex2df4a)
-              56:          13 Load 15(g_sSamp)
-              58:          57 SampledImage 55 56
-              60:          52 Image 58
-              61:   21(fvec2) ImageQueryLod 60 59
-              62:    6(float) CompositeExtract 61 0
-                              Store 51(txval20) 62
-              67:          64 Load 66(g_tTex2di4a)
-              68:          13 Load 15(g_sSamp)
-              70:          69 SampledImage 67 68
-              73:          64 Image 70
-              74:   21(fvec2) ImageQueryLod 73 72
-              75:    6(float) CompositeExtract 74 0
-                              Store 63(txval21) 75
-              80:          77 Load 79(g_tTex2du4a)
-              81:          13 Load 15(g_sSamp)
-              83:          82 SampledImage 80 81
-              87:          77 Image 83
-              88:   21(fvec2) ImageQueryLod 87 86
-              89:    6(float) CompositeExtract 88 0
-                              Store 76(txval22) 89
-              94:          91 Load 93(g_tTexcdf4a)
-              95:          13 Load 15(g_sSamp)
-              97:          96 SampledImage 94 95
-             100:          91 Image 97
-             101:   21(fvec2) ImageQueryLod 100 99
-             102:    6(float) CompositeExtract 101 0
-                              Store 90(txval40) 102
-             107:         104 Load 106(g_tTexcdi4a)
-             108:          13 Load 15(g_sSamp)
-             110:         109 SampledImage 107 108
-             112:         104 Image 110
-             113:   21(fvec2) ImageQueryLod 112 111
-             114:    6(float) CompositeExtract 113 0
-                              Store 103(txval41) 114
-             119:         116 Load 118(g_tTexcdu4a)
-             120:          13 Load 15(g_sSamp)
-             122:         121 SampledImage 119 120
-             127:         116 Image 122
-             128:   21(fvec2) ImageQueryLod 127 126
-             129:    6(float) CompositeExtract 128 0
-                              Store 115(txval42) 129
-             137:    136(ptr) AccessChain 133(psout) 24
-                              Store 137 135
-             139:      7(ptr) AccessChain 133(psout) 138
-                              Store 139 134
-             142:    136(ptr) AccessChain 133(psout) 24
-             143:  130(fvec4) Load 142
-                              Store 141(Color) 143
-             146:      7(ptr) AccessChain 133(psout) 138
-             147:    6(float) Load 146
-                              Store 145(Depth) 147
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 9370e14a839fb2178b118bd1e73969b3fbb0820c..799dcc37fbde3f28799435c0a751b8ce66ee4f59 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/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( (global 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,8 +151,8 @@ ERROR: node is still EOpNull!
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -167,6 +167,8 @@ ERROR: node is still EOpNull!
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -178,8 +180,6 @@ 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 +188,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:24  Function Definition: main( (global 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,8 +325,8 @@ ERROR: node is still EOpNull!
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -341,6 +341,8 @@ ERROR: node is still EOpNull!
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -352,7 +354,5 @@ 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
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 3bef95f0ddd158f65677eaa0157efba2339022dc..bf7183f277f05aee6516dfb9af6e17e538d3e5e2 100755
--- a/Test/baseResults/hlsl.cast.frag.out
+++ b/Test/baseResults/hlsl.cast.frag.out
@@ -2,7 +2,7 @@ hlsl.cast.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -33,7 +33,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..1bf63ec8a70e80d13d639a301fc0e5fbb4a969e5
--- /dev/null
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -0,0 +1,402 @@
+hlsl.comparison.vec.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: Bug1(vf4; (temp void)
+0:4    Function Parameters: 
+0:4      'a' (in 4-component vector of float)
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'v04' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:6      Sequence
+0:6        move second child to first child (temp float)
+0:6          'v01' (temp float)
+0:6          Constant:
+0:6            0.000000
+0:8      Sequence
+0:8        move second child to first child (temp 4-component vector of bool)
+0:8          'r00' (temp 4-component vector of bool)
+0:8          Equal (temp 4-component vector of bool)
+0:8            'a' (in 4-component vector of float)
+0:8            'v04' (temp 4-component vector of float)
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of bool)
+0:9          'r01' (temp 4-component vector of bool)
+0:9          NotEqual (temp 4-component vector of bool)
+0:9            'a' (in 4-component vector of float)
+0:9            'v04' (temp 4-component vector of float)
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of bool)
+0:10          'r02' (temp 4-component vector of bool)
+0:10          Compare Less Than (temp 4-component vector of bool)
+0:10            'a' (in 4-component vector of float)
+0:10            'v04' (temp 4-component vector of float)
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r03' (temp 4-component vector of bool)
+0:11          Compare Greater Than (temp 4-component vector of bool)
+0:11            'a' (in 4-component vector of float)
+0:11            'v04' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r10' (temp 4-component vector of bool)
+0:13          Equal (temp 4-component vector of bool)
+0:13            'a' (in 4-component vector of float)
+0:13            Construct vec4 (in 4-component vector of float)
+0:13              'v01' (temp float)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of bool)
+0:14          'r11' (temp 4-component vector of bool)
+0:14          NotEqual (temp 4-component vector of bool)
+0:14            'a' (in 4-component vector of float)
+0:14            Construct vec4 (in 4-component vector of float)
+0:14              'v01' (temp float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r12' (temp 4-component vector of bool)
+0:15          Compare Less Than (temp 4-component vector of bool)
+0:15            'a' (in 4-component vector of float)
+0:15            Construct vec4 (in 4-component vector of float)
+0:15              'v01' (temp float)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r13' (temp 4-component vector of bool)
+0:16          Compare Greater Than (temp 4-component vector of bool)
+0:16            'a' (in 4-component vector of float)
+0:16            Construct vec4 (in 4-component vector of float)
+0:16              'v01' (temp float)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          Equal (temp 4-component vector of bool)
+0:18            Construct vec4 (in 4-component vector of float)
+0:18              'v01' (temp float)
+0:18            'a' (in 4-component vector of float)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          NotEqual (temp 4-component vector of bool)
+0:19            Construct vec4 (in 4-component vector of float)
+0:19              'v01' (temp float)
+0:19            'a' (in 4-component vector of float)
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of bool)
+0:20          'r22' (temp 4-component vector of bool)
+0:20          Compare Less Than (temp 4-component vector of bool)
+0:20            Construct vec4 (in 4-component vector of float)
+0:20              'v01' (temp float)
+0:20            'a' (in 4-component vector of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4-component vector of bool)
+0:21          'r23' (temp 4-component vector of bool)
+0:21          Compare Greater Than (temp 4-component vector of bool)
+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 Parameters: 
+0:?     Sequence
+0:32      move second child to first child (temp 4-component vector of float)
+0:32        Color: direct index for structure (temp 4-component vector of float)
+0:32          'psout' (temp structure{temp 4-component vector of float Color})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          0.000000
+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:?   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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: Bug1(vf4; (temp void)
+0:4    Function Parameters: 
+0:4      'a' (in 4-component vector of float)
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'v04' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:6      Sequence
+0:6        move second child to first child (temp float)
+0:6          'v01' (temp float)
+0:6          Constant:
+0:6            0.000000
+0:8      Sequence
+0:8        move second child to first child (temp 4-component vector of bool)
+0:8          'r00' (temp 4-component vector of bool)
+0:8          Equal (temp 4-component vector of bool)
+0:8            'a' (in 4-component vector of float)
+0:8            'v04' (temp 4-component vector of float)
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of bool)
+0:9          'r01' (temp 4-component vector of bool)
+0:9          NotEqual (temp 4-component vector of bool)
+0:9            'a' (in 4-component vector of float)
+0:9            'v04' (temp 4-component vector of float)
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of bool)
+0:10          'r02' (temp 4-component vector of bool)
+0:10          Compare Less Than (temp 4-component vector of bool)
+0:10            'a' (in 4-component vector of float)
+0:10            'v04' (temp 4-component vector of float)
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r03' (temp 4-component vector of bool)
+0:11          Compare Greater Than (temp 4-component vector of bool)
+0:11            'a' (in 4-component vector of float)
+0:11            'v04' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r10' (temp 4-component vector of bool)
+0:13          Equal (temp 4-component vector of bool)
+0:13            'a' (in 4-component vector of float)
+0:13            Construct vec4 (in 4-component vector of float)
+0:13              'v01' (temp float)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of bool)
+0:14          'r11' (temp 4-component vector of bool)
+0:14          NotEqual (temp 4-component vector of bool)
+0:14            'a' (in 4-component vector of float)
+0:14            Construct vec4 (in 4-component vector of float)
+0:14              'v01' (temp float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r12' (temp 4-component vector of bool)
+0:15          Compare Less Than (temp 4-component vector of bool)
+0:15            'a' (in 4-component vector of float)
+0:15            Construct vec4 (in 4-component vector of float)
+0:15              'v01' (temp float)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r13' (temp 4-component vector of bool)
+0:16          Compare Greater Than (temp 4-component vector of bool)
+0:16            'a' (in 4-component vector of float)
+0:16            Construct vec4 (in 4-component vector of float)
+0:16              'v01' (temp float)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          Equal (temp 4-component vector of bool)
+0:18            Construct vec4 (in 4-component vector of float)
+0:18              'v01' (temp float)
+0:18            'a' (in 4-component vector of float)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          NotEqual (temp 4-component vector of bool)
+0:19            Construct vec4 (in 4-component vector of float)
+0:19              'v01' (temp float)
+0:19            'a' (in 4-component vector of float)
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of bool)
+0:20          'r22' (temp 4-component vector of bool)
+0:20          Compare Less Than (temp 4-component vector of bool)
+0:20            Construct vec4 (in 4-component vector of float)
+0:20              'v01' (temp float)
+0:20            'a' (in 4-component vector of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4-component vector of bool)
+0:21          'r23' (temp 4-component vector of bool)
+0:21          Compare Greater Than (temp 4-component vector of bool)
+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 Parameters: 
+0:?     Sequence
+0:32      move second child to first child (temp 4-component vector of float)
+0:32        Color: direct index for structure (temp 4-component vector of float)
+0:32          'psout' (temp structure{temp 4-component vector of float Color})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          0.000000
+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:?   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})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 91
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 84
+                              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
+               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
+         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
+                              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
+              26:    7(fvec4) Load 10(a)
+              27:    7(fvec4) Load 13(v04)
+              28:   19(bvec4) FOrdNotEqual 26 27
+                              Store 25(r01) 28
+              30:    7(fvec4) Load 10(a)
+              31:    7(fvec4) Load 13(v04)
+              32:   19(bvec4) FOrdLessThan 30 31
+                              Store 29(r02) 32
+              34:    7(fvec4) Load 10(a)
+              35:    7(fvec4) Load 13(v04)
+              36:   19(bvec4) FOrdGreaterThan 34 35
+                              Store 33(r03) 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)
+              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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index f6c00fe6fa5e009c150b6769e55a9fea70f92a58..32edbda72d9a67b36d6972d217975240a78e88fd 100755
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -2,7 +2,7 @@ hlsl.conditional.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -119,7 +119,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
index 956e1bb039e6fac9e63d085de1129a496642ac88..e6ed6e13b8617f13bc6f6c5b8ae5ffce1ded4db2 100644
--- a/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/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( (global 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,8 +34,8 @@ gl_FragCoord origin is upper left
 0:15          1.000000
 0:15          1.000000
 0:15          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -53,7 +53,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (global 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,8 +85,8 @@ gl_FragCoord origin is upper left
 0:15          1.000000
 0:15          1.000000
 0:15          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
new file mode 100644
index 0000000000000000000000000000000000000000..71842afa478277eede9c3e3bfa535ac2d9703b1f
--- /dev/null
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -0,0 +1,25 @@
+hlsl.deadFunctionMissingBody.vert
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 13
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9
+                              Name 4  "main"
+                              Name 9  "@entryPointOutput"
+                              Decorate 9(@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
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(@entryPointOutput) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
index 6a44a2f987e0a0120de22b8ff109d1dfb8f3c4e6..0b532460214c33bb16c59e894872bb4ffac7e568 100755
--- a/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/Test/baseResults/hlsl.depthGreater.frag.out
@@ -3,7 +3,7 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_greater
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1; (global void)
+0:2  Function Definition: PixelShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
 0:2      'depth' (out float FragDepth)
 0:?     Sequence
@@ -22,7 +22,7 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_greater
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1; (global void)
+0:2  Function Definition: PixelShaderFunction(f1; (temp void)
 0:2    Function Parameters: 
 0:2      'depth' (out float FragDepth)
 0:?     Sequence
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index b1307ce244c39fab26e24c16e3f3bc58723f618d..ec664e106155a10c72ed561b9af5bcfd5c040b59 100755
--- a/Test/baseResults/hlsl.depthLess.frag.out
+++ b/Test/baseResults/hlsl.depthLess.frag.out
@@ -3,7 +3,7 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_less
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction( (global float FragDepth)
+0:2  Function Definition: PixelShaderFunction( (temp float FragDepth)
 0:2    Function Parameters: 
 0:?     Sequence
 0:3      Sequence
@@ -23,7 +23,7 @@ Shader version: 450
 gl_FragCoord origin is upper left
 using depth_less
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction( (global float FragDepth)
+0:2  Function Definition: PixelShaderFunction( (temp float FragDepth)
 0:2    Function Parameters: 
 0:?     Sequence
 0:3      Sequence
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index 9601c7d13fee634a8f03988917ce5f98a5d851b2..9b4f2c72e07722d5a269d4ae83ab7388fa66419b 100755
--- a/Test/baseResults/hlsl.discard.frag.out
+++ b/Test/baseResults/hlsl.discard.frag.out
@@ -2,7 +2,7 @@ hlsl.discard.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo(f1; (global void)
+0:2  Function Definition: foo(f1; (temp void)
 0:2    Function Parameters: 
 0:2      'f' (in float)
 0:?     Sequence
@@ -14,11 +14,11 @@ gl_FragCoord origin is upper left
 0:3            1.000000
 0:3        true case
 0:4        Branch: Kill
-0:8  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
-0:9      Function Call: foo(f1; (global void)
+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          Constant:
@@ -49,7 +49,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo(f1; (global void)
+0:2  Function Definition: foo(f1; (temp void)
 0:2    Function Parameters: 
 0:2      'f' (in float)
 0:?     Sequence
@@ -61,11 +61,11 @@ gl_FragCoord origin is upper left
 0:3            1.000000
 0:3        true case
 0:4        Branch: Kill
-0:8  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
-0:9      Function Call: foo(f1; (global void)
+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          Constant:
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index 019f43d711fff8cf177e34822930c0d4c4f4ed1b..c060cdc7e37ca30a437fb5db1147066d3f2f0600 100755
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -2,7 +2,7 @@ hlsl.doLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -18,9 +18,10 @@ gl_FragCoord origin is upper left
 0:4        No loop body
 0:5      Loop with condition not tested first
 0:5        Loop Condition
-0:5        Compare Equal (temp 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        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        Loop Body
 0:5        Sequence
 0:5          move second child to first child (temp 4-component vector of float)
@@ -38,7 +39,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -54,9 +55,10 @@ gl_FragCoord origin is upper left
 0:4        No loop body
 0:5      Loop with condition not tested first
 0:5        Loop Condition
-0:5        Compare Equal (temp 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        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        Loop Body
 0:5        Sequence
 0:5          move second child to first child (temp 4-component vector of float)
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index 5baea644a98ff0f7dc9933413380b6b6f8dd66fe..04e3935d1fa07b233c27da96882b97f0a87166a2 100755
--- a/Test/baseResults/hlsl.entry-in.frag.out
+++ b/Test/baseResults/hlsl.entry-in.frag.out
@@ -2,7 +2,7 @@ hlsl.entry-in.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (global float)
+0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:8    Function Parameters: 
 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
@@ -22,11 +22,11 @@ gl_FragCoord origin is upper left
 0:9                1 (const int)
 0:9            Constant:
 0:9              0 (const int)
-0:13  Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 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, temp 2-component vector of int i2})
 0:?     Sequence
-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})
@@ -48,33 +48,33 @@ gl_FragCoord origin is upper left
 0:16      Sequence
 0:16        move second child to first child (temp float)
 0:16          'ret1' (temp float)
-0:16          Function Call: fun(struct-InParam-vf2-vf4-vi21; (global float)
+0:16          Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:16            '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:17      Sequence
 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; (global float)
-0:?             Comma (temp float)
-0:?               Sequence
-0:?                 move second child to first child (temp 2-component vector of float)
-0:?                   v: direct index for structure (temp 2-component vector of float)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       0 (const int)
+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, 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, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      0 (const int)
 0:?                   'v' (layout(location=0 ) in 2-component vector of float)
-0:?                 move second child to first child (temp 4-component vector of float)
-0:?                   fragCoord: direct index for structure (temp 4-component vector of float)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       1 (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)
+0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      1 (const int)
 0:?                   'fragCoord' (in 4-component vector of float FragCoord)
-0:?                 move second child to first child (temp 2-component vector of int)
-0:?                   i2: direct index for structure (temp 2-component vector of int)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       2 (const int)
+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, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      2 (const int)
 0:?                   'i2' (layout(location=1 ) in 2-component vector of int)
-0:?               'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:17              'aggShadow' (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      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)
@@ -100,7 +100,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (global float)
+0:8  Function Definition: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:8    Function Parameters: 
 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
@@ -120,11 +120,11 @@ gl_FragCoord origin is upper left
 0:9                1 (const int)
 0:9            Constant:
 0:9              0 (const int)
-0:13  Function Definition: PixelShaderFunction(struct-InParam-vf2-vf4-vi21; (global 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, temp 2-component vector of int i2})
 0:?     Sequence
-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})
@@ -146,33 +146,33 @@ gl_FragCoord origin is upper left
 0:16      Sequence
 0:16        move second child to first child (temp float)
 0:16          'ret1' (temp float)
-0:16          Function Call: fun(struct-InParam-vf2-vf4-vi21; (global float)
+0:16          Function Call: fun(struct-InParam-vf2-vf4-vi21; (temp float)
 0:16            '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:17      Sequence
 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; (global float)
-0:?             Comma (temp float)
-0:?               Sequence
-0:?                 move second child to first child (temp 2-component vector of float)
-0:?                   v: direct index for structure (temp 2-component vector of float)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       0 (const int)
+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, 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, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      0 (const int)
 0:?                   'v' (layout(location=0 ) in 2-component vector of float)
-0:?                 move second child to first child (temp 4-component vector of float)
-0:?                   fragCoord: direct index for structure (temp 4-component vector of float)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       1 (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)
+0:17                    'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      1 (const int)
 0:?                   'fragCoord' (in 4-component vector of float FragCoord)
-0:?                 move second child to first child (temp 2-component vector of int)
-0:?                   i2: direct index for structure (temp 2-component vector of int)
-0:?                     'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
-0:?                     Constant:
-0:?                       2 (const int)
+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, temp 2-component vector of int i2})
+0:17                    Constant:
+0:17                      2 (const int)
 0:?                   'i2' (layout(location=1 ) in 2-component vector of int)
-0:?               'aggShadow' (temp structure{temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
+0:17              'aggShadow' (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      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)
@@ -256,7 +256,7 @@ gl_FragCoord origin is upper left
        48(param):     12(ptr) Variable Function
         51(ret2):     20(ptr) Variable Function
    52(aggShadow):     12(ptr) Variable Function
-       59(param):     20(ptr) Variable Function
+       59(param):     12(ptr) Variable Function
               33:    7(fvec2) Load 32(v)
               35:     34(ptr) AccessChain 30(local) 17
                               Store 35 33
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
index 81926dd1c00f894060a7bde86b535a743588fc54..86fde14c632801b94acfd0c4c4c63c8301be7b66 100755
--- a/Test/baseResults/hlsl.entry-out.frag.out
+++ b/Test/baseResults/hlsl.entry-out.frag.out
@@ -2,60 +2,83 @@ hlsl.entry-out.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (global 4-component vector of float)
+0:7  Function Definition: fun(struct-OutParam-vf2-vi21; (temp void)
 0:7    Function Parameters: 
-0:7      'input' (layout(location=0 ) in 4-component vector of float)
-0:7      'out1' (layout(location=1 ) out 4-component vector of float)
-0:7      'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:7      'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:7      'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:?     Sequence
-0:8      move second child to first child (temp 4-component vector of float)
-0:8        'out1' (layout(location=1 ) out 4-component vector of float)
-0:8        'input' (layout(location=0 ) in 4-component vector of float)
-0:9      move second child to first child (temp 2-component vector of float)
-0:?         'v' (layout(location=2 ) out 2-component vector of float)
+0:8      move second child to first child (temp 2-component vector of float)
+0:8        v: direct index for structure (temp 2-component vector of float)
+0:8          'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:8          Constant:
+0:8            0 (const int)
+0:8        Constant:
+0:8          0.400000
+0:8          0.400000
+0:9      move second child to first child (temp 2-component vector of int)
+0:9        i: direct index for structure (temp 2-component vector of int)
+0:9          'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:9          Constant:
+0:9            1 (const int)
 0:9        Constant:
-0:9          2.000000
-0:9          2.000000
-0:10      move second child to first child (temp 2-component vector of int)
+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 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      '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: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        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:10        Constant:
-0:10          3 (const int)
-0:10          3 (const int)
-0:12      move second child to first child (temp 2-component vector of float)
-0:12        v: direct index for structure (temp 2-component vector of float)
-0:12          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:12          Constant:
-0:12            0 (const int)
-0:12        Constant:
-0:12          12.000000
-0:12          12.000000
-0:13      move second child to first child (temp 2-component vector of int)
-0:13        i: direct index for structure (temp 2-component vector of int)
-0:13          'local' (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        Constant:
-0:13          13 (const int)
-0:13          13 (const int)
-0:?       Sequence
-0:14        move second child to first child (temp 2-component vector of float)
-0:?           'v' (layout(location=4 ) out 2-component vector of float)
-0:14          v: direct index for structure (temp 2-component vector of float)
-0:14            'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:14            Constant:
-0:14              0 (const int)
-0:14        move second child to first child (temp 2-component vector of int)
-0:?           'i' (layout(location=5 ) out 2-component vector of int)
-0:14          i: direct index for structure (temp 2-component vector of int)
-0:14            'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:14            Constant:
-0:14              1 (const int)
-0:16      Sequence
-0:16        move second child to first child (temp 4-component vector of float)
+0:16        Constant:
+0:16          3 (const int)
+0:16          3 (const int)
+0:18      move second child to first child (temp 2-component vector of float)
+0:18        v: direct index for structure (temp 2-component vector of float)
+0:18          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:18          Constant:
+0:18            0 (const int)
+0:18        Constant:
+0:18          12.000000
+0:18          12.000000
+0:19      move second child to first child (temp 2-component vector of int)
+0:19        i: direct index for structure (temp 2-component vector of int)
+0:19          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:19          Constant:
+0:19            1 (const int)
+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:16          'out1' (layout(location=1 ) out 4-component vector of float)
-0:16        Branch: Return
+0:22          'out1' (layout(location=1 ) out 4-component vector of float)
+0:22        Branch: Return
 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)
@@ -72,60 +95,83 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;struct-OutParam-vf2-vi21;struct-OutParam-vf2-vi21; (global 4-component vector of float)
+0:7  Function Definition: fun(struct-OutParam-vf2-vi21; (temp void)
 0:7    Function Parameters: 
-0:7      'input' (layout(location=0 ) in 4-component vector of float)
-0:7      'out1' (layout(location=1 ) out 4-component vector of float)
-0:7      'out2' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:7      'out3' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:7      'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
 0:?     Sequence
-0:8      move second child to first child (temp 4-component vector of float)
-0:8        'out1' (layout(location=1 ) out 4-component vector of float)
-0:8        'input' (layout(location=0 ) in 4-component vector of float)
-0:9      move second child to first child (temp 2-component vector of float)
-0:?         'v' (layout(location=2 ) out 2-component vector of float)
+0:8      move second child to first child (temp 2-component vector of float)
+0:8        v: direct index for structure (temp 2-component vector of float)
+0:8          'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:8          Constant:
+0:8            0 (const int)
+0:8        Constant:
+0:8          0.400000
+0:8          0.400000
+0:9      move second child to first child (temp 2-component vector of int)
+0:9        i: direct index for structure (temp 2-component vector of int)
+0:9          'op' (out structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:9          Constant:
+0:9            1 (const int)
 0:9        Constant:
-0:9          2.000000
-0:9          2.000000
-0:10      move second child to first child (temp 2-component vector of int)
+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 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      '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: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        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:10        Constant:
-0:10          3 (const int)
-0:10          3 (const int)
-0:12      move second child to first child (temp 2-component vector of float)
-0:12        v: direct index for structure (temp 2-component vector of float)
-0:12          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:12          Constant:
-0:12            0 (const int)
-0:12        Constant:
-0:12          12.000000
-0:12          12.000000
-0:13      move second child to first child (temp 2-component vector of int)
-0:13        i: direct index for structure (temp 2-component vector of int)
-0:13          'local' (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        Constant:
-0:13          13 (const int)
-0:13          13 (const int)
-0:?       Sequence
-0:14        move second child to first child (temp 2-component vector of float)
-0:?           'v' (layout(location=4 ) out 2-component vector of float)
-0:14          v: direct index for structure (temp 2-component vector of float)
-0:14            'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:14            Constant:
-0:14              0 (const int)
-0:14        move second child to first child (temp 2-component vector of int)
-0:?           'i' (layout(location=5 ) out 2-component vector of int)
-0:14          i: direct index for structure (temp 2-component vector of int)
-0:14            'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
-0:14            Constant:
-0:14              1 (const int)
-0:16      Sequence
-0:16        move second child to first child (temp 4-component vector of float)
+0:16        Constant:
+0:16          3 (const int)
+0:16          3 (const int)
+0:18      move second child to first child (temp 2-component vector of float)
+0:18        v: direct index for structure (temp 2-component vector of float)
+0:18          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:18          Constant:
+0:18            0 (const int)
+0:18        Constant:
+0:18          12.000000
+0:18          12.000000
+0:19      move second child to first child (temp 2-component vector of int)
+0:19        i: direct index for structure (temp 2-component vector of int)
+0:19          'local' (temp structure{temp 2-component vector of float v, temp 2-component vector of int i})
+0:19          Constant:
+0:19            1 (const int)
+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:16          'out1' (layout(location=1 ) out 4-component vector of float)
-0:16        Branch: Return
+0:22          'out1' (layout(location=1 ) out 4-component vector of float)
+0:22        Branch: Return
 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)
@@ -137,82 +183,105 @@ 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 60
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 9 11 15 21 37 40 43
+                              EntryPoint Fragment 4  "PixelShaderFunction" 28 30 33 37 51 54 57
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
-                              Name 9  "out1"
-                              Name 11  "input"
-                              Name 15  "v"
-                              Name 21  "i"
-                              Name 24  "OutParam"
-                              MemberName 24(OutParam) 0  "v"
-                              MemberName 24(OutParam) 1  "i"
-                              Name 26  "local"
-                              Name 37  "v"
-                              Name 40  "i"
-                              Name 43  "@entryPointOutput"
-                              Decorate 9(out1) Location 1
-                              Decorate 11(input) Location 0
-                              Decorate 15(v) Location 2
-                              Decorate 21(i) Location 3
-                              Decorate 37(v) Location 4
-                              Decorate 40(i) Location 5
-                              Decorate 43(@entryPointOutput) Location 0
+                              Name 10  "OutParam"
+                              MemberName 10(OutParam) 0  "v"
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Output 7(fvec4)
-         9(out1):      8(ptr) Variable Output
-              10:             TypePointer Input 7(fvec4)
-       11(input):     10(ptr) Variable Input
-              13:             TypeVector 6(float) 2
-              14:             TypePointer Output 13(fvec2)
-           15(v):     14(ptr) Variable Output
-              16:    6(float) Constant 1073741824
-              17:   13(fvec2) ConstantComposite 16 16
-              18:             TypeInt 32 1
-              19:             TypeVector 18(int) 2
-              20:             TypePointer Output 19(ivec2)
-           21(i):     20(ptr) Variable Output
-              22:     18(int) Constant 3
-              23:   19(ivec2) ConstantComposite 22 22
-    24(OutParam):             TypeStruct 13(fvec2) 19(ivec2)
-              25:             TypePointer Function 24(OutParam)
-              27:     18(int) Constant 0
-              28:    6(float) Constant 1094713344
-              29:   13(fvec2) ConstantComposite 28 28
-              30:             TypePointer Function 13(fvec2)
-              32:     18(int) Constant 1
-              33:     18(int) Constant 13
-              34:   19(ivec2) ConstantComposite 33 33
-              35:             TypePointer Function 19(ivec2)
-           37(v):     14(ptr) Variable Output
-           40(i):     20(ptr) Variable Output
-43(@entryPointOutput):      8(ptr) Variable Output
+               7:             TypeVector 6(float) 2
+               8:             TypeInt 32 1
+               9:             TypeVector 8(int) 2
+    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
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       26(local):     25(ptr) Variable Function
-              12:    7(fvec4) Load 11(input)
-                              Store 9(out1) 12
-                              Store 15(v) 17
-                              Store 21(i) 23
-              31:     30(ptr) AccessChain 26(local) 27
-                              Store 31 29
-              36:     35(ptr) AccessChain 26(local) 32
-                              Store 36 34
-              38:     30(ptr) AccessChain 26(local) 27
-              39:   13(fvec2) Load 38
-                              Store 37(v) 39
-              41:     35(ptr) AccessChain 26(local) 32
-              42:   19(ivec2) Load 41
-                              Store 40(i) 42
-              44:    7(fvec4) Load 9(out1)
-                              Store 43(@entryPointOutput) 44
+       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
+                              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..b24cb7a2571b51bfd758579c57b60430bd40f22d
--- /dev/null
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -0,0 +1,119 @@
+hlsl.entry.rename.frag
+Shader version: 450
+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 Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        Color: direct index for structure (temp 4-component vector of float)
+0:13          'psout' (temp structure{temp 4-component vector of float Color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Constant:
+0:13          0.000000
+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:?   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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+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 Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        Color: direct index for structure (temp 4-component vector of float)
+0:13          'psout' (temp structure{temp 4-component vector of float Color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Constant:
+0:13          0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main_in_spv" 20
+                              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
+               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
+  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
+                              Return
+                              FunctionEnd
+6(not_the_entry_point():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..39fbf0ef87f08bddf1d62266bbc4ed3650dbc366
--- /dev/null
+++ b/Test/baseResults/hlsl.flatten.return.frag.out
@@ -0,0 +1,187 @@
+hlsl.flatten.return.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: 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:11    Function Parameters: 
+0:?     Sequence
+0:12      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           1.000000
+0:?           1.000000
+0:?           1.000000
+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 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:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'other_struct_member1' (layout(location=1 ) out float)
+0:?     'other_struct_member2' (layout(location=2 ) out float)
+0:?     'other_struct_member3' (layout(location=3 ) out float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: 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:11    Function Parameters: 
+0:?     Sequence
+0:12      Branch: Return with expression
+0:?         Constant:
+0:?           1.000000
+0:?           1.000000
+0:?           1.000000
+0:?           1.000000
+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 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:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'other_struct_member1' (layout(location=1 ) out float)
+0:?     'other_struct_member2' (layout(location=2 ) out float)
+0:?     'other_struct_member3' (layout(location=3 ) out float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 45
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 24 31 36 40
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "color"
+                              MemberName 8(PS_OUTPUT) 1  "other_struct_member1"
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
+      10(Func1():8(PS_OUTPUT) Function None 9
+              11:             Label
+                              ReturnValue 17
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 313be0b541a1f2dcd352e1dabd7d852613b23903..641febd7bbb6448025778dd6a17520b1f525e3ba 100755
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -12,7 +12,7 @@ gl_FragCoord origin is upper left
 0:2      'scalar' (global float)
 0:2      Constant:
 0:2        2.000000
-0:5  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
+0:5  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
 0:5    Function Parameters: 
 0:5      'inFloat1' (in 1-component vector of float)
 0:5      'inScalar' (in float)
@@ -32,6 +32,7 @@ gl_FragCoord origin is upper left
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -46,7 +47,7 @@ gl_FragCoord origin is upper left
 0:2      'scalar' (global float)
 0:2      Constant:
 0:2        2.000000
-0:5  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
+0:5  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
 0:5    Function Parameters: 
 0:5      'inFloat1' (in 1-component vector of float)
 0:5      'inScalar' (in float)
@@ -92,6 +93,7 @@ gl_FragCoord origin is upper left
                5:             Label
                               Store 14(f1) 15
                               Store 16(scalar) 17
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 85b3c9b4a0acb88fc047463bfb3e58ff212d1a0d..27c9a5c6cf06446f4ff07e398d4fa60777486130 100755
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -5,62 +5,45 @@ WARNING: 0:6: 'register' : ignoring shader_profile
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Sequence
-0:1    move second child to first child (temp 4-component vector of float)
-0:1      'AmbientColor' (global 4-component vector of float)
-0:?       Constant:
-0:?         1.000000
-0:?         0.500000
-0:?         0.000000
-0:?         1.000000
-0:9  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:9  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
 0:9    Function Parameters: 
 0:9      'input' (in 4-component vector of float)
 0:?     Sequence
 0:10      Branch: Return with expression
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
-0:10          'AmbientColor' (global 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            Constant:
+0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'AmbientColor' (global 4-component vector of float)
-0:?     'ff1' (global bool Face)
-0:?     'ff2' (layout(offset=4 ) global 4-component vector of float)
-0:?     'ff3' (layout(binding=0 offset=4 ) global 4-component vector of float)
-0:?     'ff4' (layout(binding=1 offset=4 ) global 4-component vector of float)
+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})
 
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Sequence
-0:1    move second child to first child (temp 4-component vector of float)
-0:1      'AmbientColor' (global 4-component vector of float)
-0:?       Constant:
-0:?         1.000000
-0:?         0.500000
-0:?         0.000000
-0:?         1.000000
-0:9  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:9  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
 0:9    Function Parameters: 
 0:9      'input' (in 4-component vector of float)
 0:?     Sequence
 0:10      Branch: Return with expression
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
-0:10          'AmbientColor' (global 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            Constant:
+0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'AmbientColor' (global 4-component vector of float)
-0:?     'ff1' (global bool Face)
-0:?     'ff2' (layout(offset=4 ) global 4-component vector of float)
-0:?     'ff3' (layout(binding=0 offset=4 ) global 4-component vector of float)
-0:?     'ff4' (layout(binding=1 offset=4 ) global 4-component vector of float)
+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})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 30
+// Id's are bound by 26
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -70,44 +53,44 @@ gl_FragCoord origin is upper left
                               Name 4  "PixelShaderFunction"
                               Name 11  "ShaderFunction(vf4;"
                               Name 10  "input"
-                              Name 14  "AmbientColor"
-                              Name 26  "ff1"
-                              Name 27  "ff2"
-                              Name 28  "ff3"
-                              Name 29  "ff4"
-                              Decorate 26(ff1) BuiltIn FrontFacing
-                              Decorate 27(ff2) Offset 4
-                              Decorate 28(ff3) Offset 4
-                              Decorate 28(ff3) Binding 0
-                              Decorate 29(ff4) Offset 4
-                              Decorate 29(ff4) Binding 1
+                              Name 15  "$Global"
+                              MemberName 15($Global) 0  "AmbientColor"
+                              MemberName 15($Global) 1  "ff1"
+                              MemberName 15($Global) 2  "ff2"
+                              MemberName 15($Global) 3  "ff3"
+                              MemberName 15($Global) 4  "ff4"
+                              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
+                              Decorate 15($Global) Block
+                              Decorate 17 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              13:             TypePointer Private 7(fvec4)
-14(AmbientColor):     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
-              24:             TypeBool
-              25:             TypePointer Private 24(bool)
-         26(ff1):     25(ptr) Variable Private
-         27(ff2):     13(ptr) Variable Private
-         28(ff3):     13(ptr) Variable Private
-         29(ff4):     13(ptr) Variable Private
+              14:             TypeInt 32 0
+     15($Global):             TypeStruct 7(fvec4) 14(int) 6(float) 7(fvec4) 7(fvec4)
+              16:             TypePointer Uniform 15($Global)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:             TypePointer Uniform 7(fvec4)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              Store 14(AmbientColor) 18
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-              19:    7(fvec4) Load 10(input)
-              20:    7(fvec4) Load 14(AmbientColor)
-              21:    7(fvec4) FMul 19 20
-                              ReturnValue 21
+              13:    7(fvec4) Load 10(input)
+              21:     20(ptr) AccessChain 17 19
+              22:    7(fvec4) Load 21
+              23:    7(fvec4) FMul 13 22
+                              ReturnValue 23
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index ba8e32e7d26a90b9325454de69098e64aca0ede9..85b8fb272b47715af25f4ebef4d41ee188073262 100755
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -2,7 +2,7 @@ hlsl.forLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -19,16 +19,18 @@ gl_FragCoord origin is upper left
 0:?       Sequence
 0:5        Loop with condition tested first
 0:5          Loop Condition
-0:5          Compare Not Equal (temp 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          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          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
-0:6          Compare Not Equal (temp 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          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          Loop Body
 0:?           Sequence
 0:6            Sequence
@@ -42,9 +44,10 @@ gl_FragCoord origin is upper left
 0:7          'input' (layout(location=0 ) in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
-0:7          Compare Not Equal (temp 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          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          Loop Body
 0:?           Sequence
 0:7            Sequence
@@ -124,7 +127,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -141,16 +144,18 @@ gl_FragCoord origin is upper left
 0:?       Sequence
 0:5        Loop with condition tested first
 0:5          Loop Condition
-0:5          Compare Not Equal (temp 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          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          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
-0:6          Compare Not Equal (temp 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          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          Loop Body
 0:?           Sequence
 0:6            Sequence
@@ -164,9 +169,10 @@ gl_FragCoord origin is upper left
 0:7          'input' (layout(location=0 ) in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
-0:7          Compare Not Equal (temp 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          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          Loop Body
 0:?           Sequence
 0:7            Sequence
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index d2545cca3c97d2afe05e439f38dc9b899d50c31b..ee550d165cba3d0d150ad64a436fa01405c03d20 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.gather.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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
 0:29        move second child to first child (temp 4-component vector of float)
 0:29          'txval20' (temp 4-component vector of float)
-0:29          textureGather (global 4-component vector of float)
+0:29          textureGather (temp 4-component vector of float)
 0:29            Construct combined texture-sampler (temp sampler2DArray)
 0:29              'g_tTex2df4a' (uniform texture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -19,7 +19,7 @@ gl_FragCoord origin is upper left
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of int)
 0:30          'txval21' (temp 4-component vector of int)
-0:30          textureGather (global 4-component vector of int)
+0:30          textureGather (temp 4-component vector of int)
 0:30            Construct combined texture-sampler (temp isampler2DArray)
 0:30              'g_tTex2di4a' (uniform itexture2DArray)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -30,7 +30,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of uint)
 0:31          'txval22' (temp 4-component vector of uint)
-0:31          textureGather (global 4-component vector of uint)
+0:31          textureGather (temp 4-component vector of uint)
 0:31            Construct combined texture-sampler (temp usampler2DArray)
 0:31              'g_tTex2du4a' (uniform utexture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGather (global 4-component vector of float)
+0:35          textureGather (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -53,7 +53,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGather (global 4-component vector of int)
+0:36          textureGather (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGather (global 4-component vector of uint)
+0:37          textureGather (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -91,8 +91,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -107,6 +107,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -118,8 +120,6 @@ 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,13 +128,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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
 0:29        move second child to first child (temp 4-component vector of float)
 0:29          'txval20' (temp 4-component vector of float)
-0:29          textureGather (global 4-component vector of float)
+0:29          textureGather (temp 4-component vector of float)
 0:29            Construct combined texture-sampler (temp sampler2DArray)
 0:29              'g_tTex2df4a' (uniform texture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -145,7 +145,7 @@ gl_FragCoord origin is upper left
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of int)
 0:30          'txval21' (temp 4-component vector of int)
-0:30          textureGather (global 4-component vector of int)
+0:30          textureGather (temp 4-component vector of int)
 0:30            Construct combined texture-sampler (temp isampler2DArray)
 0:30              'g_tTex2di4a' (uniform itexture2DArray)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -156,7 +156,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of uint)
 0:31          'txval22' (temp 4-component vector of uint)
-0:31          textureGather (global 4-component vector of uint)
+0:31          textureGather (temp 4-component vector of uint)
 0:31            Construct combined texture-sampler (temp usampler2DArray)
 0:31              'g_tTex2du4a' (uniform utexture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -167,7 +167,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGather (global 4-component vector of float)
+0:35          textureGather (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -179,7 +179,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGather (global 4-component vector of int)
+0:36          textureGather (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -191,7 +191,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGather (global 4-component vector of uint)
+0:37          textureGather (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -217,8 +217,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -233,6 +233,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -244,8 +246,6 @@ 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
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 52648f7032d713730a976cdd89800372f52f012e..86e106ca05c0ad306db643249613f59df3593fd5 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.gather.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (global 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
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGather (global 4-component vector of float)
+0:34          textureGather (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -18,7 +18,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGather (global 4-component vector of int)
+0:35          textureGather (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -28,7 +28,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGather (global 4-component vector of uint)
+0:36          textureGather (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval40' (temp 4-component vector of float)
-0:40          textureGather (global 4-component vector of float)
+0:40          textureGather (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp samplerCube)
 0:40              'g_tTexcdf4' (uniform textureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -49,7 +49,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval41' (temp 4-component vector of int)
-0:41          textureGather (global 4-component vector of int)
+0:41          textureGather (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isamplerCube)
 0:41              'g_tTexcdi4' (uniform itextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -60,7 +60,7 @@ gl_FragCoord origin is upper left
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval42' (temp 4-component vector of uint)
-0:42          textureGather (global 4-component vector of uint)
+0:42          textureGather (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usamplerCube)
 0:42              'g_tTexcdu4' (uniform utextureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -85,8 +85,8 @@ gl_FragCoord origin is upper left
 0:45            1 (const int)
 0:45        Constant:
 0:45          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -101,6 +101,8 @@ gl_FragCoord origin is upper left
 0:47                1 (const int)
 0:47        Branch: Return
 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)
@@ -116,8 +118,6 @@ 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,13 +126,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (global 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
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGather (global 4-component vector of float)
+0:34          textureGather (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -142,7 +142,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGather (global 4-component vector of int)
+0:35          textureGather (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -152,7 +152,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGather (global 4-component vector of uint)
+0:36          textureGather (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -162,7 +162,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval40' (temp 4-component vector of float)
-0:40          textureGather (global 4-component vector of float)
+0:40          textureGather (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp samplerCube)
 0:40              'g_tTexcdf4' (uniform textureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -173,7 +173,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval41' (temp 4-component vector of int)
-0:41          textureGather (global 4-component vector of int)
+0:41          textureGather (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isamplerCube)
 0:41              'g_tTexcdi4' (uniform itextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -184,7 +184,7 @@ gl_FragCoord origin is upper left
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval42' (temp 4-component vector of uint)
-0:42          textureGather (global 4-component vector of uint)
+0:42          textureGather (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usamplerCube)
 0:42              'g_tTexcdu4' (uniform utextureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -209,8 +209,8 @@ gl_FragCoord origin is upper left
 0:45            1 (const int)
 0:45        Constant:
 0:45          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -225,6 +225,8 @@ gl_FragCoord origin is upper left
 0:47                1 (const int)
 0:47        Branch: Return
 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)
@@ -240,8 +242,6 @@ 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
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index 1f01fc3e68f386723de9e99c6ffac680237e6a72..a8936753d30f0bd395a4c9964ff55b59551db904 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -1,13 +1,13 @@
 hlsl.gather.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:28  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:28  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -17,7 +17,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -27,7 +27,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -37,7 +37,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval40' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp samplerCube)
 0:39              'g_tTexcdf4' (uniform textureCube)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -48,7 +48,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval41' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isamplerCube)
 0:40              'g_tTexcdi4' (uniform itextureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -59,7 +59,7 @@ Shader version: 450
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval42' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usamplerCube)
 0:41              'g_tTexcdu4' (uniform utextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,8 +77,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -87,6 +87,7 @@ Shader version: 450
 0:45                0 (const int)
 0:45        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -102,7 +103,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -110,13 +110,13 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:28  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:28  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:28    Function Parameters: 
 0:?     Sequence
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -126,7 +126,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -136,7 +136,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -146,7 +146,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval40' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp samplerCube)
 0:39              'g_tTexcdf4' (uniform textureCube)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -157,7 +157,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval41' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isamplerCube)
 0:40              'g_tTexcdi4' (uniform itextureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -168,7 +168,7 @@ Shader version: 450
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval42' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usamplerCube)
 0:41              'g_tTexcdu4' (uniform utextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -186,8 +186,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -196,6 +196,7 @@ Shader version: 450
 0:45                0 (const int)
 0:45        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -211,7 +212,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index ac317915af3e715e1e26bca1b9f37b3aa0ecdd4b..5b48bf323bd0c633216920d19d933e52a62c6f55 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.gather.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGatherOffset (global 4-component vector of float)
+0:33          textureGatherOffset (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGatherOffset (global 4-component vector of int)
+0:34          textureGatherOffset (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGatherOffset (global 4-component vector of uint)
+0:35          textureGatherOffset (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -61,8 +61,8 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -77,6 +77,8 @@ gl_FragCoord origin is upper left
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -91,8 +93,6 @@ 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,13 +101,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGatherOffset (global 4-component vector of float)
+0:33          textureGatherOffset (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -120,7 +120,7 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGatherOffset (global 4-component vector of int)
+0:34          textureGatherOffset (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -133,7 +133,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGatherOffset (global 4-component vector of uint)
+0:35          textureGatherOffset (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -160,8 +160,8 @@ gl_FragCoord origin is upper left
 0:41            1 (const int)
 0:41        Constant:
 0:41          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -176,6 +176,8 @@ gl_FragCoord origin is upper left
 0:43                1 (const int)
 0:43        Branch: Return
 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)
@@ -190,8 +192,6 @@ 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
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index bf8f382277e1a3a47dc4591cede1a252246d8c8e..a7589cd9b06ff3d4505537d5326cb88fb1c0ce4b 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.gather.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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
 0:25        move second child to first child (temp 4-component vector of float)
 0:25          'txval20' (temp 4-component vector of float)
-0:25          textureGatherOffset (global 4-component vector of float)
+0:25          textureGatherOffset (temp 4-component vector of float)
 0:25            Construct combined texture-sampler (temp sampler2DArray)
 0:25              'g_tTex2df4' (uniform texture2DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
 0:26      Sequence
 0:26        move second child to first child (temp 4-component vector of int)
 0:26          'txval21' (temp 4-component vector of int)
-0:26          textureGatherOffset (global 4-component vector of int)
+0:26          textureGatherOffset (temp 4-component vector of int)
 0:26            Construct combined texture-sampler (temp isampler2DArray)
 0:26              'g_tTex2di4' (uniform itexture2DArray)
 0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of uint)
 0:27          'txval22' (temp 4-component vector of uint)
-0:27          textureGatherOffset (global 4-component vector of uint)
+0:27          textureGatherOffset (temp 4-component vector of uint)
 0:27            Construct combined texture-sampler (temp usampler2DArray)
 0:27              'g_tTex2du4' (uniform utexture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -64,8 +64,8 @@ gl_FragCoord origin is upper left
 0:33            1 (const int)
 0:33        Constant:
 0:33          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -80,6 +80,8 @@ gl_FragCoord origin is upper left
 0:35                1 (const int)
 0:35        Branch: Return
 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)
@@ -88,8 +90,6 @@ 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,13 +98,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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
 0:25        move second child to first child (temp 4-component vector of float)
 0:25          'txval20' (temp 4-component vector of float)
-0:25          textureGatherOffset (global 4-component vector of float)
+0:25          textureGatherOffset (temp 4-component vector of float)
 0:25            Construct combined texture-sampler (temp sampler2DArray)
 0:25              'g_tTex2df4' (uniform texture2DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -118,7 +118,7 @@ gl_FragCoord origin is upper left
 0:26      Sequence
 0:26        move second child to first child (temp 4-component vector of int)
 0:26          'txval21' (temp 4-component vector of int)
-0:26          textureGatherOffset (global 4-component vector of int)
+0:26          textureGatherOffset (temp 4-component vector of int)
 0:26            Construct combined texture-sampler (temp isampler2DArray)
 0:26              'g_tTex2di4' (uniform itexture2DArray)
 0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -132,7 +132,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of uint)
 0:27          'txval22' (temp 4-component vector of uint)
-0:27          textureGatherOffset (global 4-component vector of uint)
+0:27          textureGatherOffset (temp 4-component vector of uint)
 0:27            Construct combined texture-sampler (temp usampler2DArray)
 0:27              'g_tTex2du4' (uniform utexture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -160,8 +160,8 @@ gl_FragCoord origin is upper left
 0:33            1 (const int)
 0:33        Constant:
 0:33          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -176,6 +176,8 @@ gl_FragCoord origin is upper left
 0:35                1 (const int)
 0:35        Branch: Return
 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)
@@ -184,8 +186,6 @@ 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
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 026fd1b74509a3b51653d504c3fa1aff19f222fa..b04a857336fbdfd6c82b623800c4732825293daa 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -2,247 +2,319 @@ hlsl.gatherRGBA.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval00' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2DArray)
 0:33              'g_tTex2df4a' (uniform texture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:33            'c3' (uniform 3-component vector of float)
+0:33            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:33              '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})
+0:33              Constant:
+0:33                2 (const uint)
 0:33            Constant:
 0:33              0 (const int)
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval01' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2DArray)
 0:34              'g_tTex2di4a' (uniform itexture2DArray)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:34            'c3' (uniform 3-component vector of float)
+0:34            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:34              '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})
+0:34              Constant:
+0:34                2 (const uint)
 0:34            Constant:
 0:34              0 (const int)
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval02' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2DArray)
 0:35              'g_tTex2du4a' (uniform utexture2DArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:35            'c3' (uniform 3-component vector of float)
+0:35            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:35              '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})
+0:35              Constant:
+0:35                2 (const uint)
 0:35            Constant:
 0:35              0 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of float)
 0:37          'txval10' (temp 4-component vector of float)
-0:37          textureGather (global 4-component vector of float)
+0:37          textureGather (temp 4-component vector of float)
 0:37            Construct combined texture-sampler (temp sampler2DArray)
 0:37              'g_tTex2df4a' (uniform texture2DArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:37            'c3' (uniform 3-component vector of float)
+0:37            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:37              '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})
+0:37              Constant:
+0:37                2 (const uint)
 0:37            Constant:
 0:37              1 (const int)
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of int)
 0:38          'txval11' (temp 4-component vector of int)
-0:38          textureGather (global 4-component vector of int)
+0:38          textureGather (temp 4-component vector of int)
 0:38            Construct combined texture-sampler (temp isampler2DArray)
 0:38              'g_tTex2di4a' (uniform itexture2DArray)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:38            'c3' (uniform 3-component vector of float)
+0:38            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:38              '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})
+0:38              Constant:
+0:38                2 (const uint)
 0:38            Constant:
 0:38              1 (const int)
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of uint)
 0:39          'txval12' (temp 4-component vector of uint)
-0:39          textureGather (global 4-component vector of uint)
+0:39          textureGather (temp 4-component vector of uint)
 0:39            Construct combined texture-sampler (temp usampler2DArray)
 0:39              'g_tTex2du4a' (uniform utexture2DArray)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:39            'c3' (uniform 3-component vector of float)
+0:39            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:39              '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})
+0:39              Constant:
+0:39                2 (const uint)
 0:39            Constant:
 0:39              1 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of float)
 0:41          'txval20' (temp 4-component vector of float)
-0:41          textureGather (global 4-component vector of float)
+0:41          textureGather (temp 4-component vector of float)
 0:41            Construct combined texture-sampler (temp sampler2DArray)
 0:41              'g_tTex2df4a' (uniform texture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c3' (uniform 3-component vector of float)
+0:41            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                2 (const uint)
 0:41            Constant:
 0:41              2 (const int)
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of int)
 0:42          'txval21' (temp 4-component vector of int)
-0:42          textureGather (global 4-component vector of int)
+0:42          textureGather (temp 4-component vector of int)
 0:42            Construct combined texture-sampler (temp isampler2DArray)
 0:42              'g_tTex2di4a' (uniform itexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            'c3' (uniform 3-component vector of float)
+0:42            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:42              '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})
+0:42              Constant:
+0:42                2 (const uint)
 0:42            Constant:
 0:42              2 (const int)
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of uint)
 0:43          'txval22' (temp 4-component vector of uint)
-0:43          textureGather (global 4-component vector of uint)
+0:43          textureGather (temp 4-component vector of uint)
 0:43            Construct combined texture-sampler (temp usampler2DArray)
 0:43              'g_tTex2du4a' (uniform utexture2DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            'c3' (uniform 3-component vector of float)
+0:43            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                2 (const uint)
 0:43            Constant:
 0:43              2 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of float)
 0:45          'txval30' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
+0:45          textureGather (temp 4-component vector of float)
 0:45            Construct combined texture-sampler (temp sampler2DArray)
 0:45              'g_tTex2df4a' (uniform texture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c3' (uniform 3-component vector of float)
+0:45            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                2 (const uint)
 0:45            Constant:
 0:45              3 (const int)
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of int)
 0:46          'txval31' (temp 4-component vector of int)
-0:46          textureGather (global 4-component vector of int)
+0:46          textureGather (temp 4-component vector of int)
 0:46            Construct combined texture-sampler (temp isampler2DArray)
 0:46              'g_tTex2di4a' (uniform itexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c3' (uniform 3-component vector of float)
+0:46            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                2 (const uint)
 0:46            Constant:
 0:46              3 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of uint)
 0:47          'txval32' (temp 4-component vector of uint)
-0:47          textureGather (global 4-component vector of uint)
+0:47          textureGather (temp 4-component vector of uint)
 0:47            Construct combined texture-sampler (temp usampler2DArray)
 0:47              'g_tTex2du4a' (uniform utexture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c3' (uniform 3-component vector of float)
+0:47            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                2 (const uint)
 0:47            Constant:
 0:47              3 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval40' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp samplerCubeArray)
 0:51              'g_tTexcdf4a' (uniform textureCubeArray)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c4' (uniform 4-component vector of float)
+0:51            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                3 (const uint)
 0:51            Constant:
 0:51              0 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval41' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isamplerCubeArray)
 0:52              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c4' (uniform 4-component vector of float)
+0:52            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                3 (const uint)
 0:52            Constant:
 0:52              0 (const int)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval42' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usamplerCubeArray)
 0:53              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            'c4' (uniform 4-component vector of float)
+0:53            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:53              '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})
+0:53              Constant:
+0:53                3 (const uint)
 0:53            Constant:
 0:53              0 (const int)
 0:55      Sequence
 0:55        move second child to first child (temp 4-component vector of float)
 0:55          'txval50' (temp 4-component vector of float)
-0:55          textureGather (global 4-component vector of float)
+0:55          textureGather (temp 4-component vector of float)
 0:55            Construct combined texture-sampler (temp samplerCubeArray)
 0:55              'g_tTexcdf4a' (uniform textureCubeArray)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            'c4' (uniform 4-component vector of float)
+0:55            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:55              '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})
+0:55              Constant:
+0:55                3 (const uint)
 0:55            Constant:
 0:55              1 (const int)
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of int)
 0:56          'txval51' (temp 4-component vector of int)
-0:56          textureGather (global 4-component vector of int)
+0:56          textureGather (temp 4-component vector of int)
 0:56            Construct combined texture-sampler (temp isamplerCubeArray)
 0:56              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:56            'c4' (uniform 4-component vector of float)
+0:56            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:56              '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})
+0:56              Constant:
+0:56                3 (const uint)
 0:56            Constant:
 0:56              1 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of uint)
 0:57          'txval52' (temp 4-component vector of uint)
-0:57          textureGather (global 4-component vector of uint)
+0:57          textureGather (temp 4-component vector of uint)
 0:57            Construct combined texture-sampler (temp usamplerCubeArray)
 0:57              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c4' (uniform 4-component vector of float)
+0:57            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                3 (const uint)
 0:57            Constant:
 0:57              1 (const int)
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of float)
 0:59          'txval60' (temp 4-component vector of float)
-0:59          textureGather (global 4-component vector of float)
+0:59          textureGather (temp 4-component vector of float)
 0:59            Construct combined texture-sampler (temp samplerCubeArray)
 0:59              'g_tTexcdf4a' (uniform textureCubeArray)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:59            'c4' (uniform 4-component vector of float)
+0:59            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:59              '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})
+0:59              Constant:
+0:59                3 (const uint)
 0:59            Constant:
 0:59              2 (const int)
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of int)
 0:60          'txval61' (temp 4-component vector of int)
-0:60          textureGather (global 4-component vector of int)
+0:60          textureGather (temp 4-component vector of int)
 0:60            Construct combined texture-sampler (temp isamplerCubeArray)
 0:60              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:60            'c4' (uniform 4-component vector of float)
+0:60            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:60              '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})
+0:60              Constant:
+0:60                3 (const uint)
 0:60            Constant:
 0:60              2 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of uint)
 0:61          'txval62' (temp 4-component vector of uint)
-0:61          textureGather (global 4-component vector of uint)
+0:61          textureGather (temp 4-component vector of uint)
 0:61            Construct combined texture-sampler (temp usamplerCubeArray)
 0:61              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c4' (uniform 4-component vector of float)
+0:61            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                3 (const uint)
 0:61            Constant:
 0:61              2 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of float)
 0:63          'txval70' (temp 4-component vector of float)
-0:63          textureGather (global 4-component vector of float)
+0:63          textureGather (temp 4-component vector of float)
 0:63            Construct combined texture-sampler (temp samplerCubeArray)
 0:63              'g_tTexcdf4a' (uniform textureCubeArray)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c4' (uniform 4-component vector of float)
+0:63            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                3 (const uint)
 0:63            Constant:
 0:63              3 (const int)
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of int)
 0:64          'txval71' (temp 4-component vector of int)
-0:64          textureGather (global 4-component vector of int)
+0:64          textureGather (temp 4-component vector of int)
 0:64            Construct combined texture-sampler (temp isamplerCubeArray)
 0:64              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:64            'c4' (uniform 4-component vector of float)
+0:64            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:64              '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})
+0:64              Constant:
+0:64                3 (const uint)
 0:64            Constant:
 0:64              3 (const int)
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of uint)
 0:65          'txval72' (temp 4-component vector of uint)
-0:65          textureGather (global 4-component vector of uint)
+0:65          textureGather (temp 4-component vector of uint)
 0:65            Construct combined texture-sampler (temp usamplerCubeArray)
 0:65              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:65            'c4' (uniform 4-component vector of float)
+0:65            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:65              '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})
+0:65              Constant:
+0:65                3 (const uint)
 0:65            Constant:
 0:65              3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -262,8 +334,8 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -278,6 +350,8 @@ gl_FragCoord origin is upper left
 0:70                1 (const int)
 0:70        Branch: Return
 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)
@@ -289,12 +363,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-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})
 
 
 Linked fragment stage:
@@ -303,247 +372,319 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval00' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2DArray)
 0:33              'g_tTex2df4a' (uniform texture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:33            'c3' (uniform 3-component vector of float)
+0:33            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:33              '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})
+0:33              Constant:
+0:33                2 (const uint)
 0:33            Constant:
 0:33              0 (const int)
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval01' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2DArray)
 0:34              'g_tTex2di4a' (uniform itexture2DArray)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:34            'c3' (uniform 3-component vector of float)
+0:34            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:34              '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})
+0:34              Constant:
+0:34                2 (const uint)
 0:34            Constant:
 0:34              0 (const int)
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval02' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2DArray)
 0:35              'g_tTex2du4a' (uniform utexture2DArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:35            'c3' (uniform 3-component vector of float)
+0:35            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:35              '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})
+0:35              Constant:
+0:35                2 (const uint)
 0:35            Constant:
 0:35              0 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of float)
 0:37          'txval10' (temp 4-component vector of float)
-0:37          textureGather (global 4-component vector of float)
+0:37          textureGather (temp 4-component vector of float)
 0:37            Construct combined texture-sampler (temp sampler2DArray)
 0:37              'g_tTex2df4a' (uniform texture2DArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:37            'c3' (uniform 3-component vector of float)
+0:37            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:37              '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})
+0:37              Constant:
+0:37                2 (const uint)
 0:37            Constant:
 0:37              1 (const int)
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of int)
 0:38          'txval11' (temp 4-component vector of int)
-0:38          textureGather (global 4-component vector of int)
+0:38          textureGather (temp 4-component vector of int)
 0:38            Construct combined texture-sampler (temp isampler2DArray)
 0:38              'g_tTex2di4a' (uniform itexture2DArray)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:38            'c3' (uniform 3-component vector of float)
+0:38            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:38              '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})
+0:38              Constant:
+0:38                2 (const uint)
 0:38            Constant:
 0:38              1 (const int)
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of uint)
 0:39          'txval12' (temp 4-component vector of uint)
-0:39          textureGather (global 4-component vector of uint)
+0:39          textureGather (temp 4-component vector of uint)
 0:39            Construct combined texture-sampler (temp usampler2DArray)
 0:39              'g_tTex2du4a' (uniform utexture2DArray)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:39            'c3' (uniform 3-component vector of float)
+0:39            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:39              '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})
+0:39              Constant:
+0:39                2 (const uint)
 0:39            Constant:
 0:39              1 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of float)
 0:41          'txval20' (temp 4-component vector of float)
-0:41          textureGather (global 4-component vector of float)
+0:41          textureGather (temp 4-component vector of float)
 0:41            Construct combined texture-sampler (temp sampler2DArray)
 0:41              'g_tTex2df4a' (uniform texture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c3' (uniform 3-component vector of float)
+0:41            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                2 (const uint)
 0:41            Constant:
 0:41              2 (const int)
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of int)
 0:42          'txval21' (temp 4-component vector of int)
-0:42          textureGather (global 4-component vector of int)
+0:42          textureGather (temp 4-component vector of int)
 0:42            Construct combined texture-sampler (temp isampler2DArray)
 0:42              'g_tTex2di4a' (uniform itexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            'c3' (uniform 3-component vector of float)
+0:42            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:42              '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})
+0:42              Constant:
+0:42                2 (const uint)
 0:42            Constant:
 0:42              2 (const int)
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of uint)
 0:43          'txval22' (temp 4-component vector of uint)
-0:43          textureGather (global 4-component vector of uint)
+0:43          textureGather (temp 4-component vector of uint)
 0:43            Construct combined texture-sampler (temp usampler2DArray)
 0:43              'g_tTex2du4a' (uniform utexture2DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            'c3' (uniform 3-component vector of float)
+0:43            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                2 (const uint)
 0:43            Constant:
 0:43              2 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of float)
 0:45          'txval30' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
+0:45          textureGather (temp 4-component vector of float)
 0:45            Construct combined texture-sampler (temp sampler2DArray)
 0:45              'g_tTex2df4a' (uniform texture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c3' (uniform 3-component vector of float)
+0:45            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                2 (const uint)
 0:45            Constant:
 0:45              3 (const int)
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of int)
 0:46          'txval31' (temp 4-component vector of int)
-0:46          textureGather (global 4-component vector of int)
+0:46          textureGather (temp 4-component vector of int)
 0:46            Construct combined texture-sampler (temp isampler2DArray)
 0:46              'g_tTex2di4a' (uniform itexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c3' (uniform 3-component vector of float)
+0:46            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                2 (const uint)
 0:46            Constant:
 0:46              3 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of uint)
 0:47          'txval32' (temp 4-component vector of uint)
-0:47          textureGather (global 4-component vector of uint)
+0:47          textureGather (temp 4-component vector of uint)
 0:47            Construct combined texture-sampler (temp usampler2DArray)
 0:47              'g_tTex2du4a' (uniform utexture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c3' (uniform 3-component vector of float)
+0:47            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                2 (const uint)
 0:47            Constant:
 0:47              3 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval40' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp samplerCubeArray)
 0:51              'g_tTexcdf4a' (uniform textureCubeArray)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c4' (uniform 4-component vector of float)
+0:51            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                3 (const uint)
 0:51            Constant:
 0:51              0 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval41' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isamplerCubeArray)
 0:52              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c4' (uniform 4-component vector of float)
+0:52            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                3 (const uint)
 0:52            Constant:
 0:52              0 (const int)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval42' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usamplerCubeArray)
 0:53              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            'c4' (uniform 4-component vector of float)
+0:53            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:53              '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})
+0:53              Constant:
+0:53                3 (const uint)
 0:53            Constant:
 0:53              0 (const int)
 0:55      Sequence
 0:55        move second child to first child (temp 4-component vector of float)
 0:55          'txval50' (temp 4-component vector of float)
-0:55          textureGather (global 4-component vector of float)
+0:55          textureGather (temp 4-component vector of float)
 0:55            Construct combined texture-sampler (temp samplerCubeArray)
 0:55              'g_tTexcdf4a' (uniform textureCubeArray)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            'c4' (uniform 4-component vector of float)
+0:55            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:55              '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})
+0:55              Constant:
+0:55                3 (const uint)
 0:55            Constant:
 0:55              1 (const int)
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of int)
 0:56          'txval51' (temp 4-component vector of int)
-0:56          textureGather (global 4-component vector of int)
+0:56          textureGather (temp 4-component vector of int)
 0:56            Construct combined texture-sampler (temp isamplerCubeArray)
 0:56              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:56            'c4' (uniform 4-component vector of float)
+0:56            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:56              '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})
+0:56              Constant:
+0:56                3 (const uint)
 0:56            Constant:
 0:56              1 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of uint)
 0:57          'txval52' (temp 4-component vector of uint)
-0:57          textureGather (global 4-component vector of uint)
+0:57          textureGather (temp 4-component vector of uint)
 0:57            Construct combined texture-sampler (temp usamplerCubeArray)
 0:57              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c4' (uniform 4-component vector of float)
+0:57            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                3 (const uint)
 0:57            Constant:
 0:57              1 (const int)
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of float)
 0:59          'txval60' (temp 4-component vector of float)
-0:59          textureGather (global 4-component vector of float)
+0:59          textureGather (temp 4-component vector of float)
 0:59            Construct combined texture-sampler (temp samplerCubeArray)
 0:59              'g_tTexcdf4a' (uniform textureCubeArray)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:59            'c4' (uniform 4-component vector of float)
+0:59            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:59              '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})
+0:59              Constant:
+0:59                3 (const uint)
 0:59            Constant:
 0:59              2 (const int)
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of int)
 0:60          'txval61' (temp 4-component vector of int)
-0:60          textureGather (global 4-component vector of int)
+0:60          textureGather (temp 4-component vector of int)
 0:60            Construct combined texture-sampler (temp isamplerCubeArray)
 0:60              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:60            'c4' (uniform 4-component vector of float)
+0:60            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:60              '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})
+0:60              Constant:
+0:60                3 (const uint)
 0:60            Constant:
 0:60              2 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of uint)
 0:61          'txval62' (temp 4-component vector of uint)
-0:61          textureGather (global 4-component vector of uint)
+0:61          textureGather (temp 4-component vector of uint)
 0:61            Construct combined texture-sampler (temp usamplerCubeArray)
 0:61              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c4' (uniform 4-component vector of float)
+0:61            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                3 (const uint)
 0:61            Constant:
 0:61              2 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of float)
 0:63          'txval70' (temp 4-component vector of float)
-0:63          textureGather (global 4-component vector of float)
+0:63          textureGather (temp 4-component vector of float)
 0:63            Construct combined texture-sampler (temp samplerCubeArray)
 0:63              'g_tTexcdf4a' (uniform textureCubeArray)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c4' (uniform 4-component vector of float)
+0:63            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                3 (const uint)
 0:63            Constant:
 0:63              3 (const int)
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of int)
 0:64          'txval71' (temp 4-component vector of int)
-0:64          textureGather (global 4-component vector of int)
+0:64          textureGather (temp 4-component vector of int)
 0:64            Construct combined texture-sampler (temp isamplerCubeArray)
 0:64              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:64            'c4' (uniform 4-component vector of float)
+0:64            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:64              '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})
+0:64              Constant:
+0:64                3 (const uint)
 0:64            Constant:
 0:64              3 (const int)
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of uint)
 0:65          'txval72' (temp 4-component vector of uint)
-0:65          textureGather (global 4-component vector of uint)
+0:65          textureGather (temp 4-component vector of uint)
 0:65            Construct combined texture-sampler (temp usamplerCubeArray)
 0:65              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:65            'c4' (uniform 4-component vector of float)
+0:65            c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of float)
+0:65              '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})
+0:65              Constant:
+0:65                3 (const uint)
 0:65            Constant:
 0:65              3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -563,8 +704,8 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -579,6 +720,8 @@ gl_FragCoord origin is upper left
 0:70                1 (const int)
 0:70        Branch: Return
 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)
@@ -590,85 +733,88 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-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 227
+// Id's are bound by 248
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 204 208
+                              EntryPoint Fragment 4  "main" 230 234
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "txval00"
                               Name 12  "g_tTex2df4a"
                               Name 16  "g_sSamp"
-                              Name 22  "c3"
-                              Name 29  "txval01"
-                              Name 32  "g_tTex2di4a"
-                              Name 42  "txval02"
-                              Name 45  "g_tTex2du4a"
-                              Name 52  "txval10"
-                              Name 59  "txval11"
-                              Name 65  "txval12"
-                              Name 71  "txval20"
-                              Name 78  "txval21"
-                              Name 84  "txval22"
-                              Name 90  "txval30"
-                              Name 97  "txval31"
-                              Name 103  "txval32"
-                              Name 109  "txval40"
-                              Name 112  "g_tTexcdf4a"
-                              Name 118  "c4"
-                              Name 121  "txval41"
-                              Name 124  "g_tTexcdi4a"
-                              Name 131  "txval42"
-                              Name 134  "g_tTexcdu4a"
-                              Name 141  "txval50"
-                              Name 147  "txval51"
-                              Name 153  "txval52"
-                              Name 159  "txval60"
-                              Name 165  "txval61"
-                              Name 171  "txval62"
-                              Name 177  "txval70"
-                              Name 183  "txval71"
-                              Name 189  "txval72"
-                              Name 195  "PS_OUTPUT"
-                              MemberName 195(PS_OUTPUT) 0  "Color"
-                              MemberName 195(PS_OUTPUT) 1  "Depth"
-                              Name 197  "psout"
-                              Name 204  "Color"
-                              Name 208  "Depth"
-                              Name 212  "g_sSamp2d"
-                              Name 215  "g_tTex1df4a"
-                              Name 218  "g_tTex1di4a"
-                              Name 221  "g_tTex1du4a"
-                              Name 223  "c1"
-                              Name 226  "c2"
+                              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
-                              Decorate 32(g_tTex2di4a) DescriptorSet 0
-                              Decorate 45(g_tTex2du4a) DescriptorSet 0
-                              Decorate 112(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 124(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 134(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 204(Color) Location 0
-                              Decorate 208(Depth) BuiltIn FragDepth
-                              Decorate 212(g_sSamp2d) DescriptorSet 0
-                              Decorate 215(g_tTex1df4a) DescriptorSet 0
-                              Decorate 215(g_tTex1df4a) Binding 0
-                              Decorate 218(g_tTex1di4a) DescriptorSet 0
-                              Decorate 221(g_tTex1du4a) DescriptorSet 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -681,245 +827,266 @@ gl_FragCoord origin is upper left
               15:             TypePointer UniformConstant 14
      16(g_sSamp):     15(ptr) Variable UniformConstant
               18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 3
-              21:             TypePointer UniformConstant 20(fvec3)
-          22(c3):     21(ptr) Variable UniformConstant
-              24:             TypeInt 32 1
-              25:     24(int) Constant 0
-              27:             TypeVector 24(int) 4
-              28:             TypePointer Function 27(ivec4)
-              30:             TypeImage 24(int) 2D array sampled format:Unknown
-              31:             TypePointer UniformConstant 30
- 32(g_tTex2di4a):     31(ptr) Variable UniformConstant
-              35:             TypeSampledImage 30
-              39:             TypeInt 32 0
-              40:             TypeVector 39(int) 4
-              41:             TypePointer Function 40(ivec4)
-              43:             TypeImage 39(int) 2D array sampled format:Unknown
-              44:             TypePointer UniformConstant 43
- 45(g_tTex2du4a):     44(ptr) Variable UniformConstant
-              48:             TypeSampledImage 43
-              57:     24(int) Constant 1
-              76:     24(int) Constant 2
-              95:     24(int) Constant 3
-             110:             TypeImage 6(float) Cube array sampled format:Unknown
-             111:             TypePointer UniformConstant 110
-112(g_tTexcdf4a):    111(ptr) Variable UniformConstant
-             115:             TypeSampledImage 110
-             117:             TypePointer UniformConstant 7(fvec4)
-         118(c4):    117(ptr) Variable UniformConstant
-             122:             TypeImage 24(int) Cube array sampled format:Unknown
-             123:             TypePointer UniformConstant 122
-124(g_tTexcdi4a):    123(ptr) Variable UniformConstant
-             127:             TypeSampledImage 122
-             132:             TypeImage 39(int) Cube array sampled format:Unknown
-             133:             TypePointer UniformConstant 132
-134(g_tTexcdu4a):    133(ptr) Variable UniformConstant
-             137:             TypeSampledImage 132
-  195(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             196:             TypePointer Function 195(PS_OUTPUT)
-             198:    6(float) Constant 1065353216
-             199:    7(fvec4) ConstantComposite 198 198 198 198
-             201:             TypePointer Function 6(float)
-             203:             TypePointer Output 7(fvec4)
-      204(Color):    203(ptr) Variable Output
-             207:             TypePointer Output 6(float)
-      208(Depth):    207(ptr) Variable Output
-  212(g_sSamp2d):     15(ptr) Variable UniformConstant
-             213:             TypeImage 6(float) 1D array sampled format:Unknown
-             214:             TypePointer UniformConstant 213
-215(g_tTex1df4a):    214(ptr) Variable UniformConstant
-             216:             TypeImage 24(int) 1D array sampled format:Unknown
-             217:             TypePointer UniformConstant 216
-218(g_tTex1di4a):    217(ptr) Variable UniformConstant
-             219:             TypeImage 39(int) 1D array sampled format:Unknown
-             220:             TypePointer UniformConstant 219
-221(g_tTex1du4a):    220(ptr) Variable UniformConstant
-             222:             TypePointer UniformConstant 6(float)
-         223(c1):    222(ptr) Variable UniformConstant
-             224:             TypeVector 6(float) 2
-             225:             TypePointer UniformConstant 224(fvec2)
-         226(c2):    225(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
       9(txval00):      8(ptr) Variable Function
-     29(txval01):     28(ptr) Variable Function
-     42(txval02):     41(ptr) Variable Function
-     52(txval10):      8(ptr) Variable Function
-     59(txval11):     28(ptr) Variable Function
-     65(txval12):     41(ptr) Variable Function
-     71(txval20):      8(ptr) Variable Function
-     78(txval21):     28(ptr) Variable Function
-     84(txval22):     41(ptr) Variable Function
-     90(txval30):      8(ptr) Variable Function
-     97(txval31):     28(ptr) Variable Function
-    103(txval32):     41(ptr) Variable Function
-    109(txval40):      8(ptr) Variable Function
-    121(txval41):     28(ptr) Variable Function
-    131(txval42):     41(ptr) Variable Function
-    141(txval50):      8(ptr) Variable Function
-    147(txval51):     28(ptr) Variable Function
-    153(txval52):     41(ptr) Variable Function
-    159(txval60):      8(ptr) Variable Function
-    165(txval61):     28(ptr) Variable Function
-    171(txval62):     41(ptr) Variable Function
-    177(txval70):      8(ptr) Variable Function
-    183(txval71):     28(ptr) Variable Function
-    189(txval72):     41(ptr) Variable Function
-      197(psout):    196(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
-              23:   20(fvec3) Load 22(c3)
-              26:    7(fvec4) ImageGather 19 23 25
-                              Store 9(txval00) 26
-              33:          30 Load 32(g_tTex2di4a)
-              34:          14 Load 16(g_sSamp)
-              36:          35 SampledImage 33 34
-              37:   20(fvec3) Load 22(c3)
-              38:   27(ivec4) ImageGather 36 37 25
-                              Store 29(txval01) 38
-              46:          43 Load 45(g_tTex2du4a)
-              47:          14 Load 16(g_sSamp)
-              49:          48 SampledImage 46 47
-              50:   20(fvec3) Load 22(c3)
-              51:   40(ivec4) ImageGather 49 50 25
-                              Store 42(txval02) 51
-              53:          10 Load 12(g_tTex2df4a)
-              54:          14 Load 16(g_sSamp)
-              55:          18 SampledImage 53 54
-              56:   20(fvec3) Load 22(c3)
-              58:    7(fvec4) ImageGather 55 56 57
-                              Store 52(txval10) 58
-              60:          30 Load 32(g_tTex2di4a)
+              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:          35 SampledImage 60 61
-              63:   20(fvec3) Load 22(c3)
-              64:   27(ivec4) ImageGather 62 63 57
-                              Store 59(txval11) 64
-              66:          43 Load 45(g_tTex2du4a)
-              67:          14 Load 16(g_sSamp)
-              68:          48 SampledImage 66 67
-              69:   20(fvec3) Load 22(c3)
-              70:   40(ivec4) ImageGather 68 69 57
-                              Store 65(txval12) 70
-              72:          10 Load 12(g_tTex2df4a)
-              73:          14 Load 16(g_sSamp)
-              74:          18 SampledImage 72 73
-              75:   20(fvec3) Load 22(c3)
-              77:    7(fvec4) ImageGather 74 75 76
-                              Store 71(txval20) 77
-              79:          30 Load 32(g_tTex2di4a)
-              80:          14 Load 16(g_sSamp)
-              81:          35 SampledImage 79 80
-              82:   20(fvec3) Load 22(c3)
-              83:   27(ivec4) ImageGather 81 82 76
-                              Store 78(txval21) 83
-              85:          43 Load 45(g_tTex2du4a)
-              86:          14 Load 16(g_sSamp)
-              87:          48 SampledImage 85 86
-              88:   20(fvec3) Load 22(c3)
-              89:   40(ivec4) ImageGather 87 88 76
-                              Store 84(txval22) 89
-              91:          10 Load 12(g_tTex2df4a)
-              92:          14 Load 16(g_sSamp)
-              93:          18 SampledImage 91 92
-              94:   20(fvec3) Load 22(c3)
-              96:    7(fvec4) ImageGather 93 94 95
-                              Store 90(txval30) 96
-              98:          30 Load 32(g_tTex2di4a)
-              99:          14 Load 16(g_sSamp)
-             100:          35 SampledImage 98 99
-             101:   20(fvec3) Load 22(c3)
-             102:   27(ivec4) ImageGather 100 101 95
-                              Store 97(txval31) 102
-             104:          43 Load 45(g_tTex2du4a)
-             105:          14 Load 16(g_sSamp)
-             106:          48 SampledImage 104 105
-             107:   20(fvec3) Load 22(c3)
-             108:   40(ivec4) ImageGather 106 107 95
-                              Store 103(txval32) 108
-             113:         110 Load 112(g_tTexcdf4a)
-             114:          14 Load 16(g_sSamp)
-             116:         115 SampledImage 113 114
-             119:    7(fvec4) Load 118(c4)
-             120:    7(fvec4) ImageGather 116 119 25
-                              Store 109(txval40) 120
-             125:         122 Load 124(g_tTexcdi4a)
-             126:          14 Load 16(g_sSamp)
-             128:         127 SampledImage 125 126
-             129:    7(fvec4) Load 118(c4)
-             130:   27(ivec4) ImageGather 128 129 25
-                              Store 121(txval41) 130
-             135:         132 Load 134(g_tTexcdu4a)
-             136:          14 Load 16(g_sSamp)
-             138:         137 SampledImage 135 136
-             139:    7(fvec4) Load 118(c4)
-             140:   40(ivec4) ImageGather 138 139 25
-                              Store 131(txval42) 140
-             142:         110 Load 112(g_tTexcdf4a)
-             143:          14 Load 16(g_sSamp)
-             144:         115 SampledImage 142 143
-             145:    7(fvec4) Load 118(c4)
-             146:    7(fvec4) ImageGather 144 145 57
-                              Store 141(txval50) 146
-             148:         122 Load 124(g_tTexcdi4a)
-             149:          14 Load 16(g_sSamp)
-             150:         127 SampledImage 148 149
-             151:    7(fvec4) Load 118(c4)
-             152:   27(ivec4) ImageGather 150 151 57
-                              Store 147(txval51) 152
-             154:         132 Load 134(g_tTexcdu4a)
-             155:          14 Load 16(g_sSamp)
-             156:         137 SampledImage 154 155
-             157:    7(fvec4) Load 118(c4)
-             158:   40(ivec4) ImageGather 156 157 57
-                              Store 153(txval52) 158
-             160:         110 Load 112(g_tTexcdf4a)
-             161:          14 Load 16(g_sSamp)
-             162:         115 SampledImage 160 161
-             163:    7(fvec4) Load 118(c4)
-             164:    7(fvec4) ImageGather 162 163 76
-                              Store 159(txval60) 164
-             166:         122 Load 124(g_tTexcdi4a)
+              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:         127 SampledImage 166 167
-             169:    7(fvec4) Load 118(c4)
-             170:   27(ivec4) ImageGather 168 169 76
-                              Store 165(txval61) 170
-             172:         132 Load 134(g_tTexcdu4a)
-             173:          14 Load 16(g_sSamp)
-             174:         137 SampledImage 172 173
-             175:    7(fvec4) Load 118(c4)
-             176:   40(ivec4) ImageGather 174 175 76
-                              Store 171(txval62) 176
-             178:         110 Load 112(g_tTexcdf4a)
-             179:          14 Load 16(g_sSamp)
-             180:         115 SampledImage 178 179
-             181:    7(fvec4) Load 118(c4)
-             182:    7(fvec4) ImageGather 180 181 95
-                              Store 177(txval70) 182
-             184:         122 Load 124(g_tTexcdi4a)
-             185:          14 Load 16(g_sSamp)
-             186:         127 SampledImage 184 185
-             187:    7(fvec4) Load 118(c4)
-             188:   27(ivec4) ImageGather 186 187 95
-                              Store 183(txval71) 188
-             190:         132 Load 134(g_tTexcdu4a)
-             191:          14 Load 16(g_sSamp)
-             192:         137 SampledImage 190 191
-             193:    7(fvec4) Load 118(c4)
-             194:   40(ivec4) ImageGather 192 193 95
-                              Store 189(txval72) 194
-             200:      8(ptr) AccessChain 197(psout) 25
-                              Store 200 199
-             202:    201(ptr) AccessChain 197(psout) 57
-                              Store 202 198
-             205:      8(ptr) AccessChain 197(psout) 25
-             206:    7(fvec4) Load 205
-                              Store 204(Color) 206
-             209:    201(ptr) AccessChain 197(psout) 57
-             210:    6(float) Load 209
-                              Store 208(Depth) 210
+             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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 2ec5343b1186dd97020ddb0de2183a2bdc72c020..d2fb0b171472f65386384d5b83f5ee34e2333235 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -2,247 +2,319 @@ hlsl.gatherRGBA.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: main( (global 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
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval00' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler2D)
 0:39              'g_tTex2df4' (uniform texture2D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:39            'c2' (uniform 2-component vector of float)
+0:39            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:39              '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})
+0:39              Constant:
+0:39                1 (const uint)
 0:39            Constant:
 0:39              0 (const int)
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval01' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler2D)
 0:40              'g_tTex2di4' (uniform itexture2D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:40            'c2' (uniform 2-component vector of float)
+0:40            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                1 (const uint)
 0:40            Constant:
 0:40              0 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval02' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler2D)
 0:41              'g_tTex2du4' (uniform utexture2D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c2' (uniform 2-component vector of float)
+0:41            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                1 (const uint)
 0:41            Constant:
 0:41              0 (const int)
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval10' (temp 4-component vector of float)
-0:43          textureGather (global 4-component vector of float)
+0:43          textureGather (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp sampler2D)
 0:43              'g_tTex2df4' (uniform texture2D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            'c2' (uniform 2-component vector of float)
+0:43            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                1 (const uint)
 0:43            Constant:
 0:43              1 (const int)
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval11' (temp 4-component vector of int)
-0:44          textureGather (global 4-component vector of int)
+0:44          textureGather (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isampler2D)
 0:44              'g_tTex2di4' (uniform itexture2D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            'c2' (uniform 2-component vector of float)
+0:44            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                1 (const uint)
 0:44            Constant:
 0:44              1 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval12' (temp 4-component vector of uint)
-0:45          textureGather (global 4-component vector of uint)
+0:45          textureGather (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usampler2D)
 0:45              'g_tTex2du4' (uniform utexture2D)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c2' (uniform 2-component vector of float)
+0:45            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                1 (const uint)
 0:45            Constant:
 0:45              1 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of float)
 0:47          'txval20' (temp 4-component vector of float)
-0:47          textureGather (global 4-component vector of float)
+0:47          textureGather (temp 4-component vector of float)
 0:47            Construct combined texture-sampler (temp sampler2D)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c2' (uniform 2-component vector of float)
+0:47            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                1 (const uint)
 0:47            Constant:
 0:47              2 (const int)
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of int)
 0:48          'txval21' (temp 4-component vector of int)
-0:48          textureGather (global 4-component vector of int)
+0:48          textureGather (temp 4-component vector of int)
 0:48            Construct combined texture-sampler (temp isampler2D)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            'c2' (uniform 2-component vector of float)
+0:48            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:48              '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})
+0:48              Constant:
+0:48                1 (const uint)
 0:48            Constant:
 0:48              2 (const int)
 0:49      Sequence
 0:49        move second child to first child (temp 4-component vector of uint)
 0:49          'txval22' (temp 4-component vector of uint)
-0:49          textureGather (global 4-component vector of uint)
+0:49          textureGather (temp 4-component vector of uint)
 0:49            Construct combined texture-sampler (temp usampler2D)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            'c2' (uniform 2-component vector of float)
+0:49            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:49              '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})
+0:49              Constant:
+0:49                1 (const uint)
 0:49            Constant:
 0:49              2 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval30' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp sampler2D)
 0:51              'g_tTex2df4' (uniform texture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c2' (uniform 2-component vector of float)
+0:51            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                1 (const uint)
 0:51            Constant:
 0:51              3 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval31' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isampler2D)
 0:52              'g_tTex2di4' (uniform itexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c2' (uniform 2-component vector of float)
+0:52            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                1 (const uint)
 0:52            Constant:
 0:52              3 (const int)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval32' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usampler2D)
 0:53              'g_tTex2du4' (uniform utexture2D)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            'c2' (uniform 2-component vector of float)
+0:53            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:53              '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})
+0:53              Constant:
+0:53                1 (const uint)
 0:53            Constant:
 0:53              3 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of float)
 0:57          'txval40' (temp 4-component vector of float)
-0:57          textureGather (global 4-component vector of float)
+0:57          textureGather (temp 4-component vector of float)
 0:57            Construct combined texture-sampler (temp samplerCube)
 0:57              'g_tTexcdf4' (uniform textureCube)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c3' (uniform 3-component vector of float)
+0:57            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                2 (const uint)
 0:57            Constant:
 0:57              0 (const int)
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of int)
 0:58          'txval41' (temp 4-component vector of int)
-0:58          textureGather (global 4-component vector of int)
+0:58          textureGather (temp 4-component vector of int)
 0:58            Construct combined texture-sampler (temp isamplerCube)
 0:58              'g_tTexcdi4' (uniform itextureCube)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:58            'c3' (uniform 3-component vector of float)
+0:58            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:58              '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})
+0:58              Constant:
+0:58                2 (const uint)
 0:58            Constant:
 0:58              0 (const int)
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of uint)
 0:59          'txval42' (temp 4-component vector of uint)
-0:59          textureGather (global 4-component vector of uint)
+0:59          textureGather (temp 4-component vector of uint)
 0:59            Construct combined texture-sampler (temp usamplerCube)
 0:59              'g_tTexcdu4' (uniform utextureCube)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:59            'c3' (uniform 3-component vector of float)
+0:59            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:59              '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})
+0:59              Constant:
+0:59                2 (const uint)
 0:59            Constant:
 0:59              0 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of float)
 0:61          'txval50' (temp 4-component vector of float)
-0:61          textureGather (global 4-component vector of float)
+0:61          textureGather (temp 4-component vector of float)
 0:61            Construct combined texture-sampler (temp samplerCube)
 0:61              'g_tTexcdf4' (uniform textureCube)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c3' (uniform 3-component vector of float)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                2 (const uint)
 0:61            Constant:
 0:61              1 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of int)
 0:62          'txval51' (temp 4-component vector of int)
-0:62          textureGather (global 4-component vector of int)
+0:62          textureGather (temp 4-component vector of int)
 0:62            Construct combined texture-sampler (temp isamplerCube)
 0:62              'g_tTexcdi4' (uniform itextureCube)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c3' (uniform 3-component vector of float)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                2 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of uint)
 0:63          'txval52' (temp 4-component vector of uint)
-0:63          textureGather (global 4-component vector of uint)
+0:63          textureGather (temp 4-component vector of uint)
 0:63            Construct combined texture-sampler (temp usamplerCube)
 0:63              'g_tTexcdu4' (uniform utextureCube)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c3' (uniform 3-component vector of float)
+0:63            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                2 (const uint)
 0:63            Constant:
 0:63              1 (const int)
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of float)
 0:65          'txval60' (temp 4-component vector of float)
-0:65          textureGather (global 4-component vector of float)
+0:65          textureGather (temp 4-component vector of float)
 0:65            Construct combined texture-sampler (temp samplerCube)
 0:65              'g_tTexcdf4' (uniform textureCube)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:65            'c3' (uniform 3-component vector of float)
+0:65            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:65              '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})
+0:65              Constant:
+0:65                2 (const uint)
 0:65            Constant:
 0:65              2 (const int)
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of int)
 0:66          'txval61' (temp 4-component vector of int)
-0:66          textureGather (global 4-component vector of int)
+0:66          textureGather (temp 4-component vector of int)
 0:66            Construct combined texture-sampler (temp isamplerCube)
 0:66              'g_tTexcdi4' (uniform itextureCube)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:66            'c3' (uniform 3-component vector of float)
+0:66            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:66              '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})
+0:66              Constant:
+0:66                2 (const uint)
 0:66            Constant:
 0:66              2 (const int)
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of uint)
 0:67          'txval62' (temp 4-component vector of uint)
-0:67          textureGather (global 4-component vector of uint)
+0:67          textureGather (temp 4-component vector of uint)
 0:67            Construct combined texture-sampler (temp usamplerCube)
 0:67              'g_tTexcdu4' (uniform utextureCube)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:67            'c3' (uniform 3-component vector of float)
+0:67            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:67              '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})
+0:67              Constant:
+0:67                2 (const uint)
 0:67            Constant:
 0:67              2 (const int)
 0:69      Sequence
 0:69        move second child to first child (temp 4-component vector of float)
 0:69          'txval70' (temp 4-component vector of float)
-0:69          textureGather (global 4-component vector of float)
+0:69          textureGather (temp 4-component vector of float)
 0:69            Construct combined texture-sampler (temp samplerCube)
 0:69              'g_tTexcdf4' (uniform textureCube)
 0:69              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:69            'c3' (uniform 3-component vector of float)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:69              '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})
+0:69              Constant:
+0:69                2 (const uint)
 0:69            Constant:
 0:69              3 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of int)
 0:70          'txval71' (temp 4-component vector of int)
-0:70          textureGather (global 4-component vector of int)
+0:70          textureGather (temp 4-component vector of int)
 0:70            Construct combined texture-sampler (temp isamplerCube)
 0:70              'g_tTexcdi4' (uniform itextureCube)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:70            'c3' (uniform 3-component vector of float)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:70              '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})
+0:70              Constant:
+0:70                2 (const uint)
 0:70            Constant:
 0:70              3 (const int)
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of uint)
 0:71          'txval72' (temp 4-component vector of uint)
-0:71          textureGather (global 4-component vector of uint)
+0:71          textureGather (temp 4-component vector of uint)
 0:71            Construct combined texture-sampler (temp usamplerCube)
 0:71              'g_tTexcdu4' (uniform utextureCube)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:71            'c3' (uniform 3-component vector of float)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:71              '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})
+0:71              Constant:
+0:71                2 (const uint)
 0:71            Constant:
 0:71              3 (const int)
 0:73      move second child to first child (temp 4-component vector of float)
@@ -262,8 +334,8 @@ gl_FragCoord origin is upper left
 0:74            1 (const int)
 0:74        Constant:
 0:74          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -278,6 +350,8 @@ gl_FragCoord origin is upper left
 0:76                1 (const int)
 0:76        Branch: Return
 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)
@@ -293,12 +367,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-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})
 
 
 Linked fragment stage:
@@ -307,247 +376,319 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: main( (global 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
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval00' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler2D)
 0:39              'g_tTex2df4' (uniform texture2D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:39            'c2' (uniform 2-component vector of float)
+0:39            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:39              '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})
+0:39              Constant:
+0:39                1 (const uint)
 0:39            Constant:
 0:39              0 (const int)
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval01' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler2D)
 0:40              'g_tTex2di4' (uniform itexture2D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:40            'c2' (uniform 2-component vector of float)
+0:40            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                1 (const uint)
 0:40            Constant:
 0:40              0 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval02' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler2D)
 0:41              'g_tTex2du4' (uniform utexture2D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c2' (uniform 2-component vector of float)
+0:41            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                1 (const uint)
 0:41            Constant:
 0:41              0 (const int)
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval10' (temp 4-component vector of float)
-0:43          textureGather (global 4-component vector of float)
+0:43          textureGather (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp sampler2D)
 0:43              'g_tTex2df4' (uniform texture2D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            'c2' (uniform 2-component vector of float)
+0:43            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                1 (const uint)
 0:43            Constant:
 0:43              1 (const int)
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval11' (temp 4-component vector of int)
-0:44          textureGather (global 4-component vector of int)
+0:44          textureGather (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isampler2D)
 0:44              'g_tTex2di4' (uniform itexture2D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            'c2' (uniform 2-component vector of float)
+0:44            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                1 (const uint)
 0:44            Constant:
 0:44              1 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval12' (temp 4-component vector of uint)
-0:45          textureGather (global 4-component vector of uint)
+0:45          textureGather (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usampler2D)
 0:45              'g_tTex2du4' (uniform utexture2D)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c2' (uniform 2-component vector of float)
+0:45            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                1 (const uint)
 0:45            Constant:
 0:45              1 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of float)
 0:47          'txval20' (temp 4-component vector of float)
-0:47          textureGather (global 4-component vector of float)
+0:47          textureGather (temp 4-component vector of float)
 0:47            Construct combined texture-sampler (temp sampler2D)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c2' (uniform 2-component vector of float)
+0:47            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                1 (const uint)
 0:47            Constant:
 0:47              2 (const int)
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of int)
 0:48          'txval21' (temp 4-component vector of int)
-0:48          textureGather (global 4-component vector of int)
+0:48          textureGather (temp 4-component vector of int)
 0:48            Construct combined texture-sampler (temp isampler2D)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            'c2' (uniform 2-component vector of float)
+0:48            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:48              '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})
+0:48              Constant:
+0:48                1 (const uint)
 0:48            Constant:
 0:48              2 (const int)
 0:49      Sequence
 0:49        move second child to first child (temp 4-component vector of uint)
 0:49          'txval22' (temp 4-component vector of uint)
-0:49          textureGather (global 4-component vector of uint)
+0:49          textureGather (temp 4-component vector of uint)
 0:49            Construct combined texture-sampler (temp usampler2D)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            'c2' (uniform 2-component vector of float)
+0:49            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:49              '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})
+0:49              Constant:
+0:49                1 (const uint)
 0:49            Constant:
 0:49              2 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval30' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp sampler2D)
 0:51              'g_tTex2df4' (uniform texture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c2' (uniform 2-component vector of float)
+0:51            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                1 (const uint)
 0:51            Constant:
 0:51              3 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval31' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isampler2D)
 0:52              'g_tTex2di4' (uniform itexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c2' (uniform 2-component vector of float)
+0:52            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                1 (const uint)
 0:52            Constant:
 0:52              3 (const int)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval32' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usampler2D)
 0:53              'g_tTex2du4' (uniform utexture2D)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            'c2' (uniform 2-component vector of float)
+0:53            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:53              '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})
+0:53              Constant:
+0:53                1 (const uint)
 0:53            Constant:
 0:53              3 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of float)
 0:57          'txval40' (temp 4-component vector of float)
-0:57          textureGather (global 4-component vector of float)
+0:57          textureGather (temp 4-component vector of float)
 0:57            Construct combined texture-sampler (temp samplerCube)
 0:57              'g_tTexcdf4' (uniform textureCube)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c3' (uniform 3-component vector of float)
+0:57            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                2 (const uint)
 0:57            Constant:
 0:57              0 (const int)
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of int)
 0:58          'txval41' (temp 4-component vector of int)
-0:58          textureGather (global 4-component vector of int)
+0:58          textureGather (temp 4-component vector of int)
 0:58            Construct combined texture-sampler (temp isamplerCube)
 0:58              'g_tTexcdi4' (uniform itextureCube)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:58            'c3' (uniform 3-component vector of float)
+0:58            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:58              '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})
+0:58              Constant:
+0:58                2 (const uint)
 0:58            Constant:
 0:58              0 (const int)
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of uint)
 0:59          'txval42' (temp 4-component vector of uint)
-0:59          textureGather (global 4-component vector of uint)
+0:59          textureGather (temp 4-component vector of uint)
 0:59            Construct combined texture-sampler (temp usamplerCube)
 0:59              'g_tTexcdu4' (uniform utextureCube)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:59            'c3' (uniform 3-component vector of float)
+0:59            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:59              '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})
+0:59              Constant:
+0:59                2 (const uint)
 0:59            Constant:
 0:59              0 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of float)
 0:61          'txval50' (temp 4-component vector of float)
-0:61          textureGather (global 4-component vector of float)
+0:61          textureGather (temp 4-component vector of float)
 0:61            Construct combined texture-sampler (temp samplerCube)
 0:61              'g_tTexcdf4' (uniform textureCube)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c3' (uniform 3-component vector of float)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                2 (const uint)
 0:61            Constant:
 0:61              1 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of int)
 0:62          'txval51' (temp 4-component vector of int)
-0:62          textureGather (global 4-component vector of int)
+0:62          textureGather (temp 4-component vector of int)
 0:62            Construct combined texture-sampler (temp isamplerCube)
 0:62              'g_tTexcdi4' (uniform itextureCube)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c3' (uniform 3-component vector of float)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                2 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of uint)
 0:63          'txval52' (temp 4-component vector of uint)
-0:63          textureGather (global 4-component vector of uint)
+0:63          textureGather (temp 4-component vector of uint)
 0:63            Construct combined texture-sampler (temp usamplerCube)
 0:63              'g_tTexcdu4' (uniform utextureCube)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c3' (uniform 3-component vector of float)
+0:63            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                2 (const uint)
 0:63            Constant:
 0:63              1 (const int)
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of float)
 0:65          'txval60' (temp 4-component vector of float)
-0:65          textureGather (global 4-component vector of float)
+0:65          textureGather (temp 4-component vector of float)
 0:65            Construct combined texture-sampler (temp samplerCube)
 0:65              'g_tTexcdf4' (uniform textureCube)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:65            'c3' (uniform 3-component vector of float)
+0:65            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:65              '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})
+0:65              Constant:
+0:65                2 (const uint)
 0:65            Constant:
 0:65              2 (const int)
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of int)
 0:66          'txval61' (temp 4-component vector of int)
-0:66          textureGather (global 4-component vector of int)
+0:66          textureGather (temp 4-component vector of int)
 0:66            Construct combined texture-sampler (temp isamplerCube)
 0:66              'g_tTexcdi4' (uniform itextureCube)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:66            'c3' (uniform 3-component vector of float)
+0:66            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:66              '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})
+0:66              Constant:
+0:66                2 (const uint)
 0:66            Constant:
 0:66              2 (const int)
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of uint)
 0:67          'txval62' (temp 4-component vector of uint)
-0:67          textureGather (global 4-component vector of uint)
+0:67          textureGather (temp 4-component vector of uint)
 0:67            Construct combined texture-sampler (temp usamplerCube)
 0:67              'g_tTexcdu4' (uniform utextureCube)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:67            'c3' (uniform 3-component vector of float)
+0:67            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:67              '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})
+0:67              Constant:
+0:67                2 (const uint)
 0:67            Constant:
 0:67              2 (const int)
 0:69      Sequence
 0:69        move second child to first child (temp 4-component vector of float)
 0:69          'txval70' (temp 4-component vector of float)
-0:69          textureGather (global 4-component vector of float)
+0:69          textureGather (temp 4-component vector of float)
 0:69            Construct combined texture-sampler (temp samplerCube)
 0:69              'g_tTexcdf4' (uniform textureCube)
 0:69              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:69            'c3' (uniform 3-component vector of float)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:69              '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})
+0:69              Constant:
+0:69                2 (const uint)
 0:69            Constant:
 0:69              3 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of int)
 0:70          'txval71' (temp 4-component vector of int)
-0:70          textureGather (global 4-component vector of int)
+0:70          textureGather (temp 4-component vector of int)
 0:70            Construct combined texture-sampler (temp isamplerCube)
 0:70              'g_tTexcdi4' (uniform itextureCube)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:70            'c3' (uniform 3-component vector of float)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:70              '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})
+0:70              Constant:
+0:70                2 (const uint)
 0:70            Constant:
 0:70              3 (const int)
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of uint)
 0:71          'txval72' (temp 4-component vector of uint)
-0:71          textureGather (global 4-component vector of uint)
+0:71          textureGather (temp 4-component vector of uint)
 0:71            Construct combined texture-sampler (temp usamplerCube)
 0:71              'g_tTexcdu4' (uniform utextureCube)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:71            'c3' (uniform 3-component vector of float)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:71              '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})
+0:71              Constant:
+0:71                2 (const uint)
 0:71            Constant:
 0:71              3 (const int)
 0:73      move second child to first child (temp 4-component vector of float)
@@ -567,8 +708,8 @@ gl_FragCoord origin is upper left
 0:74            1 (const int)
 0:74        Constant:
 0:74          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -583,6 +724,8 @@ gl_FragCoord origin is upper left
 0:76                1 (const int)
 0:76        Branch: Return
 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)
@@ -598,93 +741,96 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-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 237
+// Id's are bound by 258
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 205 209
+                              EntryPoint Fragment 4  "main" 230 234
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "txval00"
                               Name 12  "g_tTex2df4"
                               Name 16  "g_sSamp"
-                              Name 22  "c2"
-                              Name 29  "txval01"
-                              Name 32  "g_tTex2di4"
-                              Name 42  "txval02"
-                              Name 45  "g_tTex2du4"
-                              Name 52  "txval10"
-                              Name 59  "txval11"
-                              Name 65  "txval12"
-                              Name 71  "txval20"
-                              Name 78  "txval21"
-                              Name 84  "txval22"
-                              Name 90  "txval30"
-                              Name 97  "txval31"
-                              Name 103  "txval32"
-                              Name 109  "txval40"
-                              Name 112  "g_tTexcdf4"
-                              Name 119  "c3"
-                              Name 122  "txval41"
-                              Name 125  "g_tTexcdi4"
-                              Name 132  "txval42"
-                              Name 135  "g_tTexcdu4"
-                              Name 142  "txval50"
-                              Name 148  "txval51"
-                              Name 154  "txval52"
-                              Name 160  "txval60"
-                              Name 166  "txval61"
-                              Name 172  "txval62"
-                              Name 178  "txval70"
-                              Name 184  "txval71"
-                              Name 190  "txval72"
-                              Name 196  "PS_OUTPUT"
-                              MemberName 196(PS_OUTPUT) 0  "Color"
-                              MemberName 196(PS_OUTPUT) 1  "Depth"
-                              Name 198  "psout"
-                              Name 205  "Color"
-                              Name 209  "Depth"
-                              Name 213  "g_sSamp2d"
-                              Name 216  "g_tTex1df4a"
-                              Name 217  "g_tTex1df4"
-                              Name 220  "g_tTex1di4"
-                              Name 223  "g_tTex1du4"
-                              Name 226  "g_tTex3df4"
-                              Name 229  "g_tTex3di4"
-                              Name 232  "g_tTex3du4"
-                              Name 234  "c1"
-                              Name 236  "c4"
+                              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
-                              Decorate 32(g_tTex2di4) DescriptorSet 0
-                              Decorate 45(g_tTex2du4) DescriptorSet 0
-                              Decorate 112(g_tTexcdf4) DescriptorSet 0
-                              Decorate 125(g_tTexcdi4) DescriptorSet 0
-                              Decorate 135(g_tTexcdu4) DescriptorSet 0
-                              Decorate 205(Color) Location 0
-                              Decorate 209(Depth) BuiltIn FragDepth
-                              Decorate 213(g_sSamp2d) DescriptorSet 0
-                              Decorate 216(g_tTex1df4a) DescriptorSet 0
-                              Decorate 216(g_tTex1df4a) Binding 1
-                              Decorate 217(g_tTex1df4) DescriptorSet 0
-                              Decorate 217(g_tTex1df4) Binding 0
-                              Decorate 220(g_tTex1di4) DescriptorSet 0
-                              Decorate 223(g_tTex1du4) DescriptorSet 0
-                              Decorate 226(g_tTex3df4) DescriptorSet 0
-                              Decorate 229(g_tTex3di4) DescriptorSet 0
-                              Decorate 232(g_tTex3du4) DescriptorSet 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -698,254 +844,275 @@ gl_FragCoord origin is upper left
      16(g_sSamp):     15(ptr) Variable UniformConstant
               18:             TypeSampledImage 10
               20:             TypeVector 6(float) 2
-              21:             TypePointer UniformConstant 20(fvec2)
-          22(c2):     21(ptr) Variable UniformConstant
-              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
-              39:             TypeInt 32 0
-              40:             TypeVector 39(int) 4
-              41:             TypePointer Function 40(ivec4)
-              43:             TypeImage 39(int) 2D sampled format:Unknown
-              44:             TypePointer UniformConstant 43
-  45(g_tTex2du4):     44(ptr) Variable UniformConstant
-              48:             TypeSampledImage 43
-              57:     24(int) Constant 1
-              76:     24(int) Constant 2
-              95:     24(int) Constant 3
-             110:             TypeImage 6(float) Cube sampled format:Unknown
-             111:             TypePointer UniformConstant 110
- 112(g_tTexcdf4):    111(ptr) Variable UniformConstant
-             115:             TypeSampledImage 110
-             117:             TypeVector 6(float) 3
-             118:             TypePointer UniformConstant 117(fvec3)
-         119(c3):    118(ptr) Variable UniformConstant
-             123:             TypeImage 24(int) Cube sampled format:Unknown
-             124:             TypePointer UniformConstant 123
- 125(g_tTexcdi4):    124(ptr) Variable UniformConstant
-             128:             TypeSampledImage 123
-             133:             TypeImage 39(int) Cube sampled format:Unknown
-             134:             TypePointer UniformConstant 133
- 135(g_tTexcdu4):    134(ptr) Variable UniformConstant
-             138:             TypeSampledImage 133
-  196(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             197:             TypePointer Function 196(PS_OUTPUT)
-             199:    6(float) Constant 1065353216
-             200:    7(fvec4) ConstantComposite 199 199 199 199
-             202:             TypePointer Function 6(float)
-             204:             TypePointer Output 7(fvec4)
-      205(Color):    204(ptr) Variable Output
-             208:             TypePointer Output 6(float)
-      209(Depth):    208(ptr) Variable Output
-  213(g_sSamp2d):     15(ptr) Variable UniformConstant
-             214:             TypeImage 6(float) 1D sampled format:Unknown
-             215:             TypePointer UniformConstant 214
-216(g_tTex1df4a):    215(ptr) Variable UniformConstant
- 217(g_tTex1df4):    215(ptr) Variable UniformConstant
-             218:             TypeImage 24(int) 1D sampled format:Unknown
-             219:             TypePointer UniformConstant 218
- 220(g_tTex1di4):    219(ptr) Variable UniformConstant
-             221:             TypeImage 39(int) 1D sampled format:Unknown
-             222:             TypePointer UniformConstant 221
- 223(g_tTex1du4):    222(ptr) Variable UniformConstant
-             224:             TypeImage 6(float) 3D sampled format:Unknown
-             225:             TypePointer UniformConstant 224
- 226(g_tTex3df4):    225(ptr) Variable UniformConstant
-             227:             TypeImage 24(int) 3D sampled format:Unknown
-             228:             TypePointer UniformConstant 227
- 229(g_tTex3di4):    228(ptr) Variable UniformConstant
-             230:             TypeImage 39(int) 3D sampled format:Unknown
-             231:             TypePointer UniformConstant 230
- 232(g_tTex3du4):    231(ptr) Variable UniformConstant
-             233:             TypePointer UniformConstant 6(float)
-         234(c1):    233(ptr) Variable UniformConstant
-             235:             TypePointer UniformConstant 7(fvec4)
-         236(c4):    235(ptr) Variable UniformConstant
+              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
+             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
          4(main):           2 Function None 3
                5:             Label
       9(txval00):      8(ptr) Variable Function
-     29(txval01):     28(ptr) Variable Function
-     42(txval02):     41(ptr) Variable Function
-     52(txval10):      8(ptr) Variable Function
-     59(txval11):     28(ptr) Variable Function
-     65(txval12):     41(ptr) Variable Function
-     71(txval20):      8(ptr) Variable Function
-     78(txval21):     28(ptr) Variable Function
-     84(txval22):     41(ptr) Variable Function
-     90(txval30):      8(ptr) Variable Function
-     97(txval31):     28(ptr) Variable Function
-    103(txval32):     41(ptr) Variable Function
-    109(txval40):      8(ptr) Variable Function
-    122(txval41):     28(ptr) Variable Function
-    132(txval42):     41(ptr) Variable Function
-    142(txval50):      8(ptr) Variable Function
-    148(txval51):     28(ptr) Variable Function
-    154(txval52):     41(ptr) Variable Function
-    160(txval60):      8(ptr) Variable Function
-    166(txval61):     28(ptr) Variable Function
-    172(txval62):     41(ptr) Variable Function
-    178(txval70):      8(ptr) Variable Function
-    184(txval71):     28(ptr) Variable Function
-    190(txval72):     41(ptr) Variable Function
-      198(psout):    197(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
-              23:   20(fvec2) Load 22(c2)
-              26:    7(fvec4) ImageGather 19 23 25
-                              Store 9(txval00) 26
-              33:          30 Load 32(g_tTex2di4)
-              34:          14 Load 16(g_sSamp)
-              36:          35 SampledImage 33 34
-              37:   20(fvec2) Load 22(c2)
-              38:   27(ivec4) ImageGather 36 37 25
-                              Store 29(txval01) 38
-              46:          43 Load 45(g_tTex2du4)
-              47:          14 Load 16(g_sSamp)
-              49:          48 SampledImage 46 47
-              50:   20(fvec2) Load 22(c2)
-              51:   40(ivec4) ImageGather 49 50 25
-                              Store 42(txval02) 51
-              53:          10 Load 12(g_tTex2df4)
-              54:          14 Load 16(g_sSamp)
-              55:          18 SampledImage 53 54
-              56:   20(fvec2) Load 22(c2)
-              58:    7(fvec4) ImageGather 55 56 57
-                              Store 52(txval10) 58
-              60:          30 Load 32(g_tTex2di4)
+              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:          35 SampledImage 60 61
-              63:   20(fvec2) Load 22(c2)
-              64:   27(ivec4) ImageGather 62 63 57
-                              Store 59(txval11) 64
-              66:          43 Load 45(g_tTex2du4)
-              67:          14 Load 16(g_sSamp)
-              68:          48 SampledImage 66 67
-              69:   20(fvec2) Load 22(c2)
-              70:   40(ivec4) ImageGather 68 69 57
-                              Store 65(txval12) 70
-              72:          10 Load 12(g_tTex2df4)
-              73:          14 Load 16(g_sSamp)
-              74:          18 SampledImage 72 73
-              75:   20(fvec2) Load 22(c2)
-              77:    7(fvec4) ImageGather 74 75 76
-                              Store 71(txval20) 77
-              79:          30 Load 32(g_tTex2di4)
-              80:          14 Load 16(g_sSamp)
-              81:          35 SampledImage 79 80
-              82:   20(fvec2) Load 22(c2)
-              83:   27(ivec4) ImageGather 81 82 76
-                              Store 78(txval21) 83
-              85:          43 Load 45(g_tTex2du4)
-              86:          14 Load 16(g_sSamp)
-              87:          48 SampledImage 85 86
-              88:   20(fvec2) Load 22(c2)
-              89:   40(ivec4) ImageGather 87 88 76
-                              Store 84(txval22) 89
-              91:          10 Load 12(g_tTex2df4)
-              92:          14 Load 16(g_sSamp)
-              93:          18 SampledImage 91 92
-              94:   20(fvec2) Load 22(c2)
-              96:    7(fvec4) ImageGather 93 94 95
-                              Store 90(txval30) 96
-              98:          30 Load 32(g_tTex2di4)
-              99:          14 Load 16(g_sSamp)
-             100:          35 SampledImage 98 99
-             101:   20(fvec2) Load 22(c2)
-             102:   27(ivec4) ImageGather 100 101 95
-                              Store 97(txval31) 102
-             104:          43 Load 45(g_tTex2du4)
-             105:          14 Load 16(g_sSamp)
-             106:          48 SampledImage 104 105
-             107:   20(fvec2) Load 22(c2)
-             108:   40(ivec4) ImageGather 106 107 95
-                              Store 103(txval32) 108
-             113:         110 Load 112(g_tTexcdf4)
-             114:          14 Load 16(g_sSamp)
-             116:         115 SampledImage 113 114
-             120:  117(fvec3) Load 119(c3)
-             121:    7(fvec4) ImageGather 116 120 25
-                              Store 109(txval40) 121
-             126:         123 Load 125(g_tTexcdi4)
-             127:          14 Load 16(g_sSamp)
-             129:         128 SampledImage 126 127
-             130:  117(fvec3) Load 119(c3)
-             131:   27(ivec4) ImageGather 129 130 25
-                              Store 122(txval41) 131
-             136:         133 Load 135(g_tTexcdu4)
-             137:          14 Load 16(g_sSamp)
-             139:         138 SampledImage 136 137
-             140:  117(fvec3) Load 119(c3)
-             141:   40(ivec4) ImageGather 139 140 25
-                              Store 132(txval42) 141
-             143:         110 Load 112(g_tTexcdf4)
-             144:          14 Load 16(g_sSamp)
-             145:         115 SampledImage 143 144
-             146:  117(fvec3) Load 119(c3)
-             147:    7(fvec4) ImageGather 145 146 57
-                              Store 142(txval50) 147
-             149:         123 Load 125(g_tTexcdi4)
-             150:          14 Load 16(g_sSamp)
-             151:         128 SampledImage 149 150
-             152:  117(fvec3) Load 119(c3)
-             153:   27(ivec4) ImageGather 151 152 57
-                              Store 148(txval51) 153
-             155:         133 Load 135(g_tTexcdu4)
-             156:          14 Load 16(g_sSamp)
-             157:         138 SampledImage 155 156
-             158:  117(fvec3) Load 119(c3)
-             159:   40(ivec4) ImageGather 157 158 57
-                              Store 154(txval52) 159
-             161:         110 Load 112(g_tTexcdf4)
-             162:          14 Load 16(g_sSamp)
-             163:         115 SampledImage 161 162
-             164:  117(fvec3) Load 119(c3)
-             165:    7(fvec4) ImageGather 163 164 76
-                              Store 160(txval60) 165
-             167:         123 Load 125(g_tTexcdi4)
-             168:          14 Load 16(g_sSamp)
-             169:         128 SampledImage 167 168
-             170:  117(fvec3) Load 119(c3)
-             171:   27(ivec4) ImageGather 169 170 76
-                              Store 166(txval61) 171
-             173:         133 Load 135(g_tTexcdu4)
+              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:         138 SampledImage 173 174
-             176:  117(fvec3) Load 119(c3)
-             177:   40(ivec4) ImageGather 175 176 76
-                              Store 172(txval62) 177
-             179:         110 Load 112(g_tTexcdf4)
-             180:          14 Load 16(g_sSamp)
-             181:         115 SampledImage 179 180
-             182:  117(fvec3) Load 119(c3)
-             183:    7(fvec4) ImageGather 181 182 95
-                              Store 178(txval70) 183
-             185:         123 Load 125(g_tTexcdi4)
-             186:          14 Load 16(g_sSamp)
-             187:         128 SampledImage 185 186
-             188:  117(fvec3) Load 119(c3)
-             189:   27(ivec4) ImageGather 187 188 95
-                              Store 184(txval71) 189
-             191:         133 Load 135(g_tTexcdu4)
-             192:          14 Load 16(g_sSamp)
-             193:         138 SampledImage 191 192
-             194:  117(fvec3) Load 119(c3)
-             195:   40(ivec4) ImageGather 193 194 95
-                              Store 190(txval72) 195
-             201:      8(ptr) AccessChain 198(psout) 25
-                              Store 201 200
-             203:    202(ptr) AccessChain 198(psout) 57
-                              Store 203 199
-             206:      8(ptr) AccessChain 198(psout) 25
-             207:    7(fvec4) Load 206
-                              Store 205(Color) 207
-             210:    202(ptr) AccessChain 198(psout) 57
-             211:    6(float) Load 210
-                              Store 209(Depth) 211
+             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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index a869ba731f2b4fa80eb9b57297b1366911dad8c0..433957417e5dc504bc074ac174be350aa0ef411a 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -2,319 +2,571 @@ hlsl.gatherRGBA.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:39  Function Definition: main( (global 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
 0:46        move second child to first child (temp 4-component vector of float)
 0:46          'txval001' (temp 4-component vector of float)
-0:46          textureGatherOffset (global 4-component vector of float)
+0:46          textureGatherOffset (temp 4-component vector of float)
 0:46            Construct combined texture-sampler (temp sampler2D)
 0:46              'g_tTex2df4' (uniform texture2D)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c2' (uniform 2-component vector of float)
-0:46            'o2' (uniform 2-component vector of int)
+0:46            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                1 (const uint)
+0:46            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46              '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})
+0:46              Constant:
+0:46                5 (const uint)
 0:46            Constant:
 0:46              0 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of int)
 0:47          'txval011' (temp 4-component vector of int)
-0:47          textureGatherOffset (global 4-component vector of int)
+0:47          textureGatherOffset (temp 4-component vector of int)
 0:47            Construct combined texture-sampler (temp isampler2D)
 0:47              'g_tTex2di4' (uniform itexture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c2' (uniform 2-component vector of float)
-0:47            'o2' (uniform 2-component vector of int)
+0:47            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                1 (const uint)
+0:47            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:47              '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})
+0:47              Constant:
+0:47                5 (const uint)
 0:47            Constant:
 0:47              0 (const int)
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of uint)
 0:48          'txval021' (temp 4-component vector of uint)
-0:48          textureGatherOffset (global 4-component vector of uint)
+0:48          textureGatherOffset (temp 4-component vector of uint)
 0:48            Construct combined texture-sampler (temp usampler2D)
 0:48              'g_tTex2du4' (uniform utexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            'c2' (uniform 2-component vector of float)
-0:48            'o2' (uniform 2-component vector of int)
+0:48            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:48              '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})
+0:48              Constant:
+0:48                1 (const uint)
+0:48            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:48              '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})
+0:48              Constant:
+0:48                5 (const uint)
 0:48            Constant:
 0:48              0 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp 4-component vector of float)
 0:50          'txval004' (temp 4-component vector of float)
-0:50          textureGatherOffsets (global 4-component vector of float)
+0:50          textureGatherOffsets (temp 4-component vector of float)
 0:50            Construct combined texture-sampler (temp sampler2D)
 0:50              'g_tTex2df4' (uniform texture2D)
 0:50              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:50            'c2' (uniform 2-component vector of float)
+0:50            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:50              '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})
+0:50              Constant:
+0:50                1 (const uint)
 0:50            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
 0:50            Constant:
 0:50              0 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of int)
 0:51          'txval014' (temp 4-component vector of int)
-0:51          textureGatherOffsets (global 4-component vector of int)
+0:51          textureGatherOffsets (temp 4-component vector of int)
 0:51            Construct combined texture-sampler (temp isampler2D)
 0:51              'g_tTex2di4' (uniform itexture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c2' (uniform 2-component vector of float)
+0:51            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                1 (const uint)
 0:51            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
 0:51            Constant:
 0:51              0 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of uint)
 0:52          'txval024' (temp 4-component vector of uint)
-0:52          textureGatherOffsets (global 4-component vector of uint)
+0:52          textureGatherOffsets (temp 4-component vector of uint)
 0:52            Construct combined texture-sampler (temp usampler2D)
 0:52              'g_tTex2du4' (uniform utexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c2' (uniform 2-component vector of float)
+0:52            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                1 (const uint)
 0:52            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
 0:52            Constant:
 0:52              0 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of float)
 0:62          'txval101' (temp 4-component vector of float)
-0:62          textureGatherOffset (global 4-component vector of float)
+0:62          textureGatherOffset (temp 4-component vector of float)
 0:62            Construct combined texture-sampler (temp sampler2D)
 0:62              'g_tTex2df4' (uniform texture2D)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c2' (uniform 2-component vector of float)
-0:62            'o2' (uniform 2-component vector of int)
+0:62            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                1 (const uint)
+0:62            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62              '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})
+0:62              Constant:
+0:62                5 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of int)
 0:63          'txval111' (temp 4-component vector of int)
-0:63          textureGatherOffset (global 4-component vector of int)
+0:63          textureGatherOffset (temp 4-component vector of int)
 0:63            Construct combined texture-sampler (temp isampler2D)
 0:63              'g_tTex2di4' (uniform itexture2D)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c2' (uniform 2-component vector of float)
-0:63            'o2' (uniform 2-component vector of int)
+0:63            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                1 (const uint)
+0:63            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:63              '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})
+0:63              Constant:
+0:63                5 (const uint)
 0:63            Constant:
 0:63              1 (const int)
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of uint)
 0:64          'txval121' (temp 4-component vector of uint)
-0:64          textureGatherOffset (global 4-component vector of uint)
+0:64          textureGatherOffset (temp 4-component vector of uint)
 0:64            Construct combined texture-sampler (temp usampler2D)
 0:64              'g_tTex2du4' (uniform utexture2D)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:64            'c2' (uniform 2-component vector of float)
-0:64            'o2' (uniform 2-component vector of int)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:64              '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})
+0:64              Constant:
+0:64                1 (const uint)
+0:64            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:64              '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})
+0:64              Constant:
+0:64                5 (const uint)
 0:64            Constant:
 0:64              1 (const int)
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of float)
 0:66          'txval104' (temp 4-component vector of float)
-0:66          textureGatherOffsets (global 4-component vector of float)
+0:66          textureGatherOffsets (temp 4-component vector of float)
 0:66            Construct combined texture-sampler (temp sampler2D)
 0:66              'g_tTex2df4' (uniform texture2D)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:66            'c2' (uniform 2-component vector of float)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:66              '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})
+0:66              Constant:
+0:66                1 (const uint)
 0:66            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
 0:66            Constant:
 0:66              1 (const int)
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of int)
 0:67          'txval114' (temp 4-component vector of int)
-0:67          textureGatherOffsets (global 4-component vector of int)
+0:67          textureGatherOffsets (temp 4-component vector of int)
 0:67            Construct combined texture-sampler (temp isampler2D)
 0:67              'g_tTex2di4' (uniform itexture2D)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:67            'c2' (uniform 2-component vector of float)
+0:67            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:67              '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})
+0:67              Constant:
+0:67                1 (const uint)
 0:67            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
 0:67            Constant:
 0:67              1 (const int)
 0:68      Sequence
 0:68        move second child to first child (temp 4-component vector of uint)
 0:68          'txval124' (temp 4-component vector of uint)
-0:68          textureGatherOffsets (global 4-component vector of uint)
+0:68          textureGatherOffsets (temp 4-component vector of uint)
 0:68            Construct combined texture-sampler (temp usampler2D)
 0:68              'g_tTex2du4' (uniform utexture2D)
 0:68              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:68            'c2' (uniform 2-component vector of float)
+0:68            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:68              '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})
+0:68              Constant:
+0:68                1 (const uint)
 0:68            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
 0:68            Constant:
 0:68              1 (const int)
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval201' (temp 4-component vector of float)
-0:78          textureGatherOffset (global 4-component vector of float)
+0:78          textureGatherOffset (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler2D)
 0:78              'g_tTex2df4' (uniform texture2D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:78            'c2' (uniform 2-component vector of float)
-0:78            'o2' (uniform 2-component vector of int)
+0:78            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:78              '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})
+0:78              Constant:
+0:78                1 (const uint)
+0:78            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78              '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})
+0:78              Constant:
+0:78                5 (const uint)
 0:78            Constant:
 0:78              2 (const int)
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval211' (temp 4-component vector of int)
-0:79          textureGatherOffset (global 4-component vector of int)
+0:79          textureGatherOffset (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler2D)
 0:79              'g_tTex2di4' (uniform itexture2D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:79            'c2' (uniform 2-component vector of float)
-0:79            'o2' (uniform 2-component vector of int)
+0:79            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:79              '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})
+0:79              Constant:
+0:79                1 (const uint)
+0:79            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:79              '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})
+0:79              Constant:
+0:79                5 (const uint)
 0:79            Constant:
 0:79              2 (const int)
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval221' (temp 4-component vector of uint)
-0:80          textureGatherOffset (global 4-component vector of uint)
+0:80          textureGatherOffset (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler2D)
 0:80              'g_tTex2du4' (uniform utexture2D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:80            'c2' (uniform 2-component vector of float)
-0:80            'o2' (uniform 2-component vector of int)
+0:80            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:80              '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})
+0:80              Constant:
+0:80                1 (const uint)
+0:80            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:80              '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})
+0:80              Constant:
+0:80                5 (const uint)
 0:80            Constant:
 0:80              2 (const int)
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval204' (temp 4-component vector of float)
-0:82          textureGatherOffsets (global 4-component vector of float)
+0:82          textureGatherOffsets (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp sampler2D)
 0:82              'g_tTex2df4' (uniform texture2D)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:82            'c2' (uniform 2-component vector of float)
+0:82            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:82              '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})
+0:82              Constant:
+0:82                1 (const uint)
 0:82            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
 0:82            Constant:
 0:82              2 (const int)
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval214' (temp 4-component vector of int)
-0:83          textureGatherOffsets (global 4-component vector of int)
+0:83          textureGatherOffsets (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isampler2D)
 0:83              'g_tTex2di4' (uniform itexture2D)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:83            'c2' (uniform 2-component vector of float)
+0:83            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:83              '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})
+0:83              Constant:
+0:83                1 (const uint)
 0:83            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
 0:83            Constant:
 0:83              2 (const int)
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval224' (temp 4-component vector of uint)
-0:84          textureGatherOffsets (global 4-component vector of uint)
+0:84          textureGatherOffsets (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usampler2D)
 0:84              'g_tTex2du4' (uniform utexture2D)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:84            'c2' (uniform 2-component vector of float)
+0:84            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:84              '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})
+0:84              Constant:
+0:84                1 (const uint)
 0:84            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
 0:84            Constant:
 0:84              2 (const int)
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of float)
 0:94          'txval301' (temp 4-component vector of float)
-0:94          textureGatherOffset (global 4-component vector of float)
+0:94          textureGatherOffset (temp 4-component vector of float)
 0:94            Construct combined texture-sampler (temp sampler2D)
 0:94              'g_tTex2df4' (uniform texture2D)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:94            'c2' (uniform 2-component vector of float)
-0:94            'o2' (uniform 2-component vector of int)
+0:94            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:94              '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})
+0:94              Constant:
+0:94                1 (const uint)
+0:94            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94              '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})
+0:94              Constant:
+0:94                5 (const uint)
 0:94            Constant:
 0:94              3 (const int)
 0:95      Sequence
 0:95        move second child to first child (temp 4-component vector of int)
 0:95          'txval311' (temp 4-component vector of int)
-0:95          textureGatherOffset (global 4-component vector of int)
+0:95          textureGatherOffset (temp 4-component vector of int)
 0:95            Construct combined texture-sampler (temp isampler2D)
 0:95              'g_tTex2di4' (uniform itexture2D)
 0:95              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:95            'c2' (uniform 2-component vector of float)
-0:95            'o2' (uniform 2-component vector of int)
+0:95            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:95              '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})
+0:95              Constant:
+0:95                1 (const uint)
+0:95            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:95              '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})
+0:95              Constant:
+0:95                5 (const uint)
 0:95            Constant:
 0:95              3 (const int)
 0:96      Sequence
 0:96        move second child to first child (temp 4-component vector of uint)
 0:96          'txval321' (temp 4-component vector of uint)
-0:96          textureGatherOffset (global 4-component vector of uint)
+0:96          textureGatherOffset (temp 4-component vector of uint)
 0:96            Construct combined texture-sampler (temp usampler2D)
 0:96              'g_tTex2du4' (uniform utexture2D)
 0:96              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:96            'c2' (uniform 2-component vector of float)
-0:96            'o2' (uniform 2-component vector of int)
+0:96            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:96              '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})
+0:96              Constant:
+0:96                1 (const uint)
+0:96            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:96              '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})
+0:96              Constant:
+0:96                5 (const uint)
 0:96            Constant:
 0:96              3 (const int)
 0:98      Sequence
 0:98        move second child to first child (temp 4-component vector of float)
 0:98          'txval304' (temp 4-component vector of float)
-0:98          textureGatherOffsets (global 4-component vector of float)
+0:98          textureGatherOffsets (temp 4-component vector of float)
 0:98            Construct combined texture-sampler (temp sampler2D)
 0:98              'g_tTex2df4' (uniform texture2D)
 0:98              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:98            'c2' (uniform 2-component vector of float)
+0:98            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:98              '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})
+0:98              Constant:
+0:98                1 (const uint)
 0:98            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
 0:98            Constant:
 0:98              3 (const int)
 0:99      Sequence
 0:99        move second child to first child (temp 4-component vector of int)
 0:99          'txval314' (temp 4-component vector of int)
-0:99          textureGatherOffsets (global 4-component vector of int)
+0:99          textureGatherOffsets (temp 4-component vector of int)
 0:99            Construct combined texture-sampler (temp isampler2D)
 0:99              'g_tTex2di4' (uniform itexture2D)
 0:99              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:99            'c2' (uniform 2-component vector of float)
+0:99            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:99              '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})
+0:99              Constant:
+0:99                1 (const uint)
 0:99            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
 0:99            Constant:
 0:99              3 (const int)
 0:100      Sequence
 0:100        move second child to first child (temp 4-component vector of uint)
 0:100          'txval324' (temp 4-component vector of uint)
-0:100          textureGatherOffsets (global 4-component vector of uint)
+0:100          textureGatherOffsets (temp 4-component vector of uint)
 0:100            Construct combined texture-sampler (temp usampler2D)
 0:100              'g_tTex2du4' (uniform utexture2D)
 0:100              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:100            'c2' (uniform 2-component vector of float)
+0:100            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:100              '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})
+0:100              Constant:
+0:100                1 (const uint)
 0:100            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
 0:100            Constant:
 0:100              3 (const int)
 0:112      move second child to first child (temp 4-component vector of float)
@@ -334,8 +586,8 @@ gl_FragCoord origin is upper left
 0:113            1 (const int)
 0:113        Constant:
 0:113          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -350,6 +602,8 @@ gl_FragCoord origin is upper left
 0:115                1 (const int)
 0:115        Branch: Return
 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)
@@ -365,16 +619,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -383,319 +628,571 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:39  Function Definition: main( (global 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
 0:46        move second child to first child (temp 4-component vector of float)
 0:46          'txval001' (temp 4-component vector of float)
-0:46          textureGatherOffset (global 4-component vector of float)
+0:46          textureGatherOffset (temp 4-component vector of float)
 0:46            Construct combined texture-sampler (temp sampler2D)
 0:46              'g_tTex2df4' (uniform texture2D)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c2' (uniform 2-component vector of float)
-0:46            'o2' (uniform 2-component vector of int)
+0:46            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                1 (const uint)
+0:46            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46              '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})
+0:46              Constant:
+0:46                5 (const uint)
 0:46            Constant:
 0:46              0 (const int)
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of int)
 0:47          'txval011' (temp 4-component vector of int)
-0:47          textureGatherOffset (global 4-component vector of int)
+0:47          textureGatherOffset (temp 4-component vector of int)
 0:47            Construct combined texture-sampler (temp isampler2D)
 0:47              'g_tTex2di4' (uniform itexture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            'c2' (uniform 2-component vector of float)
-0:47            'o2' (uniform 2-component vector of int)
+0:47            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47              '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})
+0:47              Constant:
+0:47                1 (const uint)
+0:47            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:47              '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})
+0:47              Constant:
+0:47                5 (const uint)
 0:47            Constant:
 0:47              0 (const int)
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of uint)
 0:48          'txval021' (temp 4-component vector of uint)
-0:48          textureGatherOffset (global 4-component vector of uint)
+0:48          textureGatherOffset (temp 4-component vector of uint)
 0:48            Construct combined texture-sampler (temp usampler2D)
 0:48              'g_tTex2du4' (uniform utexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            'c2' (uniform 2-component vector of float)
-0:48            'o2' (uniform 2-component vector of int)
+0:48            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:48              '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})
+0:48              Constant:
+0:48                1 (const uint)
+0:48            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:48              '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})
+0:48              Constant:
+0:48                5 (const uint)
 0:48            Constant:
 0:48              0 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp 4-component vector of float)
 0:50          'txval004' (temp 4-component vector of float)
-0:50          textureGatherOffsets (global 4-component vector of float)
+0:50          textureGatherOffsets (temp 4-component vector of float)
 0:50            Construct combined texture-sampler (temp sampler2D)
 0:50              'g_tTex2df4' (uniform texture2D)
 0:50              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:50            'c2' (uniform 2-component vector of float)
+0:50            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:50              '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})
+0:50              Constant:
+0:50                1 (const uint)
 0:50            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
-0:50              'o2' (uniform 2-component vector of int)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
+0:50              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:50                '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})
+0:50                Constant:
+0:50                  5 (const uint)
 0:50            Constant:
 0:50              0 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of int)
 0:51          'txval014' (temp 4-component vector of int)
-0:51          textureGatherOffsets (global 4-component vector of int)
+0:51          textureGatherOffsets (temp 4-component vector of int)
 0:51            Construct combined texture-sampler (temp isampler2D)
 0:51              'g_tTex2di4' (uniform itexture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:51            'c2' (uniform 2-component vector of float)
+0:51            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51              '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})
+0:51              Constant:
+0:51                1 (const uint)
 0:51            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
-0:51              'o2' (uniform 2-component vector of int)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
+0:51              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:51                '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})
+0:51                Constant:
+0:51                  5 (const uint)
 0:51            Constant:
 0:51              0 (const int)
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of uint)
 0:52          'txval024' (temp 4-component vector of uint)
-0:52          textureGatherOffsets (global 4-component vector of uint)
+0:52          textureGatherOffsets (temp 4-component vector of uint)
 0:52            Construct combined texture-sampler (temp usampler2D)
 0:52              'g_tTex2du4' (uniform utexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            'c2' (uniform 2-component vector of float)
+0:52            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:52              '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})
+0:52              Constant:
+0:52                1 (const uint)
 0:52            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
-0:52              'o2' (uniform 2-component vector of int)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
+0:52              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:52                '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})
+0:52                Constant:
+0:52                  5 (const uint)
 0:52            Constant:
 0:52              0 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of float)
 0:62          'txval101' (temp 4-component vector of float)
-0:62          textureGatherOffset (global 4-component vector of float)
+0:62          textureGatherOffset (temp 4-component vector of float)
 0:62            Construct combined texture-sampler (temp sampler2D)
 0:62              'g_tTex2df4' (uniform texture2D)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c2' (uniform 2-component vector of float)
-0:62            'o2' (uniform 2-component vector of int)
+0:62            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                1 (const uint)
+0:62            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62              '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})
+0:62              Constant:
+0:62                5 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of int)
 0:63          'txval111' (temp 4-component vector of int)
-0:63          textureGatherOffset (global 4-component vector of int)
+0:63          textureGatherOffset (temp 4-component vector of int)
 0:63            Construct combined texture-sampler (temp isampler2D)
 0:63              'g_tTex2di4' (uniform itexture2D)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:63            'c2' (uniform 2-component vector of float)
-0:63            'o2' (uniform 2-component vector of int)
+0:63            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:63              '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})
+0:63              Constant:
+0:63                1 (const uint)
+0:63            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:63              '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})
+0:63              Constant:
+0:63                5 (const uint)
 0:63            Constant:
 0:63              1 (const int)
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of uint)
 0:64          'txval121' (temp 4-component vector of uint)
-0:64          textureGatherOffset (global 4-component vector of uint)
+0:64          textureGatherOffset (temp 4-component vector of uint)
 0:64            Construct combined texture-sampler (temp usampler2D)
 0:64              'g_tTex2du4' (uniform utexture2D)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:64            'c2' (uniform 2-component vector of float)
-0:64            'o2' (uniform 2-component vector of int)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:64              '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})
+0:64              Constant:
+0:64                1 (const uint)
+0:64            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:64              '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})
+0:64              Constant:
+0:64                5 (const uint)
 0:64            Constant:
 0:64              1 (const int)
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of float)
 0:66          'txval104' (temp 4-component vector of float)
-0:66          textureGatherOffsets (global 4-component vector of float)
+0:66          textureGatherOffsets (temp 4-component vector of float)
 0:66            Construct combined texture-sampler (temp sampler2D)
 0:66              'g_tTex2df4' (uniform texture2D)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:66            'c2' (uniform 2-component vector of float)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:66              '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})
+0:66              Constant:
+0:66                1 (const uint)
 0:66            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
-0:66              'o2' (uniform 2-component vector of int)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
+0:66              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:66                '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})
+0:66                Constant:
+0:66                  5 (const uint)
 0:66            Constant:
 0:66              1 (const int)
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of int)
 0:67          'txval114' (temp 4-component vector of int)
-0:67          textureGatherOffsets (global 4-component vector of int)
+0:67          textureGatherOffsets (temp 4-component vector of int)
 0:67            Construct combined texture-sampler (temp isampler2D)
 0:67              'g_tTex2di4' (uniform itexture2D)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:67            'c2' (uniform 2-component vector of float)
+0:67            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:67              '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})
+0:67              Constant:
+0:67                1 (const uint)
 0:67            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
-0:67              'o2' (uniform 2-component vector of int)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
+0:67              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:67                '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})
+0:67                Constant:
+0:67                  5 (const uint)
 0:67            Constant:
 0:67              1 (const int)
 0:68      Sequence
 0:68        move second child to first child (temp 4-component vector of uint)
 0:68          'txval124' (temp 4-component vector of uint)
-0:68          textureGatherOffsets (global 4-component vector of uint)
+0:68          textureGatherOffsets (temp 4-component vector of uint)
 0:68            Construct combined texture-sampler (temp usampler2D)
 0:68              'g_tTex2du4' (uniform utexture2D)
 0:68              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:68            'c2' (uniform 2-component vector of float)
+0:68            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:68              '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})
+0:68              Constant:
+0:68                1 (const uint)
 0:68            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
-0:68              'o2' (uniform 2-component vector of int)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
+0:68              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:68                '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})
+0:68                Constant:
+0:68                  5 (const uint)
 0:68            Constant:
 0:68              1 (const int)
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval201' (temp 4-component vector of float)
-0:78          textureGatherOffset (global 4-component vector of float)
+0:78          textureGatherOffset (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler2D)
 0:78              'g_tTex2df4' (uniform texture2D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:78            'c2' (uniform 2-component vector of float)
-0:78            'o2' (uniform 2-component vector of int)
+0:78            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:78              '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})
+0:78              Constant:
+0:78                1 (const uint)
+0:78            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78              '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})
+0:78              Constant:
+0:78                5 (const uint)
 0:78            Constant:
 0:78              2 (const int)
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval211' (temp 4-component vector of int)
-0:79          textureGatherOffset (global 4-component vector of int)
+0:79          textureGatherOffset (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler2D)
 0:79              'g_tTex2di4' (uniform itexture2D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:79            'c2' (uniform 2-component vector of float)
-0:79            'o2' (uniform 2-component vector of int)
+0:79            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:79              '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})
+0:79              Constant:
+0:79                1 (const uint)
+0:79            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:79              '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})
+0:79              Constant:
+0:79                5 (const uint)
 0:79            Constant:
 0:79              2 (const int)
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval221' (temp 4-component vector of uint)
-0:80          textureGatherOffset (global 4-component vector of uint)
+0:80          textureGatherOffset (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler2D)
 0:80              'g_tTex2du4' (uniform utexture2D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:80            'c2' (uniform 2-component vector of float)
-0:80            'o2' (uniform 2-component vector of int)
+0:80            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:80              '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})
+0:80              Constant:
+0:80                1 (const uint)
+0:80            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:80              '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})
+0:80              Constant:
+0:80                5 (const uint)
 0:80            Constant:
 0:80              2 (const int)
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval204' (temp 4-component vector of float)
-0:82          textureGatherOffsets (global 4-component vector of float)
+0:82          textureGatherOffsets (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp sampler2D)
 0:82              'g_tTex2df4' (uniform texture2D)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:82            'c2' (uniform 2-component vector of float)
+0:82            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:82              '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})
+0:82              Constant:
+0:82                1 (const uint)
 0:82            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
-0:82              'o2' (uniform 2-component vector of int)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
+0:82              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:82                '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})
+0:82                Constant:
+0:82                  5 (const uint)
 0:82            Constant:
 0:82              2 (const int)
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval214' (temp 4-component vector of int)
-0:83          textureGatherOffsets (global 4-component vector of int)
+0:83          textureGatherOffsets (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isampler2D)
 0:83              'g_tTex2di4' (uniform itexture2D)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:83            'c2' (uniform 2-component vector of float)
+0:83            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:83              '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})
+0:83              Constant:
+0:83                1 (const uint)
 0:83            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
-0:83              'o2' (uniform 2-component vector of int)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
+0:83              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:83                '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})
+0:83                Constant:
+0:83                  5 (const uint)
 0:83            Constant:
 0:83              2 (const int)
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval224' (temp 4-component vector of uint)
-0:84          textureGatherOffsets (global 4-component vector of uint)
+0:84          textureGatherOffsets (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usampler2D)
 0:84              'g_tTex2du4' (uniform utexture2D)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:84            'c2' (uniform 2-component vector of float)
+0:84            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:84              '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})
+0:84              Constant:
+0:84                1 (const uint)
 0:84            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
-0:84              'o2' (uniform 2-component vector of int)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
+0:84              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:84                '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})
+0:84                Constant:
+0:84                  5 (const uint)
 0:84            Constant:
 0:84              2 (const int)
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of float)
 0:94          'txval301' (temp 4-component vector of float)
-0:94          textureGatherOffset (global 4-component vector of float)
+0:94          textureGatherOffset (temp 4-component vector of float)
 0:94            Construct combined texture-sampler (temp sampler2D)
 0:94              'g_tTex2df4' (uniform texture2D)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:94            'c2' (uniform 2-component vector of float)
-0:94            'o2' (uniform 2-component vector of int)
+0:94            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:94              '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})
+0:94              Constant:
+0:94                1 (const uint)
+0:94            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94              '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})
+0:94              Constant:
+0:94                5 (const uint)
 0:94            Constant:
 0:94              3 (const int)
 0:95      Sequence
 0:95        move second child to first child (temp 4-component vector of int)
 0:95          'txval311' (temp 4-component vector of int)
-0:95          textureGatherOffset (global 4-component vector of int)
+0:95          textureGatherOffset (temp 4-component vector of int)
 0:95            Construct combined texture-sampler (temp isampler2D)
 0:95              'g_tTex2di4' (uniform itexture2D)
 0:95              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:95            'c2' (uniform 2-component vector of float)
-0:95            'o2' (uniform 2-component vector of int)
+0:95            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:95              '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})
+0:95              Constant:
+0:95                1 (const uint)
+0:95            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:95              '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})
+0:95              Constant:
+0:95                5 (const uint)
 0:95            Constant:
 0:95              3 (const int)
 0:96      Sequence
 0:96        move second child to first child (temp 4-component vector of uint)
 0:96          'txval321' (temp 4-component vector of uint)
-0:96          textureGatherOffset (global 4-component vector of uint)
+0:96          textureGatherOffset (temp 4-component vector of uint)
 0:96            Construct combined texture-sampler (temp usampler2D)
 0:96              'g_tTex2du4' (uniform utexture2D)
 0:96              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:96            'c2' (uniform 2-component vector of float)
-0:96            'o2' (uniform 2-component vector of int)
+0:96            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:96              '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})
+0:96              Constant:
+0:96                1 (const uint)
+0:96            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:96              '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})
+0:96              Constant:
+0:96                5 (const uint)
 0:96            Constant:
 0:96              3 (const int)
 0:98      Sequence
 0:98        move second child to first child (temp 4-component vector of float)
 0:98          'txval304' (temp 4-component vector of float)
-0:98          textureGatherOffsets (global 4-component vector of float)
+0:98          textureGatherOffsets (temp 4-component vector of float)
 0:98            Construct combined texture-sampler (temp sampler2D)
 0:98              'g_tTex2df4' (uniform texture2D)
 0:98              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:98            'c2' (uniform 2-component vector of float)
+0:98            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:98              '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})
+0:98              Constant:
+0:98                1 (const uint)
 0:98            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
-0:98              'o2' (uniform 2-component vector of int)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
+0:98              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:98                '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})
+0:98                Constant:
+0:98                  5 (const uint)
 0:98            Constant:
 0:98              3 (const int)
 0:99      Sequence
 0:99        move second child to first child (temp 4-component vector of int)
 0:99          'txval314' (temp 4-component vector of int)
-0:99          textureGatherOffsets (global 4-component vector of int)
+0:99          textureGatherOffsets (temp 4-component vector of int)
 0:99            Construct combined texture-sampler (temp isampler2D)
 0:99              'g_tTex2di4' (uniform itexture2D)
 0:99              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:99            'c2' (uniform 2-component vector of float)
+0:99            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:99              '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})
+0:99              Constant:
+0:99                1 (const uint)
 0:99            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
-0:99              'o2' (uniform 2-component vector of int)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
+0:99              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:99                '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})
+0:99                Constant:
+0:99                  5 (const uint)
 0:99            Constant:
 0:99              3 (const int)
 0:100      Sequence
 0:100        move second child to first child (temp 4-component vector of uint)
 0:100          'txval324' (temp 4-component vector of uint)
-0:100          textureGatherOffsets (global 4-component vector of uint)
+0:100          textureGatherOffsets (temp 4-component vector of uint)
 0:100            Construct combined texture-sampler (temp usampler2D)
 0:100              'g_tTex2du4' (uniform utexture2D)
 0:100              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:100            'c2' (uniform 2-component vector of float)
+0:100            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:100              '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})
+0:100              Constant:
+0:100                1 (const uint)
 0:100            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
-0:100              'o2' (uniform 2-component vector of int)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
+0:100              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:100                '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})
+0:100                Constant:
+0:100                  5 (const uint)
 0:100            Constant:
 0:100              3 (const int)
 0:112      move second child to first child (temp 4-component vector of float)
@@ -715,8 +1212,8 @@ gl_FragCoord origin is upper left
 0:113            1 (const int)
 0:113        Constant:
 0:113          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -731,6 +1228,8 @@ gl_FragCoord origin is upper left
 0:115                1 (const int)
 0:115        Branch: Return
 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)
@@ -746,102 +1245,105 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 318
+// Id's are bound by 392
 
                               Capability Shader
                               Capability ImageGatherExtended
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 267 271
+                              EntryPoint Fragment 4  "main" 355 359
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "txval001"
                               Name 12  "g_tTex2df4"
                               Name 16  "g_sSamp"
-                              Name 22  "c2"
-                              Name 27  "o2"
-                              Name 33  "txval011"
-                              Name 36  "g_tTex2di4"
-                              Name 47  "txval021"
-                              Name 50  "g_tTex2du4"
-                              Name 58  "txval004"
-                              Name 71  "txval014"
-                              Name 82  "txval024"
-                              Name 93  "txval101"
-                              Name 101  "txval111"
-                              Name 108  "txval121"
-                              Name 115  "txval104"
-                              Name 126  "txval114"
-                              Name 137  "txval124"
-                              Name 148  "txval201"
-                              Name 156  "txval211"
-                              Name 163  "txval221"
-                              Name 170  "txval204"
-                              Name 181  "txval214"
-                              Name 192  "txval224"
-                              Name 203  "txval301"
-                              Name 211  "txval311"
-                              Name 218  "txval321"
-                              Name 225  "txval304"
-                              Name 236  "txval314"
-                              Name 247  "txval324"
-                              Name 258  "PS_OUTPUT"
-                              MemberName 258(PS_OUTPUT) 0  "Color"
-                              MemberName 258(PS_OUTPUT) 1  "Depth"
-                              Name 260  "psout"
-                              Name 267  "Color"
-                              Name 271  "Depth"
-                              Name 275  "g_sSamp2d"
-                              Name 278  "g_tTex1df4a"
-                              Name 279  "g_tTex1df4"
-                              Name 282  "g_tTex1di4"
-                              Name 285  "g_tTex1du4"
-                              Name 288  "g_tTex3df4"
-                              Name 291  "g_tTex3di4"
-                              Name 294  "g_tTex3du4"
-                              Name 297  "g_tTexcdf4"
-                              Name 300  "g_tTexcdi4"
-                              Name 303  "g_tTexcdu4"
-                              Name 305  "c1"
-                              Name 308  "c3"
-                              Name 310  "c4"
-                              Name 312  "o1"
-                              Name 315  "o3"
-                              Name 317  "o4"
+                              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
-                              Decorate 36(g_tTex2di4) DescriptorSet 0
-                              Decorate 50(g_tTex2du4) DescriptorSet 0
-                              Decorate 267(Color) Location 0
-                              Decorate 271(Depth) BuiltIn FragDepth
-                              Decorate 275(g_sSamp2d) DescriptorSet 0
-                              Decorate 278(g_tTex1df4a) DescriptorSet 0
-                              Decorate 278(g_tTex1df4a) Binding 1
-                              Decorate 279(g_tTex1df4) DescriptorSet 0
-                              Decorate 279(g_tTex1df4) Binding 0
-                              Decorate 282(g_tTex1di4) DescriptorSet 0
-                              Decorate 285(g_tTex1du4) DescriptorSet 0
-                              Decorate 288(g_tTex3df4) DescriptorSet 0
-                              Decorate 291(g_tTex3di4) DescriptorSet 0
-                              Decorate 294(g_tTex3du4) DescriptorSet 0
-                              Decorate 297(g_tTexcdf4) DescriptorSet 0
-                              Decorate 300(g_tTexcdi4) DescriptorSet 0
-                              Decorate 303(g_tTexcdu4) DescriptorSet 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -855,335 +1357,409 @@ gl_FragCoord origin is upper left
      16(g_sSamp):     15(ptr) Variable UniformConstant
               18:             TypeSampledImage 10
               20:             TypeVector 6(float) 2
-              21:             TypePointer UniformConstant 20(fvec2)
-          22(c2):     21(ptr) Variable UniformConstant
-              24:             TypeInt 32 1
-              25:             TypeVector 24(int) 2
-              26:             TypePointer UniformConstant 25(ivec2)
-          27(o2):     26(ptr) Variable UniformConstant
-              29:     24(int) Constant 0
-              31:             TypeVector 24(int) 4
-              32:             TypePointer Function 31(ivec4)
-              34:             TypeImage 24(int) 2D sampled format:Unknown
-              35:             TypePointer UniformConstant 34
-  36(g_tTex2di4):     35(ptr) Variable UniformConstant
-              39:             TypeSampledImage 34
-              44:             TypeInt 32 0
-              45:             TypeVector 44(int) 4
-              46:             TypePointer Function 45(ivec4)
-              48:             TypeImage 44(int) 2D sampled format:Unknown
-              49:             TypePointer UniformConstant 48
-  50(g_tTex2du4):     49(ptr) Variable UniformConstant
-              53:             TypeSampledImage 48
-              67:     44(int) Constant 4
-              68:             TypeArray 25(ivec2) 67
-              99:     24(int) Constant 1
-             154:     24(int) Constant 2
-             209:     24(int) Constant 3
-  258(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             259:             TypePointer Function 258(PS_OUTPUT)
-             261:    6(float) Constant 1065353216
-             262:    7(fvec4) ConstantComposite 261 261 261 261
-             264:             TypePointer Function 6(float)
-             266:             TypePointer Output 7(fvec4)
-      267(Color):    266(ptr) Variable Output
-             270:             TypePointer Output 6(float)
-      271(Depth):    270(ptr) Variable Output
-  275(g_sSamp2d):     15(ptr) Variable UniformConstant
-             276:             TypeImage 6(float) 1D sampled format:Unknown
-             277:             TypePointer UniformConstant 276
-278(g_tTex1df4a):    277(ptr) Variable UniformConstant
- 279(g_tTex1df4):    277(ptr) Variable UniformConstant
-             280:             TypeImage 24(int) 1D sampled format:Unknown
-             281:             TypePointer UniformConstant 280
- 282(g_tTex1di4):    281(ptr) Variable UniformConstant
-             283:             TypeImage 44(int) 1D sampled format:Unknown
-             284:             TypePointer UniformConstant 283
- 285(g_tTex1du4):    284(ptr) Variable UniformConstant
-             286:             TypeImage 6(float) 3D sampled format:Unknown
-             287:             TypePointer UniformConstant 286
- 288(g_tTex3df4):    287(ptr) Variable UniformConstant
-             289:             TypeImage 24(int) 3D sampled format:Unknown
-             290:             TypePointer UniformConstant 289
- 291(g_tTex3di4):    290(ptr) Variable UniformConstant
-             292:             TypeImage 44(int) 3D sampled format:Unknown
-             293:             TypePointer UniformConstant 292
- 294(g_tTex3du4):    293(ptr) Variable UniformConstant
-             295:             TypeImage 6(float) Cube sampled format:Unknown
-             296:             TypePointer UniformConstant 295
- 297(g_tTexcdf4):    296(ptr) Variable UniformConstant
-             298:             TypeImage 24(int) Cube sampled format:Unknown
-             299:             TypePointer UniformConstant 298
- 300(g_tTexcdi4):    299(ptr) Variable UniformConstant
-             301:             TypeImage 44(int) Cube sampled format:Unknown
-             302:             TypePointer UniformConstant 301
- 303(g_tTexcdu4):    302(ptr) Variable UniformConstant
-             304:             TypePointer UniformConstant 6(float)
-         305(c1):    304(ptr) Variable UniformConstant
-             306:             TypeVector 6(float) 3
-             307:             TypePointer UniformConstant 306(fvec3)
-         308(c3):    307(ptr) Variable UniformConstant
-             309:             TypePointer UniformConstant 7(fvec4)
-         310(c4):    309(ptr) Variable UniformConstant
-             311:             TypePointer UniformConstant 24(int)
-         312(o1):    311(ptr) Variable UniformConstant
-             313:             TypeVector 24(int) 3
-             314:             TypePointer UniformConstant 313(ivec3)
-         315(o3):    314(ptr) Variable UniformConstant
-             316:             TypePointer UniformConstant 31(ivec4)
-         317(o4):    316(ptr) Variable UniformConstant
+              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
+             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
          4(main):           2 Function None 3
                5:             Label
      9(txval001):      8(ptr) Variable Function
-    33(txval011):     32(ptr) Variable Function
-    47(txval021):     46(ptr) Variable Function
-    58(txval004):      8(ptr) Variable Function
-    71(txval014):     32(ptr) Variable Function
-    82(txval024):     46(ptr) Variable Function
-    93(txval101):      8(ptr) Variable Function
-   101(txval111):     32(ptr) Variable Function
-   108(txval121):     46(ptr) Variable Function
-   115(txval104):      8(ptr) Variable Function
-   126(txval114):     32(ptr) Variable Function
-   137(txval124):     46(ptr) Variable Function
-   148(txval201):      8(ptr) Variable Function
-   156(txval211):     32(ptr) Variable Function
-   163(txval221):     46(ptr) Variable Function
-   170(txval204):      8(ptr) Variable Function
-   181(txval214):     32(ptr) Variable Function
-   192(txval224):     46(ptr) Variable Function
-   203(txval301):      8(ptr) Variable Function
-   211(txval311):     32(ptr) Variable Function
-   218(txval321):     46(ptr) Variable Function
-   225(txval304):      8(ptr) Variable Function
-   236(txval314):     32(ptr) Variable Function
-   247(txval324):     46(ptr) Variable Function
-      260(psout):    259(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
-              23:   20(fvec2) Load 22(c2)
-              28:   25(ivec2) Load 27(o2)
-              30:    7(fvec4) ImageGather 19 23 29 Offset 28
-                              Store 9(txval001) 30
-              37:          34 Load 36(g_tTex2di4)
-              38:          14 Load 16(g_sSamp)
-              40:          39 SampledImage 37 38
-              41:   20(fvec2) Load 22(c2)
-              42:   25(ivec2) Load 27(o2)
-              43:   31(ivec4) ImageGather 40 41 29 Offset 42
-                              Store 33(txval011) 43
-              51:          48 Load 50(g_tTex2du4)
-              52:          14 Load 16(g_sSamp)
-              54:          53 SampledImage 51 52
-              55:   20(fvec2) Load 22(c2)
-              56:   25(ivec2) Load 27(o2)
-              57:   45(ivec4) ImageGather 54 55 29 Offset 56
-                              Store 47(txval021) 57
-              59:          10 Load 12(g_tTex2df4)
-              60:          14 Load 16(g_sSamp)
-              61:          18 SampledImage 59 60
-              62:   20(fvec2) Load 22(c2)
-              63:   25(ivec2) Load 27(o2)
-              64:   25(ivec2) Load 27(o2)
-              65:   25(ivec2) Load 27(o2)
-              66:   25(ivec2) Load 27(o2)
-              69:          68 CompositeConstruct 63 64 65 66
-              70:    7(fvec4) ImageGather 61 62 29 ConstOffsets 69
-                              Store 58(txval004) 70
-              72:          34 Load 36(g_tTex2di4)
-              73:          14 Load 16(g_sSamp)
-              74:          39 SampledImage 72 73
-              75:   20(fvec2) Load 22(c2)
-              76:   25(ivec2) Load 27(o2)
-              77:   25(ivec2) Load 27(o2)
-              78:   25(ivec2) Load 27(o2)
-              79:   25(ivec2) Load 27(o2)
-              80:          68 CompositeConstruct 76 77 78 79
-              81:   31(ivec4) ImageGather 74 75 29 ConstOffsets 80
-                              Store 71(txval014) 81
-              83:          48 Load 50(g_tTex2du4)
-              84:          14 Load 16(g_sSamp)
-              85:          53 SampledImage 83 84
-              86:   20(fvec2) Load 22(c2)
-              87:   25(ivec2) Load 27(o2)
-              88:   25(ivec2) Load 27(o2)
-              89:   25(ivec2) Load 27(o2)
-              90:   25(ivec2) Load 27(o2)
-              91:          68 CompositeConstruct 87 88 89 90
-              92:   45(ivec4) ImageGather 85 86 29 ConstOffsets 91
-                              Store 82(txval024) 92
-              94:          10 Load 12(g_tTex2df4)
-              95:          14 Load 16(g_sSamp)
-              96:          18 SampledImage 94 95
-              97:   20(fvec2) Load 22(c2)
-              98:   25(ivec2) Load 27(o2)
-             100:    7(fvec4) ImageGather 96 97 99 Offset 98
-                              Store 93(txval101) 100
-             102:          34 Load 36(g_tTex2di4)
-             103:          14 Load 16(g_sSamp)
-             104:          39 SampledImage 102 103
-             105:   20(fvec2) Load 22(c2)
-             106:   25(ivec2) Load 27(o2)
-             107:   31(ivec4) ImageGather 104 105 99 Offset 106
-                              Store 101(txval111) 107
-             109:          48 Load 50(g_tTex2du4)
-             110:          14 Load 16(g_sSamp)
-             111:          53 SampledImage 109 110
-             112:   20(fvec2) Load 22(c2)
-             113:   25(ivec2) Load 27(o2)
-             114:   45(ivec4) ImageGather 111 112 99 Offset 113
-                              Store 108(txval121) 114
-             116:          10 Load 12(g_tTex2df4)
-             117:          14 Load 16(g_sSamp)
-             118:          18 SampledImage 116 117
-             119:   20(fvec2) Load 22(c2)
-             120:   25(ivec2) Load 27(o2)
-             121:   25(ivec2) Load 27(o2)
-             122:   25(ivec2) Load 27(o2)
-             123:   25(ivec2) Load 27(o2)
-             124:          68 CompositeConstruct 120 121 122 123
-             125:    7(fvec4) ImageGather 118 119 99 ConstOffsets 124
-                              Store 115(txval104) 125
-             127:          34 Load 36(g_tTex2di4)
-             128:          14 Load 16(g_sSamp)
-             129:          39 SampledImage 127 128
-             130:   20(fvec2) Load 22(c2)
-             131:   25(ivec2) Load 27(o2)
-             132:   25(ivec2) Load 27(o2)
-             133:   25(ivec2) Load 27(o2)
-             134:   25(ivec2) Load 27(o2)
-             135:          68 CompositeConstruct 131 132 133 134
-             136:   31(ivec4) ImageGather 129 130 99 ConstOffsets 135
-                              Store 126(txval114) 136
-             138:          48 Load 50(g_tTex2du4)
+              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:          53 SampledImage 138 139
-             141:   20(fvec2) Load 22(c2)
-             142:   25(ivec2) Load 27(o2)
-             143:   25(ivec2) Load 27(o2)
-             144:   25(ivec2) Load 27(o2)
-             145:   25(ivec2) Load 27(o2)
-             146:          68 CompositeConstruct 142 143 144 145
-             147:   45(ivec4) ImageGather 140 141 99 ConstOffsets 146
-                              Store 137(txval124) 147
-             149:          10 Load 12(g_tTex2df4)
-             150:          14 Load 16(g_sSamp)
-             151:          18 SampledImage 149 150
-             152:   20(fvec2) Load 22(c2)
-             153:   25(ivec2) Load 27(o2)
-             155:    7(fvec4) ImageGather 151 152 154 Offset 153
-                              Store 148(txval201) 155
-             157:          34 Load 36(g_tTex2di4)
-             158:          14 Load 16(g_sSamp)
-             159:          39 SampledImage 157 158
-             160:   20(fvec2) Load 22(c2)
-             161:   25(ivec2) Load 27(o2)
-             162:   31(ivec4) ImageGather 159 160 154 Offset 161
-                              Store 156(txval211) 162
-             164:          48 Load 50(g_tTex2du4)
-             165:          14 Load 16(g_sSamp)
-             166:          53 SampledImage 164 165
-             167:   20(fvec2) Load 22(c2)
-             168:   25(ivec2) Load 27(o2)
-             169:   45(ivec4) ImageGather 166 167 154 Offset 168
-                              Store 163(txval221) 169
-             171:          10 Load 12(g_tTex2df4)
-             172:          14 Load 16(g_sSamp)
-             173:          18 SampledImage 171 172
-             174:   20(fvec2) Load 22(c2)
-             175:   25(ivec2) Load 27(o2)
-             176:   25(ivec2) Load 27(o2)
-             177:   25(ivec2) Load 27(o2)
-             178:   25(ivec2) Load 27(o2)
-             179:          68 CompositeConstruct 175 176 177 178
-             180:    7(fvec4) ImageGather 173 174 154 ConstOffsets 179
-                              Store 170(txval204) 180
-             182:          34 Load 36(g_tTex2di4)
-             183:          14 Load 16(g_sSamp)
-             184:          39 SampledImage 182 183
-             185:   20(fvec2) Load 22(c2)
-             186:   25(ivec2) Load 27(o2)
-             187:   25(ivec2) Load 27(o2)
-             188:   25(ivec2) Load 27(o2)
-             189:   25(ivec2) Load 27(o2)
-             190:          68 CompositeConstruct 186 187 188 189
-             191:   31(ivec4) ImageGather 184 185 154 ConstOffsets 190
-                              Store 181(txval214) 191
-             193:          48 Load 50(g_tTex2du4)
-             194:          14 Load 16(g_sSamp)
-             195:          53 SampledImage 193 194
-             196:   20(fvec2) Load 22(c2)
-             197:   25(ivec2) Load 27(o2)
-             198:   25(ivec2) Load 27(o2)
-             199:   25(ivec2) Load 27(o2)
-             200:   25(ivec2) Load 27(o2)
-             201:          68 CompositeConstruct 197 198 199 200
-             202:   45(ivec4) ImageGather 195 196 154 ConstOffsets 201
-                              Store 192(txval224) 202
-             204:          10 Load 12(g_tTex2df4)
-             205:          14 Load 16(g_sSamp)
-             206:          18 SampledImage 204 205
-             207:   20(fvec2) Load 22(c2)
-             208:   25(ivec2) Load 27(o2)
-             210:    7(fvec4) ImageGather 206 207 209 Offset 208
-                              Store 203(txval301) 210
-             212:          34 Load 36(g_tTex2di4)
-             213:          14 Load 16(g_sSamp)
-             214:          39 SampledImage 212 213
-             215:   20(fvec2) Load 22(c2)
-             216:   25(ivec2) Load 27(o2)
-             217:   31(ivec4) ImageGather 214 215 209 Offset 216
-                              Store 211(txval311) 217
-             219:          48 Load 50(g_tTex2du4)
-             220:          14 Load 16(g_sSamp)
-             221:          53 SampledImage 219 220
-             222:   20(fvec2) Load 22(c2)
-             223:   25(ivec2) Load 27(o2)
-             224:   45(ivec4) ImageGather 221 222 209 Offset 223
-                              Store 218(txval321) 224
-             226:          10 Load 12(g_tTex2df4)
-             227:          14 Load 16(g_sSamp)
-             228:          18 SampledImage 226 227
-             229:   20(fvec2) Load 22(c2)
-             230:   25(ivec2) Load 27(o2)
-             231:   25(ivec2) Load 27(o2)
-             232:   25(ivec2) Load 27(o2)
-             233:   25(ivec2) Load 27(o2)
-             234:          68 CompositeConstruct 230 231 232 233
-             235:    7(fvec4) ImageGather 228 229 209 ConstOffsets 234
-                              Store 225(txval304) 235
-             237:          34 Load 36(g_tTex2di4)
-             238:          14 Load 16(g_sSamp)
-             239:          39 SampledImage 237 238
-             240:   20(fvec2) Load 22(c2)
-             241:   25(ivec2) Load 27(o2)
-             242:   25(ivec2) Load 27(o2)
-             243:   25(ivec2) Load 27(o2)
-             244:   25(ivec2) Load 27(o2)
-             245:          68 CompositeConstruct 241 242 243 244
-             246:   31(ivec4) ImageGather 239 240 209 ConstOffsets 245
-                              Store 236(txval314) 246
-             248:          48 Load 50(g_tTex2du4)
-             249:          14 Load 16(g_sSamp)
-             250:          53 SampledImage 248 249
-             251:   20(fvec2) Load 22(c2)
-             252:   25(ivec2) Load 27(o2)
-             253:   25(ivec2) Load 27(o2)
-             254:   25(ivec2) Load 27(o2)
-             255:   25(ivec2) Load 27(o2)
-             256:          68 CompositeConstruct 252 253 254 255
-             257:   45(ivec4) ImageGather 250 251 209 ConstOffsets 256
-                              Store 247(txval324) 257
-             263:      8(ptr) AccessChain 260(psout) 29
-                              Store 263 262
-             265:    264(ptr) AccessChain 260(psout) 99
-                              Store 265 261
-             268:      8(ptr) AccessChain 260(psout) 29
-             269:    7(fvec4) Load 268
-                              Store 267(Color) 269
-             272:    264(ptr) AccessChain 260(psout) 99
-             273:    6(float) Load 272
-                              Store 271(Depth) 273
+             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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 022f63edac3383f6b70a399c90fd58ad4af6b553..4722cff67d961bd0c80959cf331cbb990b051fd0 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -2,319 +2,571 @@ hlsl.gatherRGBA.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:33  Function Definition: main( (global 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
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval001' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
+0:40          textureGatherOffset (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler2DArray)
 0:40              'g_tTex2df4a' (uniform texture2DArray)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:40            'c3' (uniform 3-component vector of float)
-0:40            'o2' (uniform 2-component vector of int)
+0:40            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                2 (const uint)
+0:40            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:40              '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})
+0:40              Constant:
+0:40                5 (const uint)
 0:40            Constant:
 0:40              0 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval011' (temp 4-component vector of int)
-0:41          textureGatherOffset (global 4-component vector of int)
+0:41          textureGatherOffset (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler2DArray)
 0:41              'g_tTex2di4a' (uniform itexture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c3' (uniform 3-component vector of float)
-0:41            'o2' (uniform 2-component vector of int)
+0:41            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                2 (const uint)
+0:41            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:41              '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})
+0:41              Constant:
+0:41                5 (const uint)
 0:41            Constant:
 0:41              0 (const int)
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval021' (temp 4-component vector of uint)
-0:42          textureGatherOffset (global 4-component vector of uint)
+0:42          textureGatherOffset (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler2DArray)
 0:42              'g_tTex2du4a' (uniform utexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            'c3' (uniform 3-component vector of float)
-0:42            'o2' (uniform 2-component vector of int)
+0:42            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:42              '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})
+0:42              Constant:
+0:42                2 (const uint)
+0:42            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:42              '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})
+0:42              Constant:
+0:42                5 (const uint)
 0:42            Constant:
 0:42              0 (const int)
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval004' (temp 4-component vector of float)
-0:44          textureGatherOffsets (global 4-component vector of float)
+0:44          textureGatherOffsets (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp sampler2DArray)
 0:44              'g_tTex2df4a' (uniform texture2DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            'c3' (uniform 3-component vector of float)
+0:44            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                2 (const uint)
 0:44            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
 0:44            Constant:
 0:44              0 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval014' (temp 4-component vector of int)
-0:45          textureGatherOffsets (global 4-component vector of int)
+0:45          textureGatherOffsets (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isampler2DArray)
 0:45              'g_tTex2di4a' (uniform itexture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c3' (uniform 3-component vector of float)
+0:45            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                2 (const uint)
 0:45            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
 0:45            Constant:
 0:45              0 (const int)
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval024' (temp 4-component vector of uint)
-0:46          textureGatherOffsets (global 4-component vector of uint)
+0:46          textureGatherOffsets (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usampler2DArray)
 0:46              'g_tTex2du4a' (uniform utexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c3' (uniform 3-component vector of float)
+0:46            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                2 (const uint)
 0:46            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
 0:46            Constant:
 0:46              0 (const int)
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of float)
 0:56          'txval101' (temp 4-component vector of float)
-0:56          textureGatherOffset (global 4-component vector of float)
+0:56          textureGatherOffset (temp 4-component vector of float)
 0:56            Construct combined texture-sampler (temp sampler2DArray)
 0:56              'g_tTex2df4a' (uniform texture2DArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:56            'c3' (uniform 3-component vector of float)
-0:56            'o2' (uniform 2-component vector of int)
+0:56            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:56              '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})
+0:56              Constant:
+0:56                2 (const uint)
+0:56            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:56              '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})
+0:56              Constant:
+0:56                5 (const uint)
 0:56            Constant:
 0:56              1 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of int)
 0:57          'txval111' (temp 4-component vector of int)
-0:57          textureGatherOffset (global 4-component vector of int)
+0:57          textureGatherOffset (temp 4-component vector of int)
 0:57            Construct combined texture-sampler (temp isampler2DArray)
 0:57              'g_tTex2di4a' (uniform itexture2DArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c3' (uniform 3-component vector of float)
-0:57            'o2' (uniform 2-component vector of int)
+0:57            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                2 (const uint)
+0:57            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57              '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})
+0:57              Constant:
+0:57                5 (const uint)
 0:57            Constant:
 0:57              1 (const int)
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of uint)
 0:58          'txval121' (temp 4-component vector of uint)
-0:58          textureGatherOffset (global 4-component vector of uint)
+0:58          textureGatherOffset (temp 4-component vector of uint)
 0:58            Construct combined texture-sampler (temp usampler2DArray)
 0:58              'g_tTex2du4a' (uniform utexture2DArray)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:58            'c3' (uniform 3-component vector of float)
-0:58            'o2' (uniform 2-component vector of int)
+0:58            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:58              '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})
+0:58              Constant:
+0:58                2 (const uint)
+0:58            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58              '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})
+0:58              Constant:
+0:58                5 (const uint)
 0:58            Constant:
 0:58              1 (const int)
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of float)
 0:60          'txval104' (temp 4-component vector of float)
-0:60          textureGatherOffsets (global 4-component vector of float)
+0:60          textureGatherOffsets (temp 4-component vector of float)
 0:60            Construct combined texture-sampler (temp sampler2DArray)
 0:60              'g_tTex2df4a' (uniform texture2DArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:60            'c3' (uniform 3-component vector of float)
+0:60            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:60              '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})
+0:60              Constant:
+0:60                2 (const uint)
 0:60            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
 0:60            Constant:
 0:60              1 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of int)
 0:61          'txval114' (temp 4-component vector of int)
-0:61          textureGatherOffsets (global 4-component vector of int)
+0:61          textureGatherOffsets (temp 4-component vector of int)
 0:61            Construct combined texture-sampler (temp isampler2DArray)
 0:61              'g_tTex2di4a' (uniform itexture2DArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c3' (uniform 3-component vector of float)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                2 (const uint)
 0:61            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
 0:61            Constant:
 0:61              1 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of uint)
 0:62          'txval124' (temp 4-component vector of uint)
-0:62          textureGatherOffsets (global 4-component vector of uint)
+0:62          textureGatherOffsets (temp 4-component vector of uint)
 0:62            Construct combined texture-sampler (temp usampler2DArray)
 0:62              'g_tTex2du4a' (uniform utexture2DArray)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c3' (uniform 3-component vector of float)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                2 (const uint)
 0:62            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of float)
 0:72          'txval201' (temp 4-component vector of float)
-0:72          textureGatherOffset (global 4-component vector of float)
+0:72          textureGatherOffset (temp 4-component vector of float)
 0:72            Construct combined texture-sampler (temp sampler2DArray)
 0:72              'g_tTex2df4a' (uniform texture2DArray)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:72            'c3' (uniform 3-component vector of float)
-0:72            'o2' (uniform 2-component vector of int)
+0:72            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:72              '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})
+0:72              Constant:
+0:72                2 (const uint)
+0:72            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:72              '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})
+0:72              Constant:
+0:72                5 (const uint)
 0:72            Constant:
 0:72              2 (const int)
 0:73      Sequence
 0:73        move second child to first child (temp 4-component vector of int)
 0:73          'txval211' (temp 4-component vector of int)
-0:73          textureGatherOffset (global 4-component vector of int)
+0:73          textureGatherOffset (temp 4-component vector of int)
 0:73            Construct combined texture-sampler (temp isampler2DArray)
 0:73              'g_tTex2di4a' (uniform itexture2DArray)
 0:73              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:73            'c3' (uniform 3-component vector of float)
-0:73            'o2' (uniform 2-component vector of int)
+0:73            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:73              '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})
+0:73              Constant:
+0:73                2 (const uint)
+0:73            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:73              '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})
+0:73              Constant:
+0:73                5 (const uint)
 0:73            Constant:
 0:73              2 (const int)
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of uint)
 0:74          'txval221' (temp 4-component vector of uint)
-0:74          textureGatherOffset (global 4-component vector of uint)
+0:74          textureGatherOffset (temp 4-component vector of uint)
 0:74            Construct combined texture-sampler (temp usampler2DArray)
 0:74              'g_tTex2du4a' (uniform utexture2DArray)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:74            'c3' (uniform 3-component vector of float)
-0:74            'o2' (uniform 2-component vector of int)
+0:74            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:74              '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})
+0:74              Constant:
+0:74                2 (const uint)
+0:74            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:74              '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})
+0:74              Constant:
+0:74                5 (const uint)
 0:74            Constant:
 0:74              2 (const int)
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of float)
 0:76          'txval204' (temp 4-component vector of float)
-0:76          textureGatherOffsets (global 4-component vector of float)
+0:76          textureGatherOffsets (temp 4-component vector of float)
 0:76            Construct combined texture-sampler (temp sampler2DArray)
 0:76              'g_tTex2df4a' (uniform texture2DArray)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:76            'c3' (uniform 3-component vector of float)
+0:76            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:76              '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})
+0:76              Constant:
+0:76                2 (const uint)
 0:76            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
 0:76            Constant:
 0:76              2 (const int)
 0:77      Sequence
 0:77        move second child to first child (temp 4-component vector of int)
 0:77          'txval214' (temp 4-component vector of int)
-0:77          textureGatherOffsets (global 4-component vector of int)
+0:77          textureGatherOffsets (temp 4-component vector of int)
 0:77            Construct combined texture-sampler (temp isampler2DArray)
 0:77              'g_tTex2di4a' (uniform itexture2DArray)
 0:77              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:77            'c3' (uniform 3-component vector of float)
+0:77            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:77              '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})
+0:77              Constant:
+0:77                2 (const uint)
 0:77            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
 0:77            Constant:
 0:77              2 (const int)
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of uint)
 0:78          'txval224' (temp 4-component vector of uint)
-0:78          textureGatherOffsets (global 4-component vector of uint)
+0:78          textureGatherOffsets (temp 4-component vector of uint)
 0:78            Construct combined texture-sampler (temp usampler2DArray)
 0:78              'g_tTex2du4a' (uniform utexture2DArray)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:78            'c3' (uniform 3-component vector of float)
+0:78            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:78              '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})
+0:78              Constant:
+0:78                2 (const uint)
 0:78            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
 0:78            Constant:
 0:78              2 (const int)
 0:88      Sequence
 0:88        move second child to first child (temp 4-component vector of float)
 0:88          'txval301' (temp 4-component vector of float)
-0:88          textureGatherOffset (global 4-component vector of float)
+0:88          textureGatherOffset (temp 4-component vector of float)
 0:88            Construct combined texture-sampler (temp sampler2DArray)
 0:88              'g_tTex2df4a' (uniform texture2DArray)
 0:88              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:88            'c3' (uniform 3-component vector of float)
-0:88            'o2' (uniform 2-component vector of int)
+0:88            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:88              '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})
+0:88              Constant:
+0:88                2 (const uint)
+0:88            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:88              '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})
+0:88              Constant:
+0:88                5 (const uint)
 0:88            Constant:
 0:88              3 (const int)
 0:89      Sequence
 0:89        move second child to first child (temp 4-component vector of int)
 0:89          'txval311' (temp 4-component vector of int)
-0:89          textureGatherOffset (global 4-component vector of int)
+0:89          textureGatherOffset (temp 4-component vector of int)
 0:89            Construct combined texture-sampler (temp isampler2DArray)
 0:89              'g_tTex2di4a' (uniform itexture2DArray)
 0:89              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:89            'c3' (uniform 3-component vector of float)
-0:89            'o2' (uniform 2-component vector of int)
+0:89            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:89              '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})
+0:89              Constant:
+0:89                2 (const uint)
+0:89            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:89              '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})
+0:89              Constant:
+0:89                5 (const uint)
 0:89            Constant:
 0:89              3 (const int)
 0:90      Sequence
 0:90        move second child to first child (temp 4-component vector of uint)
 0:90          'txval321' (temp 4-component vector of uint)
-0:90          textureGatherOffset (global 4-component vector of uint)
+0:90          textureGatherOffset (temp 4-component vector of uint)
 0:90            Construct combined texture-sampler (temp usampler2DArray)
 0:90              'g_tTex2du4a' (uniform utexture2DArray)
 0:90              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:90            'c3' (uniform 3-component vector of float)
-0:90            'o2' (uniform 2-component vector of int)
+0:90            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:90              '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})
+0:90              Constant:
+0:90                2 (const uint)
+0:90            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:90              '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})
+0:90              Constant:
+0:90                5 (const uint)
 0:90            Constant:
 0:90              3 (const int)
 0:92      Sequence
 0:92        move second child to first child (temp 4-component vector of float)
 0:92          'txval304' (temp 4-component vector of float)
-0:92          textureGatherOffsets (global 4-component vector of float)
+0:92          textureGatherOffsets (temp 4-component vector of float)
 0:92            Construct combined texture-sampler (temp sampler2DArray)
 0:92              'g_tTex2df4a' (uniform texture2DArray)
 0:92              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:92            'c3' (uniform 3-component vector of float)
+0:92            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:92              '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})
+0:92              Constant:
+0:92                2 (const uint)
 0:92            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
 0:92            Constant:
 0:92              3 (const int)
 0:93      Sequence
 0:93        move second child to first child (temp 4-component vector of int)
 0:93          'txval314' (temp 4-component vector of int)
-0:93          textureGatherOffsets (global 4-component vector of int)
+0:93          textureGatherOffsets (temp 4-component vector of int)
 0:93            Construct combined texture-sampler (temp isampler2DArray)
 0:93              'g_tTex2di4a' (uniform itexture2DArray)
 0:93              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:93            'c3' (uniform 3-component vector of float)
+0:93            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:93              '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})
+0:93              Constant:
+0:93                2 (const uint)
 0:93            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
 0:93            Constant:
 0:93              3 (const int)
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of uint)
 0:94          'txval324' (temp 4-component vector of uint)
-0:94          textureGatherOffsets (global 4-component vector of uint)
+0:94          textureGatherOffsets (temp 4-component vector of uint)
 0:94            Construct combined texture-sampler (temp usampler2DArray)
 0:94              'g_tTex2du4a' (uniform utexture2DArray)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:94            'c3' (uniform 3-component vector of float)
+0:94            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:94              '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})
+0:94              Constant:
+0:94                2 (const uint)
 0:94            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
 0:94            Constant:
 0:94              3 (const int)
 0:106      move second child to first child (temp 4-component vector of float)
@@ -334,8 +586,8 @@ gl_FragCoord origin is upper left
 0:107            1 (const int)
 0:107        Constant:
 0:107          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -350,6 +602,8 @@ gl_FragCoord origin is upper left
 0:109                1 (const int)
 0:109        Branch: Return
 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)
@@ -361,16 +615,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -379,319 +624,571 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:33  Function Definition: main( (global 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
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval001' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
+0:40          textureGatherOffset (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler2DArray)
 0:40              'g_tTex2df4a' (uniform texture2DArray)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:40            'c3' (uniform 3-component vector of float)
-0:40            'o2' (uniform 2-component vector of int)
+0:40            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                2 (const uint)
+0:40            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:40              '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})
+0:40              Constant:
+0:40                5 (const uint)
 0:40            Constant:
 0:40              0 (const int)
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval011' (temp 4-component vector of int)
-0:41          textureGatherOffset (global 4-component vector of int)
+0:41          textureGatherOffset (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler2DArray)
 0:41              'g_tTex2di4a' (uniform itexture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:41            'c3' (uniform 3-component vector of float)
-0:41            'o2' (uniform 2-component vector of int)
+0:41            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:41              '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})
+0:41              Constant:
+0:41                2 (const uint)
+0:41            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:41              '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})
+0:41              Constant:
+0:41                5 (const uint)
 0:41            Constant:
 0:41              0 (const int)
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval021' (temp 4-component vector of uint)
-0:42          textureGatherOffset (global 4-component vector of uint)
+0:42          textureGatherOffset (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler2DArray)
 0:42              'g_tTex2du4a' (uniform utexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            'c3' (uniform 3-component vector of float)
-0:42            'o2' (uniform 2-component vector of int)
+0:42            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:42              '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})
+0:42              Constant:
+0:42                2 (const uint)
+0:42            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:42              '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})
+0:42              Constant:
+0:42                5 (const uint)
 0:42            Constant:
 0:42              0 (const int)
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval004' (temp 4-component vector of float)
-0:44          textureGatherOffsets (global 4-component vector of float)
+0:44          textureGatherOffsets (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp sampler2DArray)
 0:44              'g_tTex2df4a' (uniform texture2DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            'c3' (uniform 3-component vector of float)
+0:44            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                2 (const uint)
 0:44            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
-0:44              'o2' (uniform 2-component vector of int)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
+0:44              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:44                '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})
+0:44                Constant:
+0:44                  5 (const uint)
 0:44            Constant:
 0:44              0 (const int)
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval014' (temp 4-component vector of int)
-0:45          textureGatherOffsets (global 4-component vector of int)
+0:45          textureGatherOffsets (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isampler2DArray)
 0:45              'g_tTex2di4a' (uniform itexture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:45            'c3' (uniform 3-component vector of float)
+0:45            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:45              '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})
+0:45              Constant:
+0:45                2 (const uint)
 0:45            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
-0:45              'o2' (uniform 2-component vector of int)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
+0:45              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:45                '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})
+0:45                Constant:
+0:45                  5 (const uint)
 0:45            Constant:
 0:45              0 (const int)
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval024' (temp 4-component vector of uint)
-0:46          textureGatherOffsets (global 4-component vector of uint)
+0:46          textureGatherOffsets (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usampler2DArray)
 0:46              'g_tTex2du4a' (uniform utexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:46            'c3' (uniform 3-component vector of float)
+0:46            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                2 (const uint)
 0:46            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
-0:46              'o2' (uniform 2-component vector of int)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
 0:46            Constant:
 0:46              0 (const int)
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of float)
 0:56          'txval101' (temp 4-component vector of float)
-0:56          textureGatherOffset (global 4-component vector of float)
+0:56          textureGatherOffset (temp 4-component vector of float)
 0:56            Construct combined texture-sampler (temp sampler2DArray)
 0:56              'g_tTex2df4a' (uniform texture2DArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:56            'c3' (uniform 3-component vector of float)
-0:56            'o2' (uniform 2-component vector of int)
+0:56            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:56              '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})
+0:56              Constant:
+0:56                2 (const uint)
+0:56            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:56              '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})
+0:56              Constant:
+0:56                5 (const uint)
 0:56            Constant:
 0:56              1 (const int)
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of int)
 0:57          'txval111' (temp 4-component vector of int)
-0:57          textureGatherOffset (global 4-component vector of int)
+0:57          textureGatherOffset (temp 4-component vector of int)
 0:57            Construct combined texture-sampler (temp isampler2DArray)
 0:57              'g_tTex2di4a' (uniform itexture2DArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:57            'c3' (uniform 3-component vector of float)
-0:57            'o2' (uniform 2-component vector of int)
+0:57            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:57              '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})
+0:57              Constant:
+0:57                2 (const uint)
+0:57            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57              '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})
+0:57              Constant:
+0:57                5 (const uint)
 0:57            Constant:
 0:57              1 (const int)
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of uint)
 0:58          'txval121' (temp 4-component vector of uint)
-0:58          textureGatherOffset (global 4-component vector of uint)
+0:58          textureGatherOffset (temp 4-component vector of uint)
 0:58            Construct combined texture-sampler (temp usampler2DArray)
 0:58              'g_tTex2du4a' (uniform utexture2DArray)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:58            'c3' (uniform 3-component vector of float)
-0:58            'o2' (uniform 2-component vector of int)
+0:58            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:58              '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})
+0:58              Constant:
+0:58                2 (const uint)
+0:58            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58              '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})
+0:58              Constant:
+0:58                5 (const uint)
 0:58            Constant:
 0:58              1 (const int)
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of float)
 0:60          'txval104' (temp 4-component vector of float)
-0:60          textureGatherOffsets (global 4-component vector of float)
+0:60          textureGatherOffsets (temp 4-component vector of float)
 0:60            Construct combined texture-sampler (temp sampler2DArray)
 0:60              'g_tTex2df4a' (uniform texture2DArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:60            'c3' (uniform 3-component vector of float)
+0:60            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:60              '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})
+0:60              Constant:
+0:60                2 (const uint)
 0:60            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
-0:60              'o2' (uniform 2-component vector of int)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
+0:60              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:60                '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})
+0:60                Constant:
+0:60                  5 (const uint)
 0:60            Constant:
 0:60              1 (const int)
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of int)
 0:61          'txval114' (temp 4-component vector of int)
-0:61          textureGatherOffsets (global 4-component vector of int)
+0:61          textureGatherOffsets (temp 4-component vector of int)
 0:61            Construct combined texture-sampler (temp isampler2DArray)
 0:61              'g_tTex2di4a' (uniform itexture2DArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:61            'c3' (uniform 3-component vector of float)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:61              '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})
+0:61              Constant:
+0:61                2 (const uint)
 0:61            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
-0:61              'o2' (uniform 2-component vector of int)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
+0:61              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:61                '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})
+0:61                Constant:
+0:61                  5 (const uint)
 0:61            Constant:
 0:61              1 (const int)
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of uint)
 0:62          'txval124' (temp 4-component vector of uint)
-0:62          textureGatherOffsets (global 4-component vector of uint)
+0:62          textureGatherOffsets (temp 4-component vector of uint)
 0:62            Construct combined texture-sampler (temp usampler2DArray)
 0:62              'g_tTex2du4a' (uniform utexture2DArray)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:62            'c3' (uniform 3-component vector of float)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:62              '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})
+0:62              Constant:
+0:62                2 (const uint)
 0:62            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
-0:62              'o2' (uniform 2-component vector of int)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
+0:62              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:62                '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})
+0:62                Constant:
+0:62                  5 (const uint)
 0:62            Constant:
 0:62              1 (const int)
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of float)
 0:72          'txval201' (temp 4-component vector of float)
-0:72          textureGatherOffset (global 4-component vector of float)
+0:72          textureGatherOffset (temp 4-component vector of float)
 0:72            Construct combined texture-sampler (temp sampler2DArray)
 0:72              'g_tTex2df4a' (uniform texture2DArray)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:72            'c3' (uniform 3-component vector of float)
-0:72            'o2' (uniform 2-component vector of int)
+0:72            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:72              '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})
+0:72              Constant:
+0:72                2 (const uint)
+0:72            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:72              '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})
+0:72              Constant:
+0:72                5 (const uint)
 0:72            Constant:
 0:72              2 (const int)
 0:73      Sequence
 0:73        move second child to first child (temp 4-component vector of int)
 0:73          'txval211' (temp 4-component vector of int)
-0:73          textureGatherOffset (global 4-component vector of int)
+0:73          textureGatherOffset (temp 4-component vector of int)
 0:73            Construct combined texture-sampler (temp isampler2DArray)
 0:73              'g_tTex2di4a' (uniform itexture2DArray)
 0:73              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:73            'c3' (uniform 3-component vector of float)
-0:73            'o2' (uniform 2-component vector of int)
+0:73            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:73              '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})
+0:73              Constant:
+0:73                2 (const uint)
+0:73            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:73              '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})
+0:73              Constant:
+0:73                5 (const uint)
 0:73            Constant:
 0:73              2 (const int)
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of uint)
 0:74          'txval221' (temp 4-component vector of uint)
-0:74          textureGatherOffset (global 4-component vector of uint)
+0:74          textureGatherOffset (temp 4-component vector of uint)
 0:74            Construct combined texture-sampler (temp usampler2DArray)
 0:74              'g_tTex2du4a' (uniform utexture2DArray)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:74            'c3' (uniform 3-component vector of float)
-0:74            'o2' (uniform 2-component vector of int)
+0:74            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:74              '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})
+0:74              Constant:
+0:74                2 (const uint)
+0:74            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:74              '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})
+0:74              Constant:
+0:74                5 (const uint)
 0:74            Constant:
 0:74              2 (const int)
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of float)
 0:76          'txval204' (temp 4-component vector of float)
-0:76          textureGatherOffsets (global 4-component vector of float)
+0:76          textureGatherOffsets (temp 4-component vector of float)
 0:76            Construct combined texture-sampler (temp sampler2DArray)
 0:76              'g_tTex2df4a' (uniform texture2DArray)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:76            'c3' (uniform 3-component vector of float)
+0:76            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:76              '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})
+0:76              Constant:
+0:76                2 (const uint)
 0:76            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
-0:76              'o2' (uniform 2-component vector of int)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
+0:76              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:76                '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})
+0:76                Constant:
+0:76                  5 (const uint)
 0:76            Constant:
 0:76              2 (const int)
 0:77      Sequence
 0:77        move second child to first child (temp 4-component vector of int)
 0:77          'txval214' (temp 4-component vector of int)
-0:77          textureGatherOffsets (global 4-component vector of int)
+0:77          textureGatherOffsets (temp 4-component vector of int)
 0:77            Construct combined texture-sampler (temp isampler2DArray)
 0:77              'g_tTex2di4a' (uniform itexture2DArray)
 0:77              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:77            'c3' (uniform 3-component vector of float)
+0:77            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:77              '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})
+0:77              Constant:
+0:77                2 (const uint)
 0:77            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
-0:77              'o2' (uniform 2-component vector of int)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
+0:77              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:77                '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})
+0:77                Constant:
+0:77                  5 (const uint)
 0:77            Constant:
 0:77              2 (const int)
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of uint)
 0:78          'txval224' (temp 4-component vector of uint)
-0:78          textureGatherOffsets (global 4-component vector of uint)
+0:78          textureGatherOffsets (temp 4-component vector of uint)
 0:78            Construct combined texture-sampler (temp usampler2DArray)
 0:78              'g_tTex2du4a' (uniform utexture2DArray)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:78            'c3' (uniform 3-component vector of float)
+0:78            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:78              '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})
+0:78              Constant:
+0:78                2 (const uint)
 0:78            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
-0:78              'o2' (uniform 2-component vector of int)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
+0:78              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:78                '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})
+0:78                Constant:
+0:78                  5 (const uint)
 0:78            Constant:
 0:78              2 (const int)
 0:88      Sequence
 0:88        move second child to first child (temp 4-component vector of float)
 0:88          'txval301' (temp 4-component vector of float)
-0:88          textureGatherOffset (global 4-component vector of float)
+0:88          textureGatherOffset (temp 4-component vector of float)
 0:88            Construct combined texture-sampler (temp sampler2DArray)
 0:88              'g_tTex2df4a' (uniform texture2DArray)
 0:88              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:88            'c3' (uniform 3-component vector of float)
-0:88            'o2' (uniform 2-component vector of int)
+0:88            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:88              '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})
+0:88              Constant:
+0:88                2 (const uint)
+0:88            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:88              '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})
+0:88              Constant:
+0:88                5 (const uint)
 0:88            Constant:
 0:88              3 (const int)
 0:89      Sequence
 0:89        move second child to first child (temp 4-component vector of int)
 0:89          'txval311' (temp 4-component vector of int)
-0:89          textureGatherOffset (global 4-component vector of int)
+0:89          textureGatherOffset (temp 4-component vector of int)
 0:89            Construct combined texture-sampler (temp isampler2DArray)
 0:89              'g_tTex2di4a' (uniform itexture2DArray)
 0:89              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:89            'c3' (uniform 3-component vector of float)
-0:89            'o2' (uniform 2-component vector of int)
+0:89            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:89              '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})
+0:89              Constant:
+0:89                2 (const uint)
+0:89            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:89              '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})
+0:89              Constant:
+0:89                5 (const uint)
 0:89            Constant:
 0:89              3 (const int)
 0:90      Sequence
 0:90        move second child to first child (temp 4-component vector of uint)
 0:90          'txval321' (temp 4-component vector of uint)
-0:90          textureGatherOffset (global 4-component vector of uint)
+0:90          textureGatherOffset (temp 4-component vector of uint)
 0:90            Construct combined texture-sampler (temp usampler2DArray)
 0:90              'g_tTex2du4a' (uniform utexture2DArray)
 0:90              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:90            'c3' (uniform 3-component vector of float)
-0:90            'o2' (uniform 2-component vector of int)
+0:90            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:90              '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})
+0:90              Constant:
+0:90                2 (const uint)
+0:90            o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:90              '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})
+0:90              Constant:
+0:90                5 (const uint)
 0:90            Constant:
 0:90              3 (const int)
 0:92      Sequence
 0:92        move second child to first child (temp 4-component vector of float)
 0:92          'txval304' (temp 4-component vector of float)
-0:92          textureGatherOffsets (global 4-component vector of float)
+0:92          textureGatherOffsets (temp 4-component vector of float)
 0:92            Construct combined texture-sampler (temp sampler2DArray)
 0:92              'g_tTex2df4a' (uniform texture2DArray)
 0:92              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:92            'c3' (uniform 3-component vector of float)
+0:92            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:92              '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})
+0:92              Constant:
+0:92                2 (const uint)
 0:92            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
-0:92              'o2' (uniform 2-component vector of int)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
+0:92              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:92                '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})
+0:92                Constant:
+0:92                  5 (const uint)
 0:92            Constant:
 0:92              3 (const int)
 0:93      Sequence
 0:93        move second child to first child (temp 4-component vector of int)
 0:93          'txval314' (temp 4-component vector of int)
-0:93          textureGatherOffsets (global 4-component vector of int)
+0:93          textureGatherOffsets (temp 4-component vector of int)
 0:93            Construct combined texture-sampler (temp isampler2DArray)
 0:93              'g_tTex2di4a' (uniform itexture2DArray)
 0:93              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:93            'c3' (uniform 3-component vector of float)
+0:93            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:93              '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})
+0:93              Constant:
+0:93                2 (const uint)
 0:93            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
-0:93              'o2' (uniform 2-component vector of int)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
+0:93              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:93                '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})
+0:93                Constant:
+0:93                  5 (const uint)
 0:93            Constant:
 0:93              3 (const int)
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of uint)
 0:94          'txval324' (temp 4-component vector of uint)
-0:94          textureGatherOffsets (global 4-component vector of uint)
+0:94          textureGatherOffsets (temp 4-component vector of uint)
 0:94            Construct combined texture-sampler (temp usampler2DArray)
 0:94              'g_tTex2du4a' (uniform utexture2DArray)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:94            'c3' (uniform 3-component vector of float)
+0:94            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of float)
+0:94              '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})
+0:94              Constant:
+0:94                2 (const uint)
 0:94            Construct ivec2 (temp 4-element array of 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
-0:94              'o2' (uniform 2-component vector of int)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
+0:94              o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:94                '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})
+0:94                Constant:
+0:94                  5 (const uint)
 0:94            Constant:
 0:94              3 (const int)
 0:106      move second child to first child (temp 4-component vector of float)
@@ -711,8 +1208,8 @@ gl_FragCoord origin is upper left
 0:107            1 (const int)
 0:107        Constant:
 0:107          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -727,6 +1224,8 @@ gl_FragCoord origin is upper left
 0:109                1 (const int)
 0:109        Branch: Return
 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)
@@ -738,20 +1237,11 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform float)
-0:?     'c2' (uniform 2-component vector of float)
-0:?     'c3' (uniform 3-component vector of float)
-0:?     'c4' (uniform 4-component vector of float)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 308
+// Id's are bound by 382
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -759,73 +1249,85 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 267 271
+                              EntryPoint Fragment 4  "main" 355 359
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "txval001"
                               Name 12  "g_tTex2df4a"
                               Name 16  "g_sSamp"
-                              Name 22  "c3"
-                              Name 27  "o2"
-                              Name 33  "txval011"
-                              Name 36  "g_tTex2di4a"
-                              Name 47  "txval021"
-                              Name 50  "g_tTex2du4a"
-                              Name 58  "txval004"
-                              Name 71  "txval014"
-                              Name 82  "txval024"
-                              Name 93  "txval101"
-                              Name 101  "txval111"
-                              Name 108  "txval121"
-                              Name 115  "txval104"
-                              Name 126  "txval114"
-                              Name 137  "txval124"
-                              Name 148  "txval201"
-                              Name 156  "txval211"
-                              Name 163  "txval221"
-                              Name 170  "txval204"
-                              Name 181  "txval214"
-                              Name 192  "txval224"
-                              Name 203  "txval301"
-                              Name 211  "txval311"
-                              Name 218  "txval321"
-                              Name 225  "txval304"
-                              Name 236  "txval314"
-                              Name 247  "txval324"
-                              Name 258  "PS_OUTPUT"
-                              MemberName 258(PS_OUTPUT) 0  "Color"
-                              MemberName 258(PS_OUTPUT) 1  "Depth"
-                              Name 260  "psout"
-                              Name 267  "Color"
-                              Name 271  "Depth"
-                              Name 275  "g_sSamp2d"
-                              Name 278  "g_tTex1df4a"
-                              Name 281  "g_tTex1di4a"
-                              Name 284  "g_tTex1du4a"
-                              Name 287  "g_tTexcdf4a"
-                              Name 290  "g_tTexcdi4a"
-                              Name 293  "g_tTexcdu4a"
-                              Name 295  "c1"
-                              Name 298  "c2"
-                              Name 300  "c4"
-                              Name 302  "o1"
-                              Name 305  "o3"
-                              Name 307  "o4"
+                              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
-                              Decorate 36(g_tTex2di4a) DescriptorSet 0
-                              Decorate 50(g_tTex2du4a) DescriptorSet 0
-                              Decorate 267(Color) Location 0
-                              Decorate 271(Depth) BuiltIn FragDepth
-                              Decorate 275(g_sSamp2d) DescriptorSet 0
-                              Decorate 278(g_tTex1df4a) DescriptorSet 0
-                              Decorate 278(g_tTex1df4a) Binding 0
-                              Decorate 281(g_tTex1di4a) DescriptorSet 0
-                              Decorate 284(g_tTex1du4a) DescriptorSet 0
-                              Decorate 287(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 290(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 293(g_tTexcdu4a) DescriptorSet 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -838,326 +1340,400 @@ gl_FragCoord origin is upper left
               15:             TypePointer UniformConstant 14
      16(g_sSamp):     15(ptr) Variable UniformConstant
               18:             TypeSampledImage 10
-              20:             TypeVector 6(float) 3
-              21:             TypePointer UniformConstant 20(fvec3)
-          22(c3):     21(ptr) Variable UniformConstant
-              24:             TypeInt 32 1
-              25:             TypeVector 24(int) 2
-              26:             TypePointer UniformConstant 25(ivec2)
-          27(o2):     26(ptr) Variable UniformConstant
-              29:     24(int) Constant 0
-              31:             TypeVector 24(int) 4
-              32:             TypePointer Function 31(ivec4)
-              34:             TypeImage 24(int) 2D array sampled format:Unknown
-              35:             TypePointer UniformConstant 34
- 36(g_tTex2di4a):     35(ptr) Variable UniformConstant
-              39:             TypeSampledImage 34
-              44:             TypeInt 32 0
-              45:             TypeVector 44(int) 4
-              46:             TypePointer Function 45(ivec4)
-              48:             TypeImage 44(int) 2D array sampled format:Unknown
-              49:             TypePointer UniformConstant 48
- 50(g_tTex2du4a):     49(ptr) Variable UniformConstant
-              53:             TypeSampledImage 48
-              67:     44(int) Constant 4
-              68:             TypeArray 25(ivec2) 67
-              99:     24(int) Constant 1
-             154:     24(int) Constant 2
-             209:     24(int) Constant 3
-  258(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-             259:             TypePointer Function 258(PS_OUTPUT)
-             261:    6(float) Constant 1065353216
-             262:    7(fvec4) ConstantComposite 261 261 261 261
-             264:             TypePointer Function 6(float)
-             266:             TypePointer Output 7(fvec4)
-      267(Color):    266(ptr) Variable Output
-             270:             TypePointer Output 6(float)
-      271(Depth):    270(ptr) Variable Output
-  275(g_sSamp2d):     15(ptr) Variable UniformConstant
-             276:             TypeImage 6(float) 1D array sampled format:Unknown
-             277:             TypePointer UniformConstant 276
-278(g_tTex1df4a):    277(ptr) Variable UniformConstant
-             279:             TypeImage 24(int) 1D array sampled format:Unknown
-             280:             TypePointer UniformConstant 279
-281(g_tTex1di4a):    280(ptr) Variable UniformConstant
-             282:             TypeImage 44(int) 1D array sampled format:Unknown
-             283:             TypePointer UniformConstant 282
-284(g_tTex1du4a):    283(ptr) Variable UniformConstant
-             285:             TypeImage 6(float) Cube array sampled format:Unknown
-             286:             TypePointer UniformConstant 285
-287(g_tTexcdf4a):    286(ptr) Variable UniformConstant
-             288:             TypeImage 24(int) Cube array sampled format:Unknown
-             289:             TypePointer UniformConstant 288
-290(g_tTexcdi4a):    289(ptr) Variable UniformConstant
-             291:             TypeImage 44(int) Cube array sampled format:Unknown
-             292:             TypePointer UniformConstant 291
-293(g_tTexcdu4a):    292(ptr) Variable UniformConstant
-             294:             TypePointer UniformConstant 6(float)
-         295(c1):    294(ptr) Variable UniformConstant
-             296:             TypeVector 6(float) 2
-             297:             TypePointer UniformConstant 296(fvec2)
-         298(c2):    297(ptr) Variable UniformConstant
-             299:             TypePointer UniformConstant 7(fvec4)
-         300(c4):    299(ptr) Variable UniformConstant
-             301:             TypePointer UniformConstant 24(int)
-         302(o1):    301(ptr) Variable UniformConstant
-             303:             TypeVector 24(int) 3
-             304:             TypePointer UniformConstant 303(ivec3)
-         305(o3):    304(ptr) Variable UniformConstant
-             306:             TypePointer UniformConstant 31(ivec4)
-         307(o4):    306(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
      9(txval001):      8(ptr) Variable Function
-    33(txval011):     32(ptr) Variable Function
-    47(txval021):     46(ptr) Variable Function
-    58(txval004):      8(ptr) Variable Function
-    71(txval014):     32(ptr) Variable Function
-    82(txval024):     46(ptr) Variable Function
-    93(txval101):      8(ptr) Variable Function
-   101(txval111):     32(ptr) Variable Function
-   108(txval121):     46(ptr) Variable Function
-   115(txval104):      8(ptr) Variable Function
-   126(txval114):     32(ptr) Variable Function
-   137(txval124):     46(ptr) Variable Function
-   148(txval201):      8(ptr) Variable Function
-   156(txval211):     32(ptr) Variable Function
-   163(txval221):     46(ptr) Variable Function
-   170(txval204):      8(ptr) Variable Function
-   181(txval214):     32(ptr) Variable Function
-   192(txval224):     46(ptr) Variable Function
-   203(txval301):      8(ptr) Variable Function
-   211(txval311):     32(ptr) Variable Function
-   218(txval321):     46(ptr) Variable Function
-   225(txval304):      8(ptr) Variable Function
-   236(txval314):     32(ptr) Variable Function
-   247(txval324):     46(ptr) Variable Function
-      260(psout):    259(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
-              23:   20(fvec3) Load 22(c3)
-              28:   25(ivec2) Load 27(o2)
-              30:    7(fvec4) ImageGather 19 23 29 Offset 28
-                              Store 9(txval001) 30
-              37:          34 Load 36(g_tTex2di4a)
-              38:          14 Load 16(g_sSamp)
-              40:          39 SampledImage 37 38
-              41:   20(fvec3) Load 22(c3)
-              42:   25(ivec2) Load 27(o2)
-              43:   31(ivec4) ImageGather 40 41 29 Offset 42
-                              Store 33(txval011) 43
-              51:          48 Load 50(g_tTex2du4a)
-              52:          14 Load 16(g_sSamp)
-              54:          53 SampledImage 51 52
-              55:   20(fvec3) Load 22(c3)
-              56:   25(ivec2) Load 27(o2)
-              57:   45(ivec4) ImageGather 54 55 29 Offset 56
-                              Store 47(txval021) 57
-              59:          10 Load 12(g_tTex2df4a)
-              60:          14 Load 16(g_sSamp)
-              61:          18 SampledImage 59 60
-              62:   20(fvec3) Load 22(c3)
-              63:   25(ivec2) Load 27(o2)
-              64:   25(ivec2) Load 27(o2)
-              65:   25(ivec2) Load 27(o2)
-              66:   25(ivec2) Load 27(o2)
-              69:          68 CompositeConstruct 63 64 65 66
-              70:    7(fvec4) ImageGather 61 62 29 ConstOffsets 69
-                              Store 58(txval004) 70
-              72:          34 Load 36(g_tTex2di4a)
-              73:          14 Load 16(g_sSamp)
-              74:          39 SampledImage 72 73
-              75:   20(fvec3) Load 22(c3)
-              76:   25(ivec2) Load 27(o2)
-              77:   25(ivec2) Load 27(o2)
-              78:   25(ivec2) Load 27(o2)
-              79:   25(ivec2) Load 27(o2)
-              80:          68 CompositeConstruct 76 77 78 79
-              81:   31(ivec4) ImageGather 74 75 29 ConstOffsets 80
-                              Store 71(txval014) 81
-              83:          48 Load 50(g_tTex2du4a)
-              84:          14 Load 16(g_sSamp)
-              85:          53 SampledImage 83 84
-              86:   20(fvec3) Load 22(c3)
-              87:   25(ivec2) Load 27(o2)
-              88:   25(ivec2) Load 27(o2)
-              89:   25(ivec2) Load 27(o2)
-              90:   25(ivec2) Load 27(o2)
-              91:          68 CompositeConstruct 87 88 89 90
-              92:   45(ivec4) ImageGather 85 86 29 ConstOffsets 91
-                              Store 82(txval024) 92
-              94:          10 Load 12(g_tTex2df4a)
-              95:          14 Load 16(g_sSamp)
-              96:          18 SampledImage 94 95
-              97:   20(fvec3) Load 22(c3)
-              98:   25(ivec2) Load 27(o2)
-             100:    7(fvec4) ImageGather 96 97 99 Offset 98
-                              Store 93(txval101) 100
-             102:          34 Load 36(g_tTex2di4a)
-             103:          14 Load 16(g_sSamp)
-             104:          39 SampledImage 102 103
-             105:   20(fvec3) Load 22(c3)
-             106:   25(ivec2) Load 27(o2)
-             107:   31(ivec4) ImageGather 104 105 99 Offset 106
-                              Store 101(txval111) 107
-             109:          48 Load 50(g_tTex2du4a)
-             110:          14 Load 16(g_sSamp)
-             111:          53 SampledImage 109 110
-             112:   20(fvec3) Load 22(c3)
-             113:   25(ivec2) Load 27(o2)
-             114:   45(ivec4) ImageGather 111 112 99 Offset 113
-                              Store 108(txval121) 114
-             116:          10 Load 12(g_tTex2df4a)
-             117:          14 Load 16(g_sSamp)
-             118:          18 SampledImage 116 117
-             119:   20(fvec3) Load 22(c3)
-             120:   25(ivec2) Load 27(o2)
-             121:   25(ivec2) Load 27(o2)
-             122:   25(ivec2) Load 27(o2)
-             123:   25(ivec2) Load 27(o2)
-             124:          68 CompositeConstruct 120 121 122 123
-             125:    7(fvec4) ImageGather 118 119 99 ConstOffsets 124
-                              Store 115(txval104) 125
-             127:          34 Load 36(g_tTex2di4a)
-             128:          14 Load 16(g_sSamp)
-             129:          39 SampledImage 127 128
-             130:   20(fvec3) Load 22(c3)
-             131:   25(ivec2) Load 27(o2)
-             132:   25(ivec2) Load 27(o2)
-             133:   25(ivec2) Load 27(o2)
-             134:   25(ivec2) Load 27(o2)
-             135:          68 CompositeConstruct 131 132 133 134
-             136:   31(ivec4) ImageGather 129 130 99 ConstOffsets 135
-                              Store 126(txval114) 136
-             138:          48 Load 50(g_tTex2du4a)
-             139:          14 Load 16(g_sSamp)
-             140:          53 SampledImage 138 139
-             141:   20(fvec3) Load 22(c3)
-             142:   25(ivec2) Load 27(o2)
-             143:   25(ivec2) Load 27(o2)
-             144:   25(ivec2) Load 27(o2)
-             145:   25(ivec2) Load 27(o2)
-             146:          68 CompositeConstruct 142 143 144 145
-             147:   45(ivec4) ImageGather 140 141 99 ConstOffsets 146
-                              Store 137(txval124) 147
-             149:          10 Load 12(g_tTex2df4a)
-             150:          14 Load 16(g_sSamp)
-             151:          18 SampledImage 149 150
-             152:   20(fvec3) Load 22(c3)
-             153:   25(ivec2) Load 27(o2)
-             155:    7(fvec4) ImageGather 151 152 154 Offset 153
-                              Store 148(txval201) 155
-             157:          34 Load 36(g_tTex2di4a)
-             158:          14 Load 16(g_sSamp)
-             159:          39 SampledImage 157 158
-             160:   20(fvec3) Load 22(c3)
-             161:   25(ivec2) Load 27(o2)
-             162:   31(ivec4) ImageGather 159 160 154 Offset 161
-                              Store 156(txval211) 162
-             164:          48 Load 50(g_tTex2du4a)
+              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:          53 SampledImage 164 165
-             167:   20(fvec3) Load 22(c3)
-             168:   25(ivec2) Load 27(o2)
-             169:   45(ivec4) ImageGather 166 167 154 Offset 168
-                              Store 163(txval221) 169
-             171:          10 Load 12(g_tTex2df4a)
-             172:          14 Load 16(g_sSamp)
-             173:          18 SampledImage 171 172
-             174:   20(fvec3) Load 22(c3)
-             175:   25(ivec2) Load 27(o2)
-             176:   25(ivec2) Load 27(o2)
-             177:   25(ivec2) Load 27(o2)
-             178:   25(ivec2) Load 27(o2)
-             179:          68 CompositeConstruct 175 176 177 178
-             180:    7(fvec4) ImageGather 173 174 154 ConstOffsets 179
-                              Store 170(txval204) 180
-             182:          34 Load 36(g_tTex2di4a)
-             183:          14 Load 16(g_sSamp)
-             184:          39 SampledImage 182 183
-             185:   20(fvec3) Load 22(c3)
-             186:   25(ivec2) Load 27(o2)
-             187:   25(ivec2) Load 27(o2)
-             188:   25(ivec2) Load 27(o2)
-             189:   25(ivec2) Load 27(o2)
-             190:          68 CompositeConstruct 186 187 188 189
-             191:   31(ivec4) ImageGather 184 185 154 ConstOffsets 190
-                              Store 181(txval214) 191
-             193:          48 Load 50(g_tTex2du4a)
-             194:          14 Load 16(g_sSamp)
-             195:          53 SampledImage 193 194
-             196:   20(fvec3) Load 22(c3)
-             197:   25(ivec2) Load 27(o2)
-             198:   25(ivec2) Load 27(o2)
-             199:   25(ivec2) Load 27(o2)
-             200:   25(ivec2) Load 27(o2)
-             201:          68 CompositeConstruct 197 198 199 200
-             202:   45(ivec4) ImageGather 195 196 154 ConstOffsets 201
-                              Store 192(txval224) 202
-             204:          10 Load 12(g_tTex2df4a)
-             205:          14 Load 16(g_sSamp)
-             206:          18 SampledImage 204 205
-             207:   20(fvec3) Load 22(c3)
-             208:   25(ivec2) Load 27(o2)
-             210:    7(fvec4) ImageGather 206 207 209 Offset 208
-                              Store 203(txval301) 210
-             212:          34 Load 36(g_tTex2di4a)
-             213:          14 Load 16(g_sSamp)
-             214:          39 SampledImage 212 213
-             215:   20(fvec3) Load 22(c3)
-             216:   25(ivec2) Load 27(o2)
-             217:   31(ivec4) ImageGather 214 215 209 Offset 216
-                              Store 211(txval311) 217
-             219:          48 Load 50(g_tTex2du4a)
-             220:          14 Load 16(g_sSamp)
-             221:          53 SampledImage 219 220
-             222:   20(fvec3) Load 22(c3)
-             223:   25(ivec2) Load 27(o2)
-             224:   45(ivec4) ImageGather 221 222 209 Offset 223
-                              Store 218(txval321) 224
-             226:          10 Load 12(g_tTex2df4a)
-             227:          14 Load 16(g_sSamp)
-             228:          18 SampledImage 226 227
-             229:   20(fvec3) Load 22(c3)
-             230:   25(ivec2) Load 27(o2)
-             231:   25(ivec2) Load 27(o2)
-             232:   25(ivec2) Load 27(o2)
-             233:   25(ivec2) Load 27(o2)
-             234:          68 CompositeConstruct 230 231 232 233
-             235:    7(fvec4) ImageGather 228 229 209 ConstOffsets 234
-                              Store 225(txval304) 235
-             237:          34 Load 36(g_tTex2di4a)
-             238:          14 Load 16(g_sSamp)
-             239:          39 SampledImage 237 238
-             240:   20(fvec3) Load 22(c3)
-             241:   25(ivec2) Load 27(o2)
-             242:   25(ivec2) Load 27(o2)
-             243:   25(ivec2) Load 27(o2)
-             244:   25(ivec2) Load 27(o2)
-             245:          68 CompositeConstruct 241 242 243 244
-             246:   31(ivec4) ImageGather 239 240 209 ConstOffsets 245
-                              Store 236(txval314) 246
-             248:          48 Load 50(g_tTex2du4a)
-             249:          14 Load 16(g_sSamp)
-             250:          53 SampledImage 248 249
-             251:   20(fvec3) Load 22(c3)
-             252:   25(ivec2) Load 27(o2)
-             253:   25(ivec2) Load 27(o2)
-             254:   25(ivec2) Load 27(o2)
-             255:   25(ivec2) Load 27(o2)
-             256:          68 CompositeConstruct 252 253 254 255
-             257:   45(ivec4) ImageGather 250 251 209 ConstOffsets 256
-                              Store 247(txval324) 257
-             263:      8(ptr) AccessChain 260(psout) 29
-                              Store 263 262
-             265:    264(ptr) AccessChain 260(psout) 99
-                              Store 265 261
-             268:      8(ptr) AccessChain 260(psout) 29
-             269:    7(fvec4) Load 268
-                              Store 267(Color) 269
-             272:    264(ptr) AccessChain 260(psout) 99
-             273:    6(float) Load 272
-                              Store 271(Depth) 273
+             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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 18b35e4c8777cf15b2cdd06173a5b648cb5102bf..0c488cfbfab5f5202d1f31e30babb9c29a626bcd 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/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( (global 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,8 +1060,8 @@ gl_FragCoord origin is upper left
 0:277            1 (const int)
 0:277        Constant:
 0:277          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -1076,6 +1076,8 @@ gl_FragCoord origin is upper left
 0:279                1 (const int)
 0:279        Branch: Return
 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)
@@ -1104,8 +1106,6 @@ 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 +1114,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:46  Function Definition: main( (global 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,8 +2172,8 @@ gl_FragCoord origin is upper left
 0:277            1 (const int)
 0:277        Constant:
 0:277          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -2188,6 +2188,8 @@ gl_FragCoord origin is upper left
 0:279                1 (const int)
 0:279        Branch: Return
 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)
@@ -2216,8 +2218,6 @@ 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
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 3c063c1293db0cd568c8a60c403159ca4879d204..c1c90f4b257d6f311273d1225244552487cedef7 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/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( (global structure{temp 4-component vector of float 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,8 +36,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -46,9 +46,9 @@ Shader version: 450
 0:26                0 (const int)
 0:26        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -56,7 +56,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:11  Function Definition: main( (global structure{temp 4-component vector of float 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,8 +91,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -101,9 +101,9 @@ Shader version: 450
 0:26                0 (const int)
 0:26        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..918246b6ed1defe27cb391d53e4164e85aad96bc
--- /dev/null
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -0,0 +1,1090 @@
+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 Parameters: 
+0:?     Sequence
+0:63      Sequence
+0:63        move second child to first child (temp uint)
+0:63          'sizeQueryTemp' (temp uint)
+0:63          imageQuerySize (temp uint)
+0:63            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:63        move second child to first child (temp uint)
+0:63          'WidthU' (temp uint)
+0:63          'sizeQueryTemp' (temp uint)
+0:64      Sequence
+0:64        move second child to first child (temp uint)
+0:64          'sizeQueryTemp' (temp uint)
+0:64          imageQuerySize (temp uint)
+0:64            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:64        move second child to first child (temp uint)
+0:64          'WidthU' (temp uint)
+0:64          'sizeQueryTemp' (temp uint)
+0:65      Sequence
+0:65        move second child to first child (temp uint)
+0:65          'sizeQueryTemp' (temp uint)
+0:65          imageQuerySize (temp uint)
+0:65            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:65        move second child to first child (temp uint)
+0:65          'WidthU' (temp uint)
+0:65          'sizeQueryTemp' (temp uint)
+0:68      Sequence
+0:68        move second child to first child (temp uint)
+0:68          'sizeQueryTemp' (temp uint)
+0:68          imageQuerySize (temp uint)
+0:68            'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:68        move second child to first child (temp uint)
+0:68          'WidthU' (temp uint)
+0:68          'sizeQueryTemp' (temp uint)
+0:69      Sequence
+0:69        move second child to first child (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:69          imageQuerySize (temp uint)
+0:69            'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:69        move second child to first child (temp uint)
+0:69          'WidthU' (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          imageQuerySize (temp uint)
+0:70            'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:70        move second child to first child (temp uint)
+0:70          'WidthU' (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:73      Sequence
+0:73        move second child to first child (temp 2-component vector of uint)
+0:73          'sizeQueryTemp' (temp 2-component vector of uint)
+0:73          imageQuerySize (temp 2-component vector of uint)
+0:73            'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:73        move second child to first child (temp uint)
+0:73          'WidthU' (temp uint)
+0:73          direct index (temp uint)
+0:73            'sizeQueryTemp' (temp 2-component vector of uint)
+0:73            Constant:
+0:73              0 (const int)
+0:73        move second child to first child (temp uint)
+0:73          'ElementsU' (temp uint)
+0:73          direct index (temp uint)
+0:73            'sizeQueryTemp' (temp 2-component vector of uint)
+0:73            Constant:
+0:73              1 (const int)
+0:74      Sequence
+0:74        move second child to first child (temp 2-component vector of uint)
+0:74          'sizeQueryTemp' (temp 2-component vector of uint)
+0:74          imageQuerySize (temp 2-component vector of uint)
+0:74            'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:74        move second child to first child (temp uint)
+0:74          'WidthU' (temp uint)
+0:74          direct index (temp uint)
+0:74            'sizeQueryTemp' (temp 2-component vector of uint)
+0:74            Constant:
+0:74              0 (const int)
+0:74        move second child to first child (temp uint)
+0:74          'ElementsU' (temp uint)
+0:74          direct index (temp uint)
+0:74            'sizeQueryTemp' (temp 2-component vector of uint)
+0:74            Constant:
+0:74              1 (const int)
+0:75      Sequence
+0:75        move second child to first child (temp 2-component vector of uint)
+0:75          'sizeQueryTemp' (temp 2-component vector of uint)
+0:75          imageQuerySize (temp 2-component vector of uint)
+0:75            'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:75        move second child to first child (temp uint)
+0:75          'WidthU' (temp uint)
+0:75          direct index (temp uint)
+0:75            'sizeQueryTemp' (temp 2-component vector of uint)
+0:75            Constant:
+0:75              0 (const int)
+0:75        move second child to first child (temp uint)
+0:75          'ElementsU' (temp uint)
+0:75          direct index (temp uint)
+0:75            'sizeQueryTemp' (temp 2-component vector of uint)
+0:75            Constant:
+0:75              1 (const int)
+0:78      Sequence
+0:78        move second child to first child (temp 2-component vector of uint)
+0:78          'sizeQueryTemp' (temp 2-component vector of uint)
+0:78          imageQuerySize (temp 2-component vector of uint)
+0:78            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:78        move second child to first child (temp uint)
+0:78          'WidthU' (temp uint)
+0:78          direct index (temp uint)
+0:78            'sizeQueryTemp' (temp 2-component vector of uint)
+0:78            Constant:
+0:78              0 (const int)
+0:78        move second child to first child (temp uint)
+0:78          'HeightU' (temp uint)
+0:78          direct index (temp uint)
+0:78            'sizeQueryTemp' (temp 2-component vector of uint)
+0:78            Constant:
+0:78              1 (const int)
+0:79      Sequence
+0:79        move second child to first child (temp 2-component vector of uint)
+0:79          'sizeQueryTemp' (temp 2-component vector of uint)
+0:79          imageQuerySize (temp 2-component vector of uint)
+0:79            'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:79        move second child to first child (temp uint)
+0:79          'WidthU' (temp uint)
+0:79          direct index (temp uint)
+0:79            'sizeQueryTemp' (temp 2-component vector of uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79        move second child to first child (temp uint)
+0:79          'HeightU' (temp uint)
+0:79          direct index (temp uint)
+0:79            'sizeQueryTemp' (temp 2-component vector of uint)
+0:79            Constant:
+0:79              1 (const int)
+0:80      Sequence
+0:80        move second child to first child (temp 2-component vector of uint)
+0:80          'sizeQueryTemp' (temp 2-component vector of uint)
+0:80          imageQuerySize (temp 2-component vector of uint)
+0:80            'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:80        move second child to first child (temp uint)
+0:80          'WidthU' (temp uint)
+0:80          direct index (temp uint)
+0:80            'sizeQueryTemp' (temp 2-component vector of uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80        move second child to first child (temp uint)
+0:80          'HeightU' (temp uint)
+0:80          direct index (temp uint)
+0:80            'sizeQueryTemp' (temp 2-component vector of uint)
+0:80            Constant:
+0:80              1 (const int)
+0:83      Sequence
+0:83        move second child to first child (temp 3-component vector of uint)
+0:83          'sizeQueryTemp' (temp 3-component vector of uint)
+0:83          imageQuerySize (temp 3-component vector of uint)
+0:83            'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:83        move second child to first child (temp uint)
+0:83          'WidthU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              0 (const int)
+0:83        move second child to first child (temp uint)
+0:83          'HeightU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              1 (const int)
+0:83        move second child to first child (temp uint)
+0:83          'ElementsU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              2 (const int)
+0:84      Sequence
+0:84        move second child to first child (temp 3-component vector of uint)
+0:84          'sizeQueryTemp' (temp 3-component vector of uint)
+0:84          imageQuerySize (temp 3-component vector of uint)
+0:84            'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:84        move second child to first child (temp uint)
+0:84          'WidthU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              0 (const int)
+0:84        move second child to first child (temp uint)
+0:84          'HeightU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84        move second child to first child (temp uint)
+0:84          'ElementsU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              2 (const int)
+0:85      Sequence
+0:85        move second child to first child (temp 3-component vector of uint)
+0:85          'sizeQueryTemp' (temp 3-component vector of uint)
+0:85          imageQuerySize (temp 3-component vector of uint)
+0:85            'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:85        move second child to first child (temp uint)
+0:85          'WidthU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              0 (const int)
+0:85        move second child to first child (temp uint)
+0:85          'HeightU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85        move second child to first child (temp uint)
+0:85          'ElementsU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              2 (const int)
+0:88      Sequence
+0:88        move second child to first child (temp 3-component vector of uint)
+0:88          'sizeQueryTemp' (temp 3-component vector of uint)
+0:88          imageQuerySize (temp 3-component vector of uint)
+0:88            'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:88        move second child to first child (temp uint)
+0:88          'WidthU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              0 (const int)
+0:88        move second child to first child (temp uint)
+0:88          'HeightU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              1 (const int)
+0:88        move second child to first child (temp uint)
+0:88          'DepthU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              2 (const int)
+0:89      Sequence
+0:89        move second child to first child (temp 3-component vector of uint)
+0:89          'sizeQueryTemp' (temp 3-component vector of uint)
+0:89          imageQuerySize (temp 3-component vector of uint)
+0:89            'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:89        move second child to first child (temp uint)
+0:89          'WidthU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              0 (const int)
+0:89        move second child to first child (temp uint)
+0:89          'HeightU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              1 (const int)
+0:89        move second child to first child (temp uint)
+0:89          'DepthU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              2 (const int)
+0:90      Sequence
+0:90        move second child to first child (temp 3-component vector of uint)
+0:90          'sizeQueryTemp' (temp 3-component vector of uint)
+0:90          imageQuerySize (temp 3-component vector of uint)
+0:90            'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:90        move second child to first child (temp uint)
+0:90          'WidthU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              0 (const int)
+0:90        move second child to first child (temp uint)
+0:90          'HeightU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              1 (const int)
+0:90        move second child to first child (temp uint)
+0:90          'DepthU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              2 (const int)
+0:92      move second child to first child (temp 4-component vector of float)
+0:92        Color: direct index for structure (temp 4-component vector of float)
+0:92          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:92          Constant:
+0:92            0 (const int)
+0:92        Constant:
+0:92          1.000000
+0:92          1.000000
+0:92          1.000000
+0:92          1.000000
+0:93      move second child to first child (temp float)
+0:93        Depth: direct index for structure (temp float)
+0:93          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:93          Constant:
+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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:63      Sequence
+0:63        move second child to first child (temp uint)
+0:63          'sizeQueryTemp' (temp uint)
+0:63          imageQuerySize (temp uint)
+0:63            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:63        move second child to first child (temp uint)
+0:63          'WidthU' (temp uint)
+0:63          'sizeQueryTemp' (temp uint)
+0:64      Sequence
+0:64        move second child to first child (temp uint)
+0:64          'sizeQueryTemp' (temp uint)
+0:64          imageQuerySize (temp uint)
+0:64            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:64        move second child to first child (temp uint)
+0:64          'WidthU' (temp uint)
+0:64          'sizeQueryTemp' (temp uint)
+0:65      Sequence
+0:65        move second child to first child (temp uint)
+0:65          'sizeQueryTemp' (temp uint)
+0:65          imageQuerySize (temp uint)
+0:65            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:65        move second child to first child (temp uint)
+0:65          'WidthU' (temp uint)
+0:65          'sizeQueryTemp' (temp uint)
+0:68      Sequence
+0:68        move second child to first child (temp uint)
+0:68          'sizeQueryTemp' (temp uint)
+0:68          imageQuerySize (temp uint)
+0:68            'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:68        move second child to first child (temp uint)
+0:68          'WidthU' (temp uint)
+0:68          'sizeQueryTemp' (temp uint)
+0:69      Sequence
+0:69        move second child to first child (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:69          imageQuerySize (temp uint)
+0:69            'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:69        move second child to first child (temp uint)
+0:69          'WidthU' (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          imageQuerySize (temp uint)
+0:70            'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:70        move second child to first child (temp uint)
+0:70          'WidthU' (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:73      Sequence
+0:73        move second child to first child (temp 2-component vector of uint)
+0:73          'sizeQueryTemp' (temp 2-component vector of uint)
+0:73          imageQuerySize (temp 2-component vector of uint)
+0:73            'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:73        move second child to first child (temp uint)
+0:73          'WidthU' (temp uint)
+0:73          direct index (temp uint)
+0:73            'sizeQueryTemp' (temp 2-component vector of uint)
+0:73            Constant:
+0:73              0 (const int)
+0:73        move second child to first child (temp uint)
+0:73          'ElementsU' (temp uint)
+0:73          direct index (temp uint)
+0:73            'sizeQueryTemp' (temp 2-component vector of uint)
+0:73            Constant:
+0:73              1 (const int)
+0:74      Sequence
+0:74        move second child to first child (temp 2-component vector of uint)
+0:74          'sizeQueryTemp' (temp 2-component vector of uint)
+0:74          imageQuerySize (temp 2-component vector of uint)
+0:74            'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:74        move second child to first child (temp uint)
+0:74          'WidthU' (temp uint)
+0:74          direct index (temp uint)
+0:74            'sizeQueryTemp' (temp 2-component vector of uint)
+0:74            Constant:
+0:74              0 (const int)
+0:74        move second child to first child (temp uint)
+0:74          'ElementsU' (temp uint)
+0:74          direct index (temp uint)
+0:74            'sizeQueryTemp' (temp 2-component vector of uint)
+0:74            Constant:
+0:74              1 (const int)
+0:75      Sequence
+0:75        move second child to first child (temp 2-component vector of uint)
+0:75          'sizeQueryTemp' (temp 2-component vector of uint)
+0:75          imageQuerySize (temp 2-component vector of uint)
+0:75            'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:75        move second child to first child (temp uint)
+0:75          'WidthU' (temp uint)
+0:75          direct index (temp uint)
+0:75            'sizeQueryTemp' (temp 2-component vector of uint)
+0:75            Constant:
+0:75              0 (const int)
+0:75        move second child to first child (temp uint)
+0:75          'ElementsU' (temp uint)
+0:75          direct index (temp uint)
+0:75            'sizeQueryTemp' (temp 2-component vector of uint)
+0:75            Constant:
+0:75              1 (const int)
+0:78      Sequence
+0:78        move second child to first child (temp 2-component vector of uint)
+0:78          'sizeQueryTemp' (temp 2-component vector of uint)
+0:78          imageQuerySize (temp 2-component vector of uint)
+0:78            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:78        move second child to first child (temp uint)
+0:78          'WidthU' (temp uint)
+0:78          direct index (temp uint)
+0:78            'sizeQueryTemp' (temp 2-component vector of uint)
+0:78            Constant:
+0:78              0 (const int)
+0:78        move second child to first child (temp uint)
+0:78          'HeightU' (temp uint)
+0:78          direct index (temp uint)
+0:78            'sizeQueryTemp' (temp 2-component vector of uint)
+0:78            Constant:
+0:78              1 (const int)
+0:79      Sequence
+0:79        move second child to first child (temp 2-component vector of uint)
+0:79          'sizeQueryTemp' (temp 2-component vector of uint)
+0:79          imageQuerySize (temp 2-component vector of uint)
+0:79            'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:79        move second child to first child (temp uint)
+0:79          'WidthU' (temp uint)
+0:79          direct index (temp uint)
+0:79            'sizeQueryTemp' (temp 2-component vector of uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79        move second child to first child (temp uint)
+0:79          'HeightU' (temp uint)
+0:79          direct index (temp uint)
+0:79            'sizeQueryTemp' (temp 2-component vector of uint)
+0:79            Constant:
+0:79              1 (const int)
+0:80      Sequence
+0:80        move second child to first child (temp 2-component vector of uint)
+0:80          'sizeQueryTemp' (temp 2-component vector of uint)
+0:80          imageQuerySize (temp 2-component vector of uint)
+0:80            'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:80        move second child to first child (temp uint)
+0:80          'WidthU' (temp uint)
+0:80          direct index (temp uint)
+0:80            'sizeQueryTemp' (temp 2-component vector of uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80        move second child to first child (temp uint)
+0:80          'HeightU' (temp uint)
+0:80          direct index (temp uint)
+0:80            'sizeQueryTemp' (temp 2-component vector of uint)
+0:80            Constant:
+0:80              1 (const int)
+0:83      Sequence
+0:83        move second child to first child (temp 3-component vector of uint)
+0:83          'sizeQueryTemp' (temp 3-component vector of uint)
+0:83          imageQuerySize (temp 3-component vector of uint)
+0:83            'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:83        move second child to first child (temp uint)
+0:83          'WidthU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              0 (const int)
+0:83        move second child to first child (temp uint)
+0:83          'HeightU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              1 (const int)
+0:83        move second child to first child (temp uint)
+0:83          'ElementsU' (temp uint)
+0:83          direct index (temp uint)
+0:83            'sizeQueryTemp' (temp 3-component vector of uint)
+0:83            Constant:
+0:83              2 (const int)
+0:84      Sequence
+0:84        move second child to first child (temp 3-component vector of uint)
+0:84          'sizeQueryTemp' (temp 3-component vector of uint)
+0:84          imageQuerySize (temp 3-component vector of uint)
+0:84            'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:84        move second child to first child (temp uint)
+0:84          'WidthU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              0 (const int)
+0:84        move second child to first child (temp uint)
+0:84          'HeightU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84        move second child to first child (temp uint)
+0:84          'ElementsU' (temp uint)
+0:84          direct index (temp uint)
+0:84            'sizeQueryTemp' (temp 3-component vector of uint)
+0:84            Constant:
+0:84              2 (const int)
+0:85      Sequence
+0:85        move second child to first child (temp 3-component vector of uint)
+0:85          'sizeQueryTemp' (temp 3-component vector of uint)
+0:85          imageQuerySize (temp 3-component vector of uint)
+0:85            'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:85        move second child to first child (temp uint)
+0:85          'WidthU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              0 (const int)
+0:85        move second child to first child (temp uint)
+0:85          'HeightU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85        move second child to first child (temp uint)
+0:85          'ElementsU' (temp uint)
+0:85          direct index (temp uint)
+0:85            'sizeQueryTemp' (temp 3-component vector of uint)
+0:85            Constant:
+0:85              2 (const int)
+0:88      Sequence
+0:88        move second child to first child (temp 3-component vector of uint)
+0:88          'sizeQueryTemp' (temp 3-component vector of uint)
+0:88          imageQuerySize (temp 3-component vector of uint)
+0:88            'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:88        move second child to first child (temp uint)
+0:88          'WidthU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              0 (const int)
+0:88        move second child to first child (temp uint)
+0:88          'HeightU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              1 (const int)
+0:88        move second child to first child (temp uint)
+0:88          'DepthU' (temp uint)
+0:88          direct index (temp uint)
+0:88            'sizeQueryTemp' (temp 3-component vector of uint)
+0:88            Constant:
+0:88              2 (const int)
+0:89      Sequence
+0:89        move second child to first child (temp 3-component vector of uint)
+0:89          'sizeQueryTemp' (temp 3-component vector of uint)
+0:89          imageQuerySize (temp 3-component vector of uint)
+0:89            'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:89        move second child to first child (temp uint)
+0:89          'WidthU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              0 (const int)
+0:89        move second child to first child (temp uint)
+0:89          'HeightU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              1 (const int)
+0:89        move second child to first child (temp uint)
+0:89          'DepthU' (temp uint)
+0:89          direct index (temp uint)
+0:89            'sizeQueryTemp' (temp 3-component vector of uint)
+0:89            Constant:
+0:89              2 (const int)
+0:90      Sequence
+0:90        move second child to first child (temp 3-component vector of uint)
+0:90          'sizeQueryTemp' (temp 3-component vector of uint)
+0:90          imageQuerySize (temp 3-component vector of uint)
+0:90            'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:90        move second child to first child (temp uint)
+0:90          'WidthU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              0 (const int)
+0:90        move second child to first child (temp uint)
+0:90          'HeightU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              1 (const int)
+0:90        move second child to first child (temp uint)
+0:90          'DepthU' (temp uint)
+0:90          direct index (temp uint)
+0:90            'sizeQueryTemp' (temp 3-component vector of uint)
+0:90            Constant:
+0:90              2 (const int)
+0:92      move second child to first child (temp 4-component vector of float)
+0:92        Color: direct index for structure (temp 4-component vector of float)
+0:92          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:92          Constant:
+0:92            0 (const int)
+0:92        Constant:
+0:92          1.000000
+0:92          1.000000
+0:92          1.000000
+0:92          1.000000
+0:93      move second child to first child (temp float)
+0:93        Depth: direct index for structure (temp float)
+0:93          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:93          Constant:
+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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+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
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 210 214
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index a44e9445e366f14e88095fe3c838e6cc3b0e38ab..5985eadc1f411e55e28ee0f0dd78ab52843cd4be 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -7,14 +7,14 @@ 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( (global 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
 0:16        move second child to first child (temp 2-component vector of float)
 0:16          'r00' (temp 2-component vector of float)
 0:16          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:16            'g_tTex2dmsf4' (uniform texture2DMS)
 0:16            Constant:
 0:16              1 (const int)
@@ -22,7 +22,7 @@ ERROR: node is still EOpNull!
 0:17        move second child to first child (temp 2-component vector of float)
 0:17          'r01' (temp 2-component vector of float)
 0:17          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:17            Constant:
 0:17              2 (const int)
@@ -43,8 +43,8 @@ ERROR: node is still EOpNull!
 0:20            1 (const int)
 0:20        Constant:
 0:20          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -59,11 +59,11 @@ ERROR: node is still EOpNull!
 0:22                1 (const int)
 0:22        Branch: Return
 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,14 +72,14 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:13  Function Definition: main( (global 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
 0:16        move second child to first child (temp 2-component vector of float)
 0:16          'r00' (temp 2-component vector of float)
 0:16          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:16            'g_tTex2dmsf4' (uniform texture2DMS)
 0:16            Constant:
 0:16              1 (const int)
@@ -87,7 +87,7 @@ ERROR: node is still EOpNull!
 0:17        move second child to first child (temp 2-component vector of float)
 0:17          'r01' (temp 2-component vector of float)
 0:17          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:17            Constant:
 0:17              2 (const int)
@@ -108,8 +108,8 @@ ERROR: node is still EOpNull!
 0:20            1 (const int)
 0:20        Constant:
 0:20          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -124,10 +124,10 @@ ERROR: node is still EOpNull!
 0:22                1 (const int)
 0:22        Branch: Return
 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
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..35e88e93c227a2af46fa0f4b0637fe0a2a490a24
--- /dev/null
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -0,0 +1,125 @@
+hlsl.identifier.sample.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: sample(i1; (temp int)
+0:9    Function Parameters: 
+0:9      'x' (in int)
+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 Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:15          'sample' (temp 4-component vector of float)
+0:?           Constant:
+0:?             3.000000
+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:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: sample(i1; (temp int)
+0:9    Function Parameters: 
+0:9      'x' (in int)
+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 Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:15          'sample' (temp 4-component vector of float)
+0:?           Constant:
+0:?             3.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 25
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 10  "sample(i1;"
+                              Name 9  "x"
+                              Name 18  "sample"
+                              Name 25  "@entryPointOutput"
+                              Decorate 25(@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
+         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
+                              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
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index 499015a4823403e6beaca8d55dd8e7542673bc4d..c37bff61a1ebd78762a7a7a020ef42ec23d46b51 100755
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -2,15 +2,16 @@ hlsl.if.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
-0:3        Compare Equal (temp 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        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        true case
 0:4        Sequence
 0:4          move second child to first child (temp 4-component vector of float)
@@ -19,9 +20,10 @@ gl_FragCoord origin is upper left
 0:4          Branch: Return
 0:6      Test condition and select (temp void)
 0:6        Condition
-0:6        Compare Equal (temp 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        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        true case
 0:7        Sequence
 0:7          move second child to first child (temp 4-component vector of float)
@@ -37,21 +39,24 @@ gl_FragCoord origin is upper left
 0:9          Branch: Return
 0:11      Test condition and select (temp void)
 0:11        Condition
-0:11        Compare Equal (temp 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        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        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
-0:14        Compare Equal (temp 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        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        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
-0:19        Compare Equal (temp 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        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        true case
 0:?         Sequence
 0:20          Sequence
@@ -61,9 +66,10 @@ gl_FragCoord origin is upper left
 0:20            Branch: Return
 0:23      Test condition and select (temp void)
 0:23        Condition
-0:23        Compare Equal (temp 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        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        true case
 0:?         Sequence
 0:24          Sequence
@@ -103,15 +109,16 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
-0:3        Compare Equal (temp 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        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        true case
 0:4        Sequence
 0:4          move second child to first child (temp 4-component vector of float)
@@ -120,9 +127,10 @@ gl_FragCoord origin is upper left
 0:4          Branch: Return
 0:6      Test condition and select (temp void)
 0:6        Condition
-0:6        Compare Equal (temp 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        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        true case
 0:7        Sequence
 0:7          move second child to first child (temp 4-component vector of float)
@@ -138,21 +146,24 @@ gl_FragCoord origin is upper left
 0:9          Branch: Return
 0:11      Test condition and select (temp void)
 0:11        Condition
-0:11        Compare Equal (temp 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        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        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
-0:14        Compare Equal (temp 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        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        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
-0:19        Compare Equal (temp 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        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        true case
 0:?         Sequence
 0:20          Sequence
@@ -162,9 +173,10 @@ gl_FragCoord origin is upper left
 0:20            Branch: Return
 0:23      Test condition and select (temp void)
 0:23        Condition
-0:23        Compare Equal (temp 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        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        true case
 0:?         Sequence
 0:24          Sequence
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 99acc235809aeef3aa60064091b4dba3265a1485..42f94caefa9047fd56e062cedc3cc82014ba3955 100755
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -78,7 +78,7 @@ 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; (global 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:?     Sequence
@@ -132,6 +132,8 @@ gl_FragCoord origin is upper left
 0:35            'a1' (global 4-component vector of float)
 0:35        Branch: Return
 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)
@@ -150,8 +152,6 @@ 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)
 
 
 Linked fragment stage:
@@ -236,7 +236,7 @@ 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; (global 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:?     Sequence
@@ -290,6 +290,8 @@ gl_FragCoord origin is upper left
 0:35            'a1' (global 4-component vector of float)
 0:35        Branch: Return
 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)
@@ -308,8 +310,6 @@ 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)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index 3657cb2284bbf4cd77e8374d45c9e0b47d451a89..9b53e30499c8df7089f757c9382cf3f904bc3c68 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -2,7 +2,7 @@ hlsl.init2.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: Test1( (global void)
+0:3  Function Definition: Test1( (temp void)
 0:3    Function Parameters: 
 0:?     Sequence
 0:5      Sequence
@@ -29,10 +29,10 @@ gl_FragCoord origin is upper left
 0:20            8.000000
 0:20            9.000000
 0:20            10.000000
-0:26  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:26  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:26    Function Parameters: 
 0:?     Sequence
-0:27      Function Call: Test1( (global void)
+0:27      Function Call: Test1( (temp void)
 0:30      move second child to first child (temp 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})
@@ -43,8 +43,8 @@ gl_FragCoord origin is upper left
 0:30          1.000000
 0:30          1.000000
 0:30          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -62,7 +62,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: Test1( (global void)
+0:3  Function Definition: Test1( (temp void)
 0:3    Function Parameters: 
 0:?     Sequence
 0:5      Sequence
@@ -89,10 +89,10 @@ gl_FragCoord origin is upper left
 0:20            8.000000
 0:20            9.000000
 0:20            10.000000
-0:26  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:26  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:26    Function Parameters: 
 0:?     Sequence
-0:27      Function Call: Test1( (global void)
+0:27      Function Call: Test1( (temp void)
 0:30      move second child to first child (temp 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})
@@ -103,8 +103,8 @@ gl_FragCoord origin is upper left
 0:30          1.000000
 0:30          1.000000
 0:30          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 2fcb722262d36ae82dda3c429826ddc174597966..b2716a4c84a219c7d6fa2e9d69dbe331e8ed1806 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -2,7 +2,7 @@ hlsl.inoutquals.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: MyFunc(f1;f1;f1; (global void)
+0:8  Function Definition: MyFunc(f1;f1;f1; (temp void)
 0:8    Function Parameters: 
 0:8      'x' (in float)
 0:8      'y' (out float)
@@ -18,9 +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; (global 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:?     Sequence
 0:18      Sequence
 0:18        move second child to first child (temp float)
@@ -31,7 +32,7 @@ gl_FragCoord origin is upper left
 0:18          'z' (temp float)
 0:18          Constant:
 0:18            3.000000
-0:19      Function Call: MyFunc(f1;f1;f1; (global void)
+0:19      Function Call: MyFunc(f1;f1;f1; (temp void)
 0:19        'x' (temp float)
 0:19        'y' (temp float)
 0:19        'z' (temp float)
@@ -55,8 +56,8 @@ gl_FragCoord origin is upper left
 0:22          'inpos' (noperspective in 4-component vector of float FragCoord)
 0:22          Constant:
 0:22            3 (const int)
-0:?       Sequence
-0:?         Sequence
+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)
@@ -74,6 +75,7 @@ gl_FragCoord origin is upper left
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
 0:?     'inpos' (noperspective in 4-component vector of float FragCoord)
+0:?     'sampleMask' (out int SampleMaskIn)
 
 
 Linked fragment stage:
@@ -82,7 +84,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: MyFunc(f1;f1;f1; (global void)
+0:8  Function Definition: MyFunc(f1;f1;f1; (temp void)
 0:8    Function Parameters: 
 0:8      'x' (in float)
 0:8      'y' (out float)
@@ -98,9 +100,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; (global 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:?     Sequence
 0:18      Sequence
 0:18        move second child to first child (temp float)
@@ -111,7 +114,7 @@ gl_FragCoord origin is upper left
 0:18          'z' (temp float)
 0:18          Constant:
 0:18            3.000000
-0:19      Function Call: MyFunc(f1;f1;f1; (global void)
+0:19      Function Call: MyFunc(f1;f1;f1; (temp void)
 0:19        'x' (temp float)
 0:19        'y' (temp float)
 0:19        'z' (temp float)
@@ -135,8 +138,8 @@ gl_FragCoord origin is upper left
 0:22          'inpos' (noperspective in 4-component vector of float FragCoord)
 0:22          Constant:
 0:22            3 (const int)
-0:?       Sequence
-0:?         Sequence
+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)
@@ -154,15 +157,17 @@ gl_FragCoord origin is upper left
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'Depth' (out float FragDepth)
 0:?     'inpos' (noperspective in 4-component vector of float FragCoord)
+0:?     'sampleMask' (out int SampleMaskIn)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 61
+// Id's are bound by 63
 
                               Capability Shader
+                              Capability SampleRateShading
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 45 53 57
+                              EntryPoint Fragment 4  "main" 45 53 57 62
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 12  "MyFunc(f1;f1;f1;"
@@ -182,10 +187,12 @@ gl_FragCoord origin is upper left
                               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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -211,6 +218,8 @@ gl_FragCoord origin is upper left
        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
          4(main):           2 Function None 3
                5:             Label
            17(x):      7(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index 95e172588fdb6320fe16de05fcd6f5de4223af15..07bd3709e2f4ec604e679157baf75bef5669a14c 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -2,15 +2,15 @@ hlsl.intrinsics.barriers.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:3  Function Definition: ComputeShaderFunction( (global float)
+0:3  Function Definition: ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
-0:4      MemoryBarrier (global void)
-0:5      AllMemoryBarrierWithGroupSync (global void)
-0:6      GroupMemoryBarrier (global void)
-0:7      GroupMemoryBarrierWithGroupSync (global void)
-0:8      WorkgroupMemoryBarrier (global void)
-0:9      WorkgroupMemoryBarrierWithGroupSync (global void)
+0:4      MemoryBarrier (temp void)
+0:5      AllMemoryBarrierWithGroupSync (temp void)
+0:6      GroupMemoryBarrier (temp void)
+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)
@@ -27,15 +27,15 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:3  Function Definition: ComputeShaderFunction( (global float)
+0:3  Function Definition: ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
-0:4      MemoryBarrier (global void)
-0:5      AllMemoryBarrierWithGroupSync (global void)
-0:6      GroupMemoryBarrier (global void)
-0:7      GroupMemoryBarrierWithGroupSync (global void)
-0:8      WorkgroupMemoryBarrier (global void)
-0:9      WorkgroupMemoryBarrierWithGroupSync (global void)
+0:4      MemoryBarrier (temp void)
+0:5      AllMemoryBarrierWithGroupSync (temp void)
+0:6      GroupMemoryBarrier (temp void)
+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)
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index b760c65e034b3e5a2d2f876b1ce3fb0e3f20deea..42ad9731639046db3aef3ee99c9459664899ef24 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -2,7 +2,7 @@ hlsl.intrinsics.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -10,71 +10,71 @@ local_size = (1, 1, 1)
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:21      all (global bool)
+0:21      all (temp bool)
 0:21        'inF0' (in float)
-0:24      AtomicAdd (global void)
-0:24        'gs_ua' (global uint)
-0:24        'gs_ub' (global uint)
+0:24      AtomicAdd (temp void)
+0:24        'gs_ua' (shared uint)
+0:24        'gs_ub' (shared uint)
 0:25      move second child to first child (temp uint)
 0:25        'out_u1' (temp uint)
 0:25        AtomicAdd (temp uint)
-0:25          'gs_ua' (global uint)
-0:25          'gs_ub' (global uint)
-0:26      AtomicAnd (global void)
-0:26        'gs_ua' (global uint)
-0:26        'gs_ub' (global uint)
+0:25          'gs_ua' (shared uint)
+0:25          'gs_ub' (shared uint)
+0:26      AtomicAnd (temp void)
+0:26        'gs_ua' (shared uint)
+0:26        'gs_ub' (shared uint)
 0:27      move second child to first child (temp uint)
 0:27        'out_u1' (temp uint)
 0:27        AtomicAnd (temp uint)
-0:27          'gs_ua' (global uint)
-0:27          'gs_ub' (global uint)
+0:27          'gs_ua' (shared uint)
+0:27          'gs_ub' (shared uint)
 0:28      move second child to first child (temp uint)
 0:28        'out_u1' (temp uint)
 0:28        AtomicCompSwap (temp uint)
-0:28          'gs_ua' (global uint)
-0:28          'gs_ub' (global uint)
-0:28          'gs_uc' (global uint)
+0:28          'gs_ua' (shared uint)
+0:28          'gs_ub' (shared uint)
+0:28          'gs_uc' (shared uint)
 0:29      move second child to first child (temp uint)
 0:29        'out_u1' (temp uint)
 0:29        AtomicExchange (temp uint)
-0:29          'gs_ua' (global uint)
-0:29          'gs_ub' (global uint)
-0:30      AtomicMax (global void)
-0:30        'gs_ua' (global uint)
-0:30        'gs_ub' (global uint)
+0:29          'gs_ua' (shared uint)
+0:29          'gs_ub' (shared uint)
+0:30      AtomicMax (temp void)
+0:30        'gs_ua' (shared uint)
+0:30        'gs_ub' (shared uint)
 0:31      move second child to first child (temp uint)
 0:31        'out_u1' (temp uint)
 0:31        AtomicMax (temp uint)
-0:31          'gs_ua' (global uint)
-0:31          'gs_ub' (global uint)
-0:32      AtomicMin (global void)
-0:32        'gs_ua' (global uint)
-0:32        'gs_ub' (global uint)
+0:31          'gs_ua' (shared uint)
+0:31          'gs_ub' (shared uint)
+0:32      AtomicMin (temp void)
+0:32        'gs_ua' (shared uint)
+0:32        'gs_ub' (shared uint)
 0:33      move second child to first child (temp uint)
 0:33        'out_u1' (temp uint)
 0:33        AtomicMin (temp uint)
-0:33          'gs_ua' (global uint)
-0:33          'gs_ub' (global uint)
-0:34      AtomicOr (global void)
-0:34        'gs_ua' (global uint)
-0:34        'gs_ub' (global uint)
+0:33          'gs_ua' (shared uint)
+0:33          'gs_ub' (shared uint)
+0:34      AtomicOr (temp void)
+0:34        'gs_ua' (shared uint)
+0:34        'gs_ub' (shared uint)
 0:35      move second child to first child (temp uint)
 0:35        'out_u1' (temp uint)
 0:35        AtomicOr (temp uint)
-0:35          'gs_ua' (global uint)
-0:35          'gs_ub' (global uint)
-0:36      AtomicXor (global void)
-0:36        'gs_ua' (global uint)
-0:36        'gs_ub' (global uint)
+0:35          'gs_ua' (shared uint)
+0:35          'gs_ub' (shared uint)
+0:36      AtomicXor (temp void)
+0:36        'gs_ua' (shared uint)
+0:36        'gs_ub' (shared uint)
 0:37      move second child to first child (temp uint)
 0:37        'out_u1' (temp uint)
 0:37        AtomicXor (temp uint)
-0:37          'gs_ua' (global uint)
-0:37          'gs_ub' (global uint)
+0:37          'gs_ua' (shared uint)
+0:37          'gs_ub' (shared uint)
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 1-component vector of float)
 0:45      'inF1' (in 1-component vector of float)
@@ -83,7 +83,7 @@ local_size = (1, 1, 1)
 0:47      Branch: Return with expression
 0:47        Constant:
 0:47          0.000000
-0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:51    Function Parameters: 
 0:51      'inF0' (in 2-component vector of float)
 0:51      'inF1' (in 2-component vector of float)
@@ -91,72 +91,72 @@ local_size = (1, 1, 1)
 0:51      'inU0' (in 2-component vector of uint)
 0:51      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:55      all (global bool)
+0:55      all (temp bool)
 0:55        'inF0' (in 2-component vector of float)
-0:58      AtomicAdd (global void)
-0:58        'gs_ua2' (global 2-component vector of uint)
-0:58        'gs_ub2' (global 2-component vector of uint)
+0:58      AtomicAdd (temp void)
+0:58        'gs_ua2' (shared 2-component vector of uint)
+0:58        'gs_ub2' (shared 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
 0:59        'out_u2' (temp 2-component vector of uint)
 0:59        AtomicAdd (temp 2-component vector of uint)
-0:59          'gs_ua2' (global 2-component vector of uint)
-0:59          'gs_ub2' (global 2-component vector of uint)
-0:60      AtomicAnd (global void)
-0:60        'gs_ua2' (global 2-component vector of uint)
-0:60        'gs_ub2' (global 2-component vector of uint)
+0:59          'gs_ua2' (shared 2-component vector of uint)
+0:59          'gs_ub2' (shared 2-component vector of uint)
+0:60      AtomicAnd (temp void)
+0:60        'gs_ua2' (shared 2-component vector of uint)
+0:60        'gs_ub2' (shared 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
 0:61        'out_u2' (temp 2-component vector of uint)
 0:61        AtomicAnd (temp 2-component vector of uint)
-0:61          'gs_ua2' (global 2-component vector of uint)
-0:61          'gs_ub2' (global 2-component vector of uint)
+0:61          'gs_ua2' (shared 2-component vector of uint)
+0:61          'gs_ub2' (shared 2-component vector of uint)
 0:62      move second child to first child (temp 2-component vector of uint)
 0:62        'out_u2' (temp 2-component vector of uint)
 0:62        AtomicCompSwap (temp 2-component vector of uint)
-0:62          'gs_ua2' (global 2-component vector of uint)
-0:62          'gs_ub2' (global 2-component vector of uint)
-0:62          'gs_uc2' (global 2-component vector of uint)
+0:62          'gs_ua2' (shared 2-component vector of uint)
+0:62          'gs_ub2' (shared 2-component vector of uint)
+0:62          'gs_uc2' (shared 2-component vector of uint)
 0:63      move second child to first child (temp 2-component vector of uint)
 0:63        'out_u2' (temp 2-component vector of uint)
 0:63        AtomicExchange (temp 2-component vector of uint)
-0:63          'gs_ua2' (global 2-component vector of uint)
-0:63          'gs_ub2' (global 2-component vector of uint)
-0:64      AtomicMax (global void)
-0:64        'gs_ua2' (global 2-component vector of uint)
-0:64        'gs_ub2' (global 2-component vector of uint)
+0:63          'gs_ua2' (shared 2-component vector of uint)
+0:63          'gs_ub2' (shared 2-component vector of uint)
+0:64      AtomicMax (temp void)
+0:64        'gs_ua2' (shared 2-component vector of uint)
+0:64        'gs_ub2' (shared 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
 0:65        'out_u2' (temp 2-component vector of uint)
 0:65        AtomicMax (temp 2-component vector of uint)
-0:65          'gs_ua2' (global 2-component vector of uint)
-0:65          'gs_ub2' (global 2-component vector of uint)
-0:66      AtomicMin (global void)
-0:66        'gs_ua2' (global 2-component vector of uint)
-0:66        'gs_ub2' (global 2-component vector of uint)
+0:65          'gs_ua2' (shared 2-component vector of uint)
+0:65          'gs_ub2' (shared 2-component vector of uint)
+0:66      AtomicMin (temp void)
+0:66        'gs_ua2' (shared 2-component vector of uint)
+0:66        'gs_ub2' (shared 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
 0:67        'out_u2' (temp 2-component vector of uint)
 0:67        AtomicMin (temp 2-component vector of uint)
-0:67          'gs_ua2' (global 2-component vector of uint)
-0:67          'gs_ub2' (global 2-component vector of uint)
-0:68      AtomicOr (global void)
-0:68        'gs_ua2' (global 2-component vector of uint)
-0:68        'gs_ub2' (global 2-component vector of uint)
+0:67          'gs_ua2' (shared 2-component vector of uint)
+0:67          'gs_ub2' (shared 2-component vector of uint)
+0:68      AtomicOr (temp void)
+0:68        'gs_ua2' (shared 2-component vector of uint)
+0:68        'gs_ub2' (shared 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
 0:69        'out_u2' (temp 2-component vector of uint)
 0:69        AtomicOr (temp 2-component vector of uint)
-0:69          'gs_ua2' (global 2-component vector of uint)
-0:69          'gs_ub2' (global 2-component vector of uint)
-0:70      AtomicXor (global void)
-0:70        'gs_ua2' (global 2-component vector of uint)
-0:70        'gs_ub2' (global 2-component vector of uint)
+0:69          'gs_ua2' (shared 2-component vector of uint)
+0:69          'gs_ub2' (shared 2-component vector of uint)
+0:70      AtomicXor (temp void)
+0:70        'gs_ua2' (shared 2-component vector of uint)
+0:70        'gs_ub2' (shared 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
 0:71        'out_u2' (temp 2-component vector of uint)
 0:71        AtomicXor (temp 2-component vector of uint)
-0:71          'gs_ua2' (global 2-component vector of uint)
-0:71          'gs_ub2' (global 2-component vector of uint)
+0:71          'gs_ua2' (shared 2-component vector of uint)
+0:71          'gs_ub2' (shared 2-component vector of uint)
 0:74      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:78    Function Parameters: 
 0:78      'inF0' (in 3-component vector of float)
 0:78      'inF1' (in 3-component vector of float)
@@ -164,73 +164,73 @@ local_size = (1, 1, 1)
 0:78      'inU0' (in 3-component vector of uint)
 0:78      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:82      all (global bool)
+0:82      all (temp bool)
 0:82        'inF0' (in 3-component vector of float)
-0:85      AtomicAdd (global void)
-0:85        'gs_ua3' (global 3-component vector of uint)
-0:85        'gs_ub3' (global 3-component vector of uint)
+0:85      AtomicAdd (temp void)
+0:85        'gs_ua3' (shared 3-component vector of uint)
+0:85        'gs_ub3' (shared 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
 0:86        'out_u3' (temp 3-component vector of uint)
 0:86        AtomicAdd (temp 3-component vector of uint)
-0:86          'gs_ua3' (global 3-component vector of uint)
-0:86          'gs_ub3' (global 3-component vector of uint)
-0:87      AtomicAnd (global void)
-0:87        'gs_ua3' (global 3-component vector of uint)
-0:87        'gs_ub3' (global 3-component vector of uint)
+0:86          'gs_ua3' (shared 3-component vector of uint)
+0:86          'gs_ub3' (shared 3-component vector of uint)
+0:87      AtomicAnd (temp void)
+0:87        'gs_ua3' (shared 3-component vector of uint)
+0:87        'gs_ub3' (shared 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
 0:88        'out_u3' (temp 3-component vector of uint)
 0:88        AtomicAnd (temp 3-component vector of uint)
-0:88          'gs_ua3' (global 3-component vector of uint)
-0:88          'gs_ub3' (global 3-component vector of uint)
+0:88          'gs_ua3' (shared 3-component vector of uint)
+0:88          'gs_ub3' (shared 3-component vector of uint)
 0:89      move second child to first child (temp 3-component vector of uint)
 0:89        'out_u3' (temp 3-component vector of uint)
 0:89        AtomicCompSwap (temp 3-component vector of uint)
-0:89          'gs_ua3' (global 3-component vector of uint)
-0:89          'gs_ub3' (global 3-component vector of uint)
-0:89          'gs_uc3' (global 3-component vector of uint)
+0:89          'gs_ua3' (shared 3-component vector of uint)
+0:89          'gs_ub3' (shared 3-component vector of uint)
+0:89          'gs_uc3' (shared 3-component vector of uint)
 0:90      move second child to first child (temp 3-component vector of uint)
 0:90        'out_u3' (temp 3-component vector of uint)
 0:90        AtomicExchange (temp 3-component vector of uint)
-0:90          'gs_ua3' (global 3-component vector of uint)
-0:90          'gs_ub3' (global 3-component vector of uint)
-0:91      AtomicMax (global void)
-0:91        'gs_ua3' (global 3-component vector of uint)
-0:91        'gs_ub3' (global 3-component vector of uint)
+0:90          'gs_ua3' (shared 3-component vector of uint)
+0:90          'gs_ub3' (shared 3-component vector of uint)
+0:91      AtomicMax (temp void)
+0:91        'gs_ua3' (shared 3-component vector of uint)
+0:91        'gs_ub3' (shared 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
 0:92        'out_u3' (temp 3-component vector of uint)
 0:92        AtomicMax (temp 3-component vector of uint)
-0:92          'gs_ua3' (global 3-component vector of uint)
-0:92          'gs_ub3' (global 3-component vector of uint)
-0:93      AtomicMin (global void)
-0:93        'gs_ua3' (global 3-component vector of uint)
-0:93        'gs_ub3' (global 3-component vector of uint)
+0:92          'gs_ua3' (shared 3-component vector of uint)
+0:92          'gs_ub3' (shared 3-component vector of uint)
+0:93      AtomicMin (temp void)
+0:93        'gs_ua3' (shared 3-component vector of uint)
+0:93        'gs_ub3' (shared 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
 0:94        'out_u3' (temp 3-component vector of uint)
 0:94        AtomicMin (temp 3-component vector of uint)
-0:94          'gs_ua3' (global 3-component vector of uint)
-0:94          'gs_ub3' (global 3-component vector of uint)
-0:95      AtomicOr (global void)
-0:95        'gs_ua3' (global 3-component vector of uint)
-0:95        'gs_ub3' (global 3-component vector of uint)
+0:94          'gs_ua3' (shared 3-component vector of uint)
+0:94          'gs_ub3' (shared 3-component vector of uint)
+0:95      AtomicOr (temp void)
+0:95        'gs_ua3' (shared 3-component vector of uint)
+0:95        'gs_ub3' (shared 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
 0:96        'out_u3' (temp 3-component vector of uint)
 0:96        AtomicOr (temp 3-component vector of uint)
-0:96          'gs_ua3' (global 3-component vector of uint)
-0:96          'gs_ub3' (global 3-component vector of uint)
-0:97      AtomicXor (global void)
-0:97        'gs_ua3' (global 3-component vector of uint)
-0:97        'gs_ub3' (global 3-component vector of uint)
+0:96          'gs_ua3' (shared 3-component vector of uint)
+0:96          'gs_ub3' (shared 3-component vector of uint)
+0:97      AtomicXor (temp void)
+0:97        'gs_ua3' (shared 3-component vector of uint)
+0:97        'gs_ub3' (shared 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
 0:98        'out_u3' (temp 3-component vector of uint)
 0:98        AtomicXor (temp 3-component vector of uint)
-0:98          'gs_ua3' (global 3-component vector of uint)
-0:98          'gs_ub3' (global 3-component vector of uint)
+0:98          'gs_ua3' (shared 3-component vector of uint)
+0:98          'gs_ub3' (shared 3-component vector of uint)
 0:101      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:105  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 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)
@@ -238,67 +238,67 @@ local_size = (1, 1, 1)
 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:?     Sequence
-0:109      all (global bool)
+0:109      all (temp bool)
 0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:112      AtomicAdd (global void)
-0:112        'gs_ua4' (global 4-component vector of uint)
-0:112        'gs_ub4' (global 4-component vector of uint)
+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)
 0:113      move second child to first child (temp 4-component vector of uint)
 0:113        'out_u4' (temp 4-component vector of uint)
 0:113        AtomicAdd (temp 4-component vector of uint)
-0:113          'gs_ua4' (global 4-component vector of uint)
-0:113          'gs_ub4' (global 4-component vector of uint)
-0:114      AtomicAnd (global void)
-0:114        'gs_ua4' (global 4-component vector of uint)
-0:114        'gs_ub4' (global 4-component vector of uint)
+0:113          'gs_ua4' (shared 4-component vector of uint)
+0:113          'gs_ub4' (shared 4-component vector of uint)
+0:114      AtomicAnd (temp void)
+0:114        'gs_ua4' (shared 4-component vector of uint)
+0:114        'gs_ub4' (shared 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
 0:115        'out_u4' (temp 4-component vector of uint)
 0:115        AtomicAnd (temp 4-component vector of uint)
-0:115          'gs_ua4' (global 4-component vector of uint)
-0:115          'gs_ub4' (global 4-component vector of uint)
+0:115          'gs_ua4' (shared 4-component vector of uint)
+0:115          'gs_ub4' (shared 4-component vector of uint)
 0:116      move second child to first child (temp 4-component vector of uint)
 0:116        'out_u4' (temp 4-component vector of uint)
 0:116        AtomicCompSwap (temp 4-component vector of uint)
-0:116          'gs_ua4' (global 4-component vector of uint)
-0:116          'gs_ub4' (global 4-component vector of uint)
-0:116          'gs_uc4' (global 4-component vector of uint)
+0:116          'gs_ua4' (shared 4-component vector of uint)
+0:116          'gs_ub4' (shared 4-component vector of uint)
+0:116          'gs_uc4' (shared 4-component vector of uint)
 0:117      move second child to first child (temp 4-component vector of uint)
 0:117        'out_u4' (temp 4-component vector of uint)
 0:117        AtomicExchange (temp 4-component vector of uint)
-0:117          'gs_ua4' (global 4-component vector of uint)
-0:117          'gs_ub4' (global 4-component vector of uint)
-0:118      AtomicMax (global void)
-0:118        'gs_ua4' (global 4-component vector of uint)
-0:118        'gs_ub4' (global 4-component vector of uint)
+0:117          'gs_ua4' (shared 4-component vector of uint)
+0:117          'gs_ub4' (shared 4-component vector of uint)
+0:118      AtomicMax (temp void)
+0:118        'gs_ua4' (shared 4-component vector of uint)
+0:118        'gs_ub4' (shared 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
 0:119        'out_u4' (temp 4-component vector of uint)
 0:119        AtomicMax (temp 4-component vector of uint)
-0:119          'gs_ua4' (global 4-component vector of uint)
-0:119          'gs_ub4' (global 4-component vector of uint)
-0:120      AtomicMin (global void)
-0:120        'gs_ua4' (global 4-component vector of uint)
-0:120        'gs_ub4' (global 4-component vector of uint)
+0:119          'gs_ua4' (shared 4-component vector of uint)
+0:119          'gs_ub4' (shared 4-component vector of uint)
+0:120      AtomicMin (temp void)
+0:120        'gs_ua4' (shared 4-component vector of uint)
+0:120        'gs_ub4' (shared 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
 0:121        'out_u4' (temp 4-component vector of uint)
 0:121        AtomicMin (temp 4-component vector of uint)
-0:121          'gs_ua4' (global 4-component vector of uint)
-0:121          'gs_ub4' (global 4-component vector of uint)
-0:122      AtomicOr (global void)
-0:122        'gs_ua4' (global 4-component vector of uint)
-0:122        'gs_ub4' (global 4-component vector of uint)
+0:121          'gs_ua4' (shared 4-component vector of uint)
+0:121          'gs_ub4' (shared 4-component vector of uint)
+0:122      AtomicOr (temp void)
+0:122        'gs_ua4' (shared 4-component vector of uint)
+0:122        'gs_ub4' (shared 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
 0:123        'out_u4' (temp 4-component vector of uint)
 0:123        AtomicOr (temp 4-component vector of uint)
-0:123          'gs_ua4' (global 4-component vector of uint)
-0:123          'gs_ub4' (global 4-component vector of uint)
-0:124      AtomicXor (global void)
-0:124        'gs_ua4' (global 4-component vector of uint)
-0:124        'gs_ub4' (global 4-component vector of uint)
+0:123          'gs_ua4' (shared 4-component vector of uint)
+0:123          'gs_ub4' (shared 4-component vector of uint)
+0:124      AtomicXor (temp void)
+0:124        'gs_ua4' (shared 4-component vector of uint)
+0:124        'gs_ub4' (shared 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
 0:125        'out_u4' (temp 4-component vector of uint)
 0:125        AtomicXor (temp 4-component vector of uint)
-0:125          'gs_ua4' (global 4-component vector of uint)
-0:125          'gs_ub4' (global 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)
@@ -309,24 +309,24 @@ local_size = (1, 1, 1)
 0:?             4.000000
 0:128        Branch: Return
 0:?   Linker Objects
-0:?     'gs_ua' (global uint)
-0:?     'gs_ub' (global uint)
-0:?     'gs_uc' (global uint)
-0:?     'gs_ua2' (global 2-component vector of uint)
-0:?     'gs_ub2' (global 2-component vector of uint)
-0:?     'gs_uc2' (global 2-component vector of uint)
-0:?     'gs_ua3' (global 3-component vector of uint)
-0:?     'gs_ub3' (global 3-component vector of uint)
-0:?     'gs_uc3' (global 3-component vector of uint)
-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:?     '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)
+0:?     'gs_ua2' (shared 2-component vector of uint)
+0:?     'gs_ub2' (shared 2-component vector of uint)
+0:?     'gs_uc2' (shared 2-component vector of uint)
+0:?     'gs_ua3' (shared 3-component vector of uint)
+0:?     'gs_ub3' (shared 3-component vector of uint)
+0:?     'gs_uc3' (shared 3-component vector of uint)
+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)
 
 
 Linked compute stage:
@@ -335,7 +335,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -343,71 +343,71 @@ local_size = (1, 1, 1)
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:21      all (global bool)
+0:21      all (temp bool)
 0:21        'inF0' (in float)
-0:24      AtomicAdd (global void)
-0:24        'gs_ua' (global uint)
-0:24        'gs_ub' (global uint)
+0:24      AtomicAdd (temp void)
+0:24        'gs_ua' (shared uint)
+0:24        'gs_ub' (shared uint)
 0:25      move second child to first child (temp uint)
 0:25        'out_u1' (temp uint)
 0:25        AtomicAdd (temp uint)
-0:25          'gs_ua' (global uint)
-0:25          'gs_ub' (global uint)
-0:26      AtomicAnd (global void)
-0:26        'gs_ua' (global uint)
-0:26        'gs_ub' (global uint)
+0:25          'gs_ua' (shared uint)
+0:25          'gs_ub' (shared uint)
+0:26      AtomicAnd (temp void)
+0:26        'gs_ua' (shared uint)
+0:26        'gs_ub' (shared uint)
 0:27      move second child to first child (temp uint)
 0:27        'out_u1' (temp uint)
 0:27        AtomicAnd (temp uint)
-0:27          'gs_ua' (global uint)
-0:27          'gs_ub' (global uint)
+0:27          'gs_ua' (shared uint)
+0:27          'gs_ub' (shared uint)
 0:28      move second child to first child (temp uint)
 0:28        'out_u1' (temp uint)
 0:28        AtomicCompSwap (temp uint)
-0:28          'gs_ua' (global uint)
-0:28          'gs_ub' (global uint)
-0:28          'gs_uc' (global uint)
+0:28          'gs_ua' (shared uint)
+0:28          'gs_ub' (shared uint)
+0:28          'gs_uc' (shared uint)
 0:29      move second child to first child (temp uint)
 0:29        'out_u1' (temp uint)
 0:29        AtomicExchange (temp uint)
-0:29          'gs_ua' (global uint)
-0:29          'gs_ub' (global uint)
-0:30      AtomicMax (global void)
-0:30        'gs_ua' (global uint)
-0:30        'gs_ub' (global uint)
+0:29          'gs_ua' (shared uint)
+0:29          'gs_ub' (shared uint)
+0:30      AtomicMax (temp void)
+0:30        'gs_ua' (shared uint)
+0:30        'gs_ub' (shared uint)
 0:31      move second child to first child (temp uint)
 0:31        'out_u1' (temp uint)
 0:31        AtomicMax (temp uint)
-0:31          'gs_ua' (global uint)
-0:31          'gs_ub' (global uint)
-0:32      AtomicMin (global void)
-0:32        'gs_ua' (global uint)
-0:32        'gs_ub' (global uint)
+0:31          'gs_ua' (shared uint)
+0:31          'gs_ub' (shared uint)
+0:32      AtomicMin (temp void)
+0:32        'gs_ua' (shared uint)
+0:32        'gs_ub' (shared uint)
 0:33      move second child to first child (temp uint)
 0:33        'out_u1' (temp uint)
 0:33        AtomicMin (temp uint)
-0:33          'gs_ua' (global uint)
-0:33          'gs_ub' (global uint)
-0:34      AtomicOr (global void)
-0:34        'gs_ua' (global uint)
-0:34        'gs_ub' (global uint)
+0:33          'gs_ua' (shared uint)
+0:33          'gs_ub' (shared uint)
+0:34      AtomicOr (temp void)
+0:34        'gs_ua' (shared uint)
+0:34        'gs_ub' (shared uint)
 0:35      move second child to first child (temp uint)
 0:35        'out_u1' (temp uint)
 0:35        AtomicOr (temp uint)
-0:35          'gs_ua' (global uint)
-0:35          'gs_ub' (global uint)
-0:36      AtomicXor (global void)
-0:36        'gs_ua' (global uint)
-0:36        'gs_ub' (global uint)
+0:35          'gs_ua' (shared uint)
+0:35          'gs_ub' (shared uint)
+0:36      AtomicXor (temp void)
+0:36        'gs_ua' (shared uint)
+0:36        'gs_ub' (shared uint)
 0:37      move second child to first child (temp uint)
 0:37        'out_u1' (temp uint)
 0:37        AtomicXor (temp uint)
-0:37          'gs_ua' (global uint)
-0:37          'gs_ub' (global uint)
+0:37          'gs_ua' (shared uint)
+0:37          'gs_ub' (shared uint)
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 1-component vector of float)
 0:45      'inF1' (in 1-component vector of float)
@@ -416,7 +416,7 @@ local_size = (1, 1, 1)
 0:47      Branch: Return with expression
 0:47        Constant:
 0:47          0.000000
-0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:51    Function Parameters: 
 0:51      'inF0' (in 2-component vector of float)
 0:51      'inF1' (in 2-component vector of float)
@@ -424,72 +424,72 @@ local_size = (1, 1, 1)
 0:51      'inU0' (in 2-component vector of uint)
 0:51      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:55      all (global bool)
+0:55      all (temp bool)
 0:55        'inF0' (in 2-component vector of float)
-0:58      AtomicAdd (global void)
-0:58        'gs_ua2' (global 2-component vector of uint)
-0:58        'gs_ub2' (global 2-component vector of uint)
+0:58      AtomicAdd (temp void)
+0:58        'gs_ua2' (shared 2-component vector of uint)
+0:58        'gs_ub2' (shared 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
 0:59        'out_u2' (temp 2-component vector of uint)
 0:59        AtomicAdd (temp 2-component vector of uint)
-0:59          'gs_ua2' (global 2-component vector of uint)
-0:59          'gs_ub2' (global 2-component vector of uint)
-0:60      AtomicAnd (global void)
-0:60        'gs_ua2' (global 2-component vector of uint)
-0:60        'gs_ub2' (global 2-component vector of uint)
+0:59          'gs_ua2' (shared 2-component vector of uint)
+0:59          'gs_ub2' (shared 2-component vector of uint)
+0:60      AtomicAnd (temp void)
+0:60        'gs_ua2' (shared 2-component vector of uint)
+0:60        'gs_ub2' (shared 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
 0:61        'out_u2' (temp 2-component vector of uint)
 0:61        AtomicAnd (temp 2-component vector of uint)
-0:61          'gs_ua2' (global 2-component vector of uint)
-0:61          'gs_ub2' (global 2-component vector of uint)
+0:61          'gs_ua2' (shared 2-component vector of uint)
+0:61          'gs_ub2' (shared 2-component vector of uint)
 0:62      move second child to first child (temp 2-component vector of uint)
 0:62        'out_u2' (temp 2-component vector of uint)
 0:62        AtomicCompSwap (temp 2-component vector of uint)
-0:62          'gs_ua2' (global 2-component vector of uint)
-0:62          'gs_ub2' (global 2-component vector of uint)
-0:62          'gs_uc2' (global 2-component vector of uint)
+0:62          'gs_ua2' (shared 2-component vector of uint)
+0:62          'gs_ub2' (shared 2-component vector of uint)
+0:62          'gs_uc2' (shared 2-component vector of uint)
 0:63      move second child to first child (temp 2-component vector of uint)
 0:63        'out_u2' (temp 2-component vector of uint)
 0:63        AtomicExchange (temp 2-component vector of uint)
-0:63          'gs_ua2' (global 2-component vector of uint)
-0:63          'gs_ub2' (global 2-component vector of uint)
-0:64      AtomicMax (global void)
-0:64        'gs_ua2' (global 2-component vector of uint)
-0:64        'gs_ub2' (global 2-component vector of uint)
+0:63          'gs_ua2' (shared 2-component vector of uint)
+0:63          'gs_ub2' (shared 2-component vector of uint)
+0:64      AtomicMax (temp void)
+0:64        'gs_ua2' (shared 2-component vector of uint)
+0:64        'gs_ub2' (shared 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
 0:65        'out_u2' (temp 2-component vector of uint)
 0:65        AtomicMax (temp 2-component vector of uint)
-0:65          'gs_ua2' (global 2-component vector of uint)
-0:65          'gs_ub2' (global 2-component vector of uint)
-0:66      AtomicMin (global void)
-0:66        'gs_ua2' (global 2-component vector of uint)
-0:66        'gs_ub2' (global 2-component vector of uint)
+0:65          'gs_ua2' (shared 2-component vector of uint)
+0:65          'gs_ub2' (shared 2-component vector of uint)
+0:66      AtomicMin (temp void)
+0:66        'gs_ua2' (shared 2-component vector of uint)
+0:66        'gs_ub2' (shared 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
 0:67        'out_u2' (temp 2-component vector of uint)
 0:67        AtomicMin (temp 2-component vector of uint)
-0:67          'gs_ua2' (global 2-component vector of uint)
-0:67          'gs_ub2' (global 2-component vector of uint)
-0:68      AtomicOr (global void)
-0:68        'gs_ua2' (global 2-component vector of uint)
-0:68        'gs_ub2' (global 2-component vector of uint)
+0:67          'gs_ua2' (shared 2-component vector of uint)
+0:67          'gs_ub2' (shared 2-component vector of uint)
+0:68      AtomicOr (temp void)
+0:68        'gs_ua2' (shared 2-component vector of uint)
+0:68        'gs_ub2' (shared 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
 0:69        'out_u2' (temp 2-component vector of uint)
 0:69        AtomicOr (temp 2-component vector of uint)
-0:69          'gs_ua2' (global 2-component vector of uint)
-0:69          'gs_ub2' (global 2-component vector of uint)
-0:70      AtomicXor (global void)
-0:70        'gs_ua2' (global 2-component vector of uint)
-0:70        'gs_ub2' (global 2-component vector of uint)
+0:69          'gs_ua2' (shared 2-component vector of uint)
+0:69          'gs_ub2' (shared 2-component vector of uint)
+0:70      AtomicXor (temp void)
+0:70        'gs_ua2' (shared 2-component vector of uint)
+0:70        'gs_ub2' (shared 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
 0:71        'out_u2' (temp 2-component vector of uint)
 0:71        AtomicXor (temp 2-component vector of uint)
-0:71          'gs_ua2' (global 2-component vector of uint)
-0:71          'gs_ub2' (global 2-component vector of uint)
+0:71          'gs_ua2' (shared 2-component vector of uint)
+0:71          'gs_ub2' (shared 2-component vector of uint)
 0:74      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:78    Function Parameters: 
 0:78      'inF0' (in 3-component vector of float)
 0:78      'inF1' (in 3-component vector of float)
@@ -497,73 +497,73 @@ local_size = (1, 1, 1)
 0:78      'inU0' (in 3-component vector of uint)
 0:78      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:82      all (global bool)
+0:82      all (temp bool)
 0:82        'inF0' (in 3-component vector of float)
-0:85      AtomicAdd (global void)
-0:85        'gs_ua3' (global 3-component vector of uint)
-0:85        'gs_ub3' (global 3-component vector of uint)
+0:85      AtomicAdd (temp void)
+0:85        'gs_ua3' (shared 3-component vector of uint)
+0:85        'gs_ub3' (shared 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
 0:86        'out_u3' (temp 3-component vector of uint)
 0:86        AtomicAdd (temp 3-component vector of uint)
-0:86          'gs_ua3' (global 3-component vector of uint)
-0:86          'gs_ub3' (global 3-component vector of uint)
-0:87      AtomicAnd (global void)
-0:87        'gs_ua3' (global 3-component vector of uint)
-0:87        'gs_ub3' (global 3-component vector of uint)
+0:86          'gs_ua3' (shared 3-component vector of uint)
+0:86          'gs_ub3' (shared 3-component vector of uint)
+0:87      AtomicAnd (temp void)
+0:87        'gs_ua3' (shared 3-component vector of uint)
+0:87        'gs_ub3' (shared 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
 0:88        'out_u3' (temp 3-component vector of uint)
 0:88        AtomicAnd (temp 3-component vector of uint)
-0:88          'gs_ua3' (global 3-component vector of uint)
-0:88          'gs_ub3' (global 3-component vector of uint)
+0:88          'gs_ua3' (shared 3-component vector of uint)
+0:88          'gs_ub3' (shared 3-component vector of uint)
 0:89      move second child to first child (temp 3-component vector of uint)
 0:89        'out_u3' (temp 3-component vector of uint)
 0:89        AtomicCompSwap (temp 3-component vector of uint)
-0:89          'gs_ua3' (global 3-component vector of uint)
-0:89          'gs_ub3' (global 3-component vector of uint)
-0:89          'gs_uc3' (global 3-component vector of uint)
+0:89          'gs_ua3' (shared 3-component vector of uint)
+0:89          'gs_ub3' (shared 3-component vector of uint)
+0:89          'gs_uc3' (shared 3-component vector of uint)
 0:90      move second child to first child (temp 3-component vector of uint)
 0:90        'out_u3' (temp 3-component vector of uint)
 0:90        AtomicExchange (temp 3-component vector of uint)
-0:90          'gs_ua3' (global 3-component vector of uint)
-0:90          'gs_ub3' (global 3-component vector of uint)
-0:91      AtomicMax (global void)
-0:91        'gs_ua3' (global 3-component vector of uint)
-0:91        'gs_ub3' (global 3-component vector of uint)
+0:90          'gs_ua3' (shared 3-component vector of uint)
+0:90          'gs_ub3' (shared 3-component vector of uint)
+0:91      AtomicMax (temp void)
+0:91        'gs_ua3' (shared 3-component vector of uint)
+0:91        'gs_ub3' (shared 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
 0:92        'out_u3' (temp 3-component vector of uint)
 0:92        AtomicMax (temp 3-component vector of uint)
-0:92          'gs_ua3' (global 3-component vector of uint)
-0:92          'gs_ub3' (global 3-component vector of uint)
-0:93      AtomicMin (global void)
-0:93        'gs_ua3' (global 3-component vector of uint)
-0:93        'gs_ub3' (global 3-component vector of uint)
+0:92          'gs_ua3' (shared 3-component vector of uint)
+0:92          'gs_ub3' (shared 3-component vector of uint)
+0:93      AtomicMin (temp void)
+0:93        'gs_ua3' (shared 3-component vector of uint)
+0:93        'gs_ub3' (shared 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
 0:94        'out_u3' (temp 3-component vector of uint)
 0:94        AtomicMin (temp 3-component vector of uint)
-0:94          'gs_ua3' (global 3-component vector of uint)
-0:94          'gs_ub3' (global 3-component vector of uint)
-0:95      AtomicOr (global void)
-0:95        'gs_ua3' (global 3-component vector of uint)
-0:95        'gs_ub3' (global 3-component vector of uint)
+0:94          'gs_ua3' (shared 3-component vector of uint)
+0:94          'gs_ub3' (shared 3-component vector of uint)
+0:95      AtomicOr (temp void)
+0:95        'gs_ua3' (shared 3-component vector of uint)
+0:95        'gs_ub3' (shared 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
 0:96        'out_u3' (temp 3-component vector of uint)
 0:96        AtomicOr (temp 3-component vector of uint)
-0:96          'gs_ua3' (global 3-component vector of uint)
-0:96          'gs_ub3' (global 3-component vector of uint)
-0:97      AtomicXor (global void)
-0:97        'gs_ua3' (global 3-component vector of uint)
-0:97        'gs_ub3' (global 3-component vector of uint)
+0:96          'gs_ua3' (shared 3-component vector of uint)
+0:96          'gs_ub3' (shared 3-component vector of uint)
+0:97      AtomicXor (temp void)
+0:97        'gs_ua3' (shared 3-component vector of uint)
+0:97        'gs_ub3' (shared 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
 0:98        'out_u3' (temp 3-component vector of uint)
 0:98        AtomicXor (temp 3-component vector of uint)
-0:98          'gs_ua3' (global 3-component vector of uint)
-0:98          'gs_ub3' (global 3-component vector of uint)
+0:98          'gs_ua3' (shared 3-component vector of uint)
+0:98          'gs_ub3' (shared 3-component vector of uint)
 0:101      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:105  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 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)
@@ -571,67 +571,67 @@ local_size = (1, 1, 1)
 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:?     Sequence
-0:109      all (global bool)
+0:109      all (temp bool)
 0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:112      AtomicAdd (global void)
-0:112        'gs_ua4' (global 4-component vector of uint)
-0:112        'gs_ub4' (global 4-component vector of uint)
+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)
 0:113      move second child to first child (temp 4-component vector of uint)
 0:113        'out_u4' (temp 4-component vector of uint)
 0:113        AtomicAdd (temp 4-component vector of uint)
-0:113          'gs_ua4' (global 4-component vector of uint)
-0:113          'gs_ub4' (global 4-component vector of uint)
-0:114      AtomicAnd (global void)
-0:114        'gs_ua4' (global 4-component vector of uint)
-0:114        'gs_ub4' (global 4-component vector of uint)
+0:113          'gs_ua4' (shared 4-component vector of uint)
+0:113          'gs_ub4' (shared 4-component vector of uint)
+0:114      AtomicAnd (temp void)
+0:114        'gs_ua4' (shared 4-component vector of uint)
+0:114        'gs_ub4' (shared 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
 0:115        'out_u4' (temp 4-component vector of uint)
 0:115        AtomicAnd (temp 4-component vector of uint)
-0:115          'gs_ua4' (global 4-component vector of uint)
-0:115          'gs_ub4' (global 4-component vector of uint)
+0:115          'gs_ua4' (shared 4-component vector of uint)
+0:115          'gs_ub4' (shared 4-component vector of uint)
 0:116      move second child to first child (temp 4-component vector of uint)
 0:116        'out_u4' (temp 4-component vector of uint)
 0:116        AtomicCompSwap (temp 4-component vector of uint)
-0:116          'gs_ua4' (global 4-component vector of uint)
-0:116          'gs_ub4' (global 4-component vector of uint)
-0:116          'gs_uc4' (global 4-component vector of uint)
+0:116          'gs_ua4' (shared 4-component vector of uint)
+0:116          'gs_ub4' (shared 4-component vector of uint)
+0:116          'gs_uc4' (shared 4-component vector of uint)
 0:117      move second child to first child (temp 4-component vector of uint)
 0:117        'out_u4' (temp 4-component vector of uint)
 0:117        AtomicExchange (temp 4-component vector of uint)
-0:117          'gs_ua4' (global 4-component vector of uint)
-0:117          'gs_ub4' (global 4-component vector of uint)
-0:118      AtomicMax (global void)
-0:118        'gs_ua4' (global 4-component vector of uint)
-0:118        'gs_ub4' (global 4-component vector of uint)
+0:117          'gs_ua4' (shared 4-component vector of uint)
+0:117          'gs_ub4' (shared 4-component vector of uint)
+0:118      AtomicMax (temp void)
+0:118        'gs_ua4' (shared 4-component vector of uint)
+0:118        'gs_ub4' (shared 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
 0:119        'out_u4' (temp 4-component vector of uint)
 0:119        AtomicMax (temp 4-component vector of uint)
-0:119          'gs_ua4' (global 4-component vector of uint)
-0:119          'gs_ub4' (global 4-component vector of uint)
-0:120      AtomicMin (global void)
-0:120        'gs_ua4' (global 4-component vector of uint)
-0:120        'gs_ub4' (global 4-component vector of uint)
+0:119          'gs_ua4' (shared 4-component vector of uint)
+0:119          'gs_ub4' (shared 4-component vector of uint)
+0:120      AtomicMin (temp void)
+0:120        'gs_ua4' (shared 4-component vector of uint)
+0:120        'gs_ub4' (shared 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
 0:121        'out_u4' (temp 4-component vector of uint)
 0:121        AtomicMin (temp 4-component vector of uint)
-0:121          'gs_ua4' (global 4-component vector of uint)
-0:121          'gs_ub4' (global 4-component vector of uint)
-0:122      AtomicOr (global void)
-0:122        'gs_ua4' (global 4-component vector of uint)
-0:122        'gs_ub4' (global 4-component vector of uint)
+0:121          'gs_ua4' (shared 4-component vector of uint)
+0:121          'gs_ub4' (shared 4-component vector of uint)
+0:122      AtomicOr (temp void)
+0:122        'gs_ua4' (shared 4-component vector of uint)
+0:122        'gs_ub4' (shared 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
 0:123        'out_u4' (temp 4-component vector of uint)
 0:123        AtomicOr (temp 4-component vector of uint)
-0:123          'gs_ua4' (global 4-component vector of uint)
-0:123          'gs_ub4' (global 4-component vector of uint)
-0:124      AtomicXor (global void)
-0:124        'gs_ua4' (global 4-component vector of uint)
-0:124        'gs_ub4' (global 4-component vector of uint)
+0:123          'gs_ua4' (shared 4-component vector of uint)
+0:123          'gs_ub4' (shared 4-component vector of uint)
+0:124      AtomicXor (temp void)
+0:124        'gs_ua4' (shared 4-component vector of uint)
+0:124        'gs_ub4' (shared 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
 0:125        'out_u4' (temp 4-component vector of uint)
 0:125        AtomicXor (temp 4-component vector of uint)
-0:125          'gs_ua4' (global 4-component vector of uint)
-0:125          'gs_ub4' (global 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)
@@ -642,24 +642,24 @@ local_size = (1, 1, 1)
 0:?             4.000000
 0:128        Branch: Return
 0:?   Linker Objects
-0:?     'gs_ua' (global uint)
-0:?     'gs_ub' (global uint)
-0:?     'gs_uc' (global uint)
-0:?     'gs_ua2' (global 2-component vector of uint)
-0:?     'gs_ub2' (global 2-component vector of uint)
-0:?     'gs_uc2' (global 2-component vector of uint)
-0:?     'gs_ua3' (global 3-component vector of uint)
-0:?     'gs_ub3' (global 3-component vector of uint)
-0:?     'gs_uc3' (global 3-component vector of uint)
-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:?     '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)
+0:?     'gs_ua2' (shared 2-component vector of uint)
+0:?     'gs_ub2' (shared 2-component vector of uint)
+0:?     'gs_uc2' (shared 2-component vector of uint)
+0:?     'gs_ua3' (shared 3-component vector of uint)
+0:?     'gs_ub3' (shared 3-component vector of uint)
+0:?     'gs_uc3' (shared 3-component vector of uint)
+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)
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -740,35 +740,35 @@ local_size = (1, 1, 1)
               39:             TypePointer Function 38(ivec3)
               40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
               49:             TypeBool
-              51:             TypePointer Private 8(int)
-       52(gs_ua):     51(ptr) Variable Private
-       53(gs_ub):     51(ptr) Variable Private
+              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 Private
+       66(gs_uc):     51(ptr) Variable Workgroup
               87:    6(float) Constant 0
-              94:             TypePointer Private 26(ivec2)
-      95(gs_ua2):     94(ptr) Variable Private
-      96(gs_ub2):     94(ptr) Variable Private
-     107(gs_uc2):     94(ptr) Variable Private
+              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 Private 38(ivec3)
-     136(gs_ua3):    135(ptr) Variable Private
-     137(gs_ub3):    135(ptr) Variable Private
-     148(gs_uc3):    135(ptr) Variable Private
+             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 Private 178(ivec4)
-     180(gs_ua4):    179(ptr) Variable Private
-     181(gs_ub4):    179(ptr) Variable Private
+             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 Private
+     193(gs_uc4):    179(ptr) Variable Workgroup
              214:             TypePointer Output 173(fvec4)
 215(@entryPointOutput):    214(ptr) Variable Output
              216:    6(float) Constant 1082130432
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 0dba032921e8f46f73c31642b3629d658b842af6..91abf737891beeadbe0c857938b710a690ccbf97 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -2,7 +2,7 @@ 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; (global 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)
@@ -16,7 +16,7 @@ gl_FragCoord origin is upper left
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
-0:6          fma (global 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)
@@ -51,7 +51,7 @@ 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; (global 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)
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
-0:6          fma (global 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)
diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index a23a883344ab57a9a9ec864b3f32157332d440e0..8f8dd61015e01978fb452145008a4d573c82fd03 100644
--- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -2,7 +2,7 @@ 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; (global 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)
@@ -57,7 +57,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: main(f1;vf2;vf3;vf4;vi2; (global 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)
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index 21daced7f0e6071e27eb54338ffe6e31c114fa3a..0b4c0746e6075f30404fa405d3260ae0ab60ddbc 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -9,52 +9,52 @@ ERROR: 4 compilation errors.  No code generated.
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:2  Function Definition: PixelShaderFunctionS(f1; (global float)
+0:2  Function Definition: PixelShaderFunctionS(f1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:?     Sequence
 0:3      ERROR: Bad unary op
- (global uint)
+ (temp uint)
 0:3        'inF0' (in float)
 0:5      Branch: Return with expression
 0:5        Constant:
 0:5          0.000000
-0:9  Function Definition: PixelShaderFunction1(vf1; (global 1-component vector of float)
+0:9  Function Definition: PixelShaderFunction1(vf1; (temp 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inF0' (in 1-component vector of float)
 0:?     Sequence
 0:11      Branch: Return with expression
 0:11        Constant:
 0:11          0.000000
-0:15  Function Definition: PixelShaderFunction2(vf2; (global 2-component vector of float)
+0:15  Function Definition: PixelShaderFunction2(vf2; (temp 2-component vector of float)
 0:15    Function Parameters: 
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
 0:16      ERROR: Bad unary op
- (global 2-component vector of uint)
+ (temp 2-component vector of uint)
 0:16        'inF0' (in 2-component vector of float)
 0:18      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:22  Function Definition: PixelShaderFunction3(vf3; (global 3-component vector of float)
+0:22  Function Definition: PixelShaderFunction3(vf3; (temp 3-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
 0:23      ERROR: Bad unary op
- (global 3-component vector of uint)
+ (temp 3-component vector of uint)
 0:23        'inF0' (in 3-component vector of float)
 0:25      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:29  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:30      ERROR: Bad unary op
- (global 4-component vector of uint)
+ (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)
@@ -76,52 +76,52 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:2  Function Definition: PixelShaderFunctionS(f1; (global float)
+0:2  Function Definition: PixelShaderFunctionS(f1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:?     Sequence
 0:3      ERROR: Bad unary op
- (global uint)
+ (temp uint)
 0:3        'inF0' (in float)
 0:5      Branch: Return with expression
 0:5        Constant:
 0:5          0.000000
-0:9  Function Definition: PixelShaderFunction1(vf1; (global 1-component vector of float)
+0:9  Function Definition: PixelShaderFunction1(vf1; (temp 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inF0' (in 1-component vector of float)
 0:?     Sequence
 0:11      Branch: Return with expression
 0:11        Constant:
 0:11          0.000000
-0:15  Function Definition: PixelShaderFunction2(vf2; (global 2-component vector of float)
+0:15  Function Definition: PixelShaderFunction2(vf2; (temp 2-component vector of float)
 0:15    Function Parameters: 
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
 0:16      ERROR: Bad unary op
- (global 2-component vector of uint)
+ (temp 2-component vector of uint)
 0:16        'inF0' (in 2-component vector of float)
 0:18      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:22  Function Definition: PixelShaderFunction3(vf3; (global 3-component vector of float)
+0:22  Function Definition: PixelShaderFunction3(vf3; (temp 3-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
 0:23      ERROR: Bad unary op
- (global 3-component vector of uint)
+ (temp 3-component vector of uint)
 0:23        'inF0' (in 3-component vector of float)
 0:25      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:29  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:30      ERROR: Bad unary op
- (global 4-component vector of uint)
+ (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)
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index 151bdb4283ebfc09d5bcca957b8fb6bb20099cd8..5def9667d695a5c8af11f63b193d216334ca278a 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -2,7 +2,7 @@ hlsl.intrinsics.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -13,63 +13,63 @@ gl_FragCoord origin is upper left
 0:20      Sequence
 0:20        move second child to first child (temp bool)
 0:20          'r000' (temp bool)
-0:20          all (global bool)
+0:20          all (temp bool)
 0:20            'inF0' (in float)
 0:21      Sequence
 0:21        move second child to first child (temp float)
 0:21          'r001' (temp float)
-0:21          Absolute value (global float)
+0:21          Absolute value (temp float)
 0:21            'inF0' (in float)
 0:22      Sequence
 0:22        move second child to first child (temp float)
 0:22          'r002' (temp float)
-0:22          arc cosine (global float)
+0:22          arc cosine (temp float)
 0:22            'inF0' (in float)
 0:23      Sequence
 0:23        move second child to first child (temp bool)
 0:23          'r003' (temp bool)
-0:23          any (global bool)
+0:23          any (temp bool)
 0:23            'inF0' (in float)
 0:24      Sequence
 0:24        move second child to first child (temp float)
 0:24          'r004' (temp float)
-0:24          arc sine (global float)
+0:24          arc sine (temp float)
 0:24            'inF0' (in float)
 0:25      Sequence
 0:25        move second child to first child (temp int)
 0:25          'r005' (temp int)
-0:25          floatBitsToInt (global int)
+0:25          floatBitsToInt (temp int)
 0:25            'inF0' (in float)
 0:26      Sequence
 0:26        move second child to first child (temp uint)
 0:26          'r006' (temp uint)
-0:26          floatBitsToUint (global uint)
+0:26          floatBitsToUint (temp uint)
 0:26            'inF0' (in float)
 0:27      Sequence
 0:27        move second child to first child (temp float)
 0:27          'r007' (temp float)
-0:27          intBitsToFloat (global float)
+0:27          intBitsToFloat (temp float)
 0:27            'inU0' (in uint)
 0:29      Sequence
 0:29        move second child to first child (temp float)
 0:29          'r009' (temp float)
-0:29          arc tangent (global float)
+0:29          arc tangent (temp float)
 0:29            'inF0' (in float)
 0:30      Sequence
 0:30        move second child to first child (temp float)
 0:30          'r010' (temp float)
-0:30          arc tangent (global float)
+0:30          arc tangent (temp float)
 0:30            'inF0' (in float)
 0:30            'inF1' (in float)
 0:31      Sequence
 0:31        move second child to first child (temp float)
 0:31          'r011' (temp float)
-0:31          Ceiling (global float)
+0:31          Ceiling (temp float)
 0:31            'inF0' (in float)
 0:32      Sequence
 0:32        move second child to first child (temp float)
 0:32          'r012' (temp float)
-0:32          clamp (global float)
+0:32          clamp (temp float)
 0:32            'inF0' (in float)
 0:32            'inF1' (in float)
 0:32            'inF2' (in float)
@@ -84,132 +84,132 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp float)
 0:34          'r014' (temp float)
-0:34          cosine (global float)
+0:34          cosine (temp float)
 0:34            'inF0' (in float)
 0:35      Sequence
 0:35        move second child to first child (temp float)
 0:35          'r015' (temp float)
-0:35          hyp. cosine (global float)
+0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
-0:36        move second child to first child (temp uint)
-0:36          'r016' (temp uint)
-0:36          bitCount (global uint)
+0:36        move second child to first child (temp int)
+0:36          'r016' (temp int)
+0:36          bitCount (temp int)
 0:36            Constant:
-0:36              7 (const uint)
+0:36              7 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
-0:37          dPdx (global float)
+0:37          dPdx (temp float)
 0:37            'inF0' (in float)
 0:38      Sequence
 0:38        move second child to first child (temp float)
 0:38          'r018' (temp float)
-0:38          dPdxCoarse (global float)
+0:38          dPdxCoarse (temp float)
 0:38            'inF0' (in float)
 0:39      Sequence
 0:39        move second child to first child (temp float)
 0:39          'r019' (temp float)
-0:39          dPdxFine (global float)
+0:39          dPdxFine (temp float)
 0:39            'inF0' (in float)
 0:40      Sequence
 0:40        move second child to first child (temp float)
 0:40          'r020' (temp float)
-0:40          dPdy (global float)
+0:40          dPdy (temp float)
 0:40            'inF0' (in float)
 0:41      Sequence
 0:41        move second child to first child (temp float)
 0:41          'r021' (temp float)
-0:41          dPdyCoarse (global float)
+0:41          dPdyCoarse (temp float)
 0:41            'inF0' (in float)
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r022' (temp float)
-0:42          dPdyFine (global float)
+0:42          dPdyFine (temp float)
 0:42            'inF0' (in float)
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r023' (temp float)
-0:43          degrees (global float)
+0:43          degrees (temp float)
 0:43            'inF0' (in float)
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r027' (temp float)
-0:47          exp (global float)
+0:47          exp (temp float)
 0:47            'inF0' (in float)
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r028' (temp float)
-0:48          exp2 (global float)
+0:48          exp2 (temp float)
 0:48            'inF0' (in float)
 0:49      Sequence
 0:49        move second child to first child (temp uint)
 0:49          'r029' (temp uint)
 0:49          Convert int to uint (temp uint)
-0:49            findMSB (global int)
+0:49            findMSB (temp int)
 0:49              Constant:
 0:49                7 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp uint)
 0:50          'r030' (temp uint)
 0:50          Convert int to uint (temp uint)
-0:50            findLSB (global int)
+0:50            findLSB (temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp float)
 0:51          'r031' (temp float)
-0:51          Floor (global float)
+0:51          Floor (temp float)
 0:51            'inF0' (in float)
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r033' (temp float)
-0:53          mod (global float)
+0:53          mod (temp float)
 0:53            'inF0' (in float)
 0:53            'inF1' (in float)
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r034' (temp float)
-0:54          Fraction (global float)
+0:54          Fraction (temp float)
 0:54            'inF0' (in float)
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r035' (temp float)
-0:55          frexp (global float)
+0:55          frexp (temp float)
 0:55            'inF0' (in float)
 0:55            'inF1' (in float)
 0:56      Sequence
 0:56        move second child to first child (temp float)
 0:56          'r036' (temp float)
-0:56          fwidth (global float)
+0:56          fwidth (temp float)
 0:56            'inF0' (in float)
 0:57      Sequence
 0:57        move second child to first child (temp bool)
 0:57          'r037' (temp bool)
-0:57          isinf (global bool)
+0:57          isinf (temp bool)
 0:57            'inF0' (in float)
 0:58      Sequence
 0:58        move second child to first child (temp bool)
 0:58          'r038' (temp bool)
-0:58          isnan (global bool)
+0:58          isnan (temp bool)
 0:58            'inF0' (in float)
 0:59      Sequence
 0:59        move second child to first child (temp float)
 0:59          'r039' (temp float)
-0:59          ldexp (global float)
+0:59          ldexp (temp float)
 0:59            'inF0' (in float)
 0:59            'inF1' (in float)
 0:60      Sequence
 0:60        move second child to first child (temp float)
 0:60          'r039a' (temp float)
-0:60          mix (global float)
+0:60          mix (temp float)
 0:60            'inF0' (in float)
 0:60            'inF1' (in float)
 0:60            'inF2' (in float)
 0:61      Sequence
 0:61        move second child to first child (temp float)
 0:61          'r040' (temp float)
-0:61          log (global float)
+0:61          log (temp float)
 0:61            'inF0' (in float)
 0:62      Sequence
 0:62        move second child to first child (temp float)
@@ -222,30 +222,30 @@ gl_FragCoord origin is upper left
 0:63      Sequence
 0:63        move second child to first child (temp float)
 0:63          'r042' (temp float)
-0:63          log2 (global float)
+0:63          log2 (temp float)
 0:63            'inF0' (in float)
 0:64      Sequence
 0:64        move second child to first child (temp float)
 0:64          'r043' (temp float)
-0:64          max (global float)
+0:64          max (temp float)
 0:64            'inF0' (in float)
 0:64            'inF1' (in float)
 0:65      Sequence
 0:65        move second child to first child (temp float)
 0:65          'r044' (temp float)
-0:65          min (global float)
+0:65          min (temp float)
 0:65            'inF0' (in float)
 0:65            'inF1' (in float)
 0:66      Sequence
 0:66        move second child to first child (temp float)
 0:66          'r045' (temp float)
-0:66          pow (global float)
+0:66          pow (temp float)
 0:66            'inF0' (in float)
 0:66            'inF1' (in float)
 0:67      Sequence
 0:67        move second child to first child (temp float)
 0:67          'r046' (temp float)
-0:67          radians (global float)
+0:67          radians (temp float)
 0:67            'inF0' (in float)
 0:68      Sequence
 0:68        move second child to first child (temp float)
@@ -257,18 +257,19 @@ gl_FragCoord origin is upper left
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (global uint)
-0:69            Constant:
-0:69              2 (const uint)
+0:69          Convert int to uint (temp uint)
+0:69            bitFieldReverse (temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
-0:70          roundEven (global float)
+0:70          roundEven (temp float)
 0:70            'inF0' (in float)
 0:71      Sequence
 0:71        move second child to first child (temp float)
 0:71          'r050' (temp float)
-0:71          inverse sqrt (global float)
+0:71          inverse sqrt (temp float)
 0:71            'inF0' (in float)
 0:72      Sequence
 0:72        move second child to first child (temp float)
@@ -282,12 +283,12 @@ gl_FragCoord origin is upper left
 0:73      Sequence
 0:73        move second child to first child (temp float)
 0:73          'r052' (temp float)
-0:73          Sign (global float)
+0:73          Sign (temp float)
 0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
 0:74          'r053' (temp float)
-0:74          sine (global float)
+0:74          sine (temp float)
 0:74            'inF0' (in float)
 0:75      Sequence
 0:75        move second child to first child (temp float)
@@ -301,45 +302,45 @@ gl_FragCoord origin is upper left
 0:76      Sequence
 0:76        move second child to first child (temp float)
 0:76          'r055' (temp float)
-0:76          hyp. sine (global float)
+0:76          hyp. sine (temp float)
 0:76            'inF0' (in float)
 0:77      Sequence
 0:77        move second child to first child (temp float)
 0:77          'r056' (temp float)
-0:77          smoothstep (global float)
+0:77          smoothstep (temp float)
 0:77            'inF0' (in float)
 0:77            'inF1' (in float)
 0:77            'inF2' (in float)
 0:78      Sequence
 0:78        move second child to first child (temp float)
 0:78          'r057' (temp float)
-0:78          sqrt (global float)
+0:78          sqrt (temp float)
 0:78            'inF0' (in float)
 0:79      Sequence
 0:79        move second child to first child (temp float)
 0:79          'r058' (temp float)
-0:79          step (global float)
+0:79          step (temp float)
 0:79            'inF0' (in float)
 0:79            'inF1' (in float)
 0:80      Sequence
 0:80        move second child to first child (temp float)
 0:80          'r059' (temp float)
-0:80          tangent (global float)
+0:80          tangent (temp float)
 0:80            'inF0' (in float)
 0:81      Sequence
 0:81        move second child to first child (temp float)
 0:81          'r060' (temp float)
-0:81          hyp. tangent (global float)
+0:81          hyp. tangent (temp float)
 0:81            'inF0' (in float)
 0:83      Sequence
 0:83        move second child to first child (temp float)
 0:83          'r061' (temp float)
-0:83          trunc (global float)
+0:83          trunc (temp float)
 0:83            'inF0' (in float)
 0:85      Branch: Return with expression
 0:85        Constant:
 0:85          0.000000
-0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:89    Function Parameters: 
 0:89      'inF0' (in 1-component vector of float)
 0:89      'inF1' (in 1-component vector of float)
@@ -348,7 +349,7 @@ gl_FragCoord origin is upper left
 0:91      Branch: Return with expression
 0:91        Constant:
 0:91          0.000000
-0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:95    Function Parameters: 
 0:95      'inF0' (in 2-component vector of float)
 0:95      'inF1' (in 2-component vector of float)
@@ -359,63 +360,63 @@ gl_FragCoord origin is upper left
 0:98      Sequence
 0:98        move second child to first child (temp bool)
 0:98          'r000' (temp bool)
-0:98          all (global bool)
+0:98          all (temp bool)
 0:98            'inF0' (in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child (temp 2-component vector of float)
 0:99          'r001' (temp 2-component vector of float)
-0:99          Absolute value (global 2-component vector of float)
+0:99          Absolute value (temp 2-component vector of float)
 0:99            'inF0' (in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child (temp 2-component vector of float)
 0:100          'r002' (temp 2-component vector of float)
-0:100          arc cosine (global 2-component vector of float)
+0:100          arc cosine (temp 2-component vector of float)
 0:100            'inF0' (in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child (temp bool)
 0:101          'r003' (temp bool)
-0:101          any (global bool)
+0:101          any (temp bool)
 0:101            'inF0' (in 2-component vector of float)
 0:102      Sequence
 0:102        move second child to first child (temp 2-component vector of float)
 0:102          'r004' (temp 2-component vector of float)
-0:102          arc sine (global 2-component vector of float)
+0:102          arc sine (temp 2-component vector of float)
 0:102            'inF0' (in 2-component vector of float)
 0:103      Sequence
 0:103        move second child to first child (temp 2-component vector of int)
 0:103          'r005' (temp 2-component vector of int)
-0:103          floatBitsToInt (global 2-component vector of int)
+0:103          floatBitsToInt (temp 2-component vector of int)
 0:103            'inF0' (in 2-component vector of float)
 0:104      Sequence
 0:104        move second child to first child (temp 2-component vector of uint)
 0:104          'r006' (temp 2-component vector of uint)
-0:104          floatBitsToUint (global 2-component vector of uint)
+0:104          floatBitsToUint (temp 2-component vector of uint)
 0:104            'inF0' (in 2-component vector of float)
 0:105      Sequence
 0:105        move second child to first child (temp 2-component vector of float)
 0:105          'r007' (temp 2-component vector of float)
-0:105          intBitsToFloat (global 2-component vector of float)
+0:105          intBitsToFloat (temp 2-component vector of float)
 0:105            'inU0' (in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child (temp 2-component vector of float)
 0:107          'r009' (temp 2-component vector of float)
-0:107          arc tangent (global 2-component vector of float)
+0:107          arc tangent (temp 2-component vector of float)
 0:107            'inF0' (in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child (temp 2-component vector of float)
 0:108          'r010' (temp 2-component vector of float)
-0:108          arc tangent (global 2-component vector of float)
+0:108          arc tangent (temp 2-component vector of float)
 0:108            'inF0' (in 2-component vector of float)
 0:108            'inF1' (in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child (temp 2-component vector of float)
 0:109          'r011' (temp 2-component vector of float)
-0:109          Ceiling (global 2-component vector of float)
+0:109          Ceiling (temp 2-component vector of float)
 0:109            'inF0' (in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child (temp 2-component vector of float)
 0:110          'r012' (temp 2-component vector of float)
-0:110          clamp (global 2-component vector of float)
+0:110          clamp (temp 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
 0:110            'inF1' (in 2-component vector of float)
 0:110            'inF2' (in 2-component vector of float)
@@ -432,157 +433,157 @@ gl_FragCoord origin is upper left
 0:112      Sequence
 0:112        move second child to first child (temp 2-component vector of float)
 0:112          'r013' (temp 2-component vector of float)
-0:112          cosine (global 2-component vector of float)
+0:112          cosine (temp 2-component vector of float)
 0:112            'inF0' (in 2-component vector of float)
 0:113      Sequence
 0:113        move second child to first child (temp 2-component vector of float)
 0:113          'r015' (temp 2-component vector of float)
-0:113          hyp. cosine (global 2-component vector of float)
+0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
-0:114        move second child to first child (temp 2-component vector of uint)
-0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (global 2-component vector of uint)
+0:114        move second child to first child (temp 2-component vector of int)
+0:114          'r016' (temp 2-component vector of int)
+0:?           bitCount (temp 2-component vector of int)
 0:?             Constant:
-0:?               7 (const uint)
-0:?               3 (const uint)
+0:?               7 (const int)
+0:?               3 (const int)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
-0:115          dPdx (global 2-component vector of float)
+0:115          dPdx (temp 2-component vector of float)
 0:115            'inF0' (in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child (temp 2-component vector of float)
 0:116          'r018' (temp 2-component vector of float)
-0:116          dPdxCoarse (global 2-component vector of float)
+0:116          dPdxCoarse (temp 2-component vector of float)
 0:116            'inF0' (in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child (temp 2-component vector of float)
 0:117          'r019' (temp 2-component vector of float)
-0:117          dPdxFine (global 2-component vector of float)
+0:117          dPdxFine (temp 2-component vector of float)
 0:117            'inF0' (in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child (temp 2-component vector of float)
 0:118          'r020' (temp 2-component vector of float)
-0:118          dPdy (global 2-component vector of float)
+0:118          dPdy (temp 2-component vector of float)
 0:118            'inF0' (in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child (temp 2-component vector of float)
 0:119          'r021' (temp 2-component vector of float)
-0:119          dPdyCoarse (global 2-component vector of float)
+0:119          dPdyCoarse (temp 2-component vector of float)
 0:119            'inF0' (in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child (temp 2-component vector of float)
 0:120          'r022' (temp 2-component vector of float)
-0:120          dPdyFine (global 2-component vector of float)
+0:120          dPdyFine (temp 2-component vector of float)
 0:120            'inF0' (in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child (temp 2-component vector of float)
 0:121          'r023' (temp 2-component vector of float)
-0:121          degrees (global 2-component vector of float)
+0:121          degrees (temp 2-component vector of float)
 0:121            'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp float)
 0:125          'r026' (temp float)
-0:125          distance (global float)
+0:125          distance (temp float)
 0:125            'inF0' (in 2-component vector of float)
 0:125            'inF1' (in 2-component vector of float)
 0:126      Sequence
 0:126        move second child to first child (temp float)
 0:126          'r027' (temp float)
-0:126          dot-product (global float)
+0:126          dot-product (temp float)
 0:126            'inF0' (in 2-component vector of float)
 0:126            'inF1' (in 2-component vector of float)
 0:130      Sequence
 0:130        move second child to first child (temp 2-component vector of float)
 0:130          'r028' (temp 2-component vector of float)
-0:130          exp (global 2-component vector of float)
+0:130          exp (temp 2-component vector of float)
 0:130            'inF0' (in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child (temp 2-component vector of float)
 0:131          'r029' (temp 2-component vector of float)
-0:131          exp2 (global 2-component vector of float)
+0:131          exp2 (temp 2-component vector of float)
 0:131            'inF0' (in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child (temp 2-component vector of float)
 0:132          'r030' (temp 2-component vector of float)
-0:132          face-forward (global 2-component vector of float)
+0:132          face-forward (temp 2-component vector of float)
 0:132            'inF0' (in 2-component vector of float)
 0:132            'inF1' (in 2-component vector of float)
 0:132            'inF2' (in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child (temp 2-component vector of uint)
 0:133          'r031' (temp 2-component vector of uint)
-0:?           findMSB (global 2-component vector of uint)
+0:?           findMSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:134      Sequence
 0:134        move second child to first child (temp 2-component vector of uint)
 0:134          'r032' (temp 2-component vector of uint)
-0:?           findLSB (global 2-component vector of uint)
+0:?           findLSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:135      Sequence
 0:135        move second child to first child (temp 2-component vector of float)
 0:135          'r033' (temp 2-component vector of float)
-0:135          Floor (global 2-component vector of float)
+0:135          Floor (temp 2-component vector of float)
 0:135            'inF0' (in 2-component vector of float)
 0:137      Sequence
 0:137        move second child to first child (temp 2-component vector of float)
 0:137          'r035' (temp 2-component vector of float)
-0:137          mod (global 2-component vector of float)
+0:137          mod (temp 2-component vector of float)
 0:137            'inF0' (in 2-component vector of float)
 0:137            'inF1' (in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child (temp 2-component vector of float)
 0:138          'r036' (temp 2-component vector of float)
-0:138          Fraction (global 2-component vector of float)
+0:138          Fraction (temp 2-component vector of float)
 0:138            'inF0' (in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child (temp 2-component vector of float)
 0:139          'r037' (temp 2-component vector of float)
-0:139          frexp (global 2-component vector of float)
+0:139          frexp (temp 2-component vector of float)
 0:139            'inF0' (in 2-component vector of float)
 0:139            'inF1' (in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child (temp 2-component vector of float)
 0:140          'r038' (temp 2-component vector of float)
-0:140          fwidth (global 2-component vector of float)
+0:140          fwidth (temp 2-component vector of float)
 0:140            'inF0' (in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child (temp 2-component vector of bool)
 0:141          'r039' (temp 2-component vector of bool)
-0:141          isinf (global 2-component vector of bool)
+0:141          isinf (temp 2-component vector of bool)
 0:141            'inF0' (in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child (temp 2-component vector of bool)
 0:142          'r040' (temp 2-component vector of bool)
-0:142          isnan (global 2-component vector of bool)
+0:142          isnan (temp 2-component vector of bool)
 0:142            'inF0' (in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child (temp 2-component vector of float)
 0:143          'r041' (temp 2-component vector of float)
-0:143          ldexp (global 2-component vector of float)
+0:143          ldexp (temp 2-component vector of float)
 0:143            'inF0' (in 2-component vector of float)
 0:143            'inF1' (in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child (temp 2-component vector of float)
 0:144          'r039a' (temp 2-component vector of float)
-0:144          mix (global 2-component vector of float)
+0:144          mix (temp 2-component vector of float)
 0:144            'inF0' (in 2-component vector of float)
 0:144            'inF1' (in 2-component vector of float)
 0:144            'inF2' (in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child (temp float)
 0:145          'r042' (temp float)
-0:145          length (global float)
+0:145          length (temp float)
 0:145            'inF0' (in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child (temp 2-component vector of float)
 0:146          'r043' (temp 2-component vector of float)
-0:146          log (global 2-component vector of float)
+0:146          log (temp 2-component vector of float)
 0:146            'inF0' (in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child (temp 2-component vector of float)
@@ -595,35 +596,35 @@ gl_FragCoord origin is upper left
 0:148      Sequence
 0:148        move second child to first child (temp 2-component vector of float)
 0:148          'r045' (temp 2-component vector of float)
-0:148          log2 (global 2-component vector of float)
+0:148          log2 (temp 2-component vector of float)
 0:148            'inF0' (in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child (temp 2-component vector of float)
 0:149          'r046' (temp 2-component vector of float)
-0:149          max (global 2-component vector of float)
+0:149          max (temp 2-component vector of float)
 0:149            'inF0' (in 2-component vector of float)
 0:149            'inF1' (in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child (temp 2-component vector of float)
 0:150          'r047' (temp 2-component vector of float)
-0:150          min (global 2-component vector of float)
+0:150          min (temp 2-component vector of float)
 0:150            'inF0' (in 2-component vector of float)
 0:150            'inF1' (in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child (temp 2-component vector of float)
 0:151          'r048' (temp 2-component vector of float)
-0:151          normalize (global 2-component vector of float)
+0:151          normalize (temp 2-component vector of float)
 0:151            'inF0' (in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child (temp 2-component vector of float)
 0:152          'r049' (temp 2-component vector of float)
-0:152          pow (global 2-component vector of float)
+0:152          pow (temp 2-component vector of float)
 0:152            'inF0' (in 2-component vector of float)
 0:152            'inF1' (in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child (temp 2-component vector of float)
 0:153          'r050' (temp 2-component vector of float)
-0:153          radians (global 2-component vector of float)
+0:153          radians (temp 2-component vector of float)
 0:153            'inF0' (in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child (temp 2-component vector of float)
@@ -635,13 +636,13 @@ gl_FragCoord origin is upper left
 0:155      Sequence
 0:155        move second child to first child (temp 2-component vector of float)
 0:155          'r052' (temp 2-component vector of float)
-0:155          reflect (global 2-component vector of float)
+0:155          reflect (temp 2-component vector of float)
 0:155            'inF0' (in 2-component vector of float)
 0:155            'inF1' (in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child (temp 2-component vector of float)
 0:156          'r053' (temp 2-component vector of float)
-0:156          refract (global 2-component vector of float)
+0:156          refract (temp 2-component vector of float)
 0:156            'inF0' (in 2-component vector of float)
 0:156            'inF1' (in 2-component vector of float)
 0:156            Constant:
@@ -649,19 +650,19 @@ gl_FragCoord origin is upper left
 0:157      Sequence
 0:157        move second child to first child (temp 2-component vector of uint)
 0:157          'r054' (temp 2-component vector of uint)
-0:?           bitFieldReverse (global 2-component vector of uint)
+0:?           bitFieldReverse (temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:158      Sequence
 0:158        move second child to first child (temp 2-component vector of float)
 0:158          'r055' (temp 2-component vector of float)
-0:158          roundEven (global 2-component vector of float)
+0:158          roundEven (temp 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child (temp 2-component vector of float)
 0:159          'r056' (temp 2-component vector of float)
-0:159          inverse sqrt (global 2-component vector of float)
+0:159          inverse sqrt (temp 2-component vector of float)
 0:159            'inF0' (in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child (temp 2-component vector of float)
@@ -675,12 +676,12 @@ gl_FragCoord origin is upper left
 0:161      Sequence
 0:161        move second child to first child (temp 2-component vector of float)
 0:161          'r058' (temp 2-component vector of float)
-0:161          Sign (global 2-component vector of float)
+0:161          Sign (temp 2-component vector of float)
 0:161            'inF0' (in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child (temp 2-component vector of float)
 0:162          'r059' (temp 2-component vector of float)
-0:162          sine (global 2-component vector of float)
+0:162          sine (temp 2-component vector of float)
 0:162            'inF0' (in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child (temp 2-component vector of float)
@@ -694,46 +695,46 @@ gl_FragCoord origin is upper left
 0:164      Sequence
 0:164        move second child to first child (temp 2-component vector of float)
 0:164          'r060' (temp 2-component vector of float)
-0:164          hyp. sine (global 2-component vector of float)
+0:164          hyp. sine (temp 2-component vector of float)
 0:164            'inF0' (in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child (temp 2-component vector of float)
 0:165          'r061' (temp 2-component vector of float)
-0:165          smoothstep (global 2-component vector of float)
+0:165          smoothstep (temp 2-component vector of float)
 0:165            'inF0' (in 2-component vector of float)
 0:165            'inF1' (in 2-component vector of float)
 0:165            'inF2' (in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child (temp 2-component vector of float)
 0:166          'r062' (temp 2-component vector of float)
-0:166          sqrt (global 2-component vector of float)
+0:166          sqrt (temp 2-component vector of float)
 0:166            'inF0' (in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child (temp 2-component vector of float)
 0:167          'r063' (temp 2-component vector of float)
-0:167          step (global 2-component vector of float)
+0:167          step (temp 2-component vector of float)
 0:167            'inF0' (in 2-component vector of float)
 0:167            'inF1' (in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child (temp 2-component vector of float)
 0:168          'r064' (temp 2-component vector of float)
-0:168          tangent (global 2-component vector of float)
+0:168          tangent (temp 2-component vector of float)
 0:168            'inF0' (in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child (temp 2-component vector of float)
 0:169          'r065' (temp 2-component vector of float)
-0:169          hyp. tangent (global 2-component vector of float)
+0:169          hyp. tangent (temp 2-component vector of float)
 0:169            'inF0' (in 2-component vector of float)
 0:171      Sequence
 0:171        move second child to first child (temp 2-component vector of float)
 0:171          'r066' (temp 2-component vector of float)
-0:171          trunc (global 2-component vector of float)
+0:171          trunc (temp 2-component vector of float)
 0:171            'inF0' (in 2-component vector of float)
 0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:178    Function Parameters: 
 0:178      'inF0' (in 3-component vector of float)
 0:178      'inF1' (in 3-component vector of float)
@@ -744,63 +745,63 @@ gl_FragCoord origin is upper left
 0:181      Sequence
 0:181        move second child to first child (temp bool)
 0:181          'r000' (temp bool)
-0:181          all (global bool)
+0:181          all (temp bool)
 0:181            'inF0' (in 3-component vector of float)
 0:182      Sequence
 0:182        move second child to first child (temp 3-component vector of float)
 0:182          'r001' (temp 3-component vector of float)
-0:182          Absolute value (global 3-component vector of float)
+0:182          Absolute value (temp 3-component vector of float)
 0:182            'inF0' (in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child (temp 3-component vector of float)
 0:183          'r002' (temp 3-component vector of float)
-0:183          arc cosine (global 3-component vector of float)
+0:183          arc cosine (temp 3-component vector of float)
 0:183            'inF0' (in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child (temp bool)
 0:184          'r003' (temp bool)
-0:184          any (global bool)
+0:184          any (temp bool)
 0:184            'inF0' (in 3-component vector of float)
 0:185      Sequence
 0:185        move second child to first child (temp 3-component vector of float)
 0:185          'r004' (temp 3-component vector of float)
-0:185          arc sine (global 3-component vector of float)
+0:185          arc sine (temp 3-component vector of float)
 0:185            'inF0' (in 3-component vector of float)
 0:186      Sequence
 0:186        move second child to first child (temp 3-component vector of int)
 0:186          'r005' (temp 3-component vector of int)
-0:186          floatBitsToInt (global 3-component vector of int)
+0:186          floatBitsToInt (temp 3-component vector of int)
 0:186            'inF0' (in 3-component vector of float)
 0:187      Sequence
 0:187        move second child to first child (temp 3-component vector of uint)
 0:187          'r006' (temp 3-component vector of uint)
-0:187          floatBitsToUint (global 3-component vector of uint)
+0:187          floatBitsToUint (temp 3-component vector of uint)
 0:187            'inF0' (in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child (temp 3-component vector of float)
 0:188          'r007' (temp 3-component vector of float)
-0:188          intBitsToFloat (global 3-component vector of float)
+0:188          intBitsToFloat (temp 3-component vector of float)
 0:188            'inU0' (in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child (temp 3-component vector of float)
 0:190          'r009' (temp 3-component vector of float)
-0:190          arc tangent (global 3-component vector of float)
+0:190          arc tangent (temp 3-component vector of float)
 0:190            'inF0' (in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child (temp 3-component vector of float)
 0:191          'r010' (temp 3-component vector of float)
-0:191          arc tangent (global 3-component vector of float)
+0:191          arc tangent (temp 3-component vector of float)
 0:191            'inF0' (in 3-component vector of float)
 0:191            'inF1' (in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child (temp 3-component vector of float)
 0:192          'r011' (temp 3-component vector of float)
-0:192          Ceiling (global 3-component vector of float)
+0:192          Ceiling (temp 3-component vector of float)
 0:192            'inF0' (in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child (temp 3-component vector of float)
 0:193          'r012' (temp 3-component vector of float)
-0:193          clamp (global 3-component vector of float)
+0:193          clamp (temp 3-component vector of float)
 0:193            'inF0' (in 3-component vector of float)
 0:193            'inF1' (in 3-component vector of float)
 0:193            'inF2' (in 3-component vector of float)
@@ -818,17 +819,17 @@ gl_FragCoord origin is upper left
 0:195      Sequence
 0:195        move second child to first child (temp 3-component vector of float)
 0:195          'r013' (temp 3-component vector of float)
-0:195          cosine (global 3-component vector of float)
+0:195          cosine (temp 3-component vector of float)
 0:195            'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
 0:196          'r014' (temp 3-component vector of float)
-0:196          hyp. cosine (global 3-component vector of float)
+0:196          hyp. cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
 0:197      Sequence
 0:197        move second child to first child (temp 3-component vector of uint)
 0:197          'r015' (temp 3-component vector of uint)
-0:?           bitCount (global 3-component vector of uint)
+0:?           bitCount (temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -836,77 +837,77 @@ gl_FragCoord origin is upper left
 0:198      Sequence
 0:198        move second child to first child (temp 3-component vector of float)
 0:198          'r016' (temp 3-component vector of float)
-0:198          cross-product (global 3-component vector of float)
+0:198          cross-product (temp 3-component vector of float)
 0:198            'inF0' (in 3-component vector of float)
 0:198            'inF1' (in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child (temp 3-component vector of float)
 0:199          'r017' (temp 3-component vector of float)
-0:199          dPdx (global 3-component vector of float)
+0:199          dPdx (temp 3-component vector of float)
 0:199            'inF0' (in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child (temp 3-component vector of float)
 0:200          'r018' (temp 3-component vector of float)
-0:200          dPdxCoarse (global 3-component vector of float)
+0:200          dPdxCoarse (temp 3-component vector of float)
 0:200            'inF0' (in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child (temp 3-component vector of float)
 0:201          'r019' (temp 3-component vector of float)
-0:201          dPdxFine (global 3-component vector of float)
+0:201          dPdxFine (temp 3-component vector of float)
 0:201            'inF0' (in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child (temp 3-component vector of float)
 0:202          'r020' (temp 3-component vector of float)
-0:202          dPdy (global 3-component vector of float)
+0:202          dPdy (temp 3-component vector of float)
 0:202            'inF0' (in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child (temp 3-component vector of float)
 0:203          'r021' (temp 3-component vector of float)
-0:203          dPdyCoarse (global 3-component vector of float)
+0:203          dPdyCoarse (temp 3-component vector of float)
 0:203            'inF0' (in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child (temp 3-component vector of float)
 0:204          'r022' (temp 3-component vector of float)
-0:204          dPdyFine (global 3-component vector of float)
+0:204          dPdyFine (temp 3-component vector of float)
 0:204            'inF0' (in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child (temp 3-component vector of float)
 0:205          'r023' (temp 3-component vector of float)
-0:205          degrees (global 3-component vector of float)
+0:205          degrees (temp 3-component vector of float)
 0:205            'inF0' (in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child (temp float)
 0:206          'r024' (temp float)
-0:206          distance (global float)
+0:206          distance (temp float)
 0:206            'inF0' (in 3-component vector of float)
 0:206            'inF1' (in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child (temp float)
 0:207          'r025' (temp float)
-0:207          dot-product (global float)
+0:207          dot-product (temp float)
 0:207            'inF0' (in 3-component vector of float)
 0:207            'inF1' (in 3-component vector of float)
 0:211      Sequence
 0:211        move second child to first child (temp 3-component vector of float)
 0:211          'r029' (temp 3-component vector of float)
-0:211          exp (global 3-component vector of float)
+0:211          exp (temp 3-component vector of float)
 0:211            'inF0' (in 3-component vector of float)
 0:212      Sequence
 0:212        move second child to first child (temp 3-component vector of float)
 0:212          'r030' (temp 3-component vector of float)
-0:212          exp2 (global 3-component vector of float)
+0:212          exp2 (temp 3-component vector of float)
 0:212            'inF0' (in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child (temp 3-component vector of float)
 0:213          'r031' (temp 3-component vector of float)
-0:213          face-forward (global 3-component vector of float)
+0:213          face-forward (temp 3-component vector of float)
 0:213            'inF0' (in 3-component vector of float)
 0:213            'inF1' (in 3-component vector of float)
 0:213            'inF2' (in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child (temp 3-component vector of uint)
 0:214          'r032' (temp 3-component vector of uint)
-0:?           findMSB (global 3-component vector of uint)
+0:?           findMSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -914,7 +915,7 @@ gl_FragCoord origin is upper left
 0:215      Sequence
 0:215        move second child to first child (temp 3-component vector of uint)
 0:215          'r033' (temp 3-component vector of uint)
-0:?           findLSB (global 3-component vector of uint)
+0:?           findLSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -922,57 +923,57 @@ gl_FragCoord origin is upper left
 0:216      Sequence
 0:216        move second child to first child (temp 3-component vector of float)
 0:216          'r034' (temp 3-component vector of float)
-0:216          Floor (global 3-component vector of float)
+0:216          Floor (temp 3-component vector of float)
 0:216            'inF0' (in 3-component vector of float)
 0:218      Sequence
 0:218        move second child to first child (temp 3-component vector of float)
 0:218          'r036' (temp 3-component vector of float)
-0:218          mod (global 3-component vector of float)
+0:218          mod (temp 3-component vector of float)
 0:218            'inF0' (in 3-component vector of float)
 0:218            'inF1' (in 3-component vector of float)
 0:219      Sequence
 0:219        move second child to first child (temp 3-component vector of float)
 0:219          'r037' (temp 3-component vector of float)
-0:219          Fraction (global 3-component vector of float)
+0:219          Fraction (temp 3-component vector of float)
 0:219            'inF0' (in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child (temp 3-component vector of float)
 0:220          'r038' (temp 3-component vector of float)
-0:220          frexp (global 3-component vector of float)
+0:220          frexp (temp 3-component vector of float)
 0:220            'inF0' (in 3-component vector of float)
 0:220            'inF1' (in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child (temp 3-component vector of float)
 0:221          'r039' (temp 3-component vector of float)
-0:221          fwidth (global 3-component vector of float)
+0:221          fwidth (temp 3-component vector of float)
 0:221            'inF0' (in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child (temp 3-component vector of bool)
 0:222          'r040' (temp 3-component vector of bool)
-0:222          isinf (global 3-component vector of bool)
+0:222          isinf (temp 3-component vector of bool)
 0:222            'inF0' (in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child (temp 3-component vector of bool)
 0:223          'r041' (temp 3-component vector of bool)
-0:223          isnan (global 3-component vector of bool)
+0:223          isnan (temp 3-component vector of bool)
 0:223            'inF0' (in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child (temp 3-component vector of float)
 0:224          'r042' (temp 3-component vector of float)
-0:224          ldexp (global 3-component vector of float)
+0:224          ldexp (temp 3-component vector of float)
 0:224            'inF0' (in 3-component vector of float)
 0:224            'inF1' (in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child (temp 3-component vector of float)
 0:225          'r039a' (temp 3-component vector of float)
-0:225          mix (global 3-component vector of float)
+0:225          mix (temp 3-component vector of float)
 0:225            'inF0' (in 3-component vector of float)
 0:225            'inF1' (in 3-component vector of float)
 0:225            'inF2' (in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child (temp 3-component vector of float)
 0:226          'r039b' (temp 3-component vector of float)
-0:226          mix (global 3-component vector of float)
+0:226          mix (temp 3-component vector of float)
 0:226            'inF0' (in 3-component vector of float)
 0:226            'inF1' (in 3-component vector of float)
 0:226            Constant:
@@ -980,12 +981,12 @@ gl_FragCoord origin is upper left
 0:227      Sequence
 0:227        move second child to first child (temp float)
 0:227          'r043' (temp float)
-0:227          length (global float)
+0:227          length (temp float)
 0:227            'inF0' (in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child (temp 3-component vector of float)
 0:228          'r044' (temp 3-component vector of float)
-0:228          log (global 3-component vector of float)
+0:228          log (temp 3-component vector of float)
 0:228            'inF0' (in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child (temp 3-component vector of float)
@@ -998,35 +999,35 @@ gl_FragCoord origin is upper left
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
 0:230          'r046' (temp 3-component vector of float)
-0:230          log2 (global 3-component vector of float)
+0:230          log2 (temp 3-component vector of float)
 0:230            'inF0' (in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child (temp 3-component vector of float)
 0:231          'r047' (temp 3-component vector of float)
-0:231          max (global 3-component vector of float)
+0:231          max (temp 3-component vector of float)
 0:231            'inF0' (in 3-component vector of float)
 0:231            'inF1' (in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child (temp 3-component vector of float)
 0:232          'r048' (temp 3-component vector of float)
-0:232          min (global 3-component vector of float)
+0:232          min (temp 3-component vector of float)
 0:232            'inF0' (in 3-component vector of float)
 0:232            'inF1' (in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child (temp 3-component vector of float)
 0:233          'r049' (temp 3-component vector of float)
-0:233          normalize (global 3-component vector of float)
+0:233          normalize (temp 3-component vector of float)
 0:233            'inF0' (in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child (temp 3-component vector of float)
 0:234          'r050' (temp 3-component vector of float)
-0:234          pow (global 3-component vector of float)
+0:234          pow (temp 3-component vector of float)
 0:234            'inF0' (in 3-component vector of float)
 0:234            'inF1' (in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child (temp 3-component vector of float)
 0:235          'r051' (temp 3-component vector of float)
-0:235          radians (global 3-component vector of float)
+0:235          radians (temp 3-component vector of float)
 0:235            'inF0' (in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child (temp 3-component vector of float)
@@ -1038,13 +1039,13 @@ gl_FragCoord origin is upper left
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
 0:237          'r053' (temp 3-component vector of float)
-0:237          reflect (global 3-component vector of float)
+0:237          reflect (temp 3-component vector of float)
 0:237            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child (temp 3-component vector of float)
 0:238          'r054' (temp 3-component vector of float)
-0:238          refract (global 3-component vector of float)
+0:238          refract (temp 3-component vector of float)
 0:238            'inF0' (in 3-component vector of float)
 0:238            'inF1' (in 3-component vector of float)
 0:238            Constant:
@@ -1052,7 +1053,7 @@ gl_FragCoord origin is upper left
 0:239      Sequence
 0:239        move second child to first child (temp 3-component vector of uint)
 0:239          'r055' (temp 3-component vector of uint)
-0:?           bitFieldReverse (global 3-component vector of uint)
+0:?           bitFieldReverse (temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -1060,12 +1061,12 @@ gl_FragCoord origin is upper left
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
 0:240          'r056' (temp 3-component vector of float)
-0:240          roundEven (global 3-component vector of float)
+0:240          roundEven (temp 3-component vector of float)
 0:240            'inF0' (in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child (temp 3-component vector of float)
 0:241          'r057' (temp 3-component vector of float)
-0:241          inverse sqrt (global 3-component vector of float)
+0:241          inverse sqrt (temp 3-component vector of float)
 0:241            'inF0' (in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
@@ -1079,12 +1080,12 @@ gl_FragCoord origin is upper left
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
 0:243          'r059' (temp 3-component vector of float)
-0:243          Sign (global 3-component vector of float)
+0:243          Sign (temp 3-component vector of float)
 0:243            'inF0' (in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child (temp 3-component vector of float)
 0:244          'r060' (temp 3-component vector of float)
-0:244          sine (global 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
 0:244            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
@@ -1098,47 +1099,47 @@ gl_FragCoord origin is upper left
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
 0:246          'r061' (temp 3-component vector of float)
-0:246          hyp. sine (global 3-component vector of float)
+0:246          hyp. sine (temp 3-component vector of float)
 0:246            'inF0' (in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child (temp 3-component vector of float)
 0:247          'r062' (temp 3-component vector of float)
-0:247          smoothstep (global 3-component vector of float)
+0:247          smoothstep (temp 3-component vector of float)
 0:247            'inF0' (in 3-component vector of float)
 0:247            'inF1' (in 3-component vector of float)
 0:247            'inF2' (in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child (temp 3-component vector of float)
 0:248          'r063' (temp 3-component vector of float)
-0:248          sqrt (global 3-component vector of float)
+0:248          sqrt (temp 3-component vector of float)
 0:248            'inF0' (in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child (temp 3-component vector of float)
 0:249          'r064' (temp 3-component vector of float)
-0:249          step (global 3-component vector of float)
+0:249          step (temp 3-component vector of float)
 0:249            'inF0' (in 3-component vector of float)
 0:249            'inF1' (in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child (temp 3-component vector of float)
 0:250          'r065' (temp 3-component vector of float)
-0:250          tangent (global 3-component vector of float)
+0:250          tangent (temp 3-component vector of float)
 0:250            'inF0' (in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child (temp 3-component vector of float)
 0:251          'r066' (temp 3-component vector of float)
-0:251          hyp. tangent (global 3-component vector of float)
+0:251          hyp. tangent (temp 3-component vector of float)
 0:251            'inF0' (in 3-component vector of float)
 0:253      Sequence
 0:253        move second child to first child (temp 3-component vector of float)
 0:253          'r067' (temp 3-component vector of float)
-0:253          trunc (global 3-component vector of float)
+0:253          trunc (temp 3-component vector of float)
 0:253            'inF0' (in 3-component vector of float)
 0:256      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:260    Function Parameters: 
 0:260      'inF0' (in 4-component vector of float)
 0:260      'inF1' (in 4-component vector of float)
@@ -1149,63 +1150,63 @@ gl_FragCoord origin is upper left
 0:263      Sequence
 0:263        move second child to first child (temp bool)
 0:263          'r000' (temp bool)
-0:263          all (global bool)
+0:263          all (temp bool)
 0:263            'inF0' (in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child (temp 4-component vector of float)
 0:264          'r001' (temp 4-component vector of float)
-0:264          Absolute value (global 4-component vector of float)
+0:264          Absolute value (temp 4-component vector of float)
 0:264            'inF0' (in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child (temp 4-component vector of float)
 0:265          'r002' (temp 4-component vector of float)
-0:265          arc cosine (global 4-component vector of float)
+0:265          arc cosine (temp 4-component vector of float)
 0:265            'inF0' (in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child (temp bool)
 0:266          'r003' (temp bool)
-0:266          any (global bool)
+0:266          any (temp bool)
 0:266            'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
 0:267          'r004' (temp 4-component vector of float)
-0:267          arc sine (global 4-component vector of float)
+0:267          arc sine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
 0:268      Sequence
 0:268        move second child to first child (temp 4-component vector of int)
 0:268          'r005' (temp 4-component vector of int)
-0:268          floatBitsToInt (global 4-component vector of int)
+0:268          floatBitsToInt (temp 4-component vector of int)
 0:268            'inF0' (in 4-component vector of float)
 0:269      Sequence
 0:269        move second child to first child (temp 4-component vector of uint)
 0:269          'r006' (temp 4-component vector of uint)
-0:269          floatBitsToUint (global 4-component vector of uint)
+0:269          floatBitsToUint (temp 4-component vector of uint)
 0:269            'inF0' (in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child (temp 4-component vector of float)
 0:270          'r007' (temp 4-component vector of float)
-0:270          intBitsToFloat (global 4-component vector of float)
+0:270          intBitsToFloat (temp 4-component vector of float)
 0:270            'inU0' (in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child (temp 4-component vector of float)
 0:272          'r009' (temp 4-component vector of float)
-0:272          arc tangent (global 4-component vector of float)
+0:272          arc tangent (temp 4-component vector of float)
 0:272            'inF0' (in 4-component vector of float)
 0:273      Sequence
 0:273        move second child to first child (temp 4-component vector of float)
 0:273          'r010' (temp 4-component vector of float)
-0:273          arc tangent (global 4-component vector of float)
+0:273          arc tangent (temp 4-component vector of float)
 0:273            'inF0' (in 4-component vector of float)
 0:273            'inF1' (in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child (temp 4-component vector of float)
 0:274          'r011' (temp 4-component vector of float)
-0:274          Ceiling (global 4-component vector of float)
+0:274          Ceiling (temp 4-component vector of float)
 0:274            'inF0' (in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child (temp 4-component vector of float)
 0:275          'r012' (temp 4-component vector of float)
-0:275          clamp (global 4-component vector of float)
+0:275          clamp (temp 4-component vector of float)
 0:275            'inF0' (in 4-component vector of float)
 0:275            'inF1' (in 4-component vector of float)
 0:275            'inF2' (in 4-component vector of float)
@@ -1224,17 +1225,17 @@ gl_FragCoord origin is upper left
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
 0:277          'r013' (temp 4-component vector of float)
-0:277          cosine (global 4-component vector of float)
+0:277          cosine (temp 4-component vector of float)
 0:277            'inF0' (in 4-component vector of float)
 0:278      Sequence
 0:278        move second child to first child (temp 4-component vector of float)
 0:278          'r014' (temp 4-component vector of float)
-0:278          hyp. cosine (global 4-component vector of float)
+0:278          hyp. cosine (temp 4-component vector of float)
 0:278            'inF0' (in 4-component vector of float)
 0:279      Sequence
 0:279        move second child to first child (temp 4-component vector of uint)
 0:279          'r015' (temp 4-component vector of uint)
-0:?           bitCount (global 4-component vector of uint)
+0:?           bitCount (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -1243,48 +1244,48 @@ gl_FragCoord origin is upper left
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
 0:280          'r016' (temp 4-component vector of float)
-0:280          dPdx (global 4-component vector of float)
+0:280          dPdx (temp 4-component vector of float)
 0:280            'inF0' (in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child (temp 4-component vector of float)
 0:281          'r017' (temp 4-component vector of float)
-0:281          dPdxCoarse (global 4-component vector of float)
+0:281          dPdxCoarse (temp 4-component vector of float)
 0:281            'inF0' (in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child (temp 4-component vector of float)
 0:282          'r018' (temp 4-component vector of float)
-0:282          dPdxFine (global 4-component vector of float)
+0:282          dPdxFine (temp 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child (temp 4-component vector of float)
 0:283          'r019' (temp 4-component vector of float)
-0:283          dPdy (global 4-component vector of float)
+0:283          dPdy (temp 4-component vector of float)
 0:283            'inF0' (in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child (temp 4-component vector of float)
 0:284          'r020' (temp 4-component vector of float)
-0:284          dPdyCoarse (global 4-component vector of float)
+0:284          dPdyCoarse (temp 4-component vector of float)
 0:284            'inF0' (in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child (temp 4-component vector of float)
 0:285          'r021' (temp 4-component vector of float)
-0:285          dPdyFine (global 4-component vector of float)
+0:285          dPdyFine (temp 4-component vector of float)
 0:285            'inF0' (in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child (temp 4-component vector of float)
 0:286          'r022' (temp 4-component vector of float)
-0:286          degrees (global 4-component vector of float)
+0:286          degrees (temp 4-component vector of float)
 0:286            'inF0' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
 0:287          'r023' (temp float)
-0:287          distance (global float)
+0:287          distance (temp float)
 0:287            'inF0' (in 4-component vector of float)
 0:287            'inF1' (in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child (temp float)
 0:288          'r024' (temp float)
-0:288          dot-product (global float)
+0:288          dot-product (temp float)
 0:288            'inF0' (in 4-component vector of float)
 0:288            'inF1' (in 4-component vector of float)
 0:289      Sequence
@@ -1313,24 +1314,24 @@ gl_FragCoord origin is upper left
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
 0:293          'r029' (temp 4-component vector of float)
-0:293          exp (global 4-component vector of float)
+0:293          exp (temp 4-component vector of float)
 0:293            'inF0' (in 4-component vector of float)
 0:294      Sequence
 0:294        move second child to first child (temp 4-component vector of float)
 0:294          'r030' (temp 4-component vector of float)
-0:294          exp2 (global 4-component vector of float)
+0:294          exp2 (temp 4-component vector of float)
 0:294            'inF0' (in 4-component vector of float)
 0:295      Sequence
 0:295        move second child to first child (temp 4-component vector of float)
 0:295          'r031' (temp 4-component vector of float)
-0:295          face-forward (global 4-component vector of float)
+0:295          face-forward (temp 4-component vector of float)
 0:295            'inF0' (in 4-component vector of float)
 0:295            'inF1' (in 4-component vector of float)
 0:295            'inF2' (in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child (temp 4-component vector of uint)
 0:296          'r032' (temp 4-component vector of uint)
-0:?           findMSB (global 4-component vector of uint)
+0:?           findMSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -1339,7 +1340,7 @@ gl_FragCoord origin is upper left
 0:297      Sequence
 0:297        move second child to first child (temp 4-component vector of uint)
 0:297          'r033' (temp 4-component vector of uint)
-0:?           findLSB (global 4-component vector of uint)
+0:?           findLSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -1348,62 +1349,62 @@ gl_FragCoord origin is upper left
 0:298      Sequence
 0:298        move second child to first child (temp 4-component vector of float)
 0:298          'r034' (temp 4-component vector of float)
-0:298          Floor (global 4-component vector of float)
+0:298          Floor (temp 4-component vector of float)
 0:298            'inF0' (in 4-component vector of float)
 0:300      Sequence
 0:300        move second child to first child (temp 4-component vector of float)
 0:300          'r036' (temp 4-component vector of float)
-0:300          mod (global 4-component vector of float)
+0:300          mod (temp 4-component vector of float)
 0:300            'inF0' (in 4-component vector of float)
 0:300            'inF1' (in 4-component vector of float)
 0:301      Sequence
 0:301        move second child to first child (temp 4-component vector of float)
 0:301          'r037' (temp 4-component vector of float)
-0:301          Fraction (global 4-component vector of float)
+0:301          Fraction (temp 4-component vector of float)
 0:301            'inF0' (in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child (temp 4-component vector of float)
 0:302          'r038' (temp 4-component vector of float)
-0:302          frexp (global 4-component vector of float)
+0:302          frexp (temp 4-component vector of float)
 0:302            'inF0' (in 4-component vector of float)
 0:302            'inF1' (in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child (temp 4-component vector of float)
 0:303          'r039' (temp 4-component vector of float)
-0:303          fwidth (global 4-component vector of float)
+0:303          fwidth (temp 4-component vector of float)
 0:303            'inF0' (in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child (temp 4-component vector of bool)
 0:304          'r040' (temp 4-component vector of bool)
-0:304          isinf (global 4-component vector of bool)
+0:304          isinf (temp 4-component vector of bool)
 0:304            'inF0' (in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child (temp 4-component vector of bool)
 0:305          'r041' (temp 4-component vector of bool)
-0:305          isnan (global 4-component vector of bool)
+0:305          isnan (temp 4-component vector of bool)
 0:305            'inF0' (in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child (temp 4-component vector of float)
 0:306          'r042' (temp 4-component vector of float)
-0:306          ldexp (global 4-component vector of float)
+0:306          ldexp (temp 4-component vector of float)
 0:306            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child (temp 4-component vector of float)
 0:307          'r039a' (temp 4-component vector of float)
-0:307          mix (global 4-component vector of float)
+0:307          mix (temp 4-component vector of float)
 0:307            'inF0' (in 4-component vector of float)
 0:307            'inF1' (in 4-component vector of float)
 0:307            'inF2' (in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child (temp float)
 0:308          'r043' (temp float)
-0:308          length (global float)
+0:308          length (temp float)
 0:308            'inF0' (in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child (temp 4-component vector of float)
 0:309          'r044' (temp 4-component vector of float)
-0:309          log (global 4-component vector of float)
+0:309          log (temp 4-component vector of float)
 0:309            'inF0' (in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child (temp 4-component vector of float)
@@ -1416,35 +1417,35 @@ gl_FragCoord origin is upper left
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
 0:311          'r046' (temp 4-component vector of float)
-0:311          log2 (global 4-component vector of float)
+0:311          log2 (temp 4-component vector of float)
 0:311            'inF0' (in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child (temp 4-component vector of float)
 0:312          'r047' (temp 4-component vector of float)
-0:312          max (global 4-component vector of float)
+0:312          max (temp 4-component vector of float)
 0:312            'inF0' (in 4-component vector of float)
 0:312            'inF1' (in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child (temp 4-component vector of float)
 0:313          'r048' (temp 4-component vector of float)
-0:313          min (global 4-component vector of float)
+0:313          min (temp 4-component vector of float)
 0:313            'inF0' (in 4-component vector of float)
 0:313            'inF1' (in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child (temp 4-component vector of float)
 0:314          'r049' (temp 4-component vector of float)
-0:314          normalize (global 4-component vector of float)
+0:314          normalize (temp 4-component vector of float)
 0:314            'inF0' (in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child (temp 4-component vector of float)
 0:315          'r050' (temp 4-component vector of float)
-0:315          pow (global 4-component vector of float)
+0:315          pow (temp 4-component vector of float)
 0:315            'inF0' (in 4-component vector of float)
 0:315            'inF1' (in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child (temp 4-component vector of float)
 0:316          'r051' (temp 4-component vector of float)
-0:316          radians (global 4-component vector of float)
+0:316          radians (temp 4-component vector of float)
 0:316            'inF0' (in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child (temp 4-component vector of float)
@@ -1456,13 +1457,13 @@ gl_FragCoord origin is upper left
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
 0:318          'r053' (temp 4-component vector of float)
-0:318          reflect (global 4-component vector of float)
+0:318          reflect (temp 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child (temp 4-component vector of float)
 0:319          'r054' (temp 4-component vector of float)
-0:319          refract (global 4-component vector of float)
+0:319          refract (temp 4-component vector of float)
 0:319            'inF0' (in 4-component vector of float)
 0:319            'inF1' (in 4-component vector of float)
 0:319            Constant:
@@ -1470,7 +1471,7 @@ gl_FragCoord origin is upper left
 0:320      Sequence
 0:320        move second child to first child (temp 4-component vector of uint)
 0:320          'r055' (temp 4-component vector of uint)
-0:?           bitFieldReverse (global 4-component vector of uint)
+0:?           bitFieldReverse (temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -1479,12 +1480,12 @@ gl_FragCoord origin is upper left
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
 0:321          'r056' (temp 4-component vector of float)
-0:321          roundEven (global 4-component vector of float)
+0:321          roundEven (temp 4-component vector of float)
 0:321            'inF0' (in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child (temp 4-component vector of float)
 0:322          'r057' (temp 4-component vector of float)
-0:322          inverse sqrt (global 4-component vector of float)
+0:322          inverse sqrt (temp 4-component vector of float)
 0:322            'inF0' (in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
@@ -1498,12 +1499,12 @@ gl_FragCoord origin is upper left
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
 0:324          'r059' (temp 4-component vector of float)
-0:324          Sign (global 4-component vector of float)
+0:324          Sign (temp 4-component vector of float)
 0:324            'inF0' (in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child (temp 4-component vector of float)
 0:325          'r060' (temp 4-component vector of float)
-0:325          sine (global 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
 0:325            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
@@ -1517,40 +1518,40 @@ gl_FragCoord origin is upper left
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
 0:327          'r061' (temp 4-component vector of float)
-0:327          hyp. sine (global 4-component vector of float)
+0:327          hyp. sine (temp 4-component vector of float)
 0:327            'inF0' (in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child (temp 4-component vector of float)
 0:328          'r062' (temp 4-component vector of float)
-0:328          smoothstep (global 4-component vector of float)
+0:328          smoothstep (temp 4-component vector of float)
 0:328            'inF0' (in 4-component vector of float)
 0:328            'inF1' (in 4-component vector of float)
 0:328            'inF2' (in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child (temp 4-component vector of float)
 0:329          'r063' (temp 4-component vector of float)
-0:329          sqrt (global 4-component vector of float)
+0:329          sqrt (temp 4-component vector of float)
 0:329            'inF0' (in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child (temp 4-component vector of float)
 0:330          'r064' (temp 4-component vector of float)
-0:330          step (global 4-component vector of float)
+0:330          step (temp 4-component vector of float)
 0:330            'inF0' (in 4-component vector of float)
 0:330            'inF1' (in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child (temp 4-component vector of float)
 0:331          'r065' (temp 4-component vector of float)
-0:331          tangent (global 4-component vector of float)
+0:331          tangent (temp 4-component vector of float)
 0:331            'inF0' (in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child (temp 4-component vector of float)
 0:332          'r066' (temp 4-component vector of float)
-0:332          hyp. tangent (global 4-component vector of float)
+0:332          hyp. tangent (temp 4-component vector of float)
 0:332            'inF0' (in 4-component vector of float)
 0:334      Sequence
 0:334        move second child to first child (temp 4-component vector of float)
 0:334          'r067' (temp 4-component vector of float)
-0:334          trunc (global 4-component vector of float)
+0:334          trunc (temp 4-component vector of float)
 0:334            'inF0' (in 4-component vector of float)
 0:337      Branch: Return with expression
 0:?         Constant:
@@ -1558,7 +1559,7 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:401    Function Parameters: 
 0:401      'inF0' (in 2X2 matrix of float)
 0:401      'inF1' (in 2X2 matrix of float)
@@ -1567,40 +1568,40 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r000' (temp bool)
-0:403          all (global bool)
+0:403          all (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r001' (temp 2X2 matrix of float)
-0:403          Absolute value (global 2X2 matrix of float)
+0:403          Absolute value (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      arc cosine (global 2X2 matrix of float)
+0:403      arc cosine (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r003' (temp bool)
-0:403          any (global bool)
+0:403          any (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r004' (temp 2X2 matrix of float)
-0:403          arc sine (global 2X2 matrix of float)
+0:403          arc sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r005' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r006' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r007' (temp 2X2 matrix of float)
-0:403          Ceiling (global 2X2 matrix of float)
+0:403          Ceiling (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Test condition and select (temp void)
 0:403        Condition
@@ -1617,114 +1618,114 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r008' (temp 2X2 matrix of float)
-0:403          clamp (global 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r009' (temp 2X2 matrix of float)
-0:403          cosine (global 2X2 matrix of float)
+0:403          cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r010' (temp 2X2 matrix of float)
-0:403          hyp. cosine (global 2X2 matrix of float)
+0:403          hyp. cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r011' (temp 2X2 matrix of float)
-0:403          dPdx (global 2X2 matrix of float)
+0:403          dPdx (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r012' (temp 2X2 matrix of float)
-0:403          dPdxCoarse (global 2X2 matrix of float)
+0:403          dPdxCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r013' (temp 2X2 matrix of float)
-0:403          dPdxFine (global 2X2 matrix of float)
+0:403          dPdxFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r014' (temp 2X2 matrix of float)
-0:403          dPdy (global 2X2 matrix of float)
+0:403          dPdy (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r015' (temp 2X2 matrix of float)
-0:403          dPdyCoarse (global 2X2 matrix of float)
+0:403          dPdyCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r016' (temp 2X2 matrix of float)
-0:403          dPdyFine (global 2X2 matrix of float)
+0:403          dPdyFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r017' (temp 2X2 matrix of float)
-0:403          degrees (global 2X2 matrix of float)
+0:403          degrees (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp float)
 0:403          'r018' (temp float)
-0:403          determinant (global float)
+0:403          determinant (temp float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r019' (temp 2X2 matrix of float)
-0:403          exp (global 2X2 matrix of float)
+0:403          exp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'R020' (temp 2X2 matrix of float)
-0:403          exp2 (global 2X2 matrix of float)
+0:403          exp2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r021' (temp 2X2 matrix of float)
-0:403          Floor (global 2X2 matrix of float)
+0:403          Floor (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r022' (temp 2X2 matrix of float)
-0:403          mod (global 2X2 matrix of float)
+0:403          mod (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r023' (temp 2X2 matrix of float)
-0:403          Fraction (global 2X2 matrix of float)
+0:403          Fraction (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r024' (temp 2X2 matrix of float)
-0:403          frexp (global 2X2 matrix of float)
+0:403          frexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r025' (temp 2X2 matrix of float)
-0:403          fwidth (global 2X2 matrix of float)
+0:403          fwidth (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026' (temp 2X2 matrix of float)
-0:403          ldexp (global 2X2 matrix of float)
+0:403          ldexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026a' (temp 2X2 matrix of float)
-0:403          mix (global 2X2 matrix of float)
+0:403          mix (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r027' (temp 2X2 matrix of float)
-0:403          log (global 2X2 matrix of float)
+0:403          log (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1737,40 +1738,40 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r029' (temp 2X2 matrix of float)
-0:403          log2 (global 2X2 matrix of float)
+0:403          log2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r030' (temp 2X2 matrix of float)
-0:403          max (global 2X2 matrix of float)
+0:403          max (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r031' (temp 2X2 matrix of float)
-0:403          min (global 2X2 matrix of float)
+0:403          min (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r032' (temp 2X2 matrix of float)
-0:403          pow (global 2X2 matrix of float)
+0:403          pow (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r033' (temp 2X2 matrix of float)
-0:403          radians (global 2X2 matrix of float)
+0:403          radians (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r034' (temp 2X2 matrix of float)
-0:403          roundEven (global 2X2 matrix of float)
+0:403          roundEven (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r035' (temp 2X2 matrix of float)
-0:403          inverse sqrt (global 2X2 matrix of float)
+0:403          inverse sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1784,12 +1785,12 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r037' (temp 2X2 matrix of float)
-0:403          Sign (global 2X2 matrix of float)
+0:403          Sign (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r038' (temp 2X2 matrix of float)
-0:403          sine (global 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1803,42 +1804,42 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r039' (temp 2X2 matrix of float)
-0:403          hyp. sine (global 2X2 matrix of float)
+0:403          hyp. sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r049' (temp 2X2 matrix of float)
-0:403          smoothstep (global 2X2 matrix of float)
+0:403          smoothstep (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r041' (temp 2X2 matrix of float)
-0:403          sqrt (global 2X2 matrix of float)
+0:403          sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r042' (temp 2X2 matrix of float)
-0:403          step (global 2X2 matrix of float)
+0:403          step (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r043' (temp 2X2 matrix of float)
-0:403          tangent (global 2X2 matrix of float)
+0:403          tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r044' (temp 2X2 matrix of float)
-0:403          hyp. tangent (global 2X2 matrix of float)
+0:403          hyp. tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      transpose (global 2X2 matrix of float)
+0:403      transpose (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r046' (temp 2X2 matrix of float)
-0:403          trunc (global 2X2 matrix of float)
+0:403          trunc (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:406      Branch: Return with expression
 0:?         Constant:
@@ -1846,7 +1847,7 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:410    Function Parameters: 
 0:410      'inF0' (in 3X3 matrix of float)
 0:410      'inF1' (in 3X3 matrix of float)
@@ -1855,40 +1856,40 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r000' (temp bool)
-0:412          all (global bool)
+0:412          all (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r001' (temp 3X3 matrix of float)
-0:412          Absolute value (global 3X3 matrix of float)
+0:412          Absolute value (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      arc cosine (global 3X3 matrix of float)
+0:412      arc cosine (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r003' (temp bool)
-0:412          any (global bool)
+0:412          any (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r004' (temp 3X3 matrix of float)
-0:412          arc sine (global 3X3 matrix of float)
+0:412          arc sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r005' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r006' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r007' (temp 3X3 matrix of float)
-0:412          Ceiling (global 3X3 matrix of float)
+0:412          Ceiling (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Test condition and select (temp void)
 0:412        Condition
@@ -1910,114 +1911,114 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r008' (temp 3X3 matrix of float)
-0:412          clamp (global 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r009' (temp 3X3 matrix of float)
-0:412          cosine (global 3X3 matrix of float)
+0:412          cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r010' (temp 3X3 matrix of float)
-0:412          hyp. cosine (global 3X3 matrix of float)
+0:412          hyp. cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r011' (temp 3X3 matrix of float)
-0:412          dPdx (global 3X3 matrix of float)
+0:412          dPdx (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r012' (temp 3X3 matrix of float)
-0:412          dPdxCoarse (global 3X3 matrix of float)
+0:412          dPdxCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r013' (temp 3X3 matrix of float)
-0:412          dPdxFine (global 3X3 matrix of float)
+0:412          dPdxFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r014' (temp 3X3 matrix of float)
-0:412          dPdy (global 3X3 matrix of float)
+0:412          dPdy (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r015' (temp 3X3 matrix of float)
-0:412          dPdyCoarse (global 3X3 matrix of float)
+0:412          dPdyCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r016' (temp 3X3 matrix of float)
-0:412          dPdyFine (global 3X3 matrix of float)
+0:412          dPdyFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r017' (temp 3X3 matrix of float)
-0:412          degrees (global 3X3 matrix of float)
+0:412          degrees (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp float)
 0:412          'r018' (temp float)
-0:412          determinant (global float)
+0:412          determinant (temp float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r019' (temp 3X3 matrix of float)
-0:412          exp (global 3X3 matrix of float)
+0:412          exp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'R020' (temp 3X3 matrix of float)
-0:412          exp2 (global 3X3 matrix of float)
+0:412          exp2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r021' (temp 3X3 matrix of float)
-0:412          Floor (global 3X3 matrix of float)
+0:412          Floor (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r022' (temp 3X3 matrix of float)
-0:412          mod (global 3X3 matrix of float)
+0:412          mod (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r023' (temp 3X3 matrix of float)
-0:412          Fraction (global 3X3 matrix of float)
+0:412          Fraction (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r024' (temp 3X3 matrix of float)
-0:412          frexp (global 3X3 matrix of float)
+0:412          frexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r025' (temp 3X3 matrix of float)
-0:412          fwidth (global 3X3 matrix of float)
+0:412          fwidth (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026' (temp 3X3 matrix of float)
-0:412          ldexp (global 3X3 matrix of float)
+0:412          ldexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026a' (temp 3X3 matrix of float)
-0:412          mix (global 3X3 matrix of float)
+0:412          mix (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r027' (temp 3X3 matrix of float)
-0:412          log (global 3X3 matrix of float)
+0:412          log (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2030,40 +2031,40 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r029' (temp 3X3 matrix of float)
-0:412          log2 (global 3X3 matrix of float)
+0:412          log2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r030' (temp 3X3 matrix of float)
-0:412          max (global 3X3 matrix of float)
+0:412          max (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r031' (temp 3X3 matrix of float)
-0:412          min (global 3X3 matrix of float)
+0:412          min (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r032' (temp 3X3 matrix of float)
-0:412          pow (global 3X3 matrix of float)
+0:412          pow (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r033' (temp 3X3 matrix of float)
-0:412          radians (global 3X3 matrix of float)
+0:412          radians (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r034' (temp 3X3 matrix of float)
-0:412          roundEven (global 3X3 matrix of float)
+0:412          roundEven (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r035' (temp 3X3 matrix of float)
-0:412          inverse sqrt (global 3X3 matrix of float)
+0:412          inverse sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2077,12 +2078,12 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r037' (temp 3X3 matrix of float)
-0:412          Sign (global 3X3 matrix of float)
+0:412          Sign (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r038' (temp 3X3 matrix of float)
-0:412          sine (global 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2096,42 +2097,42 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r039' (temp 3X3 matrix of float)
-0:412          hyp. sine (global 3X3 matrix of float)
+0:412          hyp. sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r049' (temp 3X3 matrix of float)
-0:412          smoothstep (global 3X3 matrix of float)
+0:412          smoothstep (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r041' (temp 3X3 matrix of float)
-0:412          sqrt (global 3X3 matrix of float)
+0:412          sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r042' (temp 3X3 matrix of float)
-0:412          step (global 3X3 matrix of float)
+0:412          step (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r043' (temp 3X3 matrix of float)
-0:412          tangent (global 3X3 matrix of float)
+0:412          tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r044' (temp 3X3 matrix of float)
-0:412          hyp. tangent (global 3X3 matrix of float)
+0:412          hyp. tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      transpose (global 3X3 matrix of float)
+0:412      transpose (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r046' (temp 3X3 matrix of float)
-0:412          trunc (global 3X3 matrix of float)
+0:412          trunc (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:415      Branch: Return with expression
 0:?         Constant:
@@ -2144,7 +2145,7 @@ gl_FragCoord origin is upper left
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:419    Function Parameters: 
 0:419      'inF0' (in 4X4 matrix of float)
 0:419      'inF1' (in 4X4 matrix of float)
@@ -2153,40 +2154,40 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r000' (temp bool)
-0:421          all (global bool)
+0:421          all (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r001' (temp 4X4 matrix of float)
-0:421          Absolute value (global 4X4 matrix of float)
+0:421          Absolute value (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      arc cosine (global 4X4 matrix of float)
+0:421      arc cosine (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r003' (temp bool)
-0:421          any (global bool)
+0:421          any (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r004' (temp 4X4 matrix of float)
-0:421          arc sine (global 4X4 matrix of float)
+0:421          arc sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r005' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r006' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r007' (temp 4X4 matrix of float)
-0:421          Ceiling (global 4X4 matrix of float)
+0:421          Ceiling (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Test condition and select (temp void)
 0:421        Condition
@@ -2215,114 +2216,114 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r008' (temp 4X4 matrix of float)
-0:421          clamp (global 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r009' (temp 4X4 matrix of float)
-0:421          cosine (global 4X4 matrix of float)
+0:421          cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r010' (temp 4X4 matrix of float)
-0:421          hyp. cosine (global 4X4 matrix of float)
+0:421          hyp. cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r011' (temp 4X4 matrix of float)
-0:421          dPdx (global 4X4 matrix of float)
+0:421          dPdx (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r012' (temp 4X4 matrix of float)
-0:421          dPdxCoarse (global 4X4 matrix of float)
+0:421          dPdxCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r013' (temp 4X4 matrix of float)
-0:421          dPdxFine (global 4X4 matrix of float)
+0:421          dPdxFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r014' (temp 4X4 matrix of float)
-0:421          dPdy (global 4X4 matrix of float)
+0:421          dPdy (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r015' (temp 4X4 matrix of float)
-0:421          dPdyCoarse (global 4X4 matrix of float)
+0:421          dPdyCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r016' (temp 4X4 matrix of float)
-0:421          dPdyFine (global 4X4 matrix of float)
+0:421          dPdyFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r017' (temp 4X4 matrix of float)
-0:421          degrees (global 4X4 matrix of float)
+0:421          degrees (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp float)
 0:421          'r018' (temp float)
-0:421          determinant (global float)
+0:421          determinant (temp float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r019' (temp 4X4 matrix of float)
-0:421          exp (global 4X4 matrix of float)
+0:421          exp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'R020' (temp 4X4 matrix of float)
-0:421          exp2 (global 4X4 matrix of float)
+0:421          exp2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r021' (temp 4X4 matrix of float)
-0:421          Floor (global 4X4 matrix of float)
+0:421          Floor (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r022' (temp 4X4 matrix of float)
-0:421          mod (global 4X4 matrix of float)
+0:421          mod (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r023' (temp 4X4 matrix of float)
-0:421          Fraction (global 4X4 matrix of float)
+0:421          Fraction (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r024' (temp 4X4 matrix of float)
-0:421          frexp (global 4X4 matrix of float)
+0:421          frexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r025' (temp 4X4 matrix of float)
-0:421          fwidth (global 4X4 matrix of float)
+0:421          fwidth (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026' (temp 4X4 matrix of float)
-0:421          ldexp (global 4X4 matrix of float)
+0:421          ldexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026a' (temp 4X4 matrix of float)
-0:421          mix (global 4X4 matrix of float)
+0:421          mix (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r027' (temp 4X4 matrix of float)
-0:421          log (global 4X4 matrix of float)
+0:421          log (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2335,40 +2336,40 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r029' (temp 4X4 matrix of float)
-0:421          log2 (global 4X4 matrix of float)
+0:421          log2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r030' (temp 4X4 matrix of float)
-0:421          max (global 4X4 matrix of float)
+0:421          max (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r031' (temp 4X4 matrix of float)
-0:421          min (global 4X4 matrix of float)
+0:421          min (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r032' (temp 4X4 matrix of float)
-0:421          pow (global 4X4 matrix of float)
+0:421          pow (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r033' (temp 4X4 matrix of float)
-0:421          radians (global 4X4 matrix of float)
+0:421          radians (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r034' (temp 4X4 matrix of float)
-0:421          roundEven (global 4X4 matrix of float)
+0:421          roundEven (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r035' (temp 4X4 matrix of float)
-0:421          inverse sqrt (global 4X4 matrix of float)
+0:421          inverse sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2382,12 +2383,12 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r037' (temp 4X4 matrix of float)
-0:421          Sign (global 4X4 matrix of float)
+0:421          Sign (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r038' (temp 4X4 matrix of float)
-0:421          sine (global 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2401,42 +2402,42 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r039' (temp 4X4 matrix of float)
-0:421          hyp. sine (global 4X4 matrix of float)
+0:421          hyp. sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r049' (temp 4X4 matrix of float)
-0:421          smoothstep (global 4X4 matrix of float)
+0:421          smoothstep (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r041' (temp 4X4 matrix of float)
-0:421          sqrt (global 4X4 matrix of float)
+0:421          sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r042' (temp 4X4 matrix of float)
-0:421          step (global 4X4 matrix of float)
+0:421          step (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r043' (temp 4X4 matrix of float)
-0:421          tangent (global 4X4 matrix of float)
+0:421          tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r044' (temp 4X4 matrix of float)
-0:421          hyp. tangent (global 4X4 matrix of float)
+0:421          hyp. tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      transpose (global 4X4 matrix of float)
+0:421      transpose (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r046' (temp 4X4 matrix of float)
-0:421          trunc (global 4X4 matrix of float)
+0:421          trunc (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:424      Branch: Return with expression
 0:?         Constant:
@@ -2456,7 +2457,7 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (temp void)
 0:442    Function Parameters: 
 0:442      'inF0' (in float)
 0:442      'inF1' (in float)
@@ -2486,7 +2487,7 @@ gl_FragCoord origin is upper left
 0:443      Sequence
 0:443        move second child to first child (temp float)
 0:443          'r3' (temp float)
-0:443          dot-product (global float)
+0:443          dot-product (temp float)
 0:443            'inFV0' (in 2-component vector of float)
 0:443            'inFV1' (in 2-component vector of float)
 0:443      Sequence
@@ -2519,7 +2520,7 @@ gl_FragCoord origin is upper left
 0:443          matrix-multiply (temp 2X2 matrix of float)
 0:443            'inFM1' (in 2X2 matrix of float)
 0:443            'inFM0' (in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (temp void)
 0:449    Function Parameters: 
 0:449      'inF0' (in float)
 0:449      'inF1' (in float)
@@ -2549,7 +2550,7 @@ gl_FragCoord origin is upper left
 0:450      Sequence
 0:450        move second child to first child (temp float)
 0:450          'r3' (temp float)
-0:450          dot-product (global float)
+0:450          dot-product (temp float)
 0:450            'inFV0' (in 3-component vector of float)
 0:450            'inFV1' (in 3-component vector of float)
 0:450      Sequence
@@ -2582,7 +2583,7 @@ gl_FragCoord origin is upper left
 0:450          matrix-multiply (temp 3X3 matrix of float)
 0:450            'inFM1' (in 3X3 matrix of float)
 0:450            'inFM0' (in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (temp void)
 0:456    Function Parameters: 
 0:456      'inF0' (in float)
 0:456      'inF1' (in float)
@@ -2612,7 +2613,7 @@ gl_FragCoord origin is upper left
 0:457      Sequence
 0:457        move second child to first child (temp float)
 0:457          'r3' (temp float)
-0:457          dot-product (global float)
+0:457          dot-product (temp float)
 0:457            'inFV0' (in 4-component vector of float)
 0:457            'inFV1' (in 4-component vector of float)
 0:457      Sequence
@@ -2645,7 +2646,7 @@ gl_FragCoord origin is upper left
 0:457          matrix-multiply (temp 4X4 matrix of float)
 0:457            'inFM1' (in 4X4 matrix of float)
 0:457            'inFM0' (in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (global void)
+0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (temp void)
 0:466    Function Parameters: 
 0:466      'inF0' (in float)
 0:466      'inF1' (in float)
@@ -2690,13 +2691,13 @@ gl_FragCoord origin is upper left
 0:472      Sequence
 0:472        move second child to first child (temp float)
 0:472          'r05' (temp float)
-0:472          dot-product (global float)
+0:472          dot-product (temp float)
 0:472            'inFV2' (in 2-component vector of float)
 0:472            'inFV2' (in 2-component vector of float)
 0:473      Sequence
 0:473        move second child to first child (temp float)
 0:473          'r06' (temp float)
-0:473          dot-product (global float)
+0:473          dot-product (temp float)
 0:473            'inFV3' (in 3-component vector of float)
 0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
@@ -2759,7 +2760,7 @@ gl_FragCoord origin is upper left
 0:483          matrix-multiply (temp 3X4 matrix of float)
 0:483            'inFM2x4' (in 2X4 matrix of float)
 0:483            'inFM3x2' (in 3X2 matrix of float)
-0:489  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:489  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:489    Function Parameters: 
 0:?     Sequence
 0:491      move second child to first child (temp 4-component vector of float)
@@ -2772,8 +2773,8 @@ gl_FragCoord origin is upper left
 0:491          1.000000
 0:491          1.000000
 0:491          1.000000
-0:?       Sequence
-0:?         Sequence
+0:492      Sequence
+0:492        Sequence
 0:492          move second child to first child (temp 4-component vector of float)
 0:?             'color' (layout(location=0 ) out 4-component vector of float)
 0:492            color: direct index for structure (temp 4-component vector of float)
@@ -2782,19 +2783,19 @@ gl_FragCoord origin is upper left
 0:492                0 (const int)
 0:492        Branch: Return
 0:?   Linker Objects
-0:?     'gs_ua' (global uint)
-0:?     'gs_ub' (global uint)
-0:?     'gs_uc' (global uint)
-0:?     'gs_ua2' (global 2-component vector of uint)
-0:?     'gs_ub2' (global 2-component vector of uint)
-0:?     'gs_uc2' (global 2-component vector of uint)
-0:?     'gs_ua3' (global 3-component vector of uint)
-0:?     'gs_ub3' (global 3-component vector of uint)
-0:?     'gs_uc3' (global 3-component vector of uint)
-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:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'gs_ua' (shared uint)
+0:?     'gs_ub' (shared uint)
+0:?     'gs_uc' (shared uint)
+0:?     'gs_ua2' (shared 2-component vector of uint)
+0:?     'gs_ub2' (shared 2-component vector of uint)
+0:?     'gs_uc2' (shared 2-component vector of uint)
+0:?     'gs_ua3' (shared 3-component vector of uint)
+0:?     'gs_ub3' (shared 3-component vector of uint)
+0:?     'gs_uc3' (shared 3-component vector of uint)
+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)
 
 
 Linked fragment stage:
@@ -2803,7 +2804,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -2814,63 +2815,63 @@ gl_FragCoord origin is upper left
 0:20      Sequence
 0:20        move second child to first child (temp bool)
 0:20          'r000' (temp bool)
-0:20          all (global bool)
+0:20          all (temp bool)
 0:20            'inF0' (in float)
 0:21      Sequence
 0:21        move second child to first child (temp float)
 0:21          'r001' (temp float)
-0:21          Absolute value (global float)
+0:21          Absolute value (temp float)
 0:21            'inF0' (in float)
 0:22      Sequence
 0:22        move second child to first child (temp float)
 0:22          'r002' (temp float)
-0:22          arc cosine (global float)
+0:22          arc cosine (temp float)
 0:22            'inF0' (in float)
 0:23      Sequence
 0:23        move second child to first child (temp bool)
 0:23          'r003' (temp bool)
-0:23          any (global bool)
+0:23          any (temp bool)
 0:23            'inF0' (in float)
 0:24      Sequence
 0:24        move second child to first child (temp float)
 0:24          'r004' (temp float)
-0:24          arc sine (global float)
+0:24          arc sine (temp float)
 0:24            'inF0' (in float)
 0:25      Sequence
 0:25        move second child to first child (temp int)
 0:25          'r005' (temp int)
-0:25          floatBitsToInt (global int)
+0:25          floatBitsToInt (temp int)
 0:25            'inF0' (in float)
 0:26      Sequence
 0:26        move second child to first child (temp uint)
 0:26          'r006' (temp uint)
-0:26          floatBitsToUint (global uint)
+0:26          floatBitsToUint (temp uint)
 0:26            'inF0' (in float)
 0:27      Sequence
 0:27        move second child to first child (temp float)
 0:27          'r007' (temp float)
-0:27          intBitsToFloat (global float)
+0:27          intBitsToFloat (temp float)
 0:27            'inU0' (in uint)
 0:29      Sequence
 0:29        move second child to first child (temp float)
 0:29          'r009' (temp float)
-0:29          arc tangent (global float)
+0:29          arc tangent (temp float)
 0:29            'inF0' (in float)
 0:30      Sequence
 0:30        move second child to first child (temp float)
 0:30          'r010' (temp float)
-0:30          arc tangent (global float)
+0:30          arc tangent (temp float)
 0:30            'inF0' (in float)
 0:30            'inF1' (in float)
 0:31      Sequence
 0:31        move second child to first child (temp float)
 0:31          'r011' (temp float)
-0:31          Ceiling (global float)
+0:31          Ceiling (temp float)
 0:31            'inF0' (in float)
 0:32      Sequence
 0:32        move second child to first child (temp float)
 0:32          'r012' (temp float)
-0:32          clamp (global float)
+0:32          clamp (temp float)
 0:32            'inF0' (in float)
 0:32            'inF1' (in float)
 0:32            'inF2' (in float)
@@ -2885,132 +2886,132 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp float)
 0:34          'r014' (temp float)
-0:34          cosine (global float)
+0:34          cosine (temp float)
 0:34            'inF0' (in float)
 0:35      Sequence
 0:35        move second child to first child (temp float)
 0:35          'r015' (temp float)
-0:35          hyp. cosine (global float)
+0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
-0:36        move second child to first child (temp uint)
-0:36          'r016' (temp uint)
-0:36          bitCount (global uint)
+0:36        move second child to first child (temp int)
+0:36          'r016' (temp int)
+0:36          bitCount (temp int)
 0:36            Constant:
-0:36              7 (const uint)
+0:36              7 (const int)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
-0:37          dPdx (global float)
+0:37          dPdx (temp float)
 0:37            'inF0' (in float)
 0:38      Sequence
 0:38        move second child to first child (temp float)
 0:38          'r018' (temp float)
-0:38          dPdxCoarse (global float)
+0:38          dPdxCoarse (temp float)
 0:38            'inF0' (in float)
 0:39      Sequence
 0:39        move second child to first child (temp float)
 0:39          'r019' (temp float)
-0:39          dPdxFine (global float)
+0:39          dPdxFine (temp float)
 0:39            'inF0' (in float)
 0:40      Sequence
 0:40        move second child to first child (temp float)
 0:40          'r020' (temp float)
-0:40          dPdy (global float)
+0:40          dPdy (temp float)
 0:40            'inF0' (in float)
 0:41      Sequence
 0:41        move second child to first child (temp float)
 0:41          'r021' (temp float)
-0:41          dPdyCoarse (global float)
+0:41          dPdyCoarse (temp float)
 0:41            'inF0' (in float)
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r022' (temp float)
-0:42          dPdyFine (global float)
+0:42          dPdyFine (temp float)
 0:42            'inF0' (in float)
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r023' (temp float)
-0:43          degrees (global float)
+0:43          degrees (temp float)
 0:43            'inF0' (in float)
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r027' (temp float)
-0:47          exp (global float)
+0:47          exp (temp float)
 0:47            'inF0' (in float)
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r028' (temp float)
-0:48          exp2 (global float)
+0:48          exp2 (temp float)
 0:48            'inF0' (in float)
 0:49      Sequence
 0:49        move second child to first child (temp uint)
 0:49          'r029' (temp uint)
 0:49          Convert int to uint (temp uint)
-0:49            findMSB (global int)
+0:49            findMSB (temp int)
 0:49              Constant:
 0:49                7 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp uint)
 0:50          'r030' (temp uint)
 0:50          Convert int to uint (temp uint)
-0:50            findLSB (global int)
+0:50            findLSB (temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp float)
 0:51          'r031' (temp float)
-0:51          Floor (global float)
+0:51          Floor (temp float)
 0:51            'inF0' (in float)
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r033' (temp float)
-0:53          mod (global float)
+0:53          mod (temp float)
 0:53            'inF0' (in float)
 0:53            'inF1' (in float)
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r034' (temp float)
-0:54          Fraction (global float)
+0:54          Fraction (temp float)
 0:54            'inF0' (in float)
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r035' (temp float)
-0:55          frexp (global float)
+0:55          frexp (temp float)
 0:55            'inF0' (in float)
 0:55            'inF1' (in float)
 0:56      Sequence
 0:56        move second child to first child (temp float)
 0:56          'r036' (temp float)
-0:56          fwidth (global float)
+0:56          fwidth (temp float)
 0:56            'inF0' (in float)
 0:57      Sequence
 0:57        move second child to first child (temp bool)
 0:57          'r037' (temp bool)
-0:57          isinf (global bool)
+0:57          isinf (temp bool)
 0:57            'inF0' (in float)
 0:58      Sequence
 0:58        move second child to first child (temp bool)
 0:58          'r038' (temp bool)
-0:58          isnan (global bool)
+0:58          isnan (temp bool)
 0:58            'inF0' (in float)
 0:59      Sequence
 0:59        move second child to first child (temp float)
 0:59          'r039' (temp float)
-0:59          ldexp (global float)
+0:59          ldexp (temp float)
 0:59            'inF0' (in float)
 0:59            'inF1' (in float)
 0:60      Sequence
 0:60        move second child to first child (temp float)
 0:60          'r039a' (temp float)
-0:60          mix (global float)
+0:60          mix (temp float)
 0:60            'inF0' (in float)
 0:60            'inF1' (in float)
 0:60            'inF2' (in float)
 0:61      Sequence
 0:61        move second child to first child (temp float)
 0:61          'r040' (temp float)
-0:61          log (global float)
+0:61          log (temp float)
 0:61            'inF0' (in float)
 0:62      Sequence
 0:62        move second child to first child (temp float)
@@ -3023,30 +3024,30 @@ gl_FragCoord origin is upper left
 0:63      Sequence
 0:63        move second child to first child (temp float)
 0:63          'r042' (temp float)
-0:63          log2 (global float)
+0:63          log2 (temp float)
 0:63            'inF0' (in float)
 0:64      Sequence
 0:64        move second child to first child (temp float)
 0:64          'r043' (temp float)
-0:64          max (global float)
+0:64          max (temp float)
 0:64            'inF0' (in float)
 0:64            'inF1' (in float)
 0:65      Sequence
 0:65        move second child to first child (temp float)
 0:65          'r044' (temp float)
-0:65          min (global float)
+0:65          min (temp float)
 0:65            'inF0' (in float)
 0:65            'inF1' (in float)
 0:66      Sequence
 0:66        move second child to first child (temp float)
 0:66          'r045' (temp float)
-0:66          pow (global float)
+0:66          pow (temp float)
 0:66            'inF0' (in float)
 0:66            'inF1' (in float)
 0:67      Sequence
 0:67        move second child to first child (temp float)
 0:67          'r046' (temp float)
-0:67          radians (global float)
+0:67          radians (temp float)
 0:67            'inF0' (in float)
 0:68      Sequence
 0:68        move second child to first child (temp float)
@@ -3058,18 +3059,19 @@ gl_FragCoord origin is upper left
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (global uint)
-0:69            Constant:
-0:69              2 (const uint)
+0:69          Convert int to uint (temp uint)
+0:69            bitFieldReverse (temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
-0:70          roundEven (global float)
+0:70          roundEven (temp float)
 0:70            'inF0' (in float)
 0:71      Sequence
 0:71        move second child to first child (temp float)
 0:71          'r050' (temp float)
-0:71          inverse sqrt (global float)
+0:71          inverse sqrt (temp float)
 0:71            'inF0' (in float)
 0:72      Sequence
 0:72        move second child to first child (temp float)
@@ -3083,12 +3085,12 @@ gl_FragCoord origin is upper left
 0:73      Sequence
 0:73        move second child to first child (temp float)
 0:73          'r052' (temp float)
-0:73          Sign (global float)
+0:73          Sign (temp float)
 0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
 0:74          'r053' (temp float)
-0:74          sine (global float)
+0:74          sine (temp float)
 0:74            'inF0' (in float)
 0:75      Sequence
 0:75        move second child to first child (temp float)
@@ -3102,45 +3104,45 @@ gl_FragCoord origin is upper left
 0:76      Sequence
 0:76        move second child to first child (temp float)
 0:76          'r055' (temp float)
-0:76          hyp. sine (global float)
+0:76          hyp. sine (temp float)
 0:76            'inF0' (in float)
 0:77      Sequence
 0:77        move second child to first child (temp float)
 0:77          'r056' (temp float)
-0:77          smoothstep (global float)
+0:77          smoothstep (temp float)
 0:77            'inF0' (in float)
 0:77            'inF1' (in float)
 0:77            'inF2' (in float)
 0:78      Sequence
 0:78        move second child to first child (temp float)
 0:78          'r057' (temp float)
-0:78          sqrt (global float)
+0:78          sqrt (temp float)
 0:78            'inF0' (in float)
 0:79      Sequence
 0:79        move second child to first child (temp float)
 0:79          'r058' (temp float)
-0:79          step (global float)
+0:79          step (temp float)
 0:79            'inF0' (in float)
 0:79            'inF1' (in float)
 0:80      Sequence
 0:80        move second child to first child (temp float)
 0:80          'r059' (temp float)
-0:80          tangent (global float)
+0:80          tangent (temp float)
 0:80            'inF0' (in float)
 0:81      Sequence
 0:81        move second child to first child (temp float)
 0:81          'r060' (temp float)
-0:81          hyp. tangent (global float)
+0:81          hyp. tangent (temp float)
 0:81            'inF0' (in float)
 0:83      Sequence
 0:83        move second child to first child (temp float)
 0:83          'r061' (temp float)
-0:83          trunc (global float)
+0:83          trunc (temp float)
 0:83            'inF0' (in float)
 0:85      Branch: Return with expression
 0:85        Constant:
 0:85          0.000000
-0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:89    Function Parameters: 
 0:89      'inF0' (in 1-component vector of float)
 0:89      'inF1' (in 1-component vector of float)
@@ -3149,7 +3151,7 @@ gl_FragCoord origin is upper left
 0:91      Branch: Return with expression
 0:91        Constant:
 0:91          0.000000
-0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:95    Function Parameters: 
 0:95      'inF0' (in 2-component vector of float)
 0:95      'inF1' (in 2-component vector of float)
@@ -3160,63 +3162,63 @@ gl_FragCoord origin is upper left
 0:98      Sequence
 0:98        move second child to first child (temp bool)
 0:98          'r000' (temp bool)
-0:98          all (global bool)
+0:98          all (temp bool)
 0:98            'inF0' (in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child (temp 2-component vector of float)
 0:99          'r001' (temp 2-component vector of float)
-0:99          Absolute value (global 2-component vector of float)
+0:99          Absolute value (temp 2-component vector of float)
 0:99            'inF0' (in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child (temp 2-component vector of float)
 0:100          'r002' (temp 2-component vector of float)
-0:100          arc cosine (global 2-component vector of float)
+0:100          arc cosine (temp 2-component vector of float)
 0:100            'inF0' (in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child (temp bool)
 0:101          'r003' (temp bool)
-0:101          any (global bool)
+0:101          any (temp bool)
 0:101            'inF0' (in 2-component vector of float)
 0:102      Sequence
 0:102        move second child to first child (temp 2-component vector of float)
 0:102          'r004' (temp 2-component vector of float)
-0:102          arc sine (global 2-component vector of float)
+0:102          arc sine (temp 2-component vector of float)
 0:102            'inF0' (in 2-component vector of float)
 0:103      Sequence
 0:103        move second child to first child (temp 2-component vector of int)
 0:103          'r005' (temp 2-component vector of int)
-0:103          floatBitsToInt (global 2-component vector of int)
+0:103          floatBitsToInt (temp 2-component vector of int)
 0:103            'inF0' (in 2-component vector of float)
 0:104      Sequence
 0:104        move second child to first child (temp 2-component vector of uint)
 0:104          'r006' (temp 2-component vector of uint)
-0:104          floatBitsToUint (global 2-component vector of uint)
+0:104          floatBitsToUint (temp 2-component vector of uint)
 0:104            'inF0' (in 2-component vector of float)
 0:105      Sequence
 0:105        move second child to first child (temp 2-component vector of float)
 0:105          'r007' (temp 2-component vector of float)
-0:105          intBitsToFloat (global 2-component vector of float)
+0:105          intBitsToFloat (temp 2-component vector of float)
 0:105            'inU0' (in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child (temp 2-component vector of float)
 0:107          'r009' (temp 2-component vector of float)
-0:107          arc tangent (global 2-component vector of float)
+0:107          arc tangent (temp 2-component vector of float)
 0:107            'inF0' (in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child (temp 2-component vector of float)
 0:108          'r010' (temp 2-component vector of float)
-0:108          arc tangent (global 2-component vector of float)
+0:108          arc tangent (temp 2-component vector of float)
 0:108            'inF0' (in 2-component vector of float)
 0:108            'inF1' (in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child (temp 2-component vector of float)
 0:109          'r011' (temp 2-component vector of float)
-0:109          Ceiling (global 2-component vector of float)
+0:109          Ceiling (temp 2-component vector of float)
 0:109            'inF0' (in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child (temp 2-component vector of float)
 0:110          'r012' (temp 2-component vector of float)
-0:110          clamp (global 2-component vector of float)
+0:110          clamp (temp 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
 0:110            'inF1' (in 2-component vector of float)
 0:110            'inF2' (in 2-component vector of float)
@@ -3233,157 +3235,157 @@ gl_FragCoord origin is upper left
 0:112      Sequence
 0:112        move second child to first child (temp 2-component vector of float)
 0:112          'r013' (temp 2-component vector of float)
-0:112          cosine (global 2-component vector of float)
+0:112          cosine (temp 2-component vector of float)
 0:112            'inF0' (in 2-component vector of float)
 0:113      Sequence
 0:113        move second child to first child (temp 2-component vector of float)
 0:113          'r015' (temp 2-component vector of float)
-0:113          hyp. cosine (global 2-component vector of float)
+0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
-0:114        move second child to first child (temp 2-component vector of uint)
-0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (global 2-component vector of uint)
+0:114        move second child to first child (temp 2-component vector of int)
+0:114          'r016' (temp 2-component vector of int)
+0:?           bitCount (temp 2-component vector of int)
 0:?             Constant:
-0:?               7 (const uint)
-0:?               3 (const uint)
+0:?               7 (const int)
+0:?               3 (const int)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
-0:115          dPdx (global 2-component vector of float)
+0:115          dPdx (temp 2-component vector of float)
 0:115            'inF0' (in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child (temp 2-component vector of float)
 0:116          'r018' (temp 2-component vector of float)
-0:116          dPdxCoarse (global 2-component vector of float)
+0:116          dPdxCoarse (temp 2-component vector of float)
 0:116            'inF0' (in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child (temp 2-component vector of float)
 0:117          'r019' (temp 2-component vector of float)
-0:117          dPdxFine (global 2-component vector of float)
+0:117          dPdxFine (temp 2-component vector of float)
 0:117            'inF0' (in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child (temp 2-component vector of float)
 0:118          'r020' (temp 2-component vector of float)
-0:118          dPdy (global 2-component vector of float)
+0:118          dPdy (temp 2-component vector of float)
 0:118            'inF0' (in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child (temp 2-component vector of float)
 0:119          'r021' (temp 2-component vector of float)
-0:119          dPdyCoarse (global 2-component vector of float)
+0:119          dPdyCoarse (temp 2-component vector of float)
 0:119            'inF0' (in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child (temp 2-component vector of float)
 0:120          'r022' (temp 2-component vector of float)
-0:120          dPdyFine (global 2-component vector of float)
+0:120          dPdyFine (temp 2-component vector of float)
 0:120            'inF0' (in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child (temp 2-component vector of float)
 0:121          'r023' (temp 2-component vector of float)
-0:121          degrees (global 2-component vector of float)
+0:121          degrees (temp 2-component vector of float)
 0:121            'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp float)
 0:125          'r026' (temp float)
-0:125          distance (global float)
+0:125          distance (temp float)
 0:125            'inF0' (in 2-component vector of float)
 0:125            'inF1' (in 2-component vector of float)
 0:126      Sequence
 0:126        move second child to first child (temp float)
 0:126          'r027' (temp float)
-0:126          dot-product (global float)
+0:126          dot-product (temp float)
 0:126            'inF0' (in 2-component vector of float)
 0:126            'inF1' (in 2-component vector of float)
 0:130      Sequence
 0:130        move second child to first child (temp 2-component vector of float)
 0:130          'r028' (temp 2-component vector of float)
-0:130          exp (global 2-component vector of float)
+0:130          exp (temp 2-component vector of float)
 0:130            'inF0' (in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child (temp 2-component vector of float)
 0:131          'r029' (temp 2-component vector of float)
-0:131          exp2 (global 2-component vector of float)
+0:131          exp2 (temp 2-component vector of float)
 0:131            'inF0' (in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child (temp 2-component vector of float)
 0:132          'r030' (temp 2-component vector of float)
-0:132          face-forward (global 2-component vector of float)
+0:132          face-forward (temp 2-component vector of float)
 0:132            'inF0' (in 2-component vector of float)
 0:132            'inF1' (in 2-component vector of float)
 0:132            'inF2' (in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child (temp 2-component vector of uint)
 0:133          'r031' (temp 2-component vector of uint)
-0:?           findMSB (global 2-component vector of uint)
+0:?           findMSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:134      Sequence
 0:134        move second child to first child (temp 2-component vector of uint)
 0:134          'r032' (temp 2-component vector of uint)
-0:?           findLSB (global 2-component vector of uint)
+0:?           findLSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:135      Sequence
 0:135        move second child to first child (temp 2-component vector of float)
 0:135          'r033' (temp 2-component vector of float)
-0:135          Floor (global 2-component vector of float)
+0:135          Floor (temp 2-component vector of float)
 0:135            'inF0' (in 2-component vector of float)
 0:137      Sequence
 0:137        move second child to first child (temp 2-component vector of float)
 0:137          'r035' (temp 2-component vector of float)
-0:137          mod (global 2-component vector of float)
+0:137          mod (temp 2-component vector of float)
 0:137            'inF0' (in 2-component vector of float)
 0:137            'inF1' (in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child (temp 2-component vector of float)
 0:138          'r036' (temp 2-component vector of float)
-0:138          Fraction (global 2-component vector of float)
+0:138          Fraction (temp 2-component vector of float)
 0:138            'inF0' (in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child (temp 2-component vector of float)
 0:139          'r037' (temp 2-component vector of float)
-0:139          frexp (global 2-component vector of float)
+0:139          frexp (temp 2-component vector of float)
 0:139            'inF0' (in 2-component vector of float)
 0:139            'inF1' (in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child (temp 2-component vector of float)
 0:140          'r038' (temp 2-component vector of float)
-0:140          fwidth (global 2-component vector of float)
+0:140          fwidth (temp 2-component vector of float)
 0:140            'inF0' (in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child (temp 2-component vector of bool)
 0:141          'r039' (temp 2-component vector of bool)
-0:141          isinf (global 2-component vector of bool)
+0:141          isinf (temp 2-component vector of bool)
 0:141            'inF0' (in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child (temp 2-component vector of bool)
 0:142          'r040' (temp 2-component vector of bool)
-0:142          isnan (global 2-component vector of bool)
+0:142          isnan (temp 2-component vector of bool)
 0:142            'inF0' (in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child (temp 2-component vector of float)
 0:143          'r041' (temp 2-component vector of float)
-0:143          ldexp (global 2-component vector of float)
+0:143          ldexp (temp 2-component vector of float)
 0:143            'inF0' (in 2-component vector of float)
 0:143            'inF1' (in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child (temp 2-component vector of float)
 0:144          'r039a' (temp 2-component vector of float)
-0:144          mix (global 2-component vector of float)
+0:144          mix (temp 2-component vector of float)
 0:144            'inF0' (in 2-component vector of float)
 0:144            'inF1' (in 2-component vector of float)
 0:144            'inF2' (in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child (temp float)
 0:145          'r042' (temp float)
-0:145          length (global float)
+0:145          length (temp float)
 0:145            'inF0' (in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child (temp 2-component vector of float)
 0:146          'r043' (temp 2-component vector of float)
-0:146          log (global 2-component vector of float)
+0:146          log (temp 2-component vector of float)
 0:146            'inF0' (in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child (temp 2-component vector of float)
@@ -3396,35 +3398,35 @@ gl_FragCoord origin is upper left
 0:148      Sequence
 0:148        move second child to first child (temp 2-component vector of float)
 0:148          'r045' (temp 2-component vector of float)
-0:148          log2 (global 2-component vector of float)
+0:148          log2 (temp 2-component vector of float)
 0:148            'inF0' (in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child (temp 2-component vector of float)
 0:149          'r046' (temp 2-component vector of float)
-0:149          max (global 2-component vector of float)
+0:149          max (temp 2-component vector of float)
 0:149            'inF0' (in 2-component vector of float)
 0:149            'inF1' (in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child (temp 2-component vector of float)
 0:150          'r047' (temp 2-component vector of float)
-0:150          min (global 2-component vector of float)
+0:150          min (temp 2-component vector of float)
 0:150            'inF0' (in 2-component vector of float)
 0:150            'inF1' (in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child (temp 2-component vector of float)
 0:151          'r048' (temp 2-component vector of float)
-0:151          normalize (global 2-component vector of float)
+0:151          normalize (temp 2-component vector of float)
 0:151            'inF0' (in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child (temp 2-component vector of float)
 0:152          'r049' (temp 2-component vector of float)
-0:152          pow (global 2-component vector of float)
+0:152          pow (temp 2-component vector of float)
 0:152            'inF0' (in 2-component vector of float)
 0:152            'inF1' (in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child (temp 2-component vector of float)
 0:153          'r050' (temp 2-component vector of float)
-0:153          radians (global 2-component vector of float)
+0:153          radians (temp 2-component vector of float)
 0:153            'inF0' (in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child (temp 2-component vector of float)
@@ -3436,13 +3438,13 @@ gl_FragCoord origin is upper left
 0:155      Sequence
 0:155        move second child to first child (temp 2-component vector of float)
 0:155          'r052' (temp 2-component vector of float)
-0:155          reflect (global 2-component vector of float)
+0:155          reflect (temp 2-component vector of float)
 0:155            'inF0' (in 2-component vector of float)
 0:155            'inF1' (in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child (temp 2-component vector of float)
 0:156          'r053' (temp 2-component vector of float)
-0:156          refract (global 2-component vector of float)
+0:156          refract (temp 2-component vector of float)
 0:156            'inF0' (in 2-component vector of float)
 0:156            'inF1' (in 2-component vector of float)
 0:156            Constant:
@@ -3450,19 +3452,19 @@ gl_FragCoord origin is upper left
 0:157      Sequence
 0:157        move second child to first child (temp 2-component vector of uint)
 0:157          'r054' (temp 2-component vector of uint)
-0:?           bitFieldReverse (global 2-component vector of uint)
+0:?           bitFieldReverse (temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:158      Sequence
 0:158        move second child to first child (temp 2-component vector of float)
 0:158          'r055' (temp 2-component vector of float)
-0:158          roundEven (global 2-component vector of float)
+0:158          roundEven (temp 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child (temp 2-component vector of float)
 0:159          'r056' (temp 2-component vector of float)
-0:159          inverse sqrt (global 2-component vector of float)
+0:159          inverse sqrt (temp 2-component vector of float)
 0:159            'inF0' (in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child (temp 2-component vector of float)
@@ -3476,12 +3478,12 @@ gl_FragCoord origin is upper left
 0:161      Sequence
 0:161        move second child to first child (temp 2-component vector of float)
 0:161          'r058' (temp 2-component vector of float)
-0:161          Sign (global 2-component vector of float)
+0:161          Sign (temp 2-component vector of float)
 0:161            'inF0' (in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child (temp 2-component vector of float)
 0:162          'r059' (temp 2-component vector of float)
-0:162          sine (global 2-component vector of float)
+0:162          sine (temp 2-component vector of float)
 0:162            'inF0' (in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child (temp 2-component vector of float)
@@ -3495,46 +3497,46 @@ gl_FragCoord origin is upper left
 0:164      Sequence
 0:164        move second child to first child (temp 2-component vector of float)
 0:164          'r060' (temp 2-component vector of float)
-0:164          hyp. sine (global 2-component vector of float)
+0:164          hyp. sine (temp 2-component vector of float)
 0:164            'inF0' (in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child (temp 2-component vector of float)
 0:165          'r061' (temp 2-component vector of float)
-0:165          smoothstep (global 2-component vector of float)
+0:165          smoothstep (temp 2-component vector of float)
 0:165            'inF0' (in 2-component vector of float)
 0:165            'inF1' (in 2-component vector of float)
 0:165            'inF2' (in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child (temp 2-component vector of float)
 0:166          'r062' (temp 2-component vector of float)
-0:166          sqrt (global 2-component vector of float)
+0:166          sqrt (temp 2-component vector of float)
 0:166            'inF0' (in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child (temp 2-component vector of float)
 0:167          'r063' (temp 2-component vector of float)
-0:167          step (global 2-component vector of float)
+0:167          step (temp 2-component vector of float)
 0:167            'inF0' (in 2-component vector of float)
 0:167            'inF1' (in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child (temp 2-component vector of float)
 0:168          'r064' (temp 2-component vector of float)
-0:168          tangent (global 2-component vector of float)
+0:168          tangent (temp 2-component vector of float)
 0:168            'inF0' (in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child (temp 2-component vector of float)
 0:169          'r065' (temp 2-component vector of float)
-0:169          hyp. tangent (global 2-component vector of float)
+0:169          hyp. tangent (temp 2-component vector of float)
 0:169            'inF0' (in 2-component vector of float)
 0:171      Sequence
 0:171        move second child to first child (temp 2-component vector of float)
 0:171          'r066' (temp 2-component vector of float)
-0:171          trunc (global 2-component vector of float)
+0:171          trunc (temp 2-component vector of float)
 0:171            'inF0' (in 2-component vector of float)
 0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:178    Function Parameters: 
 0:178      'inF0' (in 3-component vector of float)
 0:178      'inF1' (in 3-component vector of float)
@@ -3545,63 +3547,63 @@ gl_FragCoord origin is upper left
 0:181      Sequence
 0:181        move second child to first child (temp bool)
 0:181          'r000' (temp bool)
-0:181          all (global bool)
+0:181          all (temp bool)
 0:181            'inF0' (in 3-component vector of float)
 0:182      Sequence
 0:182        move second child to first child (temp 3-component vector of float)
 0:182          'r001' (temp 3-component vector of float)
-0:182          Absolute value (global 3-component vector of float)
+0:182          Absolute value (temp 3-component vector of float)
 0:182            'inF0' (in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child (temp 3-component vector of float)
 0:183          'r002' (temp 3-component vector of float)
-0:183          arc cosine (global 3-component vector of float)
+0:183          arc cosine (temp 3-component vector of float)
 0:183            'inF0' (in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child (temp bool)
 0:184          'r003' (temp bool)
-0:184          any (global bool)
+0:184          any (temp bool)
 0:184            'inF0' (in 3-component vector of float)
 0:185      Sequence
 0:185        move second child to first child (temp 3-component vector of float)
 0:185          'r004' (temp 3-component vector of float)
-0:185          arc sine (global 3-component vector of float)
+0:185          arc sine (temp 3-component vector of float)
 0:185            'inF0' (in 3-component vector of float)
 0:186      Sequence
 0:186        move second child to first child (temp 3-component vector of int)
 0:186          'r005' (temp 3-component vector of int)
-0:186          floatBitsToInt (global 3-component vector of int)
+0:186          floatBitsToInt (temp 3-component vector of int)
 0:186            'inF0' (in 3-component vector of float)
 0:187      Sequence
 0:187        move second child to first child (temp 3-component vector of uint)
 0:187          'r006' (temp 3-component vector of uint)
-0:187          floatBitsToUint (global 3-component vector of uint)
+0:187          floatBitsToUint (temp 3-component vector of uint)
 0:187            'inF0' (in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child (temp 3-component vector of float)
 0:188          'r007' (temp 3-component vector of float)
-0:188          intBitsToFloat (global 3-component vector of float)
+0:188          intBitsToFloat (temp 3-component vector of float)
 0:188            'inU0' (in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child (temp 3-component vector of float)
 0:190          'r009' (temp 3-component vector of float)
-0:190          arc tangent (global 3-component vector of float)
+0:190          arc tangent (temp 3-component vector of float)
 0:190            'inF0' (in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child (temp 3-component vector of float)
 0:191          'r010' (temp 3-component vector of float)
-0:191          arc tangent (global 3-component vector of float)
+0:191          arc tangent (temp 3-component vector of float)
 0:191            'inF0' (in 3-component vector of float)
 0:191            'inF1' (in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child (temp 3-component vector of float)
 0:192          'r011' (temp 3-component vector of float)
-0:192          Ceiling (global 3-component vector of float)
+0:192          Ceiling (temp 3-component vector of float)
 0:192            'inF0' (in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child (temp 3-component vector of float)
 0:193          'r012' (temp 3-component vector of float)
-0:193          clamp (global 3-component vector of float)
+0:193          clamp (temp 3-component vector of float)
 0:193            'inF0' (in 3-component vector of float)
 0:193            'inF1' (in 3-component vector of float)
 0:193            'inF2' (in 3-component vector of float)
@@ -3619,17 +3621,17 @@ gl_FragCoord origin is upper left
 0:195      Sequence
 0:195        move second child to first child (temp 3-component vector of float)
 0:195          'r013' (temp 3-component vector of float)
-0:195          cosine (global 3-component vector of float)
+0:195          cosine (temp 3-component vector of float)
 0:195            'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
 0:196          'r014' (temp 3-component vector of float)
-0:196          hyp. cosine (global 3-component vector of float)
+0:196          hyp. cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
 0:197      Sequence
 0:197        move second child to first child (temp 3-component vector of uint)
 0:197          'r015' (temp 3-component vector of uint)
-0:?           bitCount (global 3-component vector of uint)
+0:?           bitCount (temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -3637,77 +3639,77 @@ gl_FragCoord origin is upper left
 0:198      Sequence
 0:198        move second child to first child (temp 3-component vector of float)
 0:198          'r016' (temp 3-component vector of float)
-0:198          cross-product (global 3-component vector of float)
+0:198          cross-product (temp 3-component vector of float)
 0:198            'inF0' (in 3-component vector of float)
 0:198            'inF1' (in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child (temp 3-component vector of float)
 0:199          'r017' (temp 3-component vector of float)
-0:199          dPdx (global 3-component vector of float)
+0:199          dPdx (temp 3-component vector of float)
 0:199            'inF0' (in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child (temp 3-component vector of float)
 0:200          'r018' (temp 3-component vector of float)
-0:200          dPdxCoarse (global 3-component vector of float)
+0:200          dPdxCoarse (temp 3-component vector of float)
 0:200            'inF0' (in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child (temp 3-component vector of float)
 0:201          'r019' (temp 3-component vector of float)
-0:201          dPdxFine (global 3-component vector of float)
+0:201          dPdxFine (temp 3-component vector of float)
 0:201            'inF0' (in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child (temp 3-component vector of float)
 0:202          'r020' (temp 3-component vector of float)
-0:202          dPdy (global 3-component vector of float)
+0:202          dPdy (temp 3-component vector of float)
 0:202            'inF0' (in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child (temp 3-component vector of float)
 0:203          'r021' (temp 3-component vector of float)
-0:203          dPdyCoarse (global 3-component vector of float)
+0:203          dPdyCoarse (temp 3-component vector of float)
 0:203            'inF0' (in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child (temp 3-component vector of float)
 0:204          'r022' (temp 3-component vector of float)
-0:204          dPdyFine (global 3-component vector of float)
+0:204          dPdyFine (temp 3-component vector of float)
 0:204            'inF0' (in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child (temp 3-component vector of float)
 0:205          'r023' (temp 3-component vector of float)
-0:205          degrees (global 3-component vector of float)
+0:205          degrees (temp 3-component vector of float)
 0:205            'inF0' (in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child (temp float)
 0:206          'r024' (temp float)
-0:206          distance (global float)
+0:206          distance (temp float)
 0:206            'inF0' (in 3-component vector of float)
 0:206            'inF1' (in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child (temp float)
 0:207          'r025' (temp float)
-0:207          dot-product (global float)
+0:207          dot-product (temp float)
 0:207            'inF0' (in 3-component vector of float)
 0:207            'inF1' (in 3-component vector of float)
 0:211      Sequence
 0:211        move second child to first child (temp 3-component vector of float)
 0:211          'r029' (temp 3-component vector of float)
-0:211          exp (global 3-component vector of float)
+0:211          exp (temp 3-component vector of float)
 0:211            'inF0' (in 3-component vector of float)
 0:212      Sequence
 0:212        move second child to first child (temp 3-component vector of float)
 0:212          'r030' (temp 3-component vector of float)
-0:212          exp2 (global 3-component vector of float)
+0:212          exp2 (temp 3-component vector of float)
 0:212            'inF0' (in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child (temp 3-component vector of float)
 0:213          'r031' (temp 3-component vector of float)
-0:213          face-forward (global 3-component vector of float)
+0:213          face-forward (temp 3-component vector of float)
 0:213            'inF0' (in 3-component vector of float)
 0:213            'inF1' (in 3-component vector of float)
 0:213            'inF2' (in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child (temp 3-component vector of uint)
 0:214          'r032' (temp 3-component vector of uint)
-0:?           findMSB (global 3-component vector of uint)
+0:?           findMSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -3715,7 +3717,7 @@ gl_FragCoord origin is upper left
 0:215      Sequence
 0:215        move second child to first child (temp 3-component vector of uint)
 0:215          'r033' (temp 3-component vector of uint)
-0:?           findLSB (global 3-component vector of uint)
+0:?           findLSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -3723,57 +3725,57 @@ gl_FragCoord origin is upper left
 0:216      Sequence
 0:216        move second child to first child (temp 3-component vector of float)
 0:216          'r034' (temp 3-component vector of float)
-0:216          Floor (global 3-component vector of float)
+0:216          Floor (temp 3-component vector of float)
 0:216            'inF0' (in 3-component vector of float)
 0:218      Sequence
 0:218        move second child to first child (temp 3-component vector of float)
 0:218          'r036' (temp 3-component vector of float)
-0:218          mod (global 3-component vector of float)
+0:218          mod (temp 3-component vector of float)
 0:218            'inF0' (in 3-component vector of float)
 0:218            'inF1' (in 3-component vector of float)
 0:219      Sequence
 0:219        move second child to first child (temp 3-component vector of float)
 0:219          'r037' (temp 3-component vector of float)
-0:219          Fraction (global 3-component vector of float)
+0:219          Fraction (temp 3-component vector of float)
 0:219            'inF0' (in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child (temp 3-component vector of float)
 0:220          'r038' (temp 3-component vector of float)
-0:220          frexp (global 3-component vector of float)
+0:220          frexp (temp 3-component vector of float)
 0:220            'inF0' (in 3-component vector of float)
 0:220            'inF1' (in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child (temp 3-component vector of float)
 0:221          'r039' (temp 3-component vector of float)
-0:221          fwidth (global 3-component vector of float)
+0:221          fwidth (temp 3-component vector of float)
 0:221            'inF0' (in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child (temp 3-component vector of bool)
 0:222          'r040' (temp 3-component vector of bool)
-0:222          isinf (global 3-component vector of bool)
+0:222          isinf (temp 3-component vector of bool)
 0:222            'inF0' (in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child (temp 3-component vector of bool)
 0:223          'r041' (temp 3-component vector of bool)
-0:223          isnan (global 3-component vector of bool)
+0:223          isnan (temp 3-component vector of bool)
 0:223            'inF0' (in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child (temp 3-component vector of float)
 0:224          'r042' (temp 3-component vector of float)
-0:224          ldexp (global 3-component vector of float)
+0:224          ldexp (temp 3-component vector of float)
 0:224            'inF0' (in 3-component vector of float)
 0:224            'inF1' (in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child (temp 3-component vector of float)
 0:225          'r039a' (temp 3-component vector of float)
-0:225          mix (global 3-component vector of float)
+0:225          mix (temp 3-component vector of float)
 0:225            'inF0' (in 3-component vector of float)
 0:225            'inF1' (in 3-component vector of float)
 0:225            'inF2' (in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child (temp 3-component vector of float)
 0:226          'r039b' (temp 3-component vector of float)
-0:226          mix (global 3-component vector of float)
+0:226          mix (temp 3-component vector of float)
 0:226            'inF0' (in 3-component vector of float)
 0:226            'inF1' (in 3-component vector of float)
 0:226            Constant:
@@ -3781,12 +3783,12 @@ gl_FragCoord origin is upper left
 0:227      Sequence
 0:227        move second child to first child (temp float)
 0:227          'r043' (temp float)
-0:227          length (global float)
+0:227          length (temp float)
 0:227            'inF0' (in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child (temp 3-component vector of float)
 0:228          'r044' (temp 3-component vector of float)
-0:228          log (global 3-component vector of float)
+0:228          log (temp 3-component vector of float)
 0:228            'inF0' (in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child (temp 3-component vector of float)
@@ -3799,35 +3801,35 @@ gl_FragCoord origin is upper left
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
 0:230          'r046' (temp 3-component vector of float)
-0:230          log2 (global 3-component vector of float)
+0:230          log2 (temp 3-component vector of float)
 0:230            'inF0' (in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child (temp 3-component vector of float)
 0:231          'r047' (temp 3-component vector of float)
-0:231          max (global 3-component vector of float)
+0:231          max (temp 3-component vector of float)
 0:231            'inF0' (in 3-component vector of float)
 0:231            'inF1' (in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child (temp 3-component vector of float)
 0:232          'r048' (temp 3-component vector of float)
-0:232          min (global 3-component vector of float)
+0:232          min (temp 3-component vector of float)
 0:232            'inF0' (in 3-component vector of float)
 0:232            'inF1' (in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child (temp 3-component vector of float)
 0:233          'r049' (temp 3-component vector of float)
-0:233          normalize (global 3-component vector of float)
+0:233          normalize (temp 3-component vector of float)
 0:233            'inF0' (in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child (temp 3-component vector of float)
 0:234          'r050' (temp 3-component vector of float)
-0:234          pow (global 3-component vector of float)
+0:234          pow (temp 3-component vector of float)
 0:234            'inF0' (in 3-component vector of float)
 0:234            'inF1' (in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child (temp 3-component vector of float)
 0:235          'r051' (temp 3-component vector of float)
-0:235          radians (global 3-component vector of float)
+0:235          radians (temp 3-component vector of float)
 0:235            'inF0' (in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child (temp 3-component vector of float)
@@ -3839,13 +3841,13 @@ gl_FragCoord origin is upper left
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
 0:237          'r053' (temp 3-component vector of float)
-0:237          reflect (global 3-component vector of float)
+0:237          reflect (temp 3-component vector of float)
 0:237            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child (temp 3-component vector of float)
 0:238          'r054' (temp 3-component vector of float)
-0:238          refract (global 3-component vector of float)
+0:238          refract (temp 3-component vector of float)
 0:238            'inF0' (in 3-component vector of float)
 0:238            'inF1' (in 3-component vector of float)
 0:238            Constant:
@@ -3853,7 +3855,7 @@ gl_FragCoord origin is upper left
 0:239      Sequence
 0:239        move second child to first child (temp 3-component vector of uint)
 0:239          'r055' (temp 3-component vector of uint)
-0:?           bitFieldReverse (global 3-component vector of uint)
+0:?           bitFieldReverse (temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -3861,12 +3863,12 @@ gl_FragCoord origin is upper left
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
 0:240          'r056' (temp 3-component vector of float)
-0:240          roundEven (global 3-component vector of float)
+0:240          roundEven (temp 3-component vector of float)
 0:240            'inF0' (in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child (temp 3-component vector of float)
 0:241          'r057' (temp 3-component vector of float)
-0:241          inverse sqrt (global 3-component vector of float)
+0:241          inverse sqrt (temp 3-component vector of float)
 0:241            'inF0' (in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
@@ -3880,12 +3882,12 @@ gl_FragCoord origin is upper left
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
 0:243          'r059' (temp 3-component vector of float)
-0:243          Sign (global 3-component vector of float)
+0:243          Sign (temp 3-component vector of float)
 0:243            'inF0' (in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child (temp 3-component vector of float)
 0:244          'r060' (temp 3-component vector of float)
-0:244          sine (global 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
 0:244            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
@@ -3899,47 +3901,47 @@ gl_FragCoord origin is upper left
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
 0:246          'r061' (temp 3-component vector of float)
-0:246          hyp. sine (global 3-component vector of float)
+0:246          hyp. sine (temp 3-component vector of float)
 0:246            'inF0' (in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child (temp 3-component vector of float)
 0:247          'r062' (temp 3-component vector of float)
-0:247          smoothstep (global 3-component vector of float)
+0:247          smoothstep (temp 3-component vector of float)
 0:247            'inF0' (in 3-component vector of float)
 0:247            'inF1' (in 3-component vector of float)
 0:247            'inF2' (in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child (temp 3-component vector of float)
 0:248          'r063' (temp 3-component vector of float)
-0:248          sqrt (global 3-component vector of float)
+0:248          sqrt (temp 3-component vector of float)
 0:248            'inF0' (in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child (temp 3-component vector of float)
 0:249          'r064' (temp 3-component vector of float)
-0:249          step (global 3-component vector of float)
+0:249          step (temp 3-component vector of float)
 0:249            'inF0' (in 3-component vector of float)
 0:249            'inF1' (in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child (temp 3-component vector of float)
 0:250          'r065' (temp 3-component vector of float)
-0:250          tangent (global 3-component vector of float)
+0:250          tangent (temp 3-component vector of float)
 0:250            'inF0' (in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child (temp 3-component vector of float)
 0:251          'r066' (temp 3-component vector of float)
-0:251          hyp. tangent (global 3-component vector of float)
+0:251          hyp. tangent (temp 3-component vector of float)
 0:251            'inF0' (in 3-component vector of float)
 0:253      Sequence
 0:253        move second child to first child (temp 3-component vector of float)
 0:253          'r067' (temp 3-component vector of float)
-0:253          trunc (global 3-component vector of float)
+0:253          trunc (temp 3-component vector of float)
 0:253            'inF0' (in 3-component vector of float)
 0:256      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:260    Function Parameters: 
 0:260      'inF0' (in 4-component vector of float)
 0:260      'inF1' (in 4-component vector of float)
@@ -3950,63 +3952,63 @@ gl_FragCoord origin is upper left
 0:263      Sequence
 0:263        move second child to first child (temp bool)
 0:263          'r000' (temp bool)
-0:263          all (global bool)
+0:263          all (temp bool)
 0:263            'inF0' (in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child (temp 4-component vector of float)
 0:264          'r001' (temp 4-component vector of float)
-0:264          Absolute value (global 4-component vector of float)
+0:264          Absolute value (temp 4-component vector of float)
 0:264            'inF0' (in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child (temp 4-component vector of float)
 0:265          'r002' (temp 4-component vector of float)
-0:265          arc cosine (global 4-component vector of float)
+0:265          arc cosine (temp 4-component vector of float)
 0:265            'inF0' (in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child (temp bool)
 0:266          'r003' (temp bool)
-0:266          any (global bool)
+0:266          any (temp bool)
 0:266            'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
 0:267          'r004' (temp 4-component vector of float)
-0:267          arc sine (global 4-component vector of float)
+0:267          arc sine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
 0:268      Sequence
 0:268        move second child to first child (temp 4-component vector of int)
 0:268          'r005' (temp 4-component vector of int)
-0:268          floatBitsToInt (global 4-component vector of int)
+0:268          floatBitsToInt (temp 4-component vector of int)
 0:268            'inF0' (in 4-component vector of float)
 0:269      Sequence
 0:269        move second child to first child (temp 4-component vector of uint)
 0:269          'r006' (temp 4-component vector of uint)
-0:269          floatBitsToUint (global 4-component vector of uint)
+0:269          floatBitsToUint (temp 4-component vector of uint)
 0:269            'inF0' (in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child (temp 4-component vector of float)
 0:270          'r007' (temp 4-component vector of float)
-0:270          intBitsToFloat (global 4-component vector of float)
+0:270          intBitsToFloat (temp 4-component vector of float)
 0:270            'inU0' (in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child (temp 4-component vector of float)
 0:272          'r009' (temp 4-component vector of float)
-0:272          arc tangent (global 4-component vector of float)
+0:272          arc tangent (temp 4-component vector of float)
 0:272            'inF0' (in 4-component vector of float)
 0:273      Sequence
 0:273        move second child to first child (temp 4-component vector of float)
 0:273          'r010' (temp 4-component vector of float)
-0:273          arc tangent (global 4-component vector of float)
+0:273          arc tangent (temp 4-component vector of float)
 0:273            'inF0' (in 4-component vector of float)
 0:273            'inF1' (in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child (temp 4-component vector of float)
 0:274          'r011' (temp 4-component vector of float)
-0:274          Ceiling (global 4-component vector of float)
+0:274          Ceiling (temp 4-component vector of float)
 0:274            'inF0' (in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child (temp 4-component vector of float)
 0:275          'r012' (temp 4-component vector of float)
-0:275          clamp (global 4-component vector of float)
+0:275          clamp (temp 4-component vector of float)
 0:275            'inF0' (in 4-component vector of float)
 0:275            'inF1' (in 4-component vector of float)
 0:275            'inF2' (in 4-component vector of float)
@@ -4025,17 +4027,17 @@ gl_FragCoord origin is upper left
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
 0:277          'r013' (temp 4-component vector of float)
-0:277          cosine (global 4-component vector of float)
+0:277          cosine (temp 4-component vector of float)
 0:277            'inF0' (in 4-component vector of float)
 0:278      Sequence
 0:278        move second child to first child (temp 4-component vector of float)
 0:278          'r014' (temp 4-component vector of float)
-0:278          hyp. cosine (global 4-component vector of float)
+0:278          hyp. cosine (temp 4-component vector of float)
 0:278            'inF0' (in 4-component vector of float)
 0:279      Sequence
 0:279        move second child to first child (temp 4-component vector of uint)
 0:279          'r015' (temp 4-component vector of uint)
-0:?           bitCount (global 4-component vector of uint)
+0:?           bitCount (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -4044,48 +4046,48 @@ gl_FragCoord origin is upper left
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
 0:280          'r016' (temp 4-component vector of float)
-0:280          dPdx (global 4-component vector of float)
+0:280          dPdx (temp 4-component vector of float)
 0:280            'inF0' (in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child (temp 4-component vector of float)
 0:281          'r017' (temp 4-component vector of float)
-0:281          dPdxCoarse (global 4-component vector of float)
+0:281          dPdxCoarse (temp 4-component vector of float)
 0:281            'inF0' (in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child (temp 4-component vector of float)
 0:282          'r018' (temp 4-component vector of float)
-0:282          dPdxFine (global 4-component vector of float)
+0:282          dPdxFine (temp 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child (temp 4-component vector of float)
 0:283          'r019' (temp 4-component vector of float)
-0:283          dPdy (global 4-component vector of float)
+0:283          dPdy (temp 4-component vector of float)
 0:283            'inF0' (in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child (temp 4-component vector of float)
 0:284          'r020' (temp 4-component vector of float)
-0:284          dPdyCoarse (global 4-component vector of float)
+0:284          dPdyCoarse (temp 4-component vector of float)
 0:284            'inF0' (in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child (temp 4-component vector of float)
 0:285          'r021' (temp 4-component vector of float)
-0:285          dPdyFine (global 4-component vector of float)
+0:285          dPdyFine (temp 4-component vector of float)
 0:285            'inF0' (in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child (temp 4-component vector of float)
 0:286          'r022' (temp 4-component vector of float)
-0:286          degrees (global 4-component vector of float)
+0:286          degrees (temp 4-component vector of float)
 0:286            'inF0' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
 0:287          'r023' (temp float)
-0:287          distance (global float)
+0:287          distance (temp float)
 0:287            'inF0' (in 4-component vector of float)
 0:287            'inF1' (in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child (temp float)
 0:288          'r024' (temp float)
-0:288          dot-product (global float)
+0:288          dot-product (temp float)
 0:288            'inF0' (in 4-component vector of float)
 0:288            'inF1' (in 4-component vector of float)
 0:289      Sequence
@@ -4114,24 +4116,24 @@ gl_FragCoord origin is upper left
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
 0:293          'r029' (temp 4-component vector of float)
-0:293          exp (global 4-component vector of float)
+0:293          exp (temp 4-component vector of float)
 0:293            'inF0' (in 4-component vector of float)
 0:294      Sequence
 0:294        move second child to first child (temp 4-component vector of float)
 0:294          'r030' (temp 4-component vector of float)
-0:294          exp2 (global 4-component vector of float)
+0:294          exp2 (temp 4-component vector of float)
 0:294            'inF0' (in 4-component vector of float)
 0:295      Sequence
 0:295        move second child to first child (temp 4-component vector of float)
 0:295          'r031' (temp 4-component vector of float)
-0:295          face-forward (global 4-component vector of float)
+0:295          face-forward (temp 4-component vector of float)
 0:295            'inF0' (in 4-component vector of float)
 0:295            'inF1' (in 4-component vector of float)
 0:295            'inF2' (in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child (temp 4-component vector of uint)
 0:296          'r032' (temp 4-component vector of uint)
-0:?           findMSB (global 4-component vector of uint)
+0:?           findMSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -4140,7 +4142,7 @@ gl_FragCoord origin is upper left
 0:297      Sequence
 0:297        move second child to first child (temp 4-component vector of uint)
 0:297          'r033' (temp 4-component vector of uint)
-0:?           findLSB (global 4-component vector of uint)
+0:?           findLSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -4149,62 +4151,62 @@ gl_FragCoord origin is upper left
 0:298      Sequence
 0:298        move second child to first child (temp 4-component vector of float)
 0:298          'r034' (temp 4-component vector of float)
-0:298          Floor (global 4-component vector of float)
+0:298          Floor (temp 4-component vector of float)
 0:298            'inF0' (in 4-component vector of float)
 0:300      Sequence
 0:300        move second child to first child (temp 4-component vector of float)
 0:300          'r036' (temp 4-component vector of float)
-0:300          mod (global 4-component vector of float)
+0:300          mod (temp 4-component vector of float)
 0:300            'inF0' (in 4-component vector of float)
 0:300            'inF1' (in 4-component vector of float)
 0:301      Sequence
 0:301        move second child to first child (temp 4-component vector of float)
 0:301          'r037' (temp 4-component vector of float)
-0:301          Fraction (global 4-component vector of float)
+0:301          Fraction (temp 4-component vector of float)
 0:301            'inF0' (in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child (temp 4-component vector of float)
 0:302          'r038' (temp 4-component vector of float)
-0:302          frexp (global 4-component vector of float)
+0:302          frexp (temp 4-component vector of float)
 0:302            'inF0' (in 4-component vector of float)
 0:302            'inF1' (in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child (temp 4-component vector of float)
 0:303          'r039' (temp 4-component vector of float)
-0:303          fwidth (global 4-component vector of float)
+0:303          fwidth (temp 4-component vector of float)
 0:303            'inF0' (in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child (temp 4-component vector of bool)
 0:304          'r040' (temp 4-component vector of bool)
-0:304          isinf (global 4-component vector of bool)
+0:304          isinf (temp 4-component vector of bool)
 0:304            'inF0' (in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child (temp 4-component vector of bool)
 0:305          'r041' (temp 4-component vector of bool)
-0:305          isnan (global 4-component vector of bool)
+0:305          isnan (temp 4-component vector of bool)
 0:305            'inF0' (in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child (temp 4-component vector of float)
 0:306          'r042' (temp 4-component vector of float)
-0:306          ldexp (global 4-component vector of float)
+0:306          ldexp (temp 4-component vector of float)
 0:306            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child (temp 4-component vector of float)
 0:307          'r039a' (temp 4-component vector of float)
-0:307          mix (global 4-component vector of float)
+0:307          mix (temp 4-component vector of float)
 0:307            'inF0' (in 4-component vector of float)
 0:307            'inF1' (in 4-component vector of float)
 0:307            'inF2' (in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child (temp float)
 0:308          'r043' (temp float)
-0:308          length (global float)
+0:308          length (temp float)
 0:308            'inF0' (in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child (temp 4-component vector of float)
 0:309          'r044' (temp 4-component vector of float)
-0:309          log (global 4-component vector of float)
+0:309          log (temp 4-component vector of float)
 0:309            'inF0' (in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child (temp 4-component vector of float)
@@ -4217,35 +4219,35 @@ gl_FragCoord origin is upper left
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
 0:311          'r046' (temp 4-component vector of float)
-0:311          log2 (global 4-component vector of float)
+0:311          log2 (temp 4-component vector of float)
 0:311            'inF0' (in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child (temp 4-component vector of float)
 0:312          'r047' (temp 4-component vector of float)
-0:312          max (global 4-component vector of float)
+0:312          max (temp 4-component vector of float)
 0:312            'inF0' (in 4-component vector of float)
 0:312            'inF1' (in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child (temp 4-component vector of float)
 0:313          'r048' (temp 4-component vector of float)
-0:313          min (global 4-component vector of float)
+0:313          min (temp 4-component vector of float)
 0:313            'inF0' (in 4-component vector of float)
 0:313            'inF1' (in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child (temp 4-component vector of float)
 0:314          'r049' (temp 4-component vector of float)
-0:314          normalize (global 4-component vector of float)
+0:314          normalize (temp 4-component vector of float)
 0:314            'inF0' (in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child (temp 4-component vector of float)
 0:315          'r050' (temp 4-component vector of float)
-0:315          pow (global 4-component vector of float)
+0:315          pow (temp 4-component vector of float)
 0:315            'inF0' (in 4-component vector of float)
 0:315            'inF1' (in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child (temp 4-component vector of float)
 0:316          'r051' (temp 4-component vector of float)
-0:316          radians (global 4-component vector of float)
+0:316          radians (temp 4-component vector of float)
 0:316            'inF0' (in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child (temp 4-component vector of float)
@@ -4257,13 +4259,13 @@ gl_FragCoord origin is upper left
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
 0:318          'r053' (temp 4-component vector of float)
-0:318          reflect (global 4-component vector of float)
+0:318          reflect (temp 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child (temp 4-component vector of float)
 0:319          'r054' (temp 4-component vector of float)
-0:319          refract (global 4-component vector of float)
+0:319          refract (temp 4-component vector of float)
 0:319            'inF0' (in 4-component vector of float)
 0:319            'inF1' (in 4-component vector of float)
 0:319            Constant:
@@ -4271,7 +4273,7 @@ gl_FragCoord origin is upper left
 0:320      Sequence
 0:320        move second child to first child (temp 4-component vector of uint)
 0:320          'r055' (temp 4-component vector of uint)
-0:?           bitFieldReverse (global 4-component vector of uint)
+0:?           bitFieldReverse (temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -4280,12 +4282,12 @@ gl_FragCoord origin is upper left
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
 0:321          'r056' (temp 4-component vector of float)
-0:321          roundEven (global 4-component vector of float)
+0:321          roundEven (temp 4-component vector of float)
 0:321            'inF0' (in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child (temp 4-component vector of float)
 0:322          'r057' (temp 4-component vector of float)
-0:322          inverse sqrt (global 4-component vector of float)
+0:322          inverse sqrt (temp 4-component vector of float)
 0:322            'inF0' (in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
@@ -4299,12 +4301,12 @@ gl_FragCoord origin is upper left
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
 0:324          'r059' (temp 4-component vector of float)
-0:324          Sign (global 4-component vector of float)
+0:324          Sign (temp 4-component vector of float)
 0:324            'inF0' (in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child (temp 4-component vector of float)
 0:325          'r060' (temp 4-component vector of float)
-0:325          sine (global 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
 0:325            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
@@ -4318,40 +4320,40 @@ gl_FragCoord origin is upper left
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
 0:327          'r061' (temp 4-component vector of float)
-0:327          hyp. sine (global 4-component vector of float)
+0:327          hyp. sine (temp 4-component vector of float)
 0:327            'inF0' (in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child (temp 4-component vector of float)
 0:328          'r062' (temp 4-component vector of float)
-0:328          smoothstep (global 4-component vector of float)
+0:328          smoothstep (temp 4-component vector of float)
 0:328            'inF0' (in 4-component vector of float)
 0:328            'inF1' (in 4-component vector of float)
 0:328            'inF2' (in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child (temp 4-component vector of float)
 0:329          'r063' (temp 4-component vector of float)
-0:329          sqrt (global 4-component vector of float)
+0:329          sqrt (temp 4-component vector of float)
 0:329            'inF0' (in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child (temp 4-component vector of float)
 0:330          'r064' (temp 4-component vector of float)
-0:330          step (global 4-component vector of float)
+0:330          step (temp 4-component vector of float)
 0:330            'inF0' (in 4-component vector of float)
 0:330            'inF1' (in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child (temp 4-component vector of float)
 0:331          'r065' (temp 4-component vector of float)
-0:331          tangent (global 4-component vector of float)
+0:331          tangent (temp 4-component vector of float)
 0:331            'inF0' (in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child (temp 4-component vector of float)
 0:332          'r066' (temp 4-component vector of float)
-0:332          hyp. tangent (global 4-component vector of float)
+0:332          hyp. tangent (temp 4-component vector of float)
 0:332            'inF0' (in 4-component vector of float)
 0:334      Sequence
 0:334        move second child to first child (temp 4-component vector of float)
 0:334          'r067' (temp 4-component vector of float)
-0:334          trunc (global 4-component vector of float)
+0:334          trunc (temp 4-component vector of float)
 0:334            'inF0' (in 4-component vector of float)
 0:337      Branch: Return with expression
 0:?         Constant:
@@ -4359,7 +4361,7 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:401    Function Parameters: 
 0:401      'inF0' (in 2X2 matrix of float)
 0:401      'inF1' (in 2X2 matrix of float)
@@ -4368,40 +4370,40 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r000' (temp bool)
-0:403          all (global bool)
+0:403          all (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r001' (temp 2X2 matrix of float)
-0:403          Absolute value (global 2X2 matrix of float)
+0:403          Absolute value (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      arc cosine (global 2X2 matrix of float)
+0:403      arc cosine (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r003' (temp bool)
-0:403          any (global bool)
+0:403          any (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r004' (temp 2X2 matrix of float)
-0:403          arc sine (global 2X2 matrix of float)
+0:403          arc sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r005' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r006' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r007' (temp 2X2 matrix of float)
-0:403          Ceiling (global 2X2 matrix of float)
+0:403          Ceiling (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Test condition and select (temp void)
 0:403        Condition
@@ -4418,114 +4420,114 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r008' (temp 2X2 matrix of float)
-0:403          clamp (global 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r009' (temp 2X2 matrix of float)
-0:403          cosine (global 2X2 matrix of float)
+0:403          cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r010' (temp 2X2 matrix of float)
-0:403          hyp. cosine (global 2X2 matrix of float)
+0:403          hyp. cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r011' (temp 2X2 matrix of float)
-0:403          dPdx (global 2X2 matrix of float)
+0:403          dPdx (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r012' (temp 2X2 matrix of float)
-0:403          dPdxCoarse (global 2X2 matrix of float)
+0:403          dPdxCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r013' (temp 2X2 matrix of float)
-0:403          dPdxFine (global 2X2 matrix of float)
+0:403          dPdxFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r014' (temp 2X2 matrix of float)
-0:403          dPdy (global 2X2 matrix of float)
+0:403          dPdy (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r015' (temp 2X2 matrix of float)
-0:403          dPdyCoarse (global 2X2 matrix of float)
+0:403          dPdyCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r016' (temp 2X2 matrix of float)
-0:403          dPdyFine (global 2X2 matrix of float)
+0:403          dPdyFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r017' (temp 2X2 matrix of float)
-0:403          degrees (global 2X2 matrix of float)
+0:403          degrees (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp float)
 0:403          'r018' (temp float)
-0:403          determinant (global float)
+0:403          determinant (temp float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r019' (temp 2X2 matrix of float)
-0:403          exp (global 2X2 matrix of float)
+0:403          exp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'R020' (temp 2X2 matrix of float)
-0:403          exp2 (global 2X2 matrix of float)
+0:403          exp2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r021' (temp 2X2 matrix of float)
-0:403          Floor (global 2X2 matrix of float)
+0:403          Floor (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r022' (temp 2X2 matrix of float)
-0:403          mod (global 2X2 matrix of float)
+0:403          mod (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r023' (temp 2X2 matrix of float)
-0:403          Fraction (global 2X2 matrix of float)
+0:403          Fraction (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r024' (temp 2X2 matrix of float)
-0:403          frexp (global 2X2 matrix of float)
+0:403          frexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r025' (temp 2X2 matrix of float)
-0:403          fwidth (global 2X2 matrix of float)
+0:403          fwidth (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026' (temp 2X2 matrix of float)
-0:403          ldexp (global 2X2 matrix of float)
+0:403          ldexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026a' (temp 2X2 matrix of float)
-0:403          mix (global 2X2 matrix of float)
+0:403          mix (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r027' (temp 2X2 matrix of float)
-0:403          log (global 2X2 matrix of float)
+0:403          log (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4538,40 +4540,40 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r029' (temp 2X2 matrix of float)
-0:403          log2 (global 2X2 matrix of float)
+0:403          log2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r030' (temp 2X2 matrix of float)
-0:403          max (global 2X2 matrix of float)
+0:403          max (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r031' (temp 2X2 matrix of float)
-0:403          min (global 2X2 matrix of float)
+0:403          min (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r032' (temp 2X2 matrix of float)
-0:403          pow (global 2X2 matrix of float)
+0:403          pow (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r033' (temp 2X2 matrix of float)
-0:403          radians (global 2X2 matrix of float)
+0:403          radians (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r034' (temp 2X2 matrix of float)
-0:403          roundEven (global 2X2 matrix of float)
+0:403          roundEven (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r035' (temp 2X2 matrix of float)
-0:403          inverse sqrt (global 2X2 matrix of float)
+0:403          inverse sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4585,12 +4587,12 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r037' (temp 2X2 matrix of float)
-0:403          Sign (global 2X2 matrix of float)
+0:403          Sign (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r038' (temp 2X2 matrix of float)
-0:403          sine (global 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4604,42 +4606,42 @@ gl_FragCoord origin is upper left
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r039' (temp 2X2 matrix of float)
-0:403          hyp. sine (global 2X2 matrix of float)
+0:403          hyp. sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r049' (temp 2X2 matrix of float)
-0:403          smoothstep (global 2X2 matrix of float)
+0:403          smoothstep (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r041' (temp 2X2 matrix of float)
-0:403          sqrt (global 2X2 matrix of float)
+0:403          sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r042' (temp 2X2 matrix of float)
-0:403          step (global 2X2 matrix of float)
+0:403          step (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r043' (temp 2X2 matrix of float)
-0:403          tangent (global 2X2 matrix of float)
+0:403          tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r044' (temp 2X2 matrix of float)
-0:403          hyp. tangent (global 2X2 matrix of float)
+0:403          hyp. tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      transpose (global 2X2 matrix of float)
+0:403      transpose (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r046' (temp 2X2 matrix of float)
-0:403          trunc (global 2X2 matrix of float)
+0:403          trunc (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:406      Branch: Return with expression
 0:?         Constant:
@@ -4647,7 +4649,7 @@ gl_FragCoord origin is upper left
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:410    Function Parameters: 
 0:410      'inF0' (in 3X3 matrix of float)
 0:410      'inF1' (in 3X3 matrix of float)
@@ -4656,40 +4658,40 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r000' (temp bool)
-0:412          all (global bool)
+0:412          all (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r001' (temp 3X3 matrix of float)
-0:412          Absolute value (global 3X3 matrix of float)
+0:412          Absolute value (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      arc cosine (global 3X3 matrix of float)
+0:412      arc cosine (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r003' (temp bool)
-0:412          any (global bool)
+0:412          any (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r004' (temp 3X3 matrix of float)
-0:412          arc sine (global 3X3 matrix of float)
+0:412          arc sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r005' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r006' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r007' (temp 3X3 matrix of float)
-0:412          Ceiling (global 3X3 matrix of float)
+0:412          Ceiling (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Test condition and select (temp void)
 0:412        Condition
@@ -4711,114 +4713,114 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r008' (temp 3X3 matrix of float)
-0:412          clamp (global 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r009' (temp 3X3 matrix of float)
-0:412          cosine (global 3X3 matrix of float)
+0:412          cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r010' (temp 3X3 matrix of float)
-0:412          hyp. cosine (global 3X3 matrix of float)
+0:412          hyp. cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r011' (temp 3X3 matrix of float)
-0:412          dPdx (global 3X3 matrix of float)
+0:412          dPdx (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r012' (temp 3X3 matrix of float)
-0:412          dPdxCoarse (global 3X3 matrix of float)
+0:412          dPdxCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r013' (temp 3X3 matrix of float)
-0:412          dPdxFine (global 3X3 matrix of float)
+0:412          dPdxFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r014' (temp 3X3 matrix of float)
-0:412          dPdy (global 3X3 matrix of float)
+0:412          dPdy (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r015' (temp 3X3 matrix of float)
-0:412          dPdyCoarse (global 3X3 matrix of float)
+0:412          dPdyCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r016' (temp 3X3 matrix of float)
-0:412          dPdyFine (global 3X3 matrix of float)
+0:412          dPdyFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r017' (temp 3X3 matrix of float)
-0:412          degrees (global 3X3 matrix of float)
+0:412          degrees (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp float)
 0:412          'r018' (temp float)
-0:412          determinant (global float)
+0:412          determinant (temp float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r019' (temp 3X3 matrix of float)
-0:412          exp (global 3X3 matrix of float)
+0:412          exp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'R020' (temp 3X3 matrix of float)
-0:412          exp2 (global 3X3 matrix of float)
+0:412          exp2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r021' (temp 3X3 matrix of float)
-0:412          Floor (global 3X3 matrix of float)
+0:412          Floor (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r022' (temp 3X3 matrix of float)
-0:412          mod (global 3X3 matrix of float)
+0:412          mod (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r023' (temp 3X3 matrix of float)
-0:412          Fraction (global 3X3 matrix of float)
+0:412          Fraction (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r024' (temp 3X3 matrix of float)
-0:412          frexp (global 3X3 matrix of float)
+0:412          frexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r025' (temp 3X3 matrix of float)
-0:412          fwidth (global 3X3 matrix of float)
+0:412          fwidth (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026' (temp 3X3 matrix of float)
-0:412          ldexp (global 3X3 matrix of float)
+0:412          ldexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026a' (temp 3X3 matrix of float)
-0:412          mix (global 3X3 matrix of float)
+0:412          mix (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r027' (temp 3X3 matrix of float)
-0:412          log (global 3X3 matrix of float)
+0:412          log (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4831,40 +4833,40 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r029' (temp 3X3 matrix of float)
-0:412          log2 (global 3X3 matrix of float)
+0:412          log2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r030' (temp 3X3 matrix of float)
-0:412          max (global 3X3 matrix of float)
+0:412          max (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r031' (temp 3X3 matrix of float)
-0:412          min (global 3X3 matrix of float)
+0:412          min (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r032' (temp 3X3 matrix of float)
-0:412          pow (global 3X3 matrix of float)
+0:412          pow (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r033' (temp 3X3 matrix of float)
-0:412          radians (global 3X3 matrix of float)
+0:412          radians (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r034' (temp 3X3 matrix of float)
-0:412          roundEven (global 3X3 matrix of float)
+0:412          roundEven (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r035' (temp 3X3 matrix of float)
-0:412          inverse sqrt (global 3X3 matrix of float)
+0:412          inverse sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4878,12 +4880,12 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r037' (temp 3X3 matrix of float)
-0:412          Sign (global 3X3 matrix of float)
+0:412          Sign (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r038' (temp 3X3 matrix of float)
-0:412          sine (global 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4897,42 +4899,42 @@ gl_FragCoord origin is upper left
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r039' (temp 3X3 matrix of float)
-0:412          hyp. sine (global 3X3 matrix of float)
+0:412          hyp. sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r049' (temp 3X3 matrix of float)
-0:412          smoothstep (global 3X3 matrix of float)
+0:412          smoothstep (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r041' (temp 3X3 matrix of float)
-0:412          sqrt (global 3X3 matrix of float)
+0:412          sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r042' (temp 3X3 matrix of float)
-0:412          step (global 3X3 matrix of float)
+0:412          step (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r043' (temp 3X3 matrix of float)
-0:412          tangent (global 3X3 matrix of float)
+0:412          tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r044' (temp 3X3 matrix of float)
-0:412          hyp. tangent (global 3X3 matrix of float)
+0:412          hyp. tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      transpose (global 3X3 matrix of float)
+0:412      transpose (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r046' (temp 3X3 matrix of float)
-0:412          trunc (global 3X3 matrix of float)
+0:412          trunc (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:415      Branch: Return with expression
 0:?         Constant:
@@ -4945,7 +4947,7 @@ gl_FragCoord origin is upper left
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:419    Function Parameters: 
 0:419      'inF0' (in 4X4 matrix of float)
 0:419      'inF1' (in 4X4 matrix of float)
@@ -4954,40 +4956,40 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r000' (temp bool)
-0:421          all (global bool)
+0:421          all (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r001' (temp 4X4 matrix of float)
-0:421          Absolute value (global 4X4 matrix of float)
+0:421          Absolute value (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      arc cosine (global 4X4 matrix of float)
+0:421      arc cosine (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r003' (temp bool)
-0:421          any (global bool)
+0:421          any (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r004' (temp 4X4 matrix of float)
-0:421          arc sine (global 4X4 matrix of float)
+0:421          arc sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r005' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r006' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r007' (temp 4X4 matrix of float)
-0:421          Ceiling (global 4X4 matrix of float)
+0:421          Ceiling (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Test condition and select (temp void)
 0:421        Condition
@@ -5016,114 +5018,114 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r008' (temp 4X4 matrix of float)
-0:421          clamp (global 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r009' (temp 4X4 matrix of float)
-0:421          cosine (global 4X4 matrix of float)
+0:421          cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r010' (temp 4X4 matrix of float)
-0:421          hyp. cosine (global 4X4 matrix of float)
+0:421          hyp. cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r011' (temp 4X4 matrix of float)
-0:421          dPdx (global 4X4 matrix of float)
+0:421          dPdx (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r012' (temp 4X4 matrix of float)
-0:421          dPdxCoarse (global 4X4 matrix of float)
+0:421          dPdxCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r013' (temp 4X4 matrix of float)
-0:421          dPdxFine (global 4X4 matrix of float)
+0:421          dPdxFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r014' (temp 4X4 matrix of float)
-0:421          dPdy (global 4X4 matrix of float)
+0:421          dPdy (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r015' (temp 4X4 matrix of float)
-0:421          dPdyCoarse (global 4X4 matrix of float)
+0:421          dPdyCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r016' (temp 4X4 matrix of float)
-0:421          dPdyFine (global 4X4 matrix of float)
+0:421          dPdyFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r017' (temp 4X4 matrix of float)
-0:421          degrees (global 4X4 matrix of float)
+0:421          degrees (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp float)
 0:421          'r018' (temp float)
-0:421          determinant (global float)
+0:421          determinant (temp float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r019' (temp 4X4 matrix of float)
-0:421          exp (global 4X4 matrix of float)
+0:421          exp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'R020' (temp 4X4 matrix of float)
-0:421          exp2 (global 4X4 matrix of float)
+0:421          exp2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r021' (temp 4X4 matrix of float)
-0:421          Floor (global 4X4 matrix of float)
+0:421          Floor (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r022' (temp 4X4 matrix of float)
-0:421          mod (global 4X4 matrix of float)
+0:421          mod (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r023' (temp 4X4 matrix of float)
-0:421          Fraction (global 4X4 matrix of float)
+0:421          Fraction (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r024' (temp 4X4 matrix of float)
-0:421          frexp (global 4X4 matrix of float)
+0:421          frexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r025' (temp 4X4 matrix of float)
-0:421          fwidth (global 4X4 matrix of float)
+0:421          fwidth (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026' (temp 4X4 matrix of float)
-0:421          ldexp (global 4X4 matrix of float)
+0:421          ldexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026a' (temp 4X4 matrix of float)
-0:421          mix (global 4X4 matrix of float)
+0:421          mix (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r027' (temp 4X4 matrix of float)
-0:421          log (global 4X4 matrix of float)
+0:421          log (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5136,40 +5138,40 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r029' (temp 4X4 matrix of float)
-0:421          log2 (global 4X4 matrix of float)
+0:421          log2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r030' (temp 4X4 matrix of float)
-0:421          max (global 4X4 matrix of float)
+0:421          max (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r031' (temp 4X4 matrix of float)
-0:421          min (global 4X4 matrix of float)
+0:421          min (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r032' (temp 4X4 matrix of float)
-0:421          pow (global 4X4 matrix of float)
+0:421          pow (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r033' (temp 4X4 matrix of float)
-0:421          radians (global 4X4 matrix of float)
+0:421          radians (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r034' (temp 4X4 matrix of float)
-0:421          roundEven (global 4X4 matrix of float)
+0:421          roundEven (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r035' (temp 4X4 matrix of float)
-0:421          inverse sqrt (global 4X4 matrix of float)
+0:421          inverse sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5183,12 +5185,12 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r037' (temp 4X4 matrix of float)
-0:421          Sign (global 4X4 matrix of float)
+0:421          Sign (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r038' (temp 4X4 matrix of float)
-0:421          sine (global 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5202,42 +5204,42 @@ gl_FragCoord origin is upper left
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r039' (temp 4X4 matrix of float)
-0:421          hyp. sine (global 4X4 matrix of float)
+0:421          hyp. sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r049' (temp 4X4 matrix of float)
-0:421          smoothstep (global 4X4 matrix of float)
+0:421          smoothstep (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r041' (temp 4X4 matrix of float)
-0:421          sqrt (global 4X4 matrix of float)
+0:421          sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r042' (temp 4X4 matrix of float)
-0:421          step (global 4X4 matrix of float)
+0:421          step (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r043' (temp 4X4 matrix of float)
-0:421          tangent (global 4X4 matrix of float)
+0:421          tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r044' (temp 4X4 matrix of float)
-0:421          hyp. tangent (global 4X4 matrix of float)
+0:421          hyp. tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      transpose (global 4X4 matrix of float)
+0:421      transpose (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r046' (temp 4X4 matrix of float)
-0:421          trunc (global 4X4 matrix of float)
+0:421          trunc (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:424      Branch: Return with expression
 0:?         Constant:
@@ -5257,7 +5259,7 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (temp void)
 0:442    Function Parameters: 
 0:442      'inF0' (in float)
 0:442      'inF1' (in float)
@@ -5287,7 +5289,7 @@ gl_FragCoord origin is upper left
 0:443      Sequence
 0:443        move second child to first child (temp float)
 0:443          'r3' (temp float)
-0:443          dot-product (global float)
+0:443          dot-product (temp float)
 0:443            'inFV0' (in 2-component vector of float)
 0:443            'inFV1' (in 2-component vector of float)
 0:443      Sequence
@@ -5320,7 +5322,7 @@ gl_FragCoord origin is upper left
 0:443          matrix-multiply (temp 2X2 matrix of float)
 0:443            'inFM1' (in 2X2 matrix of float)
 0:443            'inFM0' (in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (temp void)
 0:449    Function Parameters: 
 0:449      'inF0' (in float)
 0:449      'inF1' (in float)
@@ -5350,7 +5352,7 @@ gl_FragCoord origin is upper left
 0:450      Sequence
 0:450        move second child to first child (temp float)
 0:450          'r3' (temp float)
-0:450          dot-product (global float)
+0:450          dot-product (temp float)
 0:450            'inFV0' (in 3-component vector of float)
 0:450            'inFV1' (in 3-component vector of float)
 0:450      Sequence
@@ -5383,7 +5385,7 @@ gl_FragCoord origin is upper left
 0:450          matrix-multiply (temp 3X3 matrix of float)
 0:450            'inFM1' (in 3X3 matrix of float)
 0:450            'inFM0' (in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (temp void)
 0:456    Function Parameters: 
 0:456      'inF0' (in float)
 0:456      'inF1' (in float)
@@ -5413,7 +5415,7 @@ gl_FragCoord origin is upper left
 0:457      Sequence
 0:457        move second child to first child (temp float)
 0:457          'r3' (temp float)
-0:457          dot-product (global float)
+0:457          dot-product (temp float)
 0:457            'inFV0' (in 4-component vector of float)
 0:457            'inFV1' (in 4-component vector of float)
 0:457      Sequence
@@ -5446,7 +5448,7 @@ gl_FragCoord origin is upper left
 0:457          matrix-multiply (temp 4X4 matrix of float)
 0:457            'inFM1' (in 4X4 matrix of float)
 0:457            'inFM0' (in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (global void)
+0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (temp void)
 0:466    Function Parameters: 
 0:466      'inF0' (in float)
 0:466      'inF1' (in float)
@@ -5491,13 +5493,13 @@ gl_FragCoord origin is upper left
 0:472      Sequence
 0:472        move second child to first child (temp float)
 0:472          'r05' (temp float)
-0:472          dot-product (global float)
+0:472          dot-product (temp float)
 0:472            'inFV2' (in 2-component vector of float)
 0:472            'inFV2' (in 2-component vector of float)
 0:473      Sequence
 0:473        move second child to first child (temp float)
 0:473          'r06' (temp float)
-0:473          dot-product (global float)
+0:473          dot-product (temp float)
 0:473            'inFV3' (in 3-component vector of float)
 0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
@@ -5560,7 +5562,7 @@ gl_FragCoord origin is upper left
 0:483          matrix-multiply (temp 3X4 matrix of float)
 0:483            'inFM2x4' (in 2X4 matrix of float)
 0:483            'inFM3x2' (in 3X2 matrix of float)
-0:489  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:489  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:489    Function Parameters: 
 0:?     Sequence
 0:491      move second child to first child (temp 4-component vector of float)
@@ -5573,8 +5575,8 @@ gl_FragCoord origin is upper left
 0:491          1.000000
 0:491          1.000000
 0:491          1.000000
-0:?       Sequence
-0:?         Sequence
+0:492      Sequence
+0:492        Sequence
 0:492          move second child to first child (temp 4-component vector of float)
 0:?             'color' (layout(location=0 ) out 4-component vector of float)
 0:492            color: direct index for structure (temp 4-component vector of float)
@@ -5583,29 +5585,29 @@ gl_FragCoord origin is upper left
 0:492                0 (const int)
 0:492        Branch: Return
 0:?   Linker Objects
-0:?     'gs_ua' (global uint)
-0:?     'gs_ub' (global uint)
-0:?     'gs_uc' (global uint)
-0:?     'gs_ua2' (global 2-component vector of uint)
-0:?     'gs_ub2' (global 2-component vector of uint)
-0:?     'gs_uc2' (global 2-component vector of uint)
-0:?     'gs_ua3' (global 3-component vector of uint)
-0:?     'gs_ub3' (global 3-component vector of uint)
-0:?     'gs_uc3' (global 3-component vector of uint)
-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:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'gs_ua' (shared uint)
+0:?     'gs_ub' (shared uint)
+0:?     'gs_uc' (shared uint)
+0:?     'gs_ua2' (shared 2-component vector of uint)
+0:?     'gs_ub2' (shared 2-component vector of uint)
+0:?     'gs_uc2' (shared 2-component vector of uint)
+0:?     'gs_ua3' (shared 3-component vector of uint)
+0:?     'gs_ub3' (shared 3-component vector of uint)
+0:?     'gs_uc3' (shared 3-component vector of uint)
+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)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1825
+// Id's are bound by 1828
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1805
+                              EntryPoint Fragment 4  "main" 1808
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 16  "PixelShaderFunctionS(f1;f1;f1;u1;u1;"
@@ -5704,26 +5706,26 @@ gl_FragCoord origin is upper left
                               Name 210  "r027"
                               Name 213  "r028"
                               Name 216  "r029"
-                              Name 220  "r030"
-                              Name 223  "r031"
-                              Name 226  "r033"
-                              Name 230  "r034"
-                              Name 233  "r035"
-                              Name 235  "ResType"
-                              Name 239  "r036"
-                              Name 242  "r037"
-                              Name 245  "r038"
-                              Name 248  "r039"
-                              Name 252  "r039a"
-                              Name 257  "r040"
-                              Name 260  "r041"
-                              Name 265  "r042"
-                              Name 268  "r043"
-                              Name 272  "r044"
-                              Name 276  "r045"
-                              Name 280  "r046"
-                              Name 283  "r047"
-                              Name 287  "r048"
+                              Name 219  "r030"
+                              Name 222  "r031"
+                              Name 225  "r033"
+                              Name 229  "r034"
+                              Name 232  "r035"
+                              Name 234  "ResType"
+                              Name 238  "r036"
+                              Name 241  "r037"
+                              Name 244  "r038"
+                              Name 247  "r039"
+                              Name 251  "r039a"
+                              Name 256  "r040"
+                              Name 259  "r041"
+                              Name 264  "r042"
+                              Name 267  "r043"
+                              Name 271  "r044"
+                              Name 275  "r045"
+                              Name 279  "r046"
+                              Name 282  "r047"
+                              Name 286  "r048"
                               Name 290  "r049"
                               Name 293  "r050"
                               Name 296  "r051"
@@ -5764,375 +5766,375 @@ gl_FragCoord origin is upper left
                               Name 428  "r029"
                               Name 431  "r030"
                               Name 436  "r031"
-                              Name 440  "r032"
-                              Name 442  "r033"
-                              Name 445  "r035"
-                              Name 449  "r036"
-                              Name 452  "r037"
-                              Name 454  "ResType"
-                              Name 458  "r038"
-                              Name 462  "r039"
-                              Name 465  "r040"
-                              Name 468  "r041"
-                              Name 472  "r039a"
-                              Name 477  "r042"
-                              Name 480  "r043"
-                              Name 483  "r044"
-                              Name 487  "r045"
-                              Name 490  "r046"
-                              Name 494  "r047"
-                              Name 498  "r048"
-                              Name 501  "r049"
-                              Name 505  "r050"
-                              Name 508  "r051"
-                              Name 512  "r052"
-                              Name 516  "r053"
-                              Name 521  "r054"
-                              Name 525  "r055"
-                              Name 528  "r056"
-                              Name 531  "r057"
-                              Name 536  "r058"
-                              Name 539  "r059"
-                              Name 546  "r060"
-                              Name 549  "r061"
-                              Name 554  "r062"
-                              Name 557  "r063"
-                              Name 561  "r064"
-                              Name 564  "r065"
-                              Name 567  "r066"
-                              Name 573  "r000"
-                              Name 576  "r001"
-                              Name 579  "r002"
-                              Name 582  "r003"
-                              Name 585  "r004"
-                              Name 590  "r005"
-                              Name 593  "r006"
-                              Name 596  "r007"
-                              Name 599  "r009"
-                              Name 602  "r010"
-                              Name 606  "r011"
-                              Name 609  "r012"
-                              Name 622  "r013"
-                              Name 625  "r014"
-                              Name 628  "r015"
-                              Name 632  "r016"
-                              Name 636  "r017"
-                              Name 639  "r018"
-                              Name 642  "r019"
-                              Name 645  "r020"
-                              Name 648  "r021"
-                              Name 651  "r022"
-                              Name 654  "r023"
-                              Name 657  "r024"
-                              Name 661  "r025"
-                              Name 665  "r029"
-                              Name 668  "r030"
-                              Name 671  "r031"
-                              Name 676  "r032"
-                              Name 680  "r033"
-                              Name 682  "r034"
-                              Name 685  "r036"
-                              Name 689  "r037"
-                              Name 692  "r038"
-                              Name 694  "ResType"
-                              Name 698  "r039"
-                              Name 702  "r040"
-                              Name 705  "r041"
-                              Name 708  "r042"
-                              Name 712  "r039a"
-                              Name 717  "r039b"
-                              Name 723  "r043"
-                              Name 726  "r044"
-                              Name 729  "r045"
-                              Name 733  "r046"
-                              Name 736  "r047"
-                              Name 740  "r048"
-                              Name 744  "r049"
-                              Name 747  "r050"
-                              Name 751  "r051"
-                              Name 754  "r052"
-                              Name 758  "r053"
-                              Name 762  "r054"
-                              Name 766  "r055"
-                              Name 769  "r056"
-                              Name 772  "r057"
-                              Name 775  "r058"
-                              Name 780  "r059"
-                              Name 783  "r060"
-                              Name 790  "r061"
-                              Name 793  "r062"
-                              Name 798  "r063"
-                              Name 801  "r064"
-                              Name 805  "r065"
-                              Name 808  "r066"
-                              Name 811  "r067"
-                              Name 818  "r000"
-                              Name 821  "r001"
-                              Name 824  "r002"
-                              Name 827  "r003"
-                              Name 830  "r004"
-                              Name 835  "r005"
-                              Name 838  "r006"
-                              Name 841  "r007"
-                              Name 844  "r009"
-                              Name 847  "r010"
-                              Name 851  "r011"
-                              Name 854  "r012"
-                              Name 867  "r013"
-                              Name 870  "r014"
-                              Name 873  "r015"
-                              Name 876  "r016"
-                              Name 879  "r017"
-                              Name 882  "r018"
-                              Name 885  "r019"
-                              Name 888  "r020"
-                              Name 891  "r021"
-                              Name 894  "r022"
-                              Name 897  "r023"
-                              Name 901  "r024"
-                              Name 905  "r025"
-                              Name 916  "r029"
-                              Name 919  "r030"
-                              Name 922  "r031"
-                              Name 927  "r032"
-                              Name 932  "r033"
-                              Name 934  "r034"
-                              Name 937  "r036"
-                              Name 941  "r037"
-                              Name 944  "r038"
-                              Name 946  "ResType"
-                              Name 950  "r039"
-                              Name 954  "r040"
-                              Name 957  "r041"
-                              Name 960  "r042"
-                              Name 964  "r039a"
-                              Name 969  "r043"
-                              Name 972  "r044"
-                              Name 975  "r045"
-                              Name 979  "r046"
-                              Name 982  "r047"
-                              Name 986  "r048"
-                              Name 990  "r049"
-                              Name 993  "r050"
-                              Name 997  "r051"
-                              Name 1000  "r052"
-                              Name 1004  "r053"
-                              Name 1008  "r054"
-                              Name 1012  "r055"
-                              Name 1015  "r056"
-                              Name 1018  "r057"
-                              Name 1021  "r058"
-                              Name 1026  "r059"
-                              Name 1029  "r060"
-                              Name 1036  "r061"
-                              Name 1039  "r062"
-                              Name 1044  "r063"
-                              Name 1047  "r064"
-                              Name 1051  "r065"
-                              Name 1054  "r066"
-                              Name 1057  "r067"
-                              Name 1064  "r000"
-                              Name 1067  "r001"
-                              Name 1072  "r003"
-                              Name 1075  "r004"
-                              Name 1078  "r005"
-                              Name 1081  "r006"
-                              Name 1085  "r007"
-                              Name 1096  "r008"
-                              Name 1101  "r009"
-                              Name 1104  "r010"
-                              Name 1107  "r011"
-                              Name 1110  "r012"
-                              Name 1113  "r013"
-                              Name 1116  "r014"
-                              Name 1119  "r015"
-                              Name 1122  "r016"
-                              Name 1125  "r017"
-                              Name 1128  "r018"
-                              Name 1131  "r019"
-                              Name 1134  "R020"
-                              Name 1137  "r021"
-                              Name 1140  "r022"
-                              Name 1150  "r023"
-                              Name 1153  "r024"
-                              Name 1155  "ResType"
-                              Name 1159  "r025"
-                              Name 1162  "r026"
-                              Name 1166  "r026a"
-                              Name 1171  "r027"
-                              Name 1174  "r028"
-                              Name 1178  "r029"
-                              Name 1181  "r030"
-                              Name 1185  "r031"
-                              Name 1189  "r032"
-                              Name 1193  "r033"
-                              Name 1196  "r034"
-                              Name 1199  "r035"
-                              Name 1202  "r036"
-                              Name 1207  "r037"
-                              Name 1210  "r038"
-                              Name 1217  "r039"
-                              Name 1220  "r049"
-                              Name 1225  "r041"
-                              Name 1228  "r042"
-                              Name 1232  "r043"
-                              Name 1235  "r044"
-                              Name 1240  "r046"
-                              Name 1247  "r000"
-                              Name 1250  "r001"
-                              Name 1255  "r003"
-                              Name 1258  "r004"
-                              Name 1261  "r005"
-                              Name 1264  "r006"
-                              Name 1268  "r007"
-                              Name 1279  "r008"
-                              Name 1284  "r009"
-                              Name 1287  "r010"
-                              Name 1290  "r011"
-                              Name 1293  "r012"
-                              Name 1296  "r013"
-                              Name 1299  "r014"
-                              Name 1302  "r015"
-                              Name 1305  "r016"
-                              Name 1308  "r017"
-                              Name 1311  "r018"
-                              Name 1314  "r019"
-                              Name 1317  "R020"
-                              Name 1320  "r021"
-                              Name 1323  "r022"
-                              Name 1336  "r023"
-                              Name 1339  "r024"
-                              Name 1341  "ResType"
-                              Name 1345  "r025"
-                              Name 1348  "r026"
-                              Name 1352  "r026a"
-                              Name 1357  "r027"
-                              Name 1360  "r028"
-                              Name 1364  "r029"
-                              Name 1367  "r030"
-                              Name 1371  "r031"
-                              Name 1375  "r032"
-                              Name 1379  "r033"
-                              Name 1382  "r034"
-                              Name 1385  "r035"
-                              Name 1388  "r036"
-                              Name 1393  "r037"
-                              Name 1396  "r038"
-                              Name 1403  "r039"
-                              Name 1406  "r049"
-                              Name 1411  "r041"
-                              Name 1414  "r042"
-                              Name 1418  "r043"
-                              Name 1421  "r044"
-                              Name 1426  "r046"
-                              Name 1433  "r000"
-                              Name 1436  "r001"
-                              Name 1441  "r003"
-                              Name 1444  "r004"
-                              Name 1447  "r005"
-                              Name 1450  "r006"
-                              Name 1454  "r007"
-                              Name 1465  "r008"
-                              Name 1470  "r009"
-                              Name 1473  "r010"
-                              Name 1476  "r011"
-                              Name 1479  "r012"
-                              Name 1482  "r013"
-                              Name 1485  "r014"
-                              Name 1488  "r015"
-                              Name 1491  "r016"
-                              Name 1494  "r017"
-                              Name 1497  "r018"
-                              Name 1500  "r019"
-                              Name 1503  "R020"
-                              Name 1506  "r021"
-                              Name 1509  "r022"
-                              Name 1525  "r023"
-                              Name 1528  "r024"
-                              Name 1530  "ResType"
-                              Name 1534  "r025"
-                              Name 1537  "r026"
-                              Name 1541  "r026a"
-                              Name 1546  "r027"
-                              Name 1549  "r028"
-                              Name 1553  "r029"
-                              Name 1556  "r030"
-                              Name 1560  "r031"
-                              Name 1564  "r032"
-                              Name 1568  "r033"
-                              Name 1571  "r034"
-                              Name 1574  "r035"
-                              Name 1577  "r036"
-                              Name 1582  "r037"
-                              Name 1585  "r038"
-                              Name 1592  "r039"
-                              Name 1595  "r049"
-                              Name 1600  "r041"
-                              Name 1603  "r042"
-                              Name 1607  "r043"
-                              Name 1610  "r044"
-                              Name 1615  "r046"
-                              Name 1622  "r0"
-                              Name 1626  "r1"
-                              Name 1630  "r2"
-                              Name 1634  "r3"
-                              Name 1638  "r4"
-                              Name 1642  "r5"
-                              Name 1646  "r6"
-                              Name 1650  "r7"
-                              Name 1654  "r8"
-                              Name 1658  "r0"
-                              Name 1662  "r1"
-                              Name 1666  "r2"
-                              Name 1670  "r3"
-                              Name 1674  "r4"
-                              Name 1678  "r5"
-                              Name 1682  "r6"
-                              Name 1686  "r7"
-                              Name 1690  "r8"
-                              Name 1694  "r0"
-                              Name 1698  "r1"
-                              Name 1702  "r2"
-                              Name 1706  "r3"
-                              Name 1710  "r4"
-                              Name 1714  "r5"
-                              Name 1718  "r6"
-                              Name 1722  "r7"
-                              Name 1726  "r8"
-                              Name 1730  "r00"
-                              Name 1734  "r01"
-                              Name 1738  "r02"
-                              Name 1742  "r03"
-                              Name 1746  "r04"
-                              Name 1750  "r05"
-                              Name 1754  "r06"
-                              Name 1758  "r07"
-                              Name 1762  "r08"
-                              Name 1766  "r09"
-                              Name 1770  "r10"
-                              Name 1774  "r11"
-                              Name 1778  "r12"
-                              Name 1782  "r13"
-                              Name 1786  "r14"
-                              Name 1790  "r15"
-                              Name 1794  "r16"
-                              Name 1798  "PS_OUTPUT"
-                              MemberName 1798(PS_OUTPUT) 0  "color"
-                              Name 1800  "ps_output"
-                              Name 1805  "color"
-                              Name 1810  "gs_ua"
-                              Name 1811  "gs_ub"
-                              Name 1812  "gs_uc"
-                              Name 1814  "gs_ua2"
-                              Name 1815  "gs_ub2"
-                              Name 1816  "gs_uc2"
-                              Name 1818  "gs_ua3"
-                              Name 1819  "gs_ub3"
-                              Name 1820  "gs_uc3"
-                              Name 1822  "gs_ua4"
-                              Name 1823  "gs_ub4"
-                              Name 1824  "gs_uc4"
-                              Decorate 1805(color) Location 0
+                              Name 441  "r032"
+                              Name 443  "r033"
+                              Name 446  "r035"
+                              Name 450  "r036"
+                              Name 453  "r037"
+                              Name 455  "ResType"
+                              Name 459  "r038"
+                              Name 463  "r039"
+                              Name 466  "r040"
+                              Name 469  "r041"
+                              Name 473  "r039a"
+                              Name 478  "r042"
+                              Name 481  "r043"
+                              Name 484  "r044"
+                              Name 488  "r045"
+                              Name 491  "r046"
+                              Name 495  "r047"
+                              Name 499  "r048"
+                              Name 502  "r049"
+                              Name 506  "r050"
+                              Name 509  "r051"
+                              Name 513  "r052"
+                              Name 517  "r053"
+                              Name 522  "r054"
+                              Name 527  "r055"
+                              Name 530  "r056"
+                              Name 533  "r057"
+                              Name 538  "r058"
+                              Name 541  "r059"
+                              Name 548  "r060"
+                              Name 551  "r061"
+                              Name 556  "r062"
+                              Name 559  "r063"
+                              Name 563  "r064"
+                              Name 566  "r065"
+                              Name 569  "r066"
+                              Name 575  "r000"
+                              Name 578  "r001"
+                              Name 581  "r002"
+                              Name 584  "r003"
+                              Name 587  "r004"
+                              Name 592  "r005"
+                              Name 595  "r006"
+                              Name 598  "r007"
+                              Name 601  "r009"
+                              Name 604  "r010"
+                              Name 608  "r011"
+                              Name 611  "r012"
+                              Name 624  "r013"
+                              Name 627  "r014"
+                              Name 630  "r015"
+                              Name 635  "r016"
+                              Name 639  "r017"
+                              Name 642  "r018"
+                              Name 645  "r019"
+                              Name 648  "r020"
+                              Name 651  "r021"
+                              Name 654  "r022"
+                              Name 657  "r023"
+                              Name 660  "r024"
+                              Name 664  "r025"
+                              Name 668  "r029"
+                              Name 671  "r030"
+                              Name 674  "r031"
+                              Name 679  "r032"
+                              Name 683  "r033"
+                              Name 685  "r034"
+                              Name 688  "r036"
+                              Name 692  "r037"
+                              Name 695  "r038"
+                              Name 697  "ResType"
+                              Name 701  "r039"
+                              Name 705  "r040"
+                              Name 708  "r041"
+                              Name 711  "r042"
+                              Name 715  "r039a"
+                              Name 720  "r039b"
+                              Name 726  "r043"
+                              Name 729  "r044"
+                              Name 732  "r045"
+                              Name 736  "r046"
+                              Name 739  "r047"
+                              Name 743  "r048"
+                              Name 747  "r049"
+                              Name 750  "r050"
+                              Name 754  "r051"
+                              Name 757  "r052"
+                              Name 761  "r053"
+                              Name 765  "r054"
+                              Name 769  "r055"
+                              Name 772  "r056"
+                              Name 775  "r057"
+                              Name 778  "r058"
+                              Name 783  "r059"
+                              Name 786  "r060"
+                              Name 793  "r061"
+                              Name 796  "r062"
+                              Name 801  "r063"
+                              Name 804  "r064"
+                              Name 808  "r065"
+                              Name 811  "r066"
+                              Name 814  "r067"
+                              Name 821  "r000"
+                              Name 824  "r001"
+                              Name 827  "r002"
+                              Name 830  "r003"
+                              Name 833  "r004"
+                              Name 838  "r005"
+                              Name 841  "r006"
+                              Name 844  "r007"
+                              Name 847  "r009"
+                              Name 850  "r010"
+                              Name 854  "r011"
+                              Name 857  "r012"
+                              Name 870  "r013"
+                              Name 873  "r014"
+                              Name 876  "r015"
+                              Name 879  "r016"
+                              Name 882  "r017"
+                              Name 885  "r018"
+                              Name 888  "r019"
+                              Name 891  "r020"
+                              Name 894  "r021"
+                              Name 897  "r022"
+                              Name 900  "r023"
+                              Name 904  "r024"
+                              Name 908  "r025"
+                              Name 919  "r029"
+                              Name 922  "r030"
+                              Name 925  "r031"
+                              Name 930  "r032"
+                              Name 935  "r033"
+                              Name 937  "r034"
+                              Name 940  "r036"
+                              Name 944  "r037"
+                              Name 947  "r038"
+                              Name 949  "ResType"
+                              Name 953  "r039"
+                              Name 957  "r040"
+                              Name 960  "r041"
+                              Name 963  "r042"
+                              Name 967  "r039a"
+                              Name 972  "r043"
+                              Name 975  "r044"
+                              Name 978  "r045"
+                              Name 982  "r046"
+                              Name 985  "r047"
+                              Name 989  "r048"
+                              Name 993  "r049"
+                              Name 996  "r050"
+                              Name 1000  "r051"
+                              Name 1003  "r052"
+                              Name 1007  "r053"
+                              Name 1011  "r054"
+                              Name 1015  "r055"
+                              Name 1018  "r056"
+                              Name 1021  "r057"
+                              Name 1024  "r058"
+                              Name 1029  "r059"
+                              Name 1032  "r060"
+                              Name 1039  "r061"
+                              Name 1042  "r062"
+                              Name 1047  "r063"
+                              Name 1050  "r064"
+                              Name 1054  "r065"
+                              Name 1057  "r066"
+                              Name 1060  "r067"
+                              Name 1067  "r000"
+                              Name 1070  "r001"
+                              Name 1075  "r003"
+                              Name 1078  "r004"
+                              Name 1081  "r005"
+                              Name 1084  "r006"
+                              Name 1088  "r007"
+                              Name 1099  "r008"
+                              Name 1104  "r009"
+                              Name 1107  "r010"
+                              Name 1110  "r011"
+                              Name 1113  "r012"
+                              Name 1116  "r013"
+                              Name 1119  "r014"
+                              Name 1122  "r015"
+                              Name 1125  "r016"
+                              Name 1128  "r017"
+                              Name 1131  "r018"
+                              Name 1134  "r019"
+                              Name 1137  "R020"
+                              Name 1140  "r021"
+                              Name 1143  "r022"
+                              Name 1153  "r023"
+                              Name 1156  "r024"
+                              Name 1158  "ResType"
+                              Name 1162  "r025"
+                              Name 1165  "r026"
+                              Name 1169  "r026a"
+                              Name 1174  "r027"
+                              Name 1177  "r028"
+                              Name 1181  "r029"
+                              Name 1184  "r030"
+                              Name 1188  "r031"
+                              Name 1192  "r032"
+                              Name 1196  "r033"
+                              Name 1199  "r034"
+                              Name 1202  "r035"
+                              Name 1205  "r036"
+                              Name 1210  "r037"
+                              Name 1213  "r038"
+                              Name 1220  "r039"
+                              Name 1223  "r049"
+                              Name 1228  "r041"
+                              Name 1231  "r042"
+                              Name 1235  "r043"
+                              Name 1238  "r044"
+                              Name 1243  "r046"
+                              Name 1250  "r000"
+                              Name 1253  "r001"
+                              Name 1258  "r003"
+                              Name 1261  "r004"
+                              Name 1264  "r005"
+                              Name 1267  "r006"
+                              Name 1271  "r007"
+                              Name 1282  "r008"
+                              Name 1287  "r009"
+                              Name 1290  "r010"
+                              Name 1293  "r011"
+                              Name 1296  "r012"
+                              Name 1299  "r013"
+                              Name 1302  "r014"
+                              Name 1305  "r015"
+                              Name 1308  "r016"
+                              Name 1311  "r017"
+                              Name 1314  "r018"
+                              Name 1317  "r019"
+                              Name 1320  "R020"
+                              Name 1323  "r021"
+                              Name 1326  "r022"
+                              Name 1339  "r023"
+                              Name 1342  "r024"
+                              Name 1344  "ResType"
+                              Name 1348  "r025"
+                              Name 1351  "r026"
+                              Name 1355  "r026a"
+                              Name 1360  "r027"
+                              Name 1363  "r028"
+                              Name 1367  "r029"
+                              Name 1370  "r030"
+                              Name 1374  "r031"
+                              Name 1378  "r032"
+                              Name 1382  "r033"
+                              Name 1385  "r034"
+                              Name 1388  "r035"
+                              Name 1391  "r036"
+                              Name 1396  "r037"
+                              Name 1399  "r038"
+                              Name 1406  "r039"
+                              Name 1409  "r049"
+                              Name 1414  "r041"
+                              Name 1417  "r042"
+                              Name 1421  "r043"
+                              Name 1424  "r044"
+                              Name 1429  "r046"
+                              Name 1436  "r000"
+                              Name 1439  "r001"
+                              Name 1444  "r003"
+                              Name 1447  "r004"
+                              Name 1450  "r005"
+                              Name 1453  "r006"
+                              Name 1457  "r007"
+                              Name 1468  "r008"
+                              Name 1473  "r009"
+                              Name 1476  "r010"
+                              Name 1479  "r011"
+                              Name 1482  "r012"
+                              Name 1485  "r013"
+                              Name 1488  "r014"
+                              Name 1491  "r015"
+                              Name 1494  "r016"
+                              Name 1497  "r017"
+                              Name 1500  "r018"
+                              Name 1503  "r019"
+                              Name 1506  "R020"
+                              Name 1509  "r021"
+                              Name 1512  "r022"
+                              Name 1528  "r023"
+                              Name 1531  "r024"
+                              Name 1533  "ResType"
+                              Name 1537  "r025"
+                              Name 1540  "r026"
+                              Name 1544  "r026a"
+                              Name 1549  "r027"
+                              Name 1552  "r028"
+                              Name 1556  "r029"
+                              Name 1559  "r030"
+                              Name 1563  "r031"
+                              Name 1567  "r032"
+                              Name 1571  "r033"
+                              Name 1574  "r034"
+                              Name 1577  "r035"
+                              Name 1580  "r036"
+                              Name 1585  "r037"
+                              Name 1588  "r038"
+                              Name 1595  "r039"
+                              Name 1598  "r049"
+                              Name 1603  "r041"
+                              Name 1606  "r042"
+                              Name 1610  "r043"
+                              Name 1613  "r044"
+                              Name 1618  "r046"
+                              Name 1625  "r0"
+                              Name 1629  "r1"
+                              Name 1633  "r2"
+                              Name 1637  "r3"
+                              Name 1641  "r4"
+                              Name 1645  "r5"
+                              Name 1649  "r6"
+                              Name 1653  "r7"
+                              Name 1657  "r8"
+                              Name 1661  "r0"
+                              Name 1665  "r1"
+                              Name 1669  "r2"
+                              Name 1673  "r3"
+                              Name 1677  "r4"
+                              Name 1681  "r5"
+                              Name 1685  "r6"
+                              Name 1689  "r7"
+                              Name 1693  "r8"
+                              Name 1697  "r0"
+                              Name 1701  "r1"
+                              Name 1705  "r2"
+                              Name 1709  "r3"
+                              Name 1713  "r4"
+                              Name 1717  "r5"
+                              Name 1721  "r6"
+                              Name 1725  "r7"
+                              Name 1729  "r8"
+                              Name 1733  "r00"
+                              Name 1737  "r01"
+                              Name 1741  "r02"
+                              Name 1745  "r03"
+                              Name 1749  "r04"
+                              Name 1753  "r05"
+                              Name 1757  "r06"
+                              Name 1761  "r07"
+                              Name 1765  "r08"
+                              Name 1769  "r09"
+                              Name 1773  "r10"
+                              Name 1777  "r11"
+                              Name 1781  "r12"
+                              Name 1785  "r13"
+                              Name 1789  "r14"
+                              Name 1793  "r15"
+                              Name 1797  "r16"
+                              Name 1801  "PS_OUTPUT"
+                              MemberName 1801(PS_OUTPUT) 0  "color"
+                              Name 1803  "ps_output"
+                              Name 1808  "color"
+                              Name 1813  "gs_ua"
+                              Name 1814  "gs_ub"
+                              Name 1815  "gs_uc"
+                              Name 1817  "gs_ua2"
+                              Name 1818  "gs_ub2"
+                              Name 1819  "gs_uc2"
+                              Name 1821  "gs_ua3"
+                              Name 1822  "gs_ub3"
+                              Name 1823  "gs_uc3"
+                              Name 1825  "gs_ua4"
+                              Name 1826  "gs_ub4"
+                              Name 1827  "gs_uc4"
+                              Decorate 1808(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6182,98 +6184,100 @@ gl_FragCoord origin is upper left
              148:             TypeInt 32 1
              149:             TypePointer Function 148(int)
              175:    6(float) Constant 0
-             187:      8(int) Constant 7
-             217:    148(int) Constant 7
-    235(ResType):             TypeStruct 6(float) 148(int)
-             263:    6(float) Constant 1050288283
-             284:    6(float) Constant 1065353216
-             288:      8(int) Constant 2
+             187:    148(int) Constant 7
+    234(ResType):             TypeStruct 6(float) 148(int)
+             262:    6(float) Constant 1050288283
+             283:    6(float) Constant 1065353216
+             287:    148(int) Constant 2
              352:             TypeVector 148(int) 2
              353:             TypePointer Function 352(ivec2)
              379:   24(fvec2) ConstantComposite 175 175
              380:             TypeVector 131(bool) 2
-             393:      8(int) Constant 3
-             394:   26(ivec2) ConstantComposite 187 393
-             437:      8(int) Constant 8
-             438:   26(ivec2) ConstantComposite 187 437
-    454(ResType):             TypeStruct 24(fvec2) 352(ivec2)
-             461:             TypePointer Function 380(bvec2)
-             519:    6(float) Constant 1073741824
-             522:      8(int) Constant 1
-             523:   26(ivec2) ConstantComposite 522 288
-             570:   24(fvec2) ConstantComposite 284 519
-             588:             TypeVector 148(int) 3
-             589:             TypePointer Function 588(ivec3)
-             615:   36(fvec3) ConstantComposite 175 175 175
-             616:             TypeVector 131(bool) 3
-             629:      8(int) Constant 5
-             630:   38(ivec3) ConstantComposite 187 393 629
-             677:      8(int) Constant 4
-             678:   38(ivec3) ConstantComposite 288 393 677
-    694(ResType):             TypeStruct 36(fvec3) 588(ivec3)
-             701:             TypePointer Function 616(bvec3)
-             720:    6(float) Constant 1050253722
-             767:   38(ivec3) ConstantComposite 522 288 393
-             814:    6(float) Constant 1077936128
-             815:   36(fvec3) ConstantComposite 284 519 814
-             833:             TypeVector 148(int) 4
-             834:             TypePointer Function 833(ivec4)
-             860:   48(fvec4) ConstantComposite 175 175 175 175
-             861:             TypeVector 131(bool) 4
-             874:   50(ivec4) ConstantComposite 187 393 629 288
-             928:      8(int) Constant 9
-             929:      8(int) Constant 10
-             930:   50(ivec4) ConstantComposite 187 437 928 929
-    946(ResType):             TypeStruct 48(fvec4) 833(ivec4)
-             953:             TypePointer Function 861(bvec4)
-            1013:   50(ivec4) ConstantComposite 522 288 393 677
-            1060:    6(float) Constant 1082130432
-            1061:   48(fvec4) ConstantComposite 284 519 814 1060
-            1089:          60 ConstantComposite 379 379
-            1090:             TypeMatrix 380(bvec2) 2
-   1155(ResType):             TypeStruct 60 352(ivec2)
-            1243:   24(fvec2) ConstantComposite 519 519
-            1244:          60 ConstantComposite 1243 1243
-            1272:          68 ConstantComposite 615 615 615
-            1273:             TypeMatrix 616(bvec3) 3
-   1341(ResType):             TypeStruct 68 588(ivec3)
-            1429:   36(fvec3) ConstantComposite 814 814 814
-            1430:          68 ConstantComposite 1429 1429 1429
-            1458:          76 ConstantComposite 860 860 860 860
-            1459:             TypeMatrix 861(bvec4) 4
-   1530(ResType):             TypeStruct 76 833(ivec4)
-            1618:   48(fvec4) ConstantComposite 1060 1060 1060 1060
-            1619:          76 ConstantComposite 1618 1618 1618 1618
- 1798(PS_OUTPUT):             TypeStruct 48(fvec4)
-            1799:             TypePointer Function 1798(PS_OUTPUT)
-            1801:    148(int) Constant 0
-            1802:   48(fvec4) ConstantComposite 284 284 284 284
-            1804:             TypePointer Output 48(fvec4)
-     1805(color):   1804(ptr) Variable Output
-            1809:             TypePointer Private 8(int)
-     1810(gs_ua):   1809(ptr) Variable Private
-     1811(gs_ub):   1809(ptr) Variable Private
-     1812(gs_uc):   1809(ptr) Variable Private
-            1813:             TypePointer Private 26(ivec2)
-    1814(gs_ua2):   1813(ptr) Variable Private
-    1815(gs_ub2):   1813(ptr) Variable Private
-    1816(gs_uc2):   1813(ptr) Variable Private
-            1817:             TypePointer Private 38(ivec3)
-    1818(gs_ua3):   1817(ptr) Variable Private
-    1819(gs_ub3):   1817(ptr) Variable Private
-    1820(gs_uc3):   1817(ptr) Variable Private
-            1821:             TypePointer Private 50(ivec4)
-    1822(gs_ua4):   1821(ptr) Variable Private
-    1823(gs_ub4):   1821(ptr) Variable Private
-    1824(gs_uc4):   1821(ptr) Variable Private
+             393:    148(int) Constant 3
+             394:  352(ivec2) ConstantComposite 187 393
+             437:      8(int) Constant 7
+             438:      8(int) Constant 8
+             439:   26(ivec2) ConstantComposite 437 438
+    455(ResType):             TypeStruct 24(fvec2) 352(ivec2)
+             462:             TypePointer Function 380(bvec2)
+             520:    6(float) Constant 1073741824
+             523:      8(int) Constant 1
+             524:      8(int) Constant 2
+             525:   26(ivec2) ConstantComposite 523 524
+             572:   24(fvec2) ConstantComposite 283 520
+             590:             TypeVector 148(int) 3
+             591:             TypePointer Function 590(ivec3)
+             617:   36(fvec3) ConstantComposite 175 175 175
+             618:             TypeVector 131(bool) 3
+             631:      8(int) Constant 3
+             632:      8(int) Constant 5
+             633:   38(ivec3) ConstantComposite 437 631 632
+             680:      8(int) Constant 4
+             681:   38(ivec3) ConstantComposite 524 631 680
+    697(ResType):             TypeStruct 36(fvec3) 590(ivec3)
+             704:             TypePointer Function 618(bvec3)
+             723:    6(float) Constant 1050253722
+             770:   38(ivec3) ConstantComposite 523 524 631
+             817:    6(float) Constant 1077936128
+             818:   36(fvec3) ConstantComposite 283 520 817
+             836:             TypeVector 148(int) 4
+             837:             TypePointer Function 836(ivec4)
+             863:   48(fvec4) ConstantComposite 175 175 175 175
+             864:             TypeVector 131(bool) 4
+             877:   50(ivec4) ConstantComposite 437 631 632 524
+             931:      8(int) Constant 9
+             932:      8(int) Constant 10
+             933:   50(ivec4) ConstantComposite 437 438 931 932
+    949(ResType):             TypeStruct 48(fvec4) 836(ivec4)
+             956:             TypePointer Function 864(bvec4)
+            1016:   50(ivec4) ConstantComposite 523 524 631 680
+            1063:    6(float) Constant 1082130432
+            1064:   48(fvec4) ConstantComposite 283 520 817 1063
+            1092:          60 ConstantComposite 379 379
+            1093:             TypeMatrix 380(bvec2) 2
+   1158(ResType):             TypeStruct 60 352(ivec2)
+            1246:   24(fvec2) ConstantComposite 520 520
+            1247:          60 ConstantComposite 1246 1246
+            1275:          68 ConstantComposite 617 617 617
+            1276:             TypeMatrix 618(bvec3) 3
+   1344(ResType):             TypeStruct 68 590(ivec3)
+            1432:   36(fvec3) ConstantComposite 817 817 817
+            1433:          68 ConstantComposite 1432 1432 1432
+            1461:          76 ConstantComposite 863 863 863 863
+            1462:             TypeMatrix 864(bvec4) 4
+   1533(ResType):             TypeStruct 76 836(ivec4)
+            1621:   48(fvec4) ConstantComposite 1063 1063 1063 1063
+            1622:          76 ConstantComposite 1621 1621 1621 1621
+ 1801(PS_OUTPUT):             TypeStruct 48(fvec4)
+            1802:             TypePointer Function 1801(PS_OUTPUT)
+            1804:    148(int) Constant 0
+            1805:   48(fvec4) ConstantComposite 283 283 283 283
+            1807:             TypePointer Output 48(fvec4)
+     1808(color):   1807(ptr) Variable Output
+            1812:             TypePointer Workgroup 8(int)
+     1813(gs_ua):   1812(ptr) Variable Workgroup
+     1814(gs_ub):   1812(ptr) Variable Workgroup
+     1815(gs_uc):   1812(ptr) Variable Workgroup
+            1816:             TypePointer Workgroup 26(ivec2)
+    1817(gs_ua2):   1816(ptr) Variable Workgroup
+    1818(gs_ub2):   1816(ptr) Variable Workgroup
+    1819(gs_uc2):   1816(ptr) Variable Workgroup
+            1820:             TypePointer Workgroup 38(ivec3)
+    1821(gs_ua3):   1820(ptr) Variable Workgroup
+    1822(gs_ub3):   1820(ptr) Variable Workgroup
+    1823(gs_uc3):   1820(ptr) Variable Workgroup
+            1824:             TypePointer Workgroup 50(ivec4)
+    1825(gs_ua4):   1824(ptr) Variable Workgroup
+    1826(gs_ub4):   1824(ptr) Variable Workgroup
+    1827(gs_uc4):   1824(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
- 1800(ps_output):   1799(ptr) Variable Function
-            1803:     49(ptr) AccessChain 1800(ps_output) 1801
-                              Store 1803 1802
-            1806:     49(ptr) AccessChain 1800(ps_output) 1801
-            1807:   48(fvec4) Load 1806
-                              Store 1805(color) 1807
+ 1803(ps_output):   1802(ptr) Variable Function
+            1806:     49(ptr) AccessChain 1803(ps_output) 1804
+                              Store 1806 1805
+            1809:     49(ptr) AccessChain 1803(ps_output) 1804
+            1810:   48(fvec4) Load 1809
+                              Store 1808(color) 1810
                               Return
                               FunctionEnd
 16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
@@ -6297,7 +6301,7 @@ gl_FragCoord origin is upper left
        169(r012):      7(ptr) Variable Function
        180(r014):      7(ptr) Variable Function
        183(r015):      7(ptr) Variable Function
-       186(r016):      9(ptr) Variable Function
+       186(r016):    149(ptr) Variable Function
        189(r017):      7(ptr) Variable Function
        192(r018):      7(ptr) Variable Function
        195(r019):      7(ptr) Variable Function
@@ -6308,25 +6312,25 @@ gl_FragCoord origin is upper left
        210(r027):      7(ptr) Variable Function
        213(r028):      7(ptr) Variable Function
        216(r029):      9(ptr) Variable Function
-       220(r030):      9(ptr) Variable Function
-       223(r031):      7(ptr) Variable Function
-       226(r033):      7(ptr) Variable Function
-       230(r034):      7(ptr) Variable Function
-       233(r035):      7(ptr) Variable Function
-       239(r036):      7(ptr) Variable Function
-       242(r037):    132(ptr) Variable Function
-       245(r038):    132(ptr) Variable Function
-       248(r039):      7(ptr) Variable Function
-      252(r039a):      7(ptr) Variable Function
-       257(r040):      7(ptr) Variable Function
-       260(r041):      7(ptr) Variable Function
-       265(r042):      7(ptr) Variable Function
-       268(r043):      7(ptr) Variable Function
-       272(r044):      7(ptr) Variable Function
-       276(r045):      7(ptr) Variable Function
-       280(r046):      7(ptr) Variable Function
-       283(r047):      7(ptr) Variable Function
-       287(r048):      9(ptr) Variable Function
+       219(r030):      9(ptr) Variable Function
+       222(r031):      7(ptr) Variable Function
+       225(r033):      7(ptr) Variable Function
+       229(r034):      7(ptr) Variable Function
+       232(r035):      7(ptr) Variable Function
+       238(r036):      7(ptr) Variable Function
+       241(r037):    132(ptr) Variable Function
+       244(r038):    132(ptr) Variable Function
+       247(r039):      7(ptr) Variable Function
+      251(r039a):      7(ptr) Variable Function
+       256(r040):      7(ptr) Variable Function
+       259(r041):      7(ptr) Variable Function
+       264(r042):      7(ptr) Variable Function
+       267(r043):      7(ptr) Variable Function
+       271(r044):      7(ptr) Variable Function
+       275(r045):      7(ptr) Variable Function
+       279(r046):      7(ptr) Variable Function
+       282(r047):      7(ptr) Variable Function
+       286(r048):      9(ptr) Variable Function
        290(r049):      7(ptr) Variable Function
        293(r050):      7(ptr) Variable Function
        296(r051):      7(ptr) Variable Function
@@ -6391,7 +6395,7 @@ gl_FragCoord origin is upper left
              184:    6(float) Load 11(inF0)
              185:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 184
                               Store 183(r015) 185
-             188:      8(int) BitCount 187
+             188:    148(int) BitCount 187
                               Store 186(r016) 188
              190:    6(float) Load 11(inF0)
              191:    6(float) DPdx 190
@@ -6420,76 +6424,77 @@ gl_FragCoord origin is upper left
              214:    6(float) Load 11(inF0)
              215:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 214
                               Store 213(r028) 215
-             218:    148(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 217
-             219:      8(int) Bitcast 218
-                              Store 216(r029) 219
-             221:    148(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 217
-             222:      8(int) Bitcast 221
-                              Store 220(r030) 222
-             224:    6(float) Load 11(inF0)
-             225:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 224
-                              Store 223(r031) 225
-             227:    6(float) Load 11(inF0)
-             228:    6(float) Load 12(inF1)
-             229:    6(float) FMod 227 228
-                              Store 226(r033) 229
-             231:    6(float) Load 11(inF0)
-             232:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 231
-                              Store 230(r034) 232
-             234:    6(float) Load 11(inF0)
-             236:235(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 234
-             237:    148(int) CompositeExtract 236 1
-                              Store 12(inF1) 237
-             238:    6(float) CompositeExtract 236 0
-                              Store 233(r035) 238
-             240:    6(float) Load 11(inF0)
-             241:    6(float) Fwidth 240
-                              Store 239(r036) 241
-             243:    6(float) Load 11(inF0)
-             244:   131(bool) IsInf 243
-                              Store 242(r037) 244
-             246:    6(float) Load 11(inF0)
-             247:   131(bool) IsNan 246
-                              Store 245(r038) 247
-             249:    6(float) Load 11(inF0)
-             250:    6(float) Load 12(inF1)
-             251:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 249 250
-                              Store 248(r039) 251
-             253:    6(float) Load 11(inF0)
-             254:    6(float) Load 12(inF1)
-             255:    6(float) Load 13(inF2)
-             256:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 253 254 255
-                              Store 252(r039a) 256
-             258:    6(float) Load 11(inF0)
-             259:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 258
-                              Store 257(r040) 259
-             261:    6(float) Load 11(inF0)
-             262:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 261
-             264:    6(float) FMul 262 263
-                              Store 260(r041) 264
-             266:    6(float) Load 11(inF0)
-             267:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 266
-                              Store 265(r042) 267
-             269:    6(float) Load 11(inF0)
-             270:    6(float) Load 12(inF1)
-             271:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 269 270
-                              Store 268(r043) 271
-             273:    6(float) Load 11(inF0)
-             274:    6(float) Load 12(inF1)
-             275:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 273 274
-                              Store 272(r044) 275
-             277:    6(float) Load 11(inF0)
-             278:    6(float) Load 12(inF1)
-             279:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 277 278
-                              Store 276(r045) 279
-             281:    6(float) Load 11(inF0)
-             282:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 281
-                              Store 280(r046) 282
-             285:    6(float) Load 11(inF0)
-             286:    6(float) FDiv 284 285
-                              Store 283(r047) 286
-             289:      8(int) BitReverse 288
-                              Store 287(r048) 289
+             217:    148(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 187
+             218:      8(int) Bitcast 217
+                              Store 216(r029) 218
+             220:    148(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 187
+             221:      8(int) Bitcast 220
+                              Store 219(r030) 221
+             223:    6(float) Load 11(inF0)
+             224:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 223
+                              Store 222(r031) 224
+             226:    6(float) Load 11(inF0)
+             227:    6(float) Load 12(inF1)
+             228:    6(float) FMod 226 227
+                              Store 225(r033) 228
+             230:    6(float) Load 11(inF0)
+             231:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 230
+                              Store 229(r034) 231
+             233:    6(float) Load 11(inF0)
+             235:234(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 233
+             236:    148(int) CompositeExtract 235 1
+                              Store 12(inF1) 236
+             237:    6(float) CompositeExtract 235 0
+                              Store 232(r035) 237
+             239:    6(float) Load 11(inF0)
+             240:    6(float) Fwidth 239
+                              Store 238(r036) 240
+             242:    6(float) Load 11(inF0)
+             243:   131(bool) IsInf 242
+                              Store 241(r037) 243
+             245:    6(float) Load 11(inF0)
+             246:   131(bool) IsNan 245
+                              Store 244(r038) 246
+             248:    6(float) Load 11(inF0)
+             249:    6(float) Load 12(inF1)
+             250:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 248 249
+                              Store 247(r039) 250
+             252:    6(float) Load 11(inF0)
+             253:    6(float) Load 12(inF1)
+             254:    6(float) Load 13(inF2)
+             255:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 252 253 254
+                              Store 251(r039a) 255
+             257:    6(float) Load 11(inF0)
+             258:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 257
+                              Store 256(r040) 258
+             260:    6(float) Load 11(inF0)
+             261:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 260
+             263:    6(float) FMul 261 262
+                              Store 259(r041) 263
+             265:    6(float) Load 11(inF0)
+             266:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 265
+                              Store 264(r042) 266
+             268:    6(float) Load 11(inF0)
+             269:    6(float) Load 12(inF1)
+             270:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 268 269
+                              Store 267(r043) 270
+             272:    6(float) Load 11(inF0)
+             273:    6(float) Load 12(inF1)
+             274:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 272 273
+                              Store 271(r044) 274
+             276:    6(float) Load 11(inF0)
+             277:    6(float) Load 12(inF1)
+             278:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 276 277
+                              Store 275(r045) 278
+             280:    6(float) Load 11(inF0)
+             281:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 280
+                              Store 279(r046) 281
+             284:    6(float) Load 11(inF0)
+             285:    6(float) FDiv 283 284
+                              Store 282(r047) 285
+             288:    148(int) BitReverse 287
+             289:      8(int) Bitcast 288
+                              Store 286(r048) 289
              291:    6(float) Load 11(inF0)
              292:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 291
                               Store 290(r049) 292
@@ -6497,7 +6502,7 @@ gl_FragCoord origin is upper left
              295:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 294
                               Store 293(r050) 295
              297:    6(float) Load 11(inF0)
-             298:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 297 175 284
+             298:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 297 175 283
                               Store 296(r051) 298
              300:    6(float) Load 11(inF0)
              301:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 300
@@ -6565,7 +6570,7 @@ gl_FragCoord origin is upper left
        373(r012):     25(ptr) Variable Function
        386(r013):     25(ptr) Variable Function
        389(r015):     25(ptr) Variable Function
-       392(r016):     27(ptr) Variable Function
+       392(r016):    353(ptr) Variable Function
        396(r017):     25(ptr) Variable Function
        399(r018):     25(ptr) Variable Function
        402(r019):     25(ptr) Variable Function
@@ -6579,41 +6584,41 @@ gl_FragCoord origin is upper left
        428(r029):     25(ptr) Variable Function
        431(r030):     25(ptr) Variable Function
        436(r031):     27(ptr) Variable Function
-       440(r032):     27(ptr) Variable Function
-       442(r033):     25(ptr) Variable Function
-       445(r035):     25(ptr) Variable Function
-       449(r036):     25(ptr) Variable Function
-       452(r037):     25(ptr) Variable Function
-       458(r038):     25(ptr) Variable Function
-       462(r039):    461(ptr) Variable Function
-       465(r040):    461(ptr) Variable Function
-       468(r041):     25(ptr) Variable Function
-      472(r039a):     25(ptr) Variable Function
-       477(r042):      7(ptr) Variable Function
-       480(r043):     25(ptr) Variable Function
-       483(r044):     25(ptr) Variable Function
-       487(r045):     25(ptr) Variable Function
-       490(r046):     25(ptr) Variable Function
-       494(r047):     25(ptr) Variable Function
-       498(r048):     25(ptr) Variable Function
-       501(r049):     25(ptr) Variable Function
-       505(r050):     25(ptr) Variable Function
-       508(r051):     25(ptr) Variable Function
-       512(r052):     25(ptr) Variable Function
-       516(r053):     25(ptr) Variable Function
-       521(r054):     27(ptr) Variable Function
-       525(r055):     25(ptr) Variable Function
-       528(r056):     25(ptr) Variable Function
-       531(r057):     25(ptr) Variable Function
-       536(r058):     25(ptr) Variable Function
-       539(r059):     25(ptr) Variable Function
-       546(r060):     25(ptr) Variable Function
-       549(r061):     25(ptr) Variable Function
-       554(r062):     25(ptr) Variable Function
-       557(r063):     25(ptr) Variable Function
-       561(r064):     25(ptr) Variable Function
-       564(r065):     25(ptr) Variable Function
-       567(r066):     25(ptr) Variable Function
+       441(r032):     27(ptr) Variable Function
+       443(r033):     25(ptr) Variable Function
+       446(r035):     25(ptr) Variable Function
+       450(r036):     25(ptr) Variable Function
+       453(r037):     25(ptr) Variable Function
+       459(r038):     25(ptr) Variable Function
+       463(r039):    462(ptr) Variable Function
+       466(r040):    462(ptr) Variable Function
+       469(r041):     25(ptr) Variable Function
+      473(r039a):     25(ptr) Variable Function
+       478(r042):      7(ptr) Variable Function
+       481(r043):     25(ptr) Variable Function
+       484(r044):     25(ptr) Variable Function
+       488(r045):     25(ptr) Variable Function
+       491(r046):     25(ptr) Variable Function
+       495(r047):     25(ptr) Variable Function
+       499(r048):     25(ptr) Variable Function
+       502(r049):     25(ptr) Variable Function
+       506(r050):     25(ptr) Variable Function
+       509(r051):     25(ptr) Variable Function
+       513(r052):     25(ptr) Variable Function
+       517(r053):     25(ptr) Variable Function
+       522(r054):     27(ptr) Variable Function
+       527(r055):     25(ptr) Variable Function
+       530(r056):     25(ptr) Variable Function
+       533(r057):     25(ptr) Variable Function
+       538(r058):     25(ptr) Variable Function
+       541(r059):     25(ptr) Variable Function
+       548(r060):     25(ptr) Variable Function
+       551(r061):     25(ptr) Variable Function
+       556(r062):     25(ptr) Variable Function
+       559(r063):     25(ptr) Variable Function
+       563(r064):     25(ptr) Variable Function
+       566(r065):     25(ptr) Variable Function
+       569(r066):     25(ptr) Variable Function
              338:   24(fvec2) Load 29(inF0)
              339:   131(bool) All 338
                               Store 337(r000) 339
@@ -6667,7 +6672,7 @@ gl_FragCoord origin is upper left
              390:   24(fvec2) Load 29(inF0)
              391:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 390
                               Store 389(r015) 391
-             395:   26(ivec2) BitCount 394
+             395:  352(ivec2) BitCount 394
                               Store 392(r016) 395
              397:   24(fvec2) Load 29(inF0)
              398:   24(fvec2) DPdx 397
@@ -6709,137 +6714,137 @@ gl_FragCoord origin is upper left
              434:   24(fvec2) Load 31(inF2)
              435:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 432 433 434
                               Store 431(r030) 435
-             439:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 438
-                              Store 436(r031) 439
-             441:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 438
-                              Store 440(r032) 441
-             443:   24(fvec2) Load 29(inF0)
-             444:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 443
-                              Store 442(r033) 444
-             446:   24(fvec2) Load 29(inF0)
-             447:   24(fvec2) Load 30(inF1)
-             448:   24(fvec2) FMod 446 447
-                              Store 445(r035) 448
-             450:   24(fvec2) Load 29(inF0)
-             451:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 450
-                              Store 449(r036) 451
-             453:   24(fvec2) Load 29(inF0)
-             455:454(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 453
-             456:  352(ivec2) CompositeExtract 455 1
-                              Store 30(inF1) 456
-             457:   24(fvec2) CompositeExtract 455 0
-                              Store 452(r037) 457
-             459:   24(fvec2) Load 29(inF0)
-             460:   24(fvec2) Fwidth 459
-                              Store 458(r038) 460
-             463:   24(fvec2) Load 29(inF0)
-             464:  380(bvec2) IsInf 463
-                              Store 462(r039) 464
-             466:   24(fvec2) Load 29(inF0)
-             467:  380(bvec2) IsNan 466
-                              Store 465(r040) 467
-             469:   24(fvec2) Load 29(inF0)
-             470:   24(fvec2) Load 30(inF1)
-             471:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 469 470
-                              Store 468(r041) 471
-             473:   24(fvec2) Load 29(inF0)
-             474:   24(fvec2) Load 30(inF1)
-             475:   24(fvec2) Load 31(inF2)
-             476:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 473 474 475
-                              Store 472(r039a) 476
-             478:   24(fvec2) Load 29(inF0)
-             479:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 478
-                              Store 477(r042) 479
-             481:   24(fvec2) Load 29(inF0)
-             482:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 481
-                              Store 480(r043) 482
-             484:   24(fvec2) Load 29(inF0)
-             485:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 484
-             486:   24(fvec2) VectorTimesScalar 485 263
-                              Store 483(r044) 486
-             488:   24(fvec2) Load 29(inF0)
-             489:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 488
-                              Store 487(r045) 489
-             491:   24(fvec2) Load 29(inF0)
-             492:   24(fvec2) Load 30(inF1)
-             493:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 491 492
-                              Store 490(r046) 493
-             495:   24(fvec2) Load 29(inF0)
-             496:   24(fvec2) Load 30(inF1)
-             497:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 495 496
-                              Store 494(r047) 497
-             499:   24(fvec2) Load 29(inF0)
-             500:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 499
-                              Store 498(r048) 500
-             502:   24(fvec2) Load 29(inF0)
-             503:   24(fvec2) Load 30(inF1)
-             504:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 502 503
-                              Store 501(r049) 504
-             506:   24(fvec2) Load 29(inF0)
-             507:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 506
-                              Store 505(r050) 507
-             509:   24(fvec2) Load 29(inF0)
-             510:   24(fvec2) CompositeConstruct 284 284
-             511:   24(fvec2) FDiv 510 509
-                              Store 508(r051) 511
-             513:   24(fvec2) Load 29(inF0)
-             514:   24(fvec2) Load 30(inF1)
-             515:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 513 514
-                              Store 512(r052) 515
-             517:   24(fvec2) Load 29(inF0)
-             518:   24(fvec2) Load 30(inF1)
-             520:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 517 518 519
-                              Store 516(r053) 520
-             524:   26(ivec2) BitReverse 523
-                              Store 521(r054) 524
-             526:   24(fvec2) Load 29(inF0)
-             527:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 526
-                              Store 525(r055) 527
-             529:   24(fvec2) Load 29(inF0)
-             530:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 529
-                              Store 528(r056) 530
-             532:   24(fvec2) Load 29(inF0)
-             533:   24(fvec2) CompositeConstruct 175 175
-             534:   24(fvec2) CompositeConstruct 284 284
-             535:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 532 533 534
-                              Store 531(r057) 535
-             537:   24(fvec2) Load 29(inF0)
-             538:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 537
-                              Store 536(r058) 538
-             540:   24(fvec2) Load 29(inF0)
-             541:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 540
-                              Store 539(r059) 541
+             440:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 439
+                              Store 436(r031) 440
+             442:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 439
+                              Store 441(r032) 442
+             444:   24(fvec2) Load 29(inF0)
+             445:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 444
+                              Store 443(r033) 445
+             447:   24(fvec2) Load 29(inF0)
+             448:   24(fvec2) Load 30(inF1)
+             449:   24(fvec2) FMod 447 448
+                              Store 446(r035) 449
+             451:   24(fvec2) Load 29(inF0)
+             452:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 451
+                              Store 450(r036) 452
+             454:   24(fvec2) Load 29(inF0)
+             456:455(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 454
+             457:  352(ivec2) CompositeExtract 456 1
+                              Store 30(inF1) 457
+             458:   24(fvec2) CompositeExtract 456 0
+                              Store 453(r037) 458
+             460:   24(fvec2) Load 29(inF0)
+             461:   24(fvec2) Fwidth 460
+                              Store 459(r038) 461
+             464:   24(fvec2) Load 29(inF0)
+             465:  380(bvec2) IsInf 464
+                              Store 463(r039) 465
+             467:   24(fvec2) Load 29(inF0)
+             468:  380(bvec2) IsNan 467
+                              Store 466(r040) 468
+             470:   24(fvec2) Load 29(inF0)
+             471:   24(fvec2) Load 30(inF1)
+             472:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 470 471
+                              Store 469(r041) 472
+             474:   24(fvec2) Load 29(inF0)
+             475:   24(fvec2) Load 30(inF1)
+             476:   24(fvec2) Load 31(inF2)
+             477:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 474 475 476
+                              Store 473(r039a) 477
+             479:   24(fvec2) Load 29(inF0)
+             480:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 479
+                              Store 478(r042) 480
+             482:   24(fvec2) Load 29(inF0)
+             483:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 482
+                              Store 481(r043) 483
+             485:   24(fvec2) Load 29(inF0)
+             486:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 485
+             487:   24(fvec2) VectorTimesScalar 486 262
+                              Store 484(r044) 487
+             489:   24(fvec2) Load 29(inF0)
+             490:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 489
+                              Store 488(r045) 490
+             492:   24(fvec2) Load 29(inF0)
+             493:   24(fvec2) Load 30(inF1)
+             494:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 492 493
+                              Store 491(r046) 494
+             496:   24(fvec2) Load 29(inF0)
+             497:   24(fvec2) Load 30(inF1)
+             498:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 496 497
+                              Store 495(r047) 498
+             500:   24(fvec2) Load 29(inF0)
+             501:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 500
+                              Store 499(r048) 501
+             503:   24(fvec2) Load 29(inF0)
+             504:   24(fvec2) Load 30(inF1)
+             505:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 503 504
+                              Store 502(r049) 505
+             507:   24(fvec2) Load 29(inF0)
+             508:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 507
+                              Store 506(r050) 508
+             510:   24(fvec2) Load 29(inF0)
+             511:   24(fvec2) CompositeConstruct 283 283
+             512:   24(fvec2) FDiv 511 510
+                              Store 509(r051) 512
+             514:   24(fvec2) Load 29(inF0)
+             515:   24(fvec2) Load 30(inF1)
+             516:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 514 515
+                              Store 513(r052) 516
+             518:   24(fvec2) Load 29(inF0)
+             519:   24(fvec2) Load 30(inF1)
+             521:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 518 519 520
+                              Store 517(r053) 521
+             526:   26(ivec2) BitReverse 525
+                              Store 522(r054) 526
+             528:   24(fvec2) Load 29(inF0)
+             529:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 528
+                              Store 527(r055) 529
+             531:   24(fvec2) Load 29(inF0)
+             532:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 531
+                              Store 530(r056) 532
+             534:   24(fvec2) Load 29(inF0)
+             535:   24(fvec2) CompositeConstruct 175 175
+             536:   24(fvec2) CompositeConstruct 283 283
+             537:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 534 535 536
+                              Store 533(r057) 537
+             539:   24(fvec2) Load 29(inF0)
+             540:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 539
+                              Store 538(r058) 540
              542:   24(fvec2) Load 29(inF0)
              543:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 542
-                              Store 30(inF1) 543
+                              Store 541(r059) 543
              544:   24(fvec2) Load 29(inF0)
-             545:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 544
-                              Store 31(inF2) 545
-             547:   24(fvec2) Load 29(inF0)
-             548:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 547
-                              Store 546(r060) 548
-             550:   24(fvec2) Load 29(inF0)
-             551:   24(fvec2) Load 30(inF1)
-             552:   24(fvec2) Load 31(inF2)
-             553:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 550 551 552
-                              Store 549(r061) 553
-             555:   24(fvec2) Load 29(inF0)
-             556:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 555
-                              Store 554(r062) 556
-             558:   24(fvec2) Load 29(inF0)
-             559:   24(fvec2) Load 30(inF1)
-             560:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 558 559
-                              Store 557(r063) 560
-             562:   24(fvec2) Load 29(inF0)
-             563:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 562
-                              Store 561(r064) 563
-             565:   24(fvec2) Load 29(inF0)
-             566:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 565
-                              Store 564(r065) 566
-             568:   24(fvec2) Load 29(inF0)
-             569:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 568
-                              Store 567(r066) 569
-                              ReturnValue 570
+             545:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 544
+                              Store 30(inF1) 545
+             546:   24(fvec2) Load 29(inF0)
+             547:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 546
+                              Store 31(inF2) 547
+             549:   24(fvec2) Load 29(inF0)
+             550:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 549
+                              Store 548(r060) 550
+             552:   24(fvec2) Load 29(inF0)
+             553:   24(fvec2) Load 30(inF1)
+             554:   24(fvec2) Load 31(inF2)
+             555:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 552 553 554
+                              Store 551(r061) 555
+             557:   24(fvec2) Load 29(inF0)
+             558:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 557
+                              Store 556(r062) 558
+             560:   24(fvec2) Load 29(inF0)
+             561:   24(fvec2) Load 30(inF1)
+             562:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 560 561
+                              Store 559(r063) 562
+             564:   24(fvec2) Load 29(inF0)
+             565:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 564
+                              Store 563(r064) 565
+             567:   24(fvec2) Load 29(inF0)
+             568:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 567
+                              Store 566(r065) 568
+             570:   24(fvec2) Load 29(inF0)
+             571:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 570
+                              Store 569(r066) 571
+                              ReturnValue 572
                               FunctionEnd
 46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -6848,306 +6853,306 @@ gl_FragCoord origin is upper left
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-       573(r000):    132(ptr) Variable Function
-       576(r001):     37(ptr) Variable Function
-       579(r002):     37(ptr) Variable Function
-       582(r003):    132(ptr) Variable Function
-       585(r004):     37(ptr) Variable Function
-       590(r005):    589(ptr) Variable Function
-       593(r006):     39(ptr) Variable Function
-       596(r007):     37(ptr) Variable Function
-       599(r009):     37(ptr) Variable Function
-       602(r010):     37(ptr) Variable Function
-       606(r011):     37(ptr) Variable Function
-       609(r012):     37(ptr) Variable Function
-       622(r013):     37(ptr) Variable Function
-       625(r014):     37(ptr) Variable Function
-       628(r015):     39(ptr) Variable Function
-       632(r016):     37(ptr) Variable Function
-       636(r017):     37(ptr) Variable Function
-       639(r018):     37(ptr) Variable Function
-       642(r019):     37(ptr) Variable Function
-       645(r020):     37(ptr) Variable Function
-       648(r021):     37(ptr) Variable Function
-       651(r022):     37(ptr) Variable Function
-       654(r023):     37(ptr) Variable Function
-       657(r024):      7(ptr) Variable Function
-       661(r025):      7(ptr) Variable Function
-       665(r029):     37(ptr) Variable Function
-       668(r030):     37(ptr) Variable Function
-       671(r031):     37(ptr) Variable Function
-       676(r032):     39(ptr) Variable Function
-       680(r033):     39(ptr) Variable Function
-       682(r034):     37(ptr) Variable Function
-       685(r036):     37(ptr) Variable Function
-       689(r037):     37(ptr) Variable Function
-       692(r038):     37(ptr) Variable Function
-       698(r039):     37(ptr) Variable Function
-       702(r040):    701(ptr) Variable Function
-       705(r041):    701(ptr) Variable Function
-       708(r042):     37(ptr) Variable Function
-      712(r039a):     37(ptr) Variable Function
-      717(r039b):     37(ptr) Variable Function
-       723(r043):      7(ptr) Variable Function
-       726(r044):     37(ptr) Variable Function
-       729(r045):     37(ptr) Variable Function
-       733(r046):     37(ptr) Variable Function
-       736(r047):     37(ptr) Variable Function
-       740(r048):     37(ptr) Variable Function
-       744(r049):     37(ptr) Variable Function
-       747(r050):     37(ptr) Variable Function
-       751(r051):     37(ptr) Variable Function
-       754(r052):     37(ptr) Variable Function
-       758(r053):     37(ptr) Variable Function
-       762(r054):     37(ptr) Variable Function
-       766(r055):     39(ptr) Variable Function
-       769(r056):     37(ptr) Variable Function
-       772(r057):     37(ptr) Variable Function
-       775(r058):     37(ptr) Variable Function
-       780(r059):     37(ptr) Variable Function
-       783(r060):     37(ptr) Variable Function
-       790(r061):     37(ptr) Variable Function
-       793(r062):     37(ptr) Variable Function
-       798(r063):     37(ptr) Variable Function
-       801(r064):     37(ptr) Variable Function
-       805(r065):     37(ptr) Variable Function
-       808(r066):     37(ptr) Variable Function
-       811(r067):     37(ptr) Variable Function
-             574:   36(fvec3) Load 41(inF0)
-             575:   131(bool) All 574
-                              Store 573(r000) 575
-             577:   36(fvec3) Load 41(inF0)
-             578:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 577
-                              Store 576(r001) 578
-             580:   36(fvec3) Load 41(inF0)
-             581:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 580
-                              Store 579(r002) 581
-             583:   36(fvec3) Load 41(inF0)
-             584:   131(bool) Any 583
-                              Store 582(r003) 584
-             586:   36(fvec3) Load 41(inF0)
-             587:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 586
-                              Store 585(r004) 587
-             591:   36(fvec3) Load 41(inF0)
-             592:  588(ivec3) Bitcast 591
-                              Store 590(r005) 592
-             594:   36(fvec3) Load 41(inF0)
-             595:   38(ivec3) Bitcast 594
-                              Store 593(r006) 595
-             597:   38(ivec3) Load 44(inU0)
-             598:   36(fvec3) Bitcast 597
-                              Store 596(r007) 598
-             600:   36(fvec3) Load 41(inF0)
-             601:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 600
-                              Store 599(r009) 601
-             603:   36(fvec3) Load 41(inF0)
-             604:   36(fvec3) Load 42(inF1)
-             605:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 603 604
-                              Store 602(r010) 605
-             607:   36(fvec3) Load 41(inF0)
-             608:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 607
-                              Store 606(r011) 608
-             610:   36(fvec3) Load 41(inF0)
-             611:   36(fvec3) Load 42(inF1)
-             612:   36(fvec3) Load 43(inF2)
-             613:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 610 611 612
-                              Store 609(r012) 613
-             614:   36(fvec3) Load 41(inF0)
-             617:  616(bvec3) FOrdLessThan 614 615
-             618:   131(bool) Any 617
-                              SelectionMerge 620 None
-                              BranchConditional 618 619 620
-             619:               Label
+       575(r000):    132(ptr) Variable Function
+       578(r001):     37(ptr) Variable Function
+       581(r002):     37(ptr) Variable Function
+       584(r003):    132(ptr) Variable Function
+       587(r004):     37(ptr) Variable Function
+       592(r005):    591(ptr) Variable Function
+       595(r006):     39(ptr) Variable Function
+       598(r007):     37(ptr) Variable Function
+       601(r009):     37(ptr) Variable Function
+       604(r010):     37(ptr) Variable Function
+       608(r011):     37(ptr) Variable Function
+       611(r012):     37(ptr) Variable Function
+       624(r013):     37(ptr) Variable Function
+       627(r014):     37(ptr) Variable Function
+       630(r015):     39(ptr) Variable Function
+       635(r016):     37(ptr) Variable Function
+       639(r017):     37(ptr) Variable Function
+       642(r018):     37(ptr) Variable Function
+       645(r019):     37(ptr) Variable Function
+       648(r020):     37(ptr) Variable Function
+       651(r021):     37(ptr) Variable Function
+       654(r022):     37(ptr) Variable Function
+       657(r023):     37(ptr) Variable Function
+       660(r024):      7(ptr) Variable Function
+       664(r025):      7(ptr) Variable Function
+       668(r029):     37(ptr) Variable Function
+       671(r030):     37(ptr) Variable Function
+       674(r031):     37(ptr) Variable Function
+       679(r032):     39(ptr) Variable Function
+       683(r033):     39(ptr) Variable Function
+       685(r034):     37(ptr) Variable Function
+       688(r036):     37(ptr) Variable Function
+       692(r037):     37(ptr) Variable Function
+       695(r038):     37(ptr) Variable Function
+       701(r039):     37(ptr) Variable Function
+       705(r040):    704(ptr) Variable Function
+       708(r041):    704(ptr) Variable Function
+       711(r042):     37(ptr) Variable Function
+      715(r039a):     37(ptr) Variable Function
+      720(r039b):     37(ptr) Variable Function
+       726(r043):      7(ptr) Variable Function
+       729(r044):     37(ptr) Variable Function
+       732(r045):     37(ptr) Variable Function
+       736(r046):     37(ptr) Variable Function
+       739(r047):     37(ptr) Variable Function
+       743(r048):     37(ptr) Variable Function
+       747(r049):     37(ptr) Variable Function
+       750(r050):     37(ptr) Variable Function
+       754(r051):     37(ptr) Variable Function
+       757(r052):     37(ptr) Variable Function
+       761(r053):     37(ptr) Variable Function
+       765(r054):     37(ptr) Variable Function
+       769(r055):     39(ptr) Variable Function
+       772(r056):     37(ptr) Variable Function
+       775(r057):     37(ptr) Variable Function
+       778(r058):     37(ptr) Variable Function
+       783(r059):     37(ptr) Variable Function
+       786(r060):     37(ptr) Variable Function
+       793(r061):     37(ptr) Variable Function
+       796(r062):     37(ptr) Variable Function
+       801(r063):     37(ptr) Variable Function
+       804(r064):     37(ptr) Variable Function
+       808(r065):     37(ptr) Variable Function
+       811(r066):     37(ptr) Variable Function
+       814(r067):     37(ptr) Variable Function
+             576:   36(fvec3) Load 41(inF0)
+             577:   131(bool) All 576
+                              Store 575(r000) 577
+             579:   36(fvec3) Load 41(inF0)
+             580:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 579
+                              Store 578(r001) 580
+             582:   36(fvec3) Load 41(inF0)
+             583:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 582
+                              Store 581(r002) 583
+             585:   36(fvec3) Load 41(inF0)
+             586:   131(bool) Any 585
+                              Store 584(r003) 586
+             588:   36(fvec3) Load 41(inF0)
+             589:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 588
+                              Store 587(r004) 589
+             593:   36(fvec3) Load 41(inF0)
+             594:  590(ivec3) Bitcast 593
+                              Store 592(r005) 594
+             596:   36(fvec3) Load 41(inF0)
+             597:   38(ivec3) Bitcast 596
+                              Store 595(r006) 597
+             599:   38(ivec3) Load 44(inU0)
+             600:   36(fvec3) Bitcast 599
+                              Store 598(r007) 600
+             602:   36(fvec3) Load 41(inF0)
+             603:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 602
+                              Store 601(r009) 603
+             605:   36(fvec3) Load 41(inF0)
+             606:   36(fvec3) Load 42(inF1)
+             607:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 605 606
+                              Store 604(r010) 607
+             609:   36(fvec3) Load 41(inF0)
+             610:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 609
+                              Store 608(r011) 610
+             612:   36(fvec3) Load 41(inF0)
+             613:   36(fvec3) Load 42(inF1)
+             614:   36(fvec3) Load 43(inF2)
+             615:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 612 613 614
+                              Store 611(r012) 615
+             616:   36(fvec3) Load 41(inF0)
+             619:  618(bvec3) FOrdLessThan 616 617
+             620:   131(bool) Any 619
+                              SelectionMerge 622 None
+                              BranchConditional 620 621 622
+             621:               Label
                                 Kill
-             620:             Label
-             623:   36(fvec3) Load 41(inF0)
-             624:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 623
-                              Store 622(r013) 624
-             626:   36(fvec3) Load 41(inF0)
-             627:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 626
-                              Store 625(r014) 627
-             631:   38(ivec3) BitCount 630
-                              Store 628(r015) 631
-             633:   36(fvec3) Load 41(inF0)
-             634:   36(fvec3) Load 42(inF1)
-             635:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 633 634
-                              Store 632(r016) 635
-             637:   36(fvec3) Load 41(inF0)
-             638:   36(fvec3) DPdx 637
-                              Store 636(r017) 638
+             622:             Label
+             625:   36(fvec3) Load 41(inF0)
+             626:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 625
+                              Store 624(r013) 626
+             628:   36(fvec3) Load 41(inF0)
+             629:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 628
+                              Store 627(r014) 629
+             634:   38(ivec3) BitCount 633
+                              Store 630(r015) 634
+             636:   36(fvec3) Load 41(inF0)
+             637:   36(fvec3) Load 42(inF1)
+             638:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 636 637
+                              Store 635(r016) 638
              640:   36(fvec3) Load 41(inF0)
-             641:   36(fvec3) DPdxCoarse 640
-                              Store 639(r018) 641
+             641:   36(fvec3) DPdx 640
+                              Store 639(r017) 641
              643:   36(fvec3) Load 41(inF0)
-             644:   36(fvec3) DPdxFine 643
-                              Store 642(r019) 644
+             644:   36(fvec3) DPdxCoarse 643
+                              Store 642(r018) 644
              646:   36(fvec3) Load 41(inF0)
-             647:   36(fvec3) DPdy 646
-                              Store 645(r020) 647
+             647:   36(fvec3) DPdxFine 646
+                              Store 645(r019) 647
              649:   36(fvec3) Load 41(inF0)
-             650:   36(fvec3) DPdyCoarse 649
-                              Store 648(r021) 650
+             650:   36(fvec3) DPdy 649
+                              Store 648(r020) 650
              652:   36(fvec3) Load 41(inF0)
-             653:   36(fvec3) DPdyFine 652
-                              Store 651(r022) 653
+             653:   36(fvec3) DPdyCoarse 652
+                              Store 651(r021) 653
              655:   36(fvec3) Load 41(inF0)
-             656:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 655
-                              Store 654(r023) 656
+             656:   36(fvec3) DPdyFine 655
+                              Store 654(r022) 656
              658:   36(fvec3) Load 41(inF0)
-             659:   36(fvec3) Load 42(inF1)
-             660:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 658 659
-                              Store 657(r024) 660
-             662:   36(fvec3) Load 41(inF0)
-             663:   36(fvec3) Load 42(inF1)
-             664:    6(float) Dot 662 663
-                              Store 661(r025) 664
-             666:   36(fvec3) Load 41(inF0)
-             667:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 666
-                              Store 665(r029) 667
+             659:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 658
+                              Store 657(r023) 659
+             661:   36(fvec3) Load 41(inF0)
+             662:   36(fvec3) Load 42(inF1)
+             663:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 661 662
+                              Store 660(r024) 663
+             665:   36(fvec3) Load 41(inF0)
+             666:   36(fvec3) Load 42(inF1)
+             667:    6(float) Dot 665 666
+                              Store 664(r025) 667
              669:   36(fvec3) Load 41(inF0)
-             670:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 669
-                              Store 668(r030) 670
+             670:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 669
+                              Store 668(r029) 670
              672:   36(fvec3) Load 41(inF0)
-             673:   36(fvec3) Load 42(inF1)
-             674:   36(fvec3) Load 43(inF2)
-             675:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 672 673 674
-                              Store 671(r031) 675
-             679:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 678
-                              Store 676(r032) 679
-             681:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 678
-                              Store 680(r033) 681
-             683:   36(fvec3) Load 41(inF0)
-             684:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 683
-                              Store 682(r034) 684
+             673:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 672
+                              Store 671(r030) 673
+             675:   36(fvec3) Load 41(inF0)
+             676:   36(fvec3) Load 42(inF1)
+             677:   36(fvec3) Load 43(inF2)
+             678:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
+                              Store 674(r031) 678
+             682:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 681
+                              Store 679(r032) 682
+             684:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 681
+                              Store 683(r033) 684
              686:   36(fvec3) Load 41(inF0)
-             687:   36(fvec3) Load 42(inF1)
-             688:   36(fvec3) FMod 686 687
-                              Store 685(r036) 688
-             690:   36(fvec3) Load 41(inF0)
-             691:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 690
-                              Store 689(r037) 691
+             687:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 686
+                              Store 685(r034) 687
+             689:   36(fvec3) Load 41(inF0)
+             690:   36(fvec3) Load 42(inF1)
+             691:   36(fvec3) FMod 689 690
+                              Store 688(r036) 691
              693:   36(fvec3) Load 41(inF0)
-             695:694(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 693
-             696:  588(ivec3) CompositeExtract 695 1
-                              Store 42(inF1) 696
-             697:   36(fvec3) CompositeExtract 695 0
-                              Store 692(r038) 697
-             699:   36(fvec3) Load 41(inF0)
-             700:   36(fvec3) Fwidth 699
-                              Store 698(r039) 700
-             703:   36(fvec3) Load 41(inF0)
-             704:  616(bvec3) IsInf 703
-                              Store 702(r040) 704
+             694:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 693
+                              Store 692(r037) 694
+             696:   36(fvec3) Load 41(inF0)
+             698:697(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 696
+             699:  590(ivec3) CompositeExtract 698 1
+                              Store 42(inF1) 699
+             700:   36(fvec3) CompositeExtract 698 0
+                              Store 695(r038) 700
+             702:   36(fvec3) Load 41(inF0)
+             703:   36(fvec3) Fwidth 702
+                              Store 701(r039) 703
              706:   36(fvec3) Load 41(inF0)
-             707:  616(bvec3) IsNan 706
-                              Store 705(r041) 707
+             707:  618(bvec3) IsInf 706
+                              Store 705(r040) 707
              709:   36(fvec3) Load 41(inF0)
-             710:   36(fvec3) Load 42(inF1)
-             711:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 709 710
-                              Store 708(r042) 711
-             713:   36(fvec3) Load 41(inF0)
-             714:   36(fvec3) Load 42(inF1)
-             715:   36(fvec3) Load 43(inF2)
-             716:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 713 714 715
-                              Store 712(r039a) 716
-             718:   36(fvec3) Load 41(inF0)
-             719:   36(fvec3) Load 42(inF1)
-             721:   36(fvec3) CompositeConstruct 720 720 720
-             722:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 718 719 721
-                              Store 717(r039b) 722
-             724:   36(fvec3) Load 41(inF0)
-             725:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 724
-                              Store 723(r043) 725
+             710:  618(bvec3) IsNan 709
+                              Store 708(r041) 710
+             712:   36(fvec3) Load 41(inF0)
+             713:   36(fvec3) Load 42(inF1)
+             714:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 712 713
+                              Store 711(r042) 714
+             716:   36(fvec3) Load 41(inF0)
+             717:   36(fvec3) Load 42(inF1)
+             718:   36(fvec3) Load 43(inF2)
+             719:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 716 717 718
+                              Store 715(r039a) 719
+             721:   36(fvec3) Load 41(inF0)
+             722:   36(fvec3) Load 42(inF1)
+             724:   36(fvec3) CompositeConstruct 723 723 723
+             725:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 721 722 724
+                              Store 720(r039b) 725
              727:   36(fvec3) Load 41(inF0)
-             728:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 727
-                              Store 726(r044) 728
+             728:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 727
+                              Store 726(r043) 728
              730:   36(fvec3) Load 41(inF0)
-             731:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 730
-             732:   36(fvec3) VectorTimesScalar 731 263
-                              Store 729(r045) 732
-             734:   36(fvec3) Load 41(inF0)
-             735:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 734
-                              Store 733(r046) 735
+             731:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 730
+                              Store 729(r044) 731
+             733:   36(fvec3) Load 41(inF0)
+             734:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 733
+             735:   36(fvec3) VectorTimesScalar 734 262
+                              Store 732(r045) 735
              737:   36(fvec3) Load 41(inF0)
-             738:   36(fvec3) Load 42(inF1)
-             739:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 737 738
-                              Store 736(r047) 739
-             741:   36(fvec3) Load 41(inF0)
-             742:   36(fvec3) Load 42(inF1)
-             743:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 741 742
-                              Store 740(r048) 743
-             745:   36(fvec3) Load 41(inF0)
-             746:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 745
-                              Store 744(r049) 746
+             738:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 737
+                              Store 736(r046) 738
+             740:   36(fvec3) Load 41(inF0)
+             741:   36(fvec3) Load 42(inF1)
+             742:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 740 741
+                              Store 739(r047) 742
+             744:   36(fvec3) Load 41(inF0)
+             745:   36(fvec3) Load 42(inF1)
+             746:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 744 745
+                              Store 743(r048) 746
              748:   36(fvec3) Load 41(inF0)
-             749:   36(fvec3) Load 42(inF1)
-             750:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 748 749
-                              Store 747(r050) 750
-             752:   36(fvec3) Load 41(inF0)
-             753:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 752
-                              Store 751(r051) 753
+             749:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 748
+                              Store 747(r049) 749
+             751:   36(fvec3) Load 41(inF0)
+             752:   36(fvec3) Load 42(inF1)
+             753:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 751 752
+                              Store 750(r050) 753
              755:   36(fvec3) Load 41(inF0)
-             756:   36(fvec3) CompositeConstruct 284 284 284
-             757:   36(fvec3) FDiv 756 755
-                              Store 754(r052) 757
-             759:   36(fvec3) Load 41(inF0)
-             760:   36(fvec3) Load 42(inF1)
-             761:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 759 760
-                              Store 758(r053) 761
-             763:   36(fvec3) Load 41(inF0)
-             764:   36(fvec3) Load 42(inF1)
-             765:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 763 764 519
-                              Store 762(r054) 765
-             768:   38(ivec3) BitReverse 767
-                              Store 766(r055) 768
-             770:   36(fvec3) Load 41(inF0)
-             771:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 770
-                              Store 769(r056) 771
+             756:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 755
+                              Store 754(r051) 756
+             758:   36(fvec3) Load 41(inF0)
+             759:   36(fvec3) CompositeConstruct 283 283 283
+             760:   36(fvec3) FDiv 759 758
+                              Store 757(r052) 760
+             762:   36(fvec3) Load 41(inF0)
+             763:   36(fvec3) Load 42(inF1)
+             764:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 762 763
+                              Store 761(r053) 764
+             766:   36(fvec3) Load 41(inF0)
+             767:   36(fvec3) Load 42(inF1)
+             768:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 766 767 520
+                              Store 765(r054) 768
+             771:   38(ivec3) BitReverse 770
+                              Store 769(r055) 771
              773:   36(fvec3) Load 41(inF0)
-             774:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 773
-                              Store 772(r057) 774
+             774:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 773
+                              Store 772(r056) 774
              776:   36(fvec3) Load 41(inF0)
-             777:   36(fvec3) CompositeConstruct 175 175 175
-             778:   36(fvec3) CompositeConstruct 284 284 284
-             779:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 776 777 778
-                              Store 775(r058) 779
-             781:   36(fvec3) Load 41(inF0)
-             782:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 781
-                              Store 780(r059) 782
+             777:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 776
+                              Store 775(r057) 777
+             779:   36(fvec3) Load 41(inF0)
+             780:   36(fvec3) CompositeConstruct 175 175 175
+             781:   36(fvec3) CompositeConstruct 283 283 283
+             782:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 779 780 781
+                              Store 778(r058) 782
              784:   36(fvec3) Load 41(inF0)
-             785:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 784
-                              Store 783(r060) 785
-             786:   36(fvec3) Load 41(inF0)
-             787:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 786
-                              Store 42(inF1) 787
-             788:   36(fvec3) Load 41(inF0)
-             789:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 788
-                              Store 43(inF2) 789
+             785:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 784
+                              Store 783(r059) 785
+             787:   36(fvec3) Load 41(inF0)
+             788:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 787
+                              Store 786(r060) 788
+             789:   36(fvec3) Load 41(inF0)
+             790:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 789
+                              Store 42(inF1) 790
              791:   36(fvec3) Load 41(inF0)
-             792:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 791
-                              Store 790(r061) 792
+             792:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 791
+                              Store 43(inF2) 792
              794:   36(fvec3) Load 41(inF0)
-             795:   36(fvec3) Load 42(inF1)
-             796:   36(fvec3) Load 43(inF2)
-             797:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 794 795 796
-                              Store 793(r062) 797
-             799:   36(fvec3) Load 41(inF0)
-             800:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 799
-                              Store 798(r063) 800
+             795:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 794
+                              Store 793(r061) 795
+             797:   36(fvec3) Load 41(inF0)
+             798:   36(fvec3) Load 42(inF1)
+             799:   36(fvec3) Load 43(inF2)
+             800:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 797 798 799
+                              Store 796(r062) 800
              802:   36(fvec3) Load 41(inF0)
-             803:   36(fvec3) Load 42(inF1)
-             804:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 802 803
-                              Store 801(r064) 804
-             806:   36(fvec3) Load 41(inF0)
-             807:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 806
-                              Store 805(r065) 807
+             803:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 802
+                              Store 801(r063) 803
+             805:   36(fvec3) Load 41(inF0)
+             806:   36(fvec3) Load 42(inF1)
+             807:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 805 806
+                              Store 804(r064) 807
              809:   36(fvec3) Load 41(inF0)
-             810:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 809
-                              Store 808(r066) 810
+             810:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 809
+                              Store 808(r065) 810
              812:   36(fvec3) Load 41(inF0)
-             813:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 812
-                              Store 811(r067) 813
-                              ReturnValue 815
+             813:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 812
+                              Store 811(r066) 813
+             815:   36(fvec3) Load 41(inF0)
+             816:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 815
+                              Store 814(r067) 816
+                              ReturnValue 818
                               FunctionEnd
 58(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -7156,1018 +7161,1018 @@ gl_FragCoord origin is upper left
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-       818(r000):    132(ptr) Variable Function
-       821(r001):     49(ptr) Variable Function
-       824(r002):     49(ptr) Variable Function
-       827(r003):    132(ptr) Variable Function
-       830(r004):     49(ptr) Variable Function
-       835(r005):    834(ptr) Variable Function
-       838(r006):     51(ptr) Variable Function
-       841(r007):     49(ptr) Variable Function
-       844(r009):     49(ptr) Variable Function
-       847(r010):     49(ptr) Variable Function
-       851(r011):     49(ptr) Variable Function
-       854(r012):     49(ptr) Variable Function
-       867(r013):     49(ptr) Variable Function
-       870(r014):     49(ptr) Variable Function
-       873(r015):     51(ptr) Variable Function
-       876(r016):     49(ptr) Variable Function
-       879(r017):     49(ptr) Variable Function
-       882(r018):     49(ptr) Variable Function
-       885(r019):     49(ptr) Variable Function
-       888(r020):     49(ptr) Variable Function
-       891(r021):     49(ptr) Variable Function
-       894(r022):     49(ptr) Variable Function
-       897(r023):      7(ptr) Variable Function
-       901(r024):      7(ptr) Variable Function
-       905(r025):     49(ptr) Variable Function
-       916(r029):     49(ptr) Variable Function
-       919(r030):     49(ptr) Variable Function
-       922(r031):     49(ptr) Variable Function
-       927(r032):     51(ptr) Variable Function
-       932(r033):     51(ptr) Variable Function
-       934(r034):     49(ptr) Variable Function
-       937(r036):     49(ptr) Variable Function
-       941(r037):     49(ptr) Variable Function
-       944(r038):     49(ptr) Variable Function
-       950(r039):     49(ptr) Variable Function
-       954(r040):    953(ptr) Variable Function
-       957(r041):    953(ptr) Variable Function
-       960(r042):     49(ptr) Variable Function
-      964(r039a):     49(ptr) Variable Function
-       969(r043):      7(ptr) Variable Function
-       972(r044):     49(ptr) Variable Function
-       975(r045):     49(ptr) Variable Function
-       979(r046):     49(ptr) Variable Function
-       982(r047):     49(ptr) Variable Function
-       986(r048):     49(ptr) Variable Function
-       990(r049):     49(ptr) Variable Function
-       993(r050):     49(ptr) Variable Function
-       997(r051):     49(ptr) Variable Function
-      1000(r052):     49(ptr) Variable Function
-      1004(r053):     49(ptr) Variable Function
-      1008(r054):     49(ptr) Variable Function
-      1012(r055):     51(ptr) Variable Function
-      1015(r056):     49(ptr) Variable Function
-      1018(r057):     49(ptr) Variable Function
-      1021(r058):     49(ptr) Variable Function
-      1026(r059):     49(ptr) Variable Function
-      1029(r060):     49(ptr) Variable Function
-      1036(r061):     49(ptr) Variable Function
-      1039(r062):     49(ptr) Variable Function
-      1044(r063):     49(ptr) Variable Function
-      1047(r064):     49(ptr) Variable Function
-      1051(r065):     49(ptr) Variable Function
-      1054(r066):     49(ptr) Variable Function
-      1057(r067):     49(ptr) Variable Function
-             819:   48(fvec4) Load 53(inF0)
-             820:   131(bool) All 819
-                              Store 818(r000) 820
+       821(r000):    132(ptr) Variable Function
+       824(r001):     49(ptr) Variable Function
+       827(r002):     49(ptr) Variable Function
+       830(r003):    132(ptr) Variable Function
+       833(r004):     49(ptr) Variable Function
+       838(r005):    837(ptr) Variable Function
+       841(r006):     51(ptr) Variable Function
+       844(r007):     49(ptr) Variable Function
+       847(r009):     49(ptr) Variable Function
+       850(r010):     49(ptr) Variable Function
+       854(r011):     49(ptr) Variable Function
+       857(r012):     49(ptr) Variable Function
+       870(r013):     49(ptr) Variable Function
+       873(r014):     49(ptr) Variable Function
+       876(r015):     51(ptr) Variable Function
+       879(r016):     49(ptr) Variable Function
+       882(r017):     49(ptr) Variable Function
+       885(r018):     49(ptr) Variable Function
+       888(r019):     49(ptr) Variable Function
+       891(r020):     49(ptr) Variable Function
+       894(r021):     49(ptr) Variable Function
+       897(r022):     49(ptr) Variable Function
+       900(r023):      7(ptr) Variable Function
+       904(r024):      7(ptr) Variable Function
+       908(r025):     49(ptr) Variable Function
+       919(r029):     49(ptr) Variable Function
+       922(r030):     49(ptr) Variable Function
+       925(r031):     49(ptr) Variable Function
+       930(r032):     51(ptr) Variable Function
+       935(r033):     51(ptr) Variable Function
+       937(r034):     49(ptr) Variable Function
+       940(r036):     49(ptr) Variable Function
+       944(r037):     49(ptr) Variable Function
+       947(r038):     49(ptr) Variable Function
+       953(r039):     49(ptr) Variable Function
+       957(r040):    956(ptr) Variable Function
+       960(r041):    956(ptr) Variable Function
+       963(r042):     49(ptr) Variable Function
+      967(r039a):     49(ptr) Variable Function
+       972(r043):      7(ptr) Variable Function
+       975(r044):     49(ptr) Variable Function
+       978(r045):     49(ptr) Variable Function
+       982(r046):     49(ptr) Variable Function
+       985(r047):     49(ptr) Variable Function
+       989(r048):     49(ptr) Variable Function
+       993(r049):     49(ptr) Variable Function
+       996(r050):     49(ptr) Variable Function
+      1000(r051):     49(ptr) Variable Function
+      1003(r052):     49(ptr) Variable Function
+      1007(r053):     49(ptr) Variable Function
+      1011(r054):     49(ptr) Variable Function
+      1015(r055):     51(ptr) Variable Function
+      1018(r056):     49(ptr) Variable Function
+      1021(r057):     49(ptr) Variable Function
+      1024(r058):     49(ptr) Variable Function
+      1029(r059):     49(ptr) Variable Function
+      1032(r060):     49(ptr) Variable Function
+      1039(r061):     49(ptr) Variable Function
+      1042(r062):     49(ptr) Variable Function
+      1047(r063):     49(ptr) Variable Function
+      1050(r064):     49(ptr) Variable Function
+      1054(r065):     49(ptr) Variable Function
+      1057(r066):     49(ptr) Variable Function
+      1060(r067):     49(ptr) Variable Function
              822:   48(fvec4) Load 53(inF0)
-             823:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 822
-                              Store 821(r001) 823
+             823:   131(bool) All 822
+                              Store 821(r000) 823
              825:   48(fvec4) Load 53(inF0)
-             826:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 825
-                              Store 824(r002) 826
+             826:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 825
+                              Store 824(r001) 826
              828:   48(fvec4) Load 53(inF0)
-             829:   131(bool) Any 828
-                              Store 827(r003) 829
+             829:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 828
+                              Store 827(r002) 829
              831:   48(fvec4) Load 53(inF0)
-             832:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 831
-                              Store 830(r004) 832
-             836:   48(fvec4) Load 53(inF0)
-             837:  833(ivec4) Bitcast 836
-                              Store 835(r005) 837
+             832:   131(bool) Any 831
+                              Store 830(r003) 832
+             834:   48(fvec4) Load 53(inF0)
+             835:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 834
+                              Store 833(r004) 835
              839:   48(fvec4) Load 53(inF0)
-             840:   50(ivec4) Bitcast 839
-                              Store 838(r006) 840
-             842:   50(ivec4) Load 56(inU0)
-             843:   48(fvec4) Bitcast 842
-                              Store 841(r007) 843
-             845:   48(fvec4) Load 53(inF0)
-             846:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 845
-                              Store 844(r009) 846
+             840:  836(ivec4) Bitcast 839
+                              Store 838(r005) 840
+             842:   48(fvec4) Load 53(inF0)
+             843:   50(ivec4) Bitcast 842
+                              Store 841(r006) 843
+             845:   50(ivec4) Load 56(inU0)
+             846:   48(fvec4) Bitcast 845
+                              Store 844(r007) 846
              848:   48(fvec4) Load 53(inF0)
-             849:   48(fvec4) Load 54(inF1)
-             850:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 848 849
-                              Store 847(r010) 850
-             852:   48(fvec4) Load 53(inF0)
-             853:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 852
-                              Store 851(r011) 853
+             849:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 848
+                              Store 847(r009) 849
+             851:   48(fvec4) Load 53(inF0)
+             852:   48(fvec4) Load 54(inF1)
+             853:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 851 852
+                              Store 850(r010) 853
              855:   48(fvec4) Load 53(inF0)
-             856:   48(fvec4) Load 54(inF1)
-             857:   48(fvec4) Load 55(inF2)
-             858:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 855 856 857
-                              Store 854(r012) 858
-             859:   48(fvec4) Load 53(inF0)
-             862:  861(bvec4) FOrdLessThan 859 860
-             863:   131(bool) Any 862
-                              SelectionMerge 865 None
-                              BranchConditional 863 864 865
-             864:               Label
+             856:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 855
+                              Store 854(r011) 856
+             858:   48(fvec4) Load 53(inF0)
+             859:   48(fvec4) Load 54(inF1)
+             860:   48(fvec4) Load 55(inF2)
+             861:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 858 859 860
+                              Store 857(r012) 861
+             862:   48(fvec4) Load 53(inF0)
+             865:  864(bvec4) FOrdLessThan 862 863
+             866:   131(bool) Any 865
+                              SelectionMerge 868 None
+                              BranchConditional 866 867 868
+             867:               Label
                                 Kill
-             865:             Label
-             868:   48(fvec4) Load 53(inF0)
-             869:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 868
-                              Store 867(r013) 869
+             868:             Label
              871:   48(fvec4) Load 53(inF0)
-             872:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 871
-                              Store 870(r014) 872
-             875:   50(ivec4) BitCount 874
-                              Store 873(r015) 875
-             877:   48(fvec4) Load 53(inF0)
-             878:   48(fvec4) DPdx 877
-                              Store 876(r016) 878
+             872:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 871
+                              Store 870(r013) 872
+             874:   48(fvec4) Load 53(inF0)
+             875:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 874
+                              Store 873(r014) 875
+             878:   50(ivec4) BitCount 877
+                              Store 876(r015) 878
              880:   48(fvec4) Load 53(inF0)
-             881:   48(fvec4) DPdxCoarse 880
-                              Store 879(r017) 881
+             881:   48(fvec4) DPdx 880
+                              Store 879(r016) 881
              883:   48(fvec4) Load 53(inF0)
-             884:   48(fvec4) DPdxFine 883
-                              Store 882(r018) 884
+             884:   48(fvec4) DPdxCoarse 883
+                              Store 882(r017) 884
              886:   48(fvec4) Load 53(inF0)
-             887:   48(fvec4) DPdy 886
-                              Store 885(r019) 887
+             887:   48(fvec4) DPdxFine 886
+                              Store 885(r018) 887
              889:   48(fvec4) Load 53(inF0)
-             890:   48(fvec4) DPdyCoarse 889
-                              Store 888(r020) 890
+             890:   48(fvec4) DPdy 889
+                              Store 888(r019) 890
              892:   48(fvec4) Load 53(inF0)
-             893:   48(fvec4) DPdyFine 892
-                              Store 891(r021) 893
+             893:   48(fvec4) DPdyCoarse 892
+                              Store 891(r020) 893
              895:   48(fvec4) Load 53(inF0)
-             896:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 895
-                              Store 894(r022) 896
+             896:   48(fvec4) DPdyFine 895
+                              Store 894(r021) 896
              898:   48(fvec4) Load 53(inF0)
-             899:   48(fvec4) Load 54(inF1)
-             900:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 898 899
-                              Store 897(r023) 900
-             902:   48(fvec4) Load 53(inF0)
-             903:   48(fvec4) Load 54(inF1)
-             904:    6(float) Dot 902 903
-                              Store 901(r024) 904
-             906:      7(ptr) AccessChain 53(inF0) 522
-             907:    6(float) Load 906
-             908:      7(ptr) AccessChain 54(inF1) 522
-             909:    6(float) Load 908
-             910:    6(float) FMul 907 909
-             911:      7(ptr) AccessChain 53(inF0) 288
+             899:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 898
+                              Store 897(r022) 899
+             901:   48(fvec4) Load 53(inF0)
+             902:   48(fvec4) Load 54(inF1)
+             903:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 901 902
+                              Store 900(r023) 903
+             905:   48(fvec4) Load 53(inF0)
+             906:   48(fvec4) Load 54(inF1)
+             907:    6(float) Dot 905 906
+                              Store 904(r024) 907
+             909:      7(ptr) AccessChain 53(inF0) 523
+             910:    6(float) Load 909
+             911:      7(ptr) AccessChain 54(inF1) 523
              912:    6(float) Load 911
-             913:      7(ptr) AccessChain 54(inF1) 393
-             914:    6(float) Load 913
-             915:   48(fvec4) CompositeConstruct 284 910 912 914
-                              Store 905(r025) 915
-             917:   48(fvec4) Load 53(inF0)
-             918:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 917
-                              Store 916(r029) 918
+             913:    6(float) FMul 910 912
+             914:      7(ptr) AccessChain 53(inF0) 524
+             915:    6(float) Load 914
+             916:      7(ptr) AccessChain 54(inF1) 631
+             917:    6(float) Load 916
+             918:   48(fvec4) CompositeConstruct 283 913 915 917
+                              Store 908(r025) 918
              920:   48(fvec4) Load 53(inF0)
-             921:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 920
-                              Store 919(r030) 921
+             921:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 920
+                              Store 919(r029) 921
              923:   48(fvec4) Load 53(inF0)
-             924:   48(fvec4) Load 54(inF1)
-             925:   48(fvec4) Load 55(inF2)
-             926:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 923 924 925
-                              Store 922(r031) 926
-             931:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 930
-                              Store 927(r032) 931
-             933:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 930
-                              Store 932(r033) 933
-             935:   48(fvec4) Load 53(inF0)
-             936:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 935
-                              Store 934(r034) 936
+             924:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 923
+                              Store 922(r030) 924
+             926:   48(fvec4) Load 53(inF0)
+             927:   48(fvec4) Load 54(inF1)
+             928:   48(fvec4) Load 55(inF2)
+             929:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 926 927 928
+                              Store 925(r031) 929
+             934:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 933
+                              Store 930(r032) 934
+             936:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 933
+                              Store 935(r033) 936
              938:   48(fvec4) Load 53(inF0)
-             939:   48(fvec4) Load 54(inF1)
-             940:   48(fvec4) FMod 938 939
-                              Store 937(r036) 940
-             942:   48(fvec4) Load 53(inF0)
-             943:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 942
-                              Store 941(r037) 943
+             939:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 938
+                              Store 937(r034) 939
+             941:   48(fvec4) Load 53(inF0)
+             942:   48(fvec4) Load 54(inF1)
+             943:   48(fvec4) FMod 941 942
+                              Store 940(r036) 943
              945:   48(fvec4) Load 53(inF0)
-             947:946(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 945
-             948:  833(ivec4) CompositeExtract 947 1
-                              Store 54(inF1) 948
-             949:   48(fvec4) CompositeExtract 947 0
-                              Store 944(r038) 949
-             951:   48(fvec4) Load 53(inF0)
-             952:   48(fvec4) Fwidth 951
-                              Store 950(r039) 952
-             955:   48(fvec4) Load 53(inF0)
-             956:  861(bvec4) IsInf 955
-                              Store 954(r040) 956
+             946:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 945
+                              Store 944(r037) 946
+             948:   48(fvec4) Load 53(inF0)
+             950:949(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 948
+             951:  836(ivec4) CompositeExtract 950 1
+                              Store 54(inF1) 951
+             952:   48(fvec4) CompositeExtract 950 0
+                              Store 947(r038) 952
+             954:   48(fvec4) Load 53(inF0)
+             955:   48(fvec4) Fwidth 954
+                              Store 953(r039) 955
              958:   48(fvec4) Load 53(inF0)
-             959:  861(bvec4) IsNan 958
-                              Store 957(r041) 959
+             959:  864(bvec4) IsInf 958
+                              Store 957(r040) 959
              961:   48(fvec4) Load 53(inF0)
-             962:   48(fvec4) Load 54(inF1)
-             963:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 961 962
-                              Store 960(r042) 963
-             965:   48(fvec4) Load 53(inF0)
-             966:   48(fvec4) Load 54(inF1)
-             967:   48(fvec4) Load 55(inF2)
-             968:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 965 966 967
-                              Store 964(r039a) 968
-             970:   48(fvec4) Load 53(inF0)
-             971:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 970
-                              Store 969(r043) 971
+             962:  864(bvec4) IsNan 961
+                              Store 960(r041) 962
+             964:   48(fvec4) Load 53(inF0)
+             965:   48(fvec4) Load 54(inF1)
+             966:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 964 965
+                              Store 963(r042) 966
+             968:   48(fvec4) Load 53(inF0)
+             969:   48(fvec4) Load 54(inF1)
+             970:   48(fvec4) Load 55(inF2)
+             971:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 968 969 970
+                              Store 967(r039a) 971
              973:   48(fvec4) Load 53(inF0)
-             974:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 973
-                              Store 972(r044) 974
+             974:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 973
+                              Store 972(r043) 974
              976:   48(fvec4) Load 53(inF0)
-             977:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 976
-             978:   48(fvec4) VectorTimesScalar 977 263
-                              Store 975(r045) 978
-             980:   48(fvec4) Load 53(inF0)
-             981:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 980
-                              Store 979(r046) 981
+             977:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 976
+                              Store 975(r044) 977
+             979:   48(fvec4) Load 53(inF0)
+             980:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 979
+             981:   48(fvec4) VectorTimesScalar 980 262
+                              Store 978(r045) 981
              983:   48(fvec4) Load 53(inF0)
-             984:   48(fvec4) Load 54(inF1)
-             985:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 983 984
-                              Store 982(r047) 985
-             987:   48(fvec4) Load 53(inF0)
-             988:   48(fvec4) Load 54(inF1)
-             989:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 987 988
-                              Store 986(r048) 989
-             991:   48(fvec4) Load 53(inF0)
-             992:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 991
-                              Store 990(r049) 992
+             984:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 983
+                              Store 982(r046) 984
+             986:   48(fvec4) Load 53(inF0)
+             987:   48(fvec4) Load 54(inF1)
+             988:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 986 987
+                              Store 985(r047) 988
+             990:   48(fvec4) Load 53(inF0)
+             991:   48(fvec4) Load 54(inF1)
+             992:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 990 991
+                              Store 989(r048) 992
              994:   48(fvec4) Load 53(inF0)
-             995:   48(fvec4) Load 54(inF1)
-             996:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 994 995
-                              Store 993(r050) 996
-             998:   48(fvec4) Load 53(inF0)
-             999:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 998
-                              Store 997(r051) 999
+             995:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 994
+                              Store 993(r049) 995
+             997:   48(fvec4) Load 53(inF0)
+             998:   48(fvec4) Load 54(inF1)
+             999:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 997 998
+                              Store 996(r050) 999
             1001:   48(fvec4) Load 53(inF0)
-            1002:   48(fvec4) CompositeConstruct 284 284 284 284
-            1003:   48(fvec4) FDiv 1002 1001
-                              Store 1000(r052) 1003
-            1005:   48(fvec4) Load 53(inF0)
-            1006:   48(fvec4) Load 54(inF1)
-            1007:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1005 1006
-                              Store 1004(r053) 1007
-            1009:   48(fvec4) Load 53(inF0)
-            1010:   48(fvec4) Load 54(inF1)
-            1011:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1009 1010 519
-                              Store 1008(r054) 1011
-            1014:   50(ivec4) BitReverse 1013
-                              Store 1012(r055) 1014
-            1016:   48(fvec4) Load 53(inF0)
-            1017:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1016
-                              Store 1015(r056) 1017
+            1002:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1001
+                              Store 1000(r051) 1002
+            1004:   48(fvec4) Load 53(inF0)
+            1005:   48(fvec4) CompositeConstruct 283 283 283 283
+            1006:   48(fvec4) FDiv 1005 1004
+                              Store 1003(r052) 1006
+            1008:   48(fvec4) Load 53(inF0)
+            1009:   48(fvec4) Load 54(inF1)
+            1010:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1008 1009
+                              Store 1007(r053) 1010
+            1012:   48(fvec4) Load 53(inF0)
+            1013:   48(fvec4) Load 54(inF1)
+            1014:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1012 1013 520
+                              Store 1011(r054) 1014
+            1017:   50(ivec4) BitReverse 1016
+                              Store 1015(r055) 1017
             1019:   48(fvec4) Load 53(inF0)
-            1020:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1019
-                              Store 1018(r057) 1020
+            1020:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1019
+                              Store 1018(r056) 1020
             1022:   48(fvec4) Load 53(inF0)
-            1023:   48(fvec4) CompositeConstruct 175 175 175 175
-            1024:   48(fvec4) CompositeConstruct 284 284 284 284
-            1025:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1022 1023 1024
-                              Store 1021(r058) 1025
-            1027:   48(fvec4) Load 53(inF0)
-            1028:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1027
-                              Store 1026(r059) 1028
+            1023:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1022
+                              Store 1021(r057) 1023
+            1025:   48(fvec4) Load 53(inF0)
+            1026:   48(fvec4) CompositeConstruct 175 175 175 175
+            1027:   48(fvec4) CompositeConstruct 283 283 283 283
+            1028:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1025 1026 1027
+                              Store 1024(r058) 1028
             1030:   48(fvec4) Load 53(inF0)
-            1031:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1030
-                              Store 1029(r060) 1031
-            1032:   48(fvec4) Load 53(inF0)
-            1033:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1032
-                              Store 54(inF1) 1033
-            1034:   48(fvec4) Load 53(inF0)
-            1035:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1034
-                              Store 55(inF2) 1035
+            1031:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1030
+                              Store 1029(r059) 1031
+            1033:   48(fvec4) Load 53(inF0)
+            1034:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1033
+                              Store 1032(r060) 1034
+            1035:   48(fvec4) Load 53(inF0)
+            1036:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1035
+                              Store 54(inF1) 1036
             1037:   48(fvec4) Load 53(inF0)
-            1038:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1037
-                              Store 1036(r061) 1038
+            1038:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1037
+                              Store 55(inF2) 1038
             1040:   48(fvec4) Load 53(inF0)
-            1041:   48(fvec4) Load 54(inF1)
-            1042:   48(fvec4) Load 55(inF2)
-            1043:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1040 1041 1042
-                              Store 1039(r062) 1043
-            1045:   48(fvec4) Load 53(inF0)
-            1046:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1045
-                              Store 1044(r063) 1046
+            1041:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1040
+                              Store 1039(r061) 1041
+            1043:   48(fvec4) Load 53(inF0)
+            1044:   48(fvec4) Load 54(inF1)
+            1045:   48(fvec4) Load 55(inF2)
+            1046:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1043 1044 1045
+                              Store 1042(r062) 1046
             1048:   48(fvec4) Load 53(inF0)
-            1049:   48(fvec4) Load 54(inF1)
-            1050:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1048 1049
-                              Store 1047(r064) 1050
-            1052:   48(fvec4) Load 53(inF0)
-            1053:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1052
-                              Store 1051(r065) 1053
+            1049:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1048
+                              Store 1047(r063) 1049
+            1051:   48(fvec4) Load 53(inF0)
+            1052:   48(fvec4) Load 54(inF1)
+            1053:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1051 1052
+                              Store 1050(r064) 1053
             1055:   48(fvec4) Load 53(inF0)
-            1056:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1055
-                              Store 1054(r066) 1056
+            1056:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1055
+                              Store 1054(r065) 1056
             1058:   48(fvec4) Load 53(inF0)
-            1059:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1058
-                              Store 1057(r067) 1059
-                              ReturnValue 1061
+            1059:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1058
+                              Store 1057(r066) 1059
+            1061:   48(fvec4) Load 53(inF0)
+            1062:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1061
+                              Store 1060(r067) 1062
+                              ReturnValue 1064
                               FunctionEnd
 66(PixelShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
         63(inF0):     61(ptr) FunctionParameter
         64(inF1):     61(ptr) FunctionParameter
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
-      1064(r000):    132(ptr) Variable Function
-      1067(r001):     61(ptr) Variable Function
-      1072(r003):    132(ptr) Variable Function
-      1075(r004):     61(ptr) Variable Function
-      1078(r005):     61(ptr) Variable Function
-      1081(r006):     61(ptr) Variable Function
-      1085(r007):     61(ptr) Variable Function
-      1096(r008):     61(ptr) Variable Function
-      1101(r009):     61(ptr) Variable Function
-      1104(r010):     61(ptr) Variable Function
-      1107(r011):     61(ptr) Variable Function
-      1110(r012):     61(ptr) Variable Function
-      1113(r013):     61(ptr) Variable Function
-      1116(r014):     61(ptr) Variable Function
-      1119(r015):     61(ptr) Variable Function
-      1122(r016):     61(ptr) Variable Function
-      1125(r017):     61(ptr) Variable Function
-      1128(r018):      7(ptr) Variable Function
-      1131(r019):     61(ptr) Variable Function
-      1134(R020):     61(ptr) Variable Function
-      1137(r021):     61(ptr) Variable Function
-      1140(r022):     61(ptr) Variable Function
-      1150(r023):     61(ptr) Variable Function
-      1153(r024):     61(ptr) Variable Function
-      1159(r025):     61(ptr) Variable Function
-      1162(r026):     61(ptr) Variable Function
-     1166(r026a):     61(ptr) Variable Function
-      1171(r027):     61(ptr) Variable Function
-      1174(r028):     61(ptr) Variable Function
-      1178(r029):     61(ptr) Variable Function
-      1181(r030):     61(ptr) Variable Function
-      1185(r031):     61(ptr) Variable Function
-      1189(r032):     61(ptr) Variable Function
-      1193(r033):     61(ptr) Variable Function
-      1196(r034):     61(ptr) Variable Function
-      1199(r035):     61(ptr) Variable Function
-      1202(r036):     61(ptr) Variable Function
-      1207(r037):     61(ptr) Variable Function
-      1210(r038):     61(ptr) Variable Function
-      1217(r039):     61(ptr) Variable Function
-      1220(r049):     61(ptr) Variable Function
-      1225(r041):     61(ptr) Variable Function
-      1228(r042):     61(ptr) Variable Function
-      1232(r043):     61(ptr) Variable Function
-      1235(r044):     61(ptr) Variable Function
-      1240(r046):     61(ptr) Variable Function
-            1065:          60 Load 63(inF0)
-            1066:   131(bool) All 1065
-                              Store 1064(r000) 1066
+      1067(r000):    132(ptr) Variable Function
+      1070(r001):     61(ptr) Variable Function
+      1075(r003):    132(ptr) Variable Function
+      1078(r004):     61(ptr) Variable Function
+      1081(r005):     61(ptr) Variable Function
+      1084(r006):     61(ptr) Variable Function
+      1088(r007):     61(ptr) Variable Function
+      1099(r008):     61(ptr) Variable Function
+      1104(r009):     61(ptr) Variable Function
+      1107(r010):     61(ptr) Variable Function
+      1110(r011):     61(ptr) Variable Function
+      1113(r012):     61(ptr) Variable Function
+      1116(r013):     61(ptr) Variable Function
+      1119(r014):     61(ptr) Variable Function
+      1122(r015):     61(ptr) Variable Function
+      1125(r016):     61(ptr) Variable Function
+      1128(r017):     61(ptr) Variable Function
+      1131(r018):      7(ptr) Variable Function
+      1134(r019):     61(ptr) Variable Function
+      1137(R020):     61(ptr) Variable Function
+      1140(r021):     61(ptr) Variable Function
+      1143(r022):     61(ptr) Variable Function
+      1153(r023):     61(ptr) Variable Function
+      1156(r024):     61(ptr) Variable Function
+      1162(r025):     61(ptr) Variable Function
+      1165(r026):     61(ptr) Variable Function
+     1169(r026a):     61(ptr) Variable Function
+      1174(r027):     61(ptr) Variable Function
+      1177(r028):     61(ptr) Variable Function
+      1181(r029):     61(ptr) Variable Function
+      1184(r030):     61(ptr) Variable Function
+      1188(r031):     61(ptr) Variable Function
+      1192(r032):     61(ptr) Variable Function
+      1196(r033):     61(ptr) Variable Function
+      1199(r034):     61(ptr) Variable Function
+      1202(r035):     61(ptr) Variable Function
+      1205(r036):     61(ptr) Variable Function
+      1210(r037):     61(ptr) Variable Function
+      1213(r038):     61(ptr) Variable Function
+      1220(r039):     61(ptr) Variable Function
+      1223(r049):     61(ptr) Variable Function
+      1228(r041):     61(ptr) Variable Function
+      1231(r042):     61(ptr) Variable Function
+      1235(r043):     61(ptr) Variable Function
+      1238(r044):     61(ptr) Variable Function
+      1243(r046):     61(ptr) Variable Function
             1068:          60 Load 63(inF0)
-            1069:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1068
-                              Store 1067(r001) 1069
-            1070:          60 Load 63(inF0)
-            1071:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1070
+            1069:   131(bool) All 1068
+                              Store 1067(r000) 1069
+            1071:          60 Load 63(inF0)
+            1072:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1071
+                              Store 1070(r001) 1072
             1073:          60 Load 63(inF0)
-            1074:   131(bool) Any 1073
-                              Store 1072(r003) 1074
+            1074:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1073
             1076:          60 Load 63(inF0)
-            1077:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1076
-                              Store 1075(r004) 1077
+            1077:   131(bool) Any 1076
+                              Store 1075(r003) 1077
             1079:          60 Load 63(inF0)
-            1080:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1079
-                              Store 1078(r005) 1080
+            1080:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1079
+                              Store 1078(r004) 1080
             1082:          60 Load 63(inF0)
-            1083:          60 Load 64(inF1)
-            1084:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1082 1083
-                              Store 1081(r006) 1084
-            1086:          60 Load 63(inF0)
-            1087:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1086
-                              Store 1085(r007) 1087
-            1088:          60 Load 63(inF0)
-            1091:        1090 FOrdLessThan 1088 1089
-            1092:   131(bool) Any 1091
-                              SelectionMerge 1094 None
-                              BranchConditional 1092 1093 1094
-            1093:               Label
+            1083:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1082
+                              Store 1081(r005) 1083
+            1085:          60 Load 63(inF0)
+            1086:          60 Load 64(inF1)
+            1087:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1085 1086
+                              Store 1084(r006) 1087
+            1089:          60 Load 63(inF0)
+            1090:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1089
+                              Store 1088(r007) 1090
+            1091:          60 Load 63(inF0)
+            1094:        1093 FOrdLessThan 1091 1092
+            1095:   131(bool) Any 1094
+                              SelectionMerge 1097 None
+                              BranchConditional 1095 1096 1097
+            1096:               Label
                                 Kill
-            1094:             Label
-            1097:          60 Load 63(inF0)
-            1098:          60 Load 64(inF1)
-            1099:          60 Load 65(inF2)
-            1100:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1097 1098 1099
-                              Store 1096(r008) 1100
-            1102:          60 Load 63(inF0)
-            1103:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1102
-                              Store 1101(r009) 1103
+            1097:             Label
+            1100:          60 Load 63(inF0)
+            1101:          60 Load 64(inF1)
+            1102:          60 Load 65(inF2)
+            1103:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1100 1101 1102
+                              Store 1099(r008) 1103
             1105:          60 Load 63(inF0)
-            1106:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1105
-                              Store 1104(r010) 1106
+            1106:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1105
+                              Store 1104(r009) 1106
             1108:          60 Load 63(inF0)
-            1109:          60 DPdx 1108
-                              Store 1107(r011) 1109
+            1109:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1108
+                              Store 1107(r010) 1109
             1111:          60 Load 63(inF0)
-            1112:          60 DPdxCoarse 1111
-                              Store 1110(r012) 1112
+            1112:          60 DPdx 1111
+                              Store 1110(r011) 1112
             1114:          60 Load 63(inF0)
-            1115:          60 DPdxFine 1114
-                              Store 1113(r013) 1115
+            1115:          60 DPdxCoarse 1114
+                              Store 1113(r012) 1115
             1117:          60 Load 63(inF0)
-            1118:          60 DPdy 1117
-                              Store 1116(r014) 1118
+            1118:          60 DPdxFine 1117
+                              Store 1116(r013) 1118
             1120:          60 Load 63(inF0)
-            1121:          60 DPdyCoarse 1120
-                              Store 1119(r015) 1121
+            1121:          60 DPdy 1120
+                              Store 1119(r014) 1121
             1123:          60 Load 63(inF0)
-            1124:          60 DPdyFine 1123
-                              Store 1122(r016) 1124
+            1124:          60 DPdyCoarse 1123
+                              Store 1122(r015) 1124
             1126:          60 Load 63(inF0)
-            1127:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1126
-                              Store 1125(r017) 1127
+            1127:          60 DPdyFine 1126
+                              Store 1125(r016) 1127
             1129:          60 Load 63(inF0)
-            1130:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1129
-                              Store 1128(r018) 1130
+            1130:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1129
+                              Store 1128(r017) 1130
             1132:          60 Load 63(inF0)
-            1133:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1132
-                              Store 1131(r019) 1133
+            1133:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1132
+                              Store 1131(r018) 1133
             1135:          60 Load 63(inF0)
-            1136:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1135
-                              Store 1134(R020) 1136
+            1136:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1135
+                              Store 1134(r019) 1136
             1138:          60 Load 63(inF0)
-            1139:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1138
-                              Store 1137(r021) 1139
+            1139:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1138
+                              Store 1137(R020) 1139
             1141:          60 Load 63(inF0)
-            1142:          60 Load 64(inF1)
-            1143:   24(fvec2) CompositeExtract 1141 0
-            1144:   24(fvec2) CompositeExtract 1142 0
-            1145:   24(fvec2) FMod 1143 1144
-            1146:   24(fvec2) CompositeExtract 1141 1
-            1147:   24(fvec2) CompositeExtract 1142 1
+            1142:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1141
+                              Store 1140(r021) 1142
+            1144:          60 Load 63(inF0)
+            1145:          60 Load 64(inF1)
+            1146:   24(fvec2) CompositeExtract 1144 0
+            1147:   24(fvec2) CompositeExtract 1145 0
             1148:   24(fvec2) FMod 1146 1147
-            1149:          60 CompositeConstruct 1145 1148
-                              Store 1140(r022) 1149
-            1151:          60 Load 63(inF0)
-            1152:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1151
-                              Store 1150(r023) 1152
+            1149:   24(fvec2) CompositeExtract 1144 1
+            1150:   24(fvec2) CompositeExtract 1145 1
+            1151:   24(fvec2) FMod 1149 1150
+            1152:          60 CompositeConstruct 1148 1151
+                              Store 1143(r022) 1152
             1154:          60 Load 63(inF0)
-            1156:1155(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1154
-            1157:  352(ivec2) CompositeExtract 1156 1
-                              Store 64(inF1) 1157
-            1158:          60 CompositeExtract 1156 0
-                              Store 1153(r024) 1158
-            1160:          60 Load 63(inF0)
-            1161:          60 Fwidth 1160
-                              Store 1159(r025) 1161
+            1155:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1154
+                              Store 1153(r023) 1155
+            1157:          60 Load 63(inF0)
+            1159:1158(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1157
+            1160:  352(ivec2) CompositeExtract 1159 1
+                              Store 64(inF1) 1160
+            1161:          60 CompositeExtract 1159 0
+                              Store 1156(r024) 1161
             1163:          60 Load 63(inF0)
-            1164:          60 Load 64(inF1)
-            1165:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1163 1164
-                              Store 1162(r026) 1165
-            1167:          60 Load 63(inF0)
-            1168:          60 Load 64(inF1)
-            1169:          60 Load 65(inF2)
-            1170:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1167 1168 1169
-                              Store 1166(r026a) 1170
-            1172:          60 Load 63(inF0)
-            1173:          60 ExtInst 1(GLSL.std.450) 28(Log) 1172
-                              Store 1171(r027) 1173
+            1164:          60 Fwidth 1163
+                              Store 1162(r025) 1164
+            1166:          60 Load 63(inF0)
+            1167:          60 Load 64(inF1)
+            1168:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1166 1167
+                              Store 1165(r026) 1168
+            1170:          60 Load 63(inF0)
+            1171:          60 Load 64(inF1)
+            1172:          60 Load 65(inF2)
+            1173:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1170 1171 1172
+                              Store 1169(r026a) 1173
             1175:          60 Load 63(inF0)
-            1176:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1175
-            1177:          60 MatrixTimesScalar 1176 263
-                              Store 1174(r028) 1177
-            1179:          60 Load 63(inF0)
-            1180:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1179
-                              Store 1178(r029) 1180
+            1176:          60 ExtInst 1(GLSL.std.450) 28(Log) 1175
+                              Store 1174(r027) 1176
+            1178:          60 Load 63(inF0)
+            1179:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1178
+            1180:          60 MatrixTimesScalar 1179 262
+                              Store 1177(r028) 1180
             1182:          60 Load 63(inF0)
-            1183:          60 Load 64(inF1)
-            1184:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1182 1183
-                              Store 1181(r030) 1184
-            1186:          60 Load 63(inF0)
-            1187:          60 Load 64(inF1)
-            1188:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1186 1187
-                              Store 1185(r031) 1188
-            1190:          60 Load 63(inF0)
-            1191:          60 Load 64(inF1)
-            1192:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1190 1191
-                              Store 1189(r032) 1192
-            1194:          60 Load 63(inF0)
-            1195:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1194
-                              Store 1193(r033) 1195
+            1183:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1182
+                              Store 1181(r029) 1183
+            1185:          60 Load 63(inF0)
+            1186:          60 Load 64(inF1)
+            1187:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1185 1186
+                              Store 1184(r030) 1187
+            1189:          60 Load 63(inF0)
+            1190:          60 Load 64(inF1)
+            1191:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1189 1190
+                              Store 1188(r031) 1191
+            1193:          60 Load 63(inF0)
+            1194:          60 Load 64(inF1)
+            1195:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1193 1194
+                              Store 1192(r032) 1195
             1197:          60 Load 63(inF0)
-            1198:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1197
-                              Store 1196(r034) 1198
+            1198:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1197
+                              Store 1196(r033) 1198
             1200:          60 Load 63(inF0)
-            1201:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1200
-                              Store 1199(r035) 1201
+            1201:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1200
+                              Store 1199(r034) 1201
             1203:          60 Load 63(inF0)
-            1204:   24(fvec2) CompositeConstruct 175 175
-            1205:   24(fvec2) CompositeConstruct 284 284
-            1206:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1203 1204 1205
-                              Store 1202(r036) 1206
-            1208:          60 Load 63(inF0)
-            1209:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1208
-                              Store 1207(r037) 1209
+            1204:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1203
+                              Store 1202(r035) 1204
+            1206:          60 Load 63(inF0)
+            1207:   24(fvec2) CompositeConstruct 175 175
+            1208:   24(fvec2) CompositeConstruct 283 283
+            1209:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1206 1207 1208
+                              Store 1205(r036) 1209
             1211:          60 Load 63(inF0)
-            1212:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1211
-                              Store 1210(r038) 1212
-            1213:          60 Load 63(inF0)
-            1214:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1213
-                              Store 64(inF1) 1214
-            1215:          60 Load 63(inF0)
-            1216:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1215
-                              Store 65(inF2) 1216
+            1212:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1211
+                              Store 1210(r037) 1212
+            1214:          60 Load 63(inF0)
+            1215:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1214
+                              Store 1213(r038) 1215
+            1216:          60 Load 63(inF0)
+            1217:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1216
+                              Store 64(inF1) 1217
             1218:          60 Load 63(inF0)
-            1219:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1218
-                              Store 1217(r039) 1219
+            1219:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1218
+                              Store 65(inF2) 1219
             1221:          60 Load 63(inF0)
-            1222:          60 Load 64(inF1)
-            1223:          60 Load 65(inF2)
-            1224:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1221 1222 1223
-                              Store 1220(r049) 1224
-            1226:          60 Load 63(inF0)
-            1227:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1226
-                              Store 1225(r041) 1227
+            1222:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1221
+                              Store 1220(r039) 1222
+            1224:          60 Load 63(inF0)
+            1225:          60 Load 64(inF1)
+            1226:          60 Load 65(inF2)
+            1227:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1224 1225 1226
+                              Store 1223(r049) 1227
             1229:          60 Load 63(inF0)
-            1230:          60 Load 64(inF1)
-            1231:          60 ExtInst 1(GLSL.std.450) 48(Step) 1229 1230
-                              Store 1228(r042) 1231
-            1233:          60 Load 63(inF0)
-            1234:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1233
-                              Store 1232(r043) 1234
+            1230:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1229
+                              Store 1228(r041) 1230
+            1232:          60 Load 63(inF0)
+            1233:          60 Load 64(inF1)
+            1234:          60 ExtInst 1(GLSL.std.450) 48(Step) 1232 1233
+                              Store 1231(r042) 1234
             1236:          60 Load 63(inF0)
-            1237:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1236
-                              Store 1235(r044) 1237
-            1238:          60 Load 63(inF0)
-            1239:          60 Transpose 1238
+            1237:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1236
+                              Store 1235(r043) 1237
+            1239:          60 Load 63(inF0)
+            1240:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1239
+                              Store 1238(r044) 1240
             1241:          60 Load 63(inF0)
-            1242:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1241
-                              Store 1240(r046) 1242
-                              ReturnValue 1244
+            1242:          60 Transpose 1241
+            1244:          60 Load 63(inF0)
+            1245:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1244
+                              Store 1243(r046) 1245
+                              ReturnValue 1247
                               FunctionEnd
 74(PixelShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
         71(inF0):     69(ptr) FunctionParameter
         72(inF1):     69(ptr) FunctionParameter
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
-      1247(r000):    132(ptr) Variable Function
-      1250(r001):     69(ptr) Variable Function
-      1255(r003):    132(ptr) Variable Function
-      1258(r004):     69(ptr) Variable Function
-      1261(r005):     69(ptr) Variable Function
-      1264(r006):     69(ptr) Variable Function
-      1268(r007):     69(ptr) Variable Function
-      1279(r008):     69(ptr) Variable Function
-      1284(r009):     69(ptr) Variable Function
-      1287(r010):     69(ptr) Variable Function
-      1290(r011):     69(ptr) Variable Function
-      1293(r012):     69(ptr) Variable Function
-      1296(r013):     69(ptr) Variable Function
-      1299(r014):     69(ptr) Variable Function
-      1302(r015):     69(ptr) Variable Function
-      1305(r016):     69(ptr) Variable Function
-      1308(r017):     69(ptr) Variable Function
-      1311(r018):      7(ptr) Variable Function
-      1314(r019):     69(ptr) Variable Function
-      1317(R020):     69(ptr) Variable Function
-      1320(r021):     69(ptr) Variable Function
-      1323(r022):     69(ptr) Variable Function
-      1336(r023):     69(ptr) Variable Function
-      1339(r024):     69(ptr) Variable Function
-      1345(r025):     69(ptr) Variable Function
-      1348(r026):     69(ptr) Variable Function
-     1352(r026a):     69(ptr) Variable Function
-      1357(r027):     69(ptr) Variable Function
-      1360(r028):     69(ptr) Variable Function
-      1364(r029):     69(ptr) Variable Function
-      1367(r030):     69(ptr) Variable Function
-      1371(r031):     69(ptr) Variable Function
-      1375(r032):     69(ptr) Variable Function
-      1379(r033):     69(ptr) Variable Function
-      1382(r034):     69(ptr) Variable Function
-      1385(r035):     69(ptr) Variable Function
-      1388(r036):     69(ptr) Variable Function
-      1393(r037):     69(ptr) Variable Function
-      1396(r038):     69(ptr) Variable Function
-      1403(r039):     69(ptr) Variable Function
-      1406(r049):     69(ptr) Variable Function
-      1411(r041):     69(ptr) Variable Function
-      1414(r042):     69(ptr) Variable Function
-      1418(r043):     69(ptr) Variable Function
-      1421(r044):     69(ptr) Variable Function
-      1426(r046):     69(ptr) Variable Function
-            1248:          68 Load 71(inF0)
-            1249:   131(bool) All 1248
-                              Store 1247(r000) 1249
+      1250(r000):    132(ptr) Variable Function
+      1253(r001):     69(ptr) Variable Function
+      1258(r003):    132(ptr) Variable Function
+      1261(r004):     69(ptr) Variable Function
+      1264(r005):     69(ptr) Variable Function
+      1267(r006):     69(ptr) Variable Function
+      1271(r007):     69(ptr) Variable Function
+      1282(r008):     69(ptr) Variable Function
+      1287(r009):     69(ptr) Variable Function
+      1290(r010):     69(ptr) Variable Function
+      1293(r011):     69(ptr) Variable Function
+      1296(r012):     69(ptr) Variable Function
+      1299(r013):     69(ptr) Variable Function
+      1302(r014):     69(ptr) Variable Function
+      1305(r015):     69(ptr) Variable Function
+      1308(r016):     69(ptr) Variable Function
+      1311(r017):     69(ptr) Variable Function
+      1314(r018):      7(ptr) Variable Function
+      1317(r019):     69(ptr) Variable Function
+      1320(R020):     69(ptr) Variable Function
+      1323(r021):     69(ptr) Variable Function
+      1326(r022):     69(ptr) Variable Function
+      1339(r023):     69(ptr) Variable Function
+      1342(r024):     69(ptr) Variable Function
+      1348(r025):     69(ptr) Variable Function
+      1351(r026):     69(ptr) Variable Function
+     1355(r026a):     69(ptr) Variable Function
+      1360(r027):     69(ptr) Variable Function
+      1363(r028):     69(ptr) Variable Function
+      1367(r029):     69(ptr) Variable Function
+      1370(r030):     69(ptr) Variable Function
+      1374(r031):     69(ptr) Variable Function
+      1378(r032):     69(ptr) Variable Function
+      1382(r033):     69(ptr) Variable Function
+      1385(r034):     69(ptr) Variable Function
+      1388(r035):     69(ptr) Variable Function
+      1391(r036):     69(ptr) Variable Function
+      1396(r037):     69(ptr) Variable Function
+      1399(r038):     69(ptr) Variable Function
+      1406(r039):     69(ptr) Variable Function
+      1409(r049):     69(ptr) Variable Function
+      1414(r041):     69(ptr) Variable Function
+      1417(r042):     69(ptr) Variable Function
+      1421(r043):     69(ptr) Variable Function
+      1424(r044):     69(ptr) Variable Function
+      1429(r046):     69(ptr) Variable Function
             1251:          68 Load 71(inF0)
-            1252:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1251
-                              Store 1250(r001) 1252
-            1253:          68 Load 71(inF0)
-            1254:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1253
+            1252:   131(bool) All 1251
+                              Store 1250(r000) 1252
+            1254:          68 Load 71(inF0)
+            1255:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1254
+                              Store 1253(r001) 1255
             1256:          68 Load 71(inF0)
-            1257:   131(bool) Any 1256
-                              Store 1255(r003) 1257
+            1257:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1256
             1259:          68 Load 71(inF0)
-            1260:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1259
-                              Store 1258(r004) 1260
+            1260:   131(bool) Any 1259
+                              Store 1258(r003) 1260
             1262:          68 Load 71(inF0)
-            1263:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1262
-                              Store 1261(r005) 1263
+            1263:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1262
+                              Store 1261(r004) 1263
             1265:          68 Load 71(inF0)
-            1266:          68 Load 72(inF1)
-            1267:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1265 1266
-                              Store 1264(r006) 1267
-            1269:          68 Load 71(inF0)
-            1270:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1269
-                              Store 1268(r007) 1270
-            1271:          68 Load 71(inF0)
-            1274:        1273 FOrdLessThan 1271 1272
-            1275:   131(bool) Any 1274
-                              SelectionMerge 1277 None
-                              BranchConditional 1275 1276 1277
-            1276:               Label
+            1266:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1265
+                              Store 1264(r005) 1266
+            1268:          68 Load 71(inF0)
+            1269:          68 Load 72(inF1)
+            1270:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1268 1269
+                              Store 1267(r006) 1270
+            1272:          68 Load 71(inF0)
+            1273:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1272
+                              Store 1271(r007) 1273
+            1274:          68 Load 71(inF0)
+            1277:        1276 FOrdLessThan 1274 1275
+            1278:   131(bool) Any 1277
+                              SelectionMerge 1280 None
+                              BranchConditional 1278 1279 1280
+            1279:               Label
                                 Kill
-            1277:             Label
-            1280:          68 Load 71(inF0)
-            1281:          68 Load 72(inF1)
-            1282:          68 Load 73(inF2)
-            1283:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1280 1281 1282
-                              Store 1279(r008) 1283
-            1285:          68 Load 71(inF0)
-            1286:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1285
-                              Store 1284(r009) 1286
+            1280:             Label
+            1283:          68 Load 71(inF0)
+            1284:          68 Load 72(inF1)
+            1285:          68 Load 73(inF2)
+            1286:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1283 1284 1285
+                              Store 1282(r008) 1286
             1288:          68 Load 71(inF0)
-            1289:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1288
-                              Store 1287(r010) 1289
+            1289:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1288
+                              Store 1287(r009) 1289
             1291:          68 Load 71(inF0)
-            1292:          68 DPdx 1291
-                              Store 1290(r011) 1292
+            1292:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1291
+                              Store 1290(r010) 1292
             1294:          68 Load 71(inF0)
-            1295:          68 DPdxCoarse 1294
-                              Store 1293(r012) 1295
+            1295:          68 DPdx 1294
+                              Store 1293(r011) 1295
             1297:          68 Load 71(inF0)
-            1298:          68 DPdxFine 1297
-                              Store 1296(r013) 1298
+            1298:          68 DPdxCoarse 1297
+                              Store 1296(r012) 1298
             1300:          68 Load 71(inF0)
-            1301:          68 DPdy 1300
-                              Store 1299(r014) 1301
+            1301:          68 DPdxFine 1300
+                              Store 1299(r013) 1301
             1303:          68 Load 71(inF0)
-            1304:          68 DPdyCoarse 1303
-                              Store 1302(r015) 1304
+            1304:          68 DPdy 1303
+                              Store 1302(r014) 1304
             1306:          68 Load 71(inF0)
-            1307:          68 DPdyFine 1306
-                              Store 1305(r016) 1307
+            1307:          68 DPdyCoarse 1306
+                              Store 1305(r015) 1307
             1309:          68 Load 71(inF0)
-            1310:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1309
-                              Store 1308(r017) 1310
+            1310:          68 DPdyFine 1309
+                              Store 1308(r016) 1310
             1312:          68 Load 71(inF0)
-            1313:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1312
-                              Store 1311(r018) 1313
+            1313:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1312
+                              Store 1311(r017) 1313
             1315:          68 Load 71(inF0)
-            1316:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1315
-                              Store 1314(r019) 1316
+            1316:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1315
+                              Store 1314(r018) 1316
             1318:          68 Load 71(inF0)
-            1319:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1318
-                              Store 1317(R020) 1319
+            1319:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1318
+                              Store 1317(r019) 1319
             1321:          68 Load 71(inF0)
-            1322:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1321
-                              Store 1320(r021) 1322
+            1322:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1321
+                              Store 1320(R020) 1322
             1324:          68 Load 71(inF0)
-            1325:          68 Load 72(inF1)
-            1326:   36(fvec3) CompositeExtract 1324 0
-            1327:   36(fvec3) CompositeExtract 1325 0
-            1328:   36(fvec3) FMod 1326 1327
-            1329:   36(fvec3) CompositeExtract 1324 1
-            1330:   36(fvec3) CompositeExtract 1325 1
+            1325:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1324
+                              Store 1323(r021) 1325
+            1327:          68 Load 71(inF0)
+            1328:          68 Load 72(inF1)
+            1329:   36(fvec3) CompositeExtract 1327 0
+            1330:   36(fvec3) CompositeExtract 1328 0
             1331:   36(fvec3) FMod 1329 1330
-            1332:   36(fvec3) CompositeExtract 1324 2
-            1333:   36(fvec3) CompositeExtract 1325 2
+            1332:   36(fvec3) CompositeExtract 1327 1
+            1333:   36(fvec3) CompositeExtract 1328 1
             1334:   36(fvec3) FMod 1332 1333
-            1335:          68 CompositeConstruct 1328 1331 1334
-                              Store 1323(r022) 1335
-            1337:          68 Load 71(inF0)
-            1338:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1337
-                              Store 1336(r023) 1338
+            1335:   36(fvec3) CompositeExtract 1327 2
+            1336:   36(fvec3) CompositeExtract 1328 2
+            1337:   36(fvec3) FMod 1335 1336
+            1338:          68 CompositeConstruct 1331 1334 1337
+                              Store 1326(r022) 1338
             1340:          68 Load 71(inF0)
-            1342:1341(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1340
-            1343:  588(ivec3) CompositeExtract 1342 1
-                              Store 72(inF1) 1343
-            1344:          68 CompositeExtract 1342 0
-                              Store 1339(r024) 1344
-            1346:          68 Load 71(inF0)
-            1347:          68 Fwidth 1346
-                              Store 1345(r025) 1347
+            1341:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1340
+                              Store 1339(r023) 1341
+            1343:          68 Load 71(inF0)
+            1345:1344(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1343
+            1346:  590(ivec3) CompositeExtract 1345 1
+                              Store 72(inF1) 1346
+            1347:          68 CompositeExtract 1345 0
+                              Store 1342(r024) 1347
             1349:          68 Load 71(inF0)
-            1350:          68 Load 72(inF1)
-            1351:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1349 1350
-                              Store 1348(r026) 1351
-            1353:          68 Load 71(inF0)
-            1354:          68 Load 72(inF1)
-            1355:          68 Load 73(inF2)
-            1356:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1353 1354 1355
-                              Store 1352(r026a) 1356
-            1358:          68 Load 71(inF0)
-            1359:          68 ExtInst 1(GLSL.std.450) 28(Log) 1358
-                              Store 1357(r027) 1359
+            1350:          68 Fwidth 1349
+                              Store 1348(r025) 1350
+            1352:          68 Load 71(inF0)
+            1353:          68 Load 72(inF1)
+            1354:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1352 1353
+                              Store 1351(r026) 1354
+            1356:          68 Load 71(inF0)
+            1357:          68 Load 72(inF1)
+            1358:          68 Load 73(inF2)
+            1359:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1356 1357 1358
+                              Store 1355(r026a) 1359
             1361:          68 Load 71(inF0)
-            1362:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1361
-            1363:          68 MatrixTimesScalar 1362 263
-                              Store 1360(r028) 1363
-            1365:          68 Load 71(inF0)
-            1366:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1365
-                              Store 1364(r029) 1366
+            1362:          68 ExtInst 1(GLSL.std.450) 28(Log) 1361
+                              Store 1360(r027) 1362
+            1364:          68 Load 71(inF0)
+            1365:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1364
+            1366:          68 MatrixTimesScalar 1365 262
+                              Store 1363(r028) 1366
             1368:          68 Load 71(inF0)
-            1369:          68 Load 72(inF1)
-            1370:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1368 1369
-                              Store 1367(r030) 1370
-            1372:          68 Load 71(inF0)
-            1373:          68 Load 72(inF1)
-            1374:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1372 1373
-                              Store 1371(r031) 1374
-            1376:          68 Load 71(inF0)
-            1377:          68 Load 72(inF1)
-            1378:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1376 1377
-                              Store 1375(r032) 1378
-            1380:          68 Load 71(inF0)
-            1381:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1380
-                              Store 1379(r033) 1381
+            1369:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1368
+                              Store 1367(r029) 1369
+            1371:          68 Load 71(inF0)
+            1372:          68 Load 72(inF1)
+            1373:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1371 1372
+                              Store 1370(r030) 1373
+            1375:          68 Load 71(inF0)
+            1376:          68 Load 72(inF1)
+            1377:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1375 1376
+                              Store 1374(r031) 1377
+            1379:          68 Load 71(inF0)
+            1380:          68 Load 72(inF1)
+            1381:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1379 1380
+                              Store 1378(r032) 1381
             1383:          68 Load 71(inF0)
-            1384:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1383
-                              Store 1382(r034) 1384
+            1384:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1383
+                              Store 1382(r033) 1384
             1386:          68 Load 71(inF0)
-            1387:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1386
-                              Store 1385(r035) 1387
+            1387:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1386
+                              Store 1385(r034) 1387
             1389:          68 Load 71(inF0)
-            1390:   36(fvec3) CompositeConstruct 175 175 175
-            1391:   36(fvec3) CompositeConstruct 284 284 284
-            1392:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1389 1390 1391
-                              Store 1388(r036) 1392
-            1394:          68 Load 71(inF0)
-            1395:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1394
-                              Store 1393(r037) 1395
+            1390:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1389
+                              Store 1388(r035) 1390
+            1392:          68 Load 71(inF0)
+            1393:   36(fvec3) CompositeConstruct 175 175 175
+            1394:   36(fvec3) CompositeConstruct 283 283 283
+            1395:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1392 1393 1394
+                              Store 1391(r036) 1395
             1397:          68 Load 71(inF0)
-            1398:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1397
-                              Store 1396(r038) 1398
-            1399:          68 Load 71(inF0)
-            1400:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1399
-                              Store 72(inF1) 1400
-            1401:          68 Load 71(inF0)
-            1402:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1401
-                              Store 73(inF2) 1402
+            1398:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1397
+                              Store 1396(r037) 1398
+            1400:          68 Load 71(inF0)
+            1401:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1400
+                              Store 1399(r038) 1401
+            1402:          68 Load 71(inF0)
+            1403:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1402
+                              Store 72(inF1) 1403
             1404:          68 Load 71(inF0)
-            1405:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1404
-                              Store 1403(r039) 1405
+            1405:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1404
+                              Store 73(inF2) 1405
             1407:          68 Load 71(inF0)
-            1408:          68 Load 72(inF1)
-            1409:          68 Load 73(inF2)
-            1410:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1407 1408 1409
-                              Store 1406(r049) 1410
-            1412:          68 Load 71(inF0)
-            1413:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1412
-                              Store 1411(r041) 1413
+            1408:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1407
+                              Store 1406(r039) 1408
+            1410:          68 Load 71(inF0)
+            1411:          68 Load 72(inF1)
+            1412:          68 Load 73(inF2)
+            1413:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1410 1411 1412
+                              Store 1409(r049) 1413
             1415:          68 Load 71(inF0)
-            1416:          68 Load 72(inF1)
-            1417:          68 ExtInst 1(GLSL.std.450) 48(Step) 1415 1416
-                              Store 1414(r042) 1417
-            1419:          68 Load 71(inF0)
-            1420:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1419
-                              Store 1418(r043) 1420
+            1416:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1415
+                              Store 1414(r041) 1416
+            1418:          68 Load 71(inF0)
+            1419:          68 Load 72(inF1)
+            1420:          68 ExtInst 1(GLSL.std.450) 48(Step) 1418 1419
+                              Store 1417(r042) 1420
             1422:          68 Load 71(inF0)
-            1423:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1422
-                              Store 1421(r044) 1423
-            1424:          68 Load 71(inF0)
-            1425:          68 Transpose 1424
+            1423:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1422
+                              Store 1421(r043) 1423
+            1425:          68 Load 71(inF0)
+            1426:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1425
+                              Store 1424(r044) 1426
             1427:          68 Load 71(inF0)
-            1428:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1427
-                              Store 1426(r046) 1428
-                              ReturnValue 1430
+            1428:          68 Transpose 1427
+            1430:          68 Load 71(inF0)
+            1431:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1430
+                              Store 1429(r046) 1431
+                              ReturnValue 1433
                               FunctionEnd
 82(PixelShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
         79(inF0):     77(ptr) FunctionParameter
         80(inF1):     77(ptr) FunctionParameter
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
-      1433(r000):    132(ptr) Variable Function
-      1436(r001):     77(ptr) Variable Function
-      1441(r003):    132(ptr) Variable Function
-      1444(r004):     77(ptr) Variable Function
-      1447(r005):     77(ptr) Variable Function
-      1450(r006):     77(ptr) Variable Function
-      1454(r007):     77(ptr) Variable Function
-      1465(r008):     77(ptr) Variable Function
-      1470(r009):     77(ptr) Variable Function
-      1473(r010):     77(ptr) Variable Function
-      1476(r011):     77(ptr) Variable Function
-      1479(r012):     77(ptr) Variable Function
-      1482(r013):     77(ptr) Variable Function
-      1485(r014):     77(ptr) Variable Function
-      1488(r015):     77(ptr) Variable Function
-      1491(r016):     77(ptr) Variable Function
-      1494(r017):     77(ptr) Variable Function
-      1497(r018):      7(ptr) Variable Function
-      1500(r019):     77(ptr) Variable Function
-      1503(R020):     77(ptr) Variable Function
-      1506(r021):     77(ptr) Variable Function
-      1509(r022):     77(ptr) Variable Function
-      1525(r023):     77(ptr) Variable Function
-      1528(r024):     77(ptr) Variable Function
-      1534(r025):     77(ptr) Variable Function
-      1537(r026):     77(ptr) Variable Function
-     1541(r026a):     77(ptr) Variable Function
-      1546(r027):     77(ptr) Variable Function
-      1549(r028):     77(ptr) Variable Function
-      1553(r029):     77(ptr) Variable Function
-      1556(r030):     77(ptr) Variable Function
-      1560(r031):     77(ptr) Variable Function
-      1564(r032):     77(ptr) Variable Function
-      1568(r033):     77(ptr) Variable Function
-      1571(r034):     77(ptr) Variable Function
-      1574(r035):     77(ptr) Variable Function
-      1577(r036):     77(ptr) Variable Function
-      1582(r037):     77(ptr) Variable Function
-      1585(r038):     77(ptr) Variable Function
-      1592(r039):     77(ptr) Variable Function
-      1595(r049):     77(ptr) Variable Function
-      1600(r041):     77(ptr) Variable Function
-      1603(r042):     77(ptr) Variable Function
-      1607(r043):     77(ptr) Variable Function
-      1610(r044):     77(ptr) Variable Function
-      1615(r046):     77(ptr) Variable Function
-            1434:          76 Load 79(inF0)
-            1435:   131(bool) All 1434
-                              Store 1433(r000) 1435
+      1436(r000):    132(ptr) Variable Function
+      1439(r001):     77(ptr) Variable Function
+      1444(r003):    132(ptr) Variable Function
+      1447(r004):     77(ptr) Variable Function
+      1450(r005):     77(ptr) Variable Function
+      1453(r006):     77(ptr) Variable Function
+      1457(r007):     77(ptr) Variable Function
+      1468(r008):     77(ptr) Variable Function
+      1473(r009):     77(ptr) Variable Function
+      1476(r010):     77(ptr) Variable Function
+      1479(r011):     77(ptr) Variable Function
+      1482(r012):     77(ptr) Variable Function
+      1485(r013):     77(ptr) Variable Function
+      1488(r014):     77(ptr) Variable Function
+      1491(r015):     77(ptr) Variable Function
+      1494(r016):     77(ptr) Variable Function
+      1497(r017):     77(ptr) Variable Function
+      1500(r018):      7(ptr) Variable Function
+      1503(r019):     77(ptr) Variable Function
+      1506(R020):     77(ptr) Variable Function
+      1509(r021):     77(ptr) Variable Function
+      1512(r022):     77(ptr) Variable Function
+      1528(r023):     77(ptr) Variable Function
+      1531(r024):     77(ptr) Variable Function
+      1537(r025):     77(ptr) Variable Function
+      1540(r026):     77(ptr) Variable Function
+     1544(r026a):     77(ptr) Variable Function
+      1549(r027):     77(ptr) Variable Function
+      1552(r028):     77(ptr) Variable Function
+      1556(r029):     77(ptr) Variable Function
+      1559(r030):     77(ptr) Variable Function
+      1563(r031):     77(ptr) Variable Function
+      1567(r032):     77(ptr) Variable Function
+      1571(r033):     77(ptr) Variable Function
+      1574(r034):     77(ptr) Variable Function
+      1577(r035):     77(ptr) Variable Function
+      1580(r036):     77(ptr) Variable Function
+      1585(r037):     77(ptr) Variable Function
+      1588(r038):     77(ptr) Variable Function
+      1595(r039):     77(ptr) Variable Function
+      1598(r049):     77(ptr) Variable Function
+      1603(r041):     77(ptr) Variable Function
+      1606(r042):     77(ptr) Variable Function
+      1610(r043):     77(ptr) Variable Function
+      1613(r044):     77(ptr) Variable Function
+      1618(r046):     77(ptr) Variable Function
             1437:          76 Load 79(inF0)
-            1438:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1437
-                              Store 1436(r001) 1438
-            1439:          76 Load 79(inF0)
-            1440:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1439
+            1438:   131(bool) All 1437
+                              Store 1436(r000) 1438
+            1440:          76 Load 79(inF0)
+            1441:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1440
+                              Store 1439(r001) 1441
             1442:          76 Load 79(inF0)
-            1443:   131(bool) Any 1442
-                              Store 1441(r003) 1443
+            1443:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1442
             1445:          76 Load 79(inF0)
-            1446:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1445
-                              Store 1444(r004) 1446
+            1446:   131(bool) Any 1445
+                              Store 1444(r003) 1446
             1448:          76 Load 79(inF0)
-            1449:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1448
-                              Store 1447(r005) 1449
+            1449:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1448
+                              Store 1447(r004) 1449
             1451:          76 Load 79(inF0)
-            1452:          76 Load 80(inF1)
-            1453:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1451 1452
-                              Store 1450(r006) 1453
-            1455:          76 Load 79(inF0)
-            1456:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1455
-                              Store 1454(r007) 1456
-            1457:          76 Load 79(inF0)
-            1460:        1459 FOrdLessThan 1457 1458
-            1461:   131(bool) Any 1460
-                              SelectionMerge 1463 None
-                              BranchConditional 1461 1462 1463
-            1462:               Label
+            1452:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1451
+                              Store 1450(r005) 1452
+            1454:          76 Load 79(inF0)
+            1455:          76 Load 80(inF1)
+            1456:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1454 1455
+                              Store 1453(r006) 1456
+            1458:          76 Load 79(inF0)
+            1459:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1458
+                              Store 1457(r007) 1459
+            1460:          76 Load 79(inF0)
+            1463:        1462 FOrdLessThan 1460 1461
+            1464:   131(bool) Any 1463
+                              SelectionMerge 1466 None
+                              BranchConditional 1464 1465 1466
+            1465:               Label
                                 Kill
-            1463:             Label
-            1466:          76 Load 79(inF0)
-            1467:          76 Load 80(inF1)
-            1468:          76 Load 81(inF2)
-            1469:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1466 1467 1468
-                              Store 1465(r008) 1469
-            1471:          76 Load 79(inF0)
-            1472:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1471
-                              Store 1470(r009) 1472
+            1466:             Label
+            1469:          76 Load 79(inF0)
+            1470:          76 Load 80(inF1)
+            1471:          76 Load 81(inF2)
+            1472:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1469 1470 1471
+                              Store 1468(r008) 1472
             1474:          76 Load 79(inF0)
-            1475:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1474
-                              Store 1473(r010) 1475
+            1475:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1474
+                              Store 1473(r009) 1475
             1477:          76 Load 79(inF0)
-            1478:          76 DPdx 1477
-                              Store 1476(r011) 1478
+            1478:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1477
+                              Store 1476(r010) 1478
             1480:          76 Load 79(inF0)
-            1481:          76 DPdxCoarse 1480
-                              Store 1479(r012) 1481
+            1481:          76 DPdx 1480
+                              Store 1479(r011) 1481
             1483:          76 Load 79(inF0)
-            1484:          76 DPdxFine 1483
-                              Store 1482(r013) 1484
+            1484:          76 DPdxCoarse 1483
+                              Store 1482(r012) 1484
             1486:          76 Load 79(inF0)
-            1487:          76 DPdy 1486
-                              Store 1485(r014) 1487
+            1487:          76 DPdxFine 1486
+                              Store 1485(r013) 1487
             1489:          76 Load 79(inF0)
-            1490:          76 DPdyCoarse 1489
-                              Store 1488(r015) 1490
+            1490:          76 DPdy 1489
+                              Store 1488(r014) 1490
             1492:          76 Load 79(inF0)
-            1493:          76 DPdyFine 1492
-                              Store 1491(r016) 1493
+            1493:          76 DPdyCoarse 1492
+                              Store 1491(r015) 1493
             1495:          76 Load 79(inF0)
-            1496:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1495
-                              Store 1494(r017) 1496
+            1496:          76 DPdyFine 1495
+                              Store 1494(r016) 1496
             1498:          76 Load 79(inF0)
-            1499:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1498
-                              Store 1497(r018) 1499
+            1499:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1498
+                              Store 1497(r017) 1499
             1501:          76 Load 79(inF0)
-            1502:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1501
-                              Store 1500(r019) 1502
+            1502:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1501
+                              Store 1500(r018) 1502
             1504:          76 Load 79(inF0)
-            1505:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1504
-                              Store 1503(R020) 1505
+            1505:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1504
+                              Store 1503(r019) 1505
             1507:          76 Load 79(inF0)
-            1508:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1507
-                              Store 1506(r021) 1508
+            1508:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1507
+                              Store 1506(R020) 1508
             1510:          76 Load 79(inF0)
-            1511:          76 Load 80(inF1)
-            1512:   48(fvec4) CompositeExtract 1510 0
-            1513:   48(fvec4) CompositeExtract 1511 0
-            1514:   48(fvec4) FMod 1512 1513
-            1515:   48(fvec4) CompositeExtract 1510 1
-            1516:   48(fvec4) CompositeExtract 1511 1
+            1511:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1510
+                              Store 1509(r021) 1511
+            1513:          76 Load 79(inF0)
+            1514:          76 Load 80(inF1)
+            1515:   48(fvec4) CompositeExtract 1513 0
+            1516:   48(fvec4) CompositeExtract 1514 0
             1517:   48(fvec4) FMod 1515 1516
-            1518:   48(fvec4) CompositeExtract 1510 2
-            1519:   48(fvec4) CompositeExtract 1511 2
+            1518:   48(fvec4) CompositeExtract 1513 1
+            1519:   48(fvec4) CompositeExtract 1514 1
             1520:   48(fvec4) FMod 1518 1519
-            1521:   48(fvec4) CompositeExtract 1510 3
-            1522:   48(fvec4) CompositeExtract 1511 3
+            1521:   48(fvec4) CompositeExtract 1513 2
+            1522:   48(fvec4) CompositeExtract 1514 2
             1523:   48(fvec4) FMod 1521 1522
-            1524:          76 CompositeConstruct 1514 1517 1520 1523
-                              Store 1509(r022) 1524
-            1526:          76 Load 79(inF0)
-            1527:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1526
-                              Store 1525(r023) 1527
+            1524:   48(fvec4) CompositeExtract 1513 3
+            1525:   48(fvec4) CompositeExtract 1514 3
+            1526:   48(fvec4) FMod 1524 1525
+            1527:          76 CompositeConstruct 1517 1520 1523 1526
+                              Store 1512(r022) 1527
             1529:          76 Load 79(inF0)
-            1531:1530(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1529
-            1532:  833(ivec4) CompositeExtract 1531 1
-                              Store 80(inF1) 1532
-            1533:          76 CompositeExtract 1531 0
-                              Store 1528(r024) 1533
-            1535:          76 Load 79(inF0)
-            1536:          76 Fwidth 1535
-                              Store 1534(r025) 1536
+            1530:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1529
+                              Store 1528(r023) 1530
+            1532:          76 Load 79(inF0)
+            1534:1533(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1532
+            1535:  836(ivec4) CompositeExtract 1534 1
+                              Store 80(inF1) 1535
+            1536:          76 CompositeExtract 1534 0
+                              Store 1531(r024) 1536
             1538:          76 Load 79(inF0)
-            1539:          76 Load 80(inF1)
-            1540:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1538 1539
-                              Store 1537(r026) 1540
-            1542:          76 Load 79(inF0)
-            1543:          76 Load 80(inF1)
-            1544:          76 Load 81(inF2)
-            1545:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1542 1543 1544
-                              Store 1541(r026a) 1545
-            1547:          76 Load 79(inF0)
-            1548:          76 ExtInst 1(GLSL.std.450) 28(Log) 1547
-                              Store 1546(r027) 1548
+            1539:          76 Fwidth 1538
+                              Store 1537(r025) 1539
+            1541:          76 Load 79(inF0)
+            1542:          76 Load 80(inF1)
+            1543:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1541 1542
+                              Store 1540(r026) 1543
+            1545:          76 Load 79(inF0)
+            1546:          76 Load 80(inF1)
+            1547:          76 Load 81(inF2)
+            1548:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1545 1546 1547
+                              Store 1544(r026a) 1548
             1550:          76 Load 79(inF0)
-            1551:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1550
-            1552:          76 MatrixTimesScalar 1551 263
-                              Store 1549(r028) 1552
-            1554:          76 Load 79(inF0)
-            1555:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1554
-                              Store 1553(r029) 1555
+            1551:          76 ExtInst 1(GLSL.std.450) 28(Log) 1550
+                              Store 1549(r027) 1551
+            1553:          76 Load 79(inF0)
+            1554:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1553
+            1555:          76 MatrixTimesScalar 1554 262
+                              Store 1552(r028) 1555
             1557:          76 Load 79(inF0)
-            1558:          76 Load 80(inF1)
-            1559:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1557 1558
-                              Store 1556(r030) 1559
-            1561:          76 Load 79(inF0)
-            1562:          76 Load 80(inF1)
-            1563:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1561 1562
-                              Store 1560(r031) 1563
-            1565:          76 Load 79(inF0)
-            1566:          76 Load 80(inF1)
-            1567:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1565 1566
-                              Store 1564(r032) 1567
-            1569:          76 Load 79(inF0)
-            1570:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1569
-                              Store 1568(r033) 1570
+            1558:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1557
+                              Store 1556(r029) 1558
+            1560:          76 Load 79(inF0)
+            1561:          76 Load 80(inF1)
+            1562:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1560 1561
+                              Store 1559(r030) 1562
+            1564:          76 Load 79(inF0)
+            1565:          76 Load 80(inF1)
+            1566:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1564 1565
+                              Store 1563(r031) 1566
+            1568:          76 Load 79(inF0)
+            1569:          76 Load 80(inF1)
+            1570:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1568 1569
+                              Store 1567(r032) 1570
             1572:          76 Load 79(inF0)
-            1573:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1572
-                              Store 1571(r034) 1573
+            1573:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1572
+                              Store 1571(r033) 1573
             1575:          76 Load 79(inF0)
-            1576:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1575
-                              Store 1574(r035) 1576
+            1576:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1575
+                              Store 1574(r034) 1576
             1578:          76 Load 79(inF0)
-            1579:   48(fvec4) CompositeConstruct 175 175 175 175
-            1580:   48(fvec4) CompositeConstruct 284 284 284 284
-            1581:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1578 1579 1580
-                              Store 1577(r036) 1581
-            1583:          76 Load 79(inF0)
-            1584:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1583
-                              Store 1582(r037) 1584
+            1579:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1578
+                              Store 1577(r035) 1579
+            1581:          76 Load 79(inF0)
+            1582:   48(fvec4) CompositeConstruct 175 175 175 175
+            1583:   48(fvec4) CompositeConstruct 283 283 283 283
+            1584:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1581 1582 1583
+                              Store 1580(r036) 1584
             1586:          76 Load 79(inF0)
-            1587:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1586
-                              Store 1585(r038) 1587
-            1588:          76 Load 79(inF0)
-            1589:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1588
-                              Store 80(inF1) 1589
-            1590:          76 Load 79(inF0)
-            1591:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1590
-                              Store 81(inF2) 1591
+            1587:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1586
+                              Store 1585(r037) 1587
+            1589:          76 Load 79(inF0)
+            1590:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1589
+                              Store 1588(r038) 1590
+            1591:          76 Load 79(inF0)
+            1592:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1591
+                              Store 80(inF1) 1592
             1593:          76 Load 79(inF0)
-            1594:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1593
-                              Store 1592(r039) 1594
+            1594:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1593
+                              Store 81(inF2) 1594
             1596:          76 Load 79(inF0)
-            1597:          76 Load 80(inF1)
-            1598:          76 Load 81(inF2)
-            1599:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1596 1597 1598
-                              Store 1595(r049) 1599
-            1601:          76 Load 79(inF0)
-            1602:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1601
-                              Store 1600(r041) 1602
+            1597:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1596
+                              Store 1595(r039) 1597
+            1599:          76 Load 79(inF0)
+            1600:          76 Load 80(inF1)
+            1601:          76 Load 81(inF2)
+            1602:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1599 1600 1601
+                              Store 1598(r049) 1602
             1604:          76 Load 79(inF0)
-            1605:          76 Load 80(inF1)
-            1606:          76 ExtInst 1(GLSL.std.450) 48(Step) 1604 1605
-                              Store 1603(r042) 1606
-            1608:          76 Load 79(inF0)
-            1609:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1608
-                              Store 1607(r043) 1609
+            1605:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1604
+                              Store 1603(r041) 1605
+            1607:          76 Load 79(inF0)
+            1608:          76 Load 80(inF1)
+            1609:          76 ExtInst 1(GLSL.std.450) 48(Step) 1607 1608
+                              Store 1606(r042) 1609
             1611:          76 Load 79(inF0)
-            1612:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1611
-                              Store 1610(r044) 1612
-            1613:          76 Load 79(inF0)
-            1614:          76 Transpose 1613
+            1612:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1611
+                              Store 1610(r043) 1612
+            1614:          76 Load 79(inF0)
+            1615:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1614
+                              Store 1613(r044) 1615
             1616:          76 Load 79(inF0)
-            1617:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1616
-                              Store 1615(r046) 1617
-                              ReturnValue 1619
+            1617:          76 Transpose 1616
+            1619:          76 Load 79(inF0)
+            1620:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1619
+                              Store 1618(r046) 1620
+                              ReturnValue 1622
                               FunctionEnd
 91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
         85(inF0):      7(ptr) FunctionParameter
@@ -8177,51 +8182,51 @@ gl_FragCoord origin is upper left
        89(inFM0):     61(ptr) FunctionParameter
        90(inFM1):     61(ptr) FunctionParameter
               92:             Label
-        1622(r0):      7(ptr) Variable Function
-        1626(r1):     25(ptr) Variable Function
-        1630(r2):     25(ptr) Variable Function
-        1634(r3):      7(ptr) Variable Function
-        1638(r4):     25(ptr) Variable Function
-        1642(r5):     25(ptr) Variable Function
-        1646(r6):     61(ptr) Variable Function
-        1650(r7):     61(ptr) Variable Function
-        1654(r8):     61(ptr) Variable Function
-            1623:    6(float) Load 86(inF1)
-            1624:    6(float) Load 85(inF0)
-            1625:    6(float) FMul 1623 1624
-                              Store 1622(r0) 1625
+        1625(r0):      7(ptr) Variable Function
+        1629(r1):     25(ptr) Variable Function
+        1633(r2):     25(ptr) Variable Function
+        1637(r3):      7(ptr) Variable Function
+        1641(r4):     25(ptr) Variable Function
+        1645(r5):     25(ptr) Variable Function
+        1649(r6):     61(ptr) Variable Function
+        1653(r7):     61(ptr) Variable Function
+        1657(r8):     61(ptr) Variable Function
+            1626:    6(float) Load 86(inF1)
             1627:    6(float) Load 85(inF0)
-            1628:   24(fvec2) Load 87(inFV0)
-            1629:   24(fvec2) VectorTimesScalar 1628 1627
-                              Store 1626(r1) 1629
+            1628:    6(float) FMul 1626 1627
+                              Store 1625(r0) 1628
+            1630:    6(float) Load 85(inF0)
             1631:   24(fvec2) Load 87(inFV0)
-            1632:    6(float) Load 85(inF0)
-            1633:   24(fvec2) VectorTimesScalar 1631 1632
-                              Store 1630(r2) 1633
-            1635:   24(fvec2) Load 87(inFV0)
-            1636:   24(fvec2) Load 88(inFV1)
-            1637:    6(float) Dot 1635 1636
-                              Store 1634(r3) 1637
-            1639:   24(fvec2) Load 87(inFV0)
-            1640:          60 Load 89(inFM0)
-            1641:   24(fvec2) VectorTimesMatrix 1639 1640
-                              Store 1638(r4) 1641
+            1632:   24(fvec2) VectorTimesScalar 1631 1630
+                              Store 1629(r1) 1632
+            1634:   24(fvec2) Load 87(inFV0)
+            1635:    6(float) Load 85(inF0)
+            1636:   24(fvec2) VectorTimesScalar 1634 1635
+                              Store 1633(r2) 1636
+            1638:   24(fvec2) Load 87(inFV0)
+            1639:   24(fvec2) Load 88(inFV1)
+            1640:    6(float) Dot 1638 1639
+                              Store 1637(r3) 1640
+            1642:   24(fvec2) Load 87(inFV0)
             1643:          60 Load 89(inFM0)
-            1644:   24(fvec2) Load 87(inFV0)
-            1645:   24(fvec2) MatrixTimesVector 1643 1644
-                              Store 1642(r5) 1645
-            1647:    6(float) Load 85(inF0)
-            1648:          60 Load 89(inFM0)
-            1649:          60 MatrixTimesScalar 1648 1647
-                              Store 1646(r6) 1649
+            1644:   24(fvec2) VectorTimesMatrix 1642 1643
+                              Store 1641(r4) 1644
+            1646:          60 Load 89(inFM0)
+            1647:   24(fvec2) Load 87(inFV0)
+            1648:   24(fvec2) MatrixTimesVector 1646 1647
+                              Store 1645(r5) 1648
+            1650:    6(float) Load 85(inF0)
             1651:          60 Load 89(inFM0)
-            1652:    6(float) Load 85(inF0)
-            1653:          60 MatrixTimesScalar 1651 1652
-                              Store 1650(r7) 1653
-            1655:          60 Load 90(inFM1)
-            1656:          60 Load 89(inFM0)
-            1657:          60 MatrixTimesMatrix 1655 1656
-                              Store 1654(r8) 1657
+            1652:          60 MatrixTimesScalar 1651 1650
+                              Store 1649(r6) 1652
+            1654:          60 Load 89(inFM0)
+            1655:    6(float) Load 85(inF0)
+            1656:          60 MatrixTimesScalar 1654 1655
+                              Store 1653(r7) 1656
+            1658:          60 Load 90(inFM1)
+            1659:          60 Load 89(inFM0)
+            1660:          60 MatrixTimesMatrix 1658 1659
+                              Store 1657(r8) 1660
                               Return
                               FunctionEnd
 100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
@@ -8232,51 +8237,51 @@ gl_FragCoord origin is upper left
        98(inFM0):     69(ptr) FunctionParameter
        99(inFM1):     69(ptr) FunctionParameter
              101:             Label
-        1658(r0):      7(ptr) Variable Function
-        1662(r1):     37(ptr) Variable Function
-        1666(r2):     37(ptr) Variable Function
-        1670(r3):      7(ptr) Variable Function
-        1674(r4):     37(ptr) Variable Function
-        1678(r5):     37(ptr) Variable Function
-        1682(r6):     69(ptr) Variable Function
-        1686(r7):     69(ptr) Variable Function
-        1690(r8):     69(ptr) Variable Function
-            1659:    6(float) Load 95(inF1)
-            1660:    6(float) Load 94(inF0)
-            1661:    6(float) FMul 1659 1660
-                              Store 1658(r0) 1661
+        1661(r0):      7(ptr) Variable Function
+        1665(r1):     37(ptr) Variable Function
+        1669(r2):     37(ptr) Variable Function
+        1673(r3):      7(ptr) Variable Function
+        1677(r4):     37(ptr) Variable Function
+        1681(r5):     37(ptr) Variable Function
+        1685(r6):     69(ptr) Variable Function
+        1689(r7):     69(ptr) Variable Function
+        1693(r8):     69(ptr) Variable Function
+            1662:    6(float) Load 95(inF1)
             1663:    6(float) Load 94(inF0)
-            1664:   36(fvec3) Load 96(inFV0)
-            1665:   36(fvec3) VectorTimesScalar 1664 1663
-                              Store 1662(r1) 1665
+            1664:    6(float) FMul 1662 1663
+                              Store 1661(r0) 1664
+            1666:    6(float) Load 94(inF0)
             1667:   36(fvec3) Load 96(inFV0)
-            1668:    6(float) Load 94(inF0)
-            1669:   36(fvec3) VectorTimesScalar 1667 1668
-                              Store 1666(r2) 1669
-            1671:   36(fvec3) Load 96(inFV0)
-            1672:   36(fvec3) Load 97(inFV1)
-            1673:    6(float) Dot 1671 1672
-                              Store 1670(r3) 1673
-            1675:   36(fvec3) Load 96(inFV0)
-            1676:          68 Load 98(inFM0)
-            1677:   36(fvec3) VectorTimesMatrix 1675 1676
-                              Store 1674(r4) 1677
+            1668:   36(fvec3) VectorTimesScalar 1667 1666
+                              Store 1665(r1) 1668
+            1670:   36(fvec3) Load 96(inFV0)
+            1671:    6(float) Load 94(inF0)
+            1672:   36(fvec3) VectorTimesScalar 1670 1671
+                              Store 1669(r2) 1672
+            1674:   36(fvec3) Load 96(inFV0)
+            1675:   36(fvec3) Load 97(inFV1)
+            1676:    6(float) Dot 1674 1675
+                              Store 1673(r3) 1676
+            1678:   36(fvec3) Load 96(inFV0)
             1679:          68 Load 98(inFM0)
-            1680:   36(fvec3) Load 96(inFV0)
-            1681:   36(fvec3) MatrixTimesVector 1679 1680
-                              Store 1678(r5) 1681
-            1683:    6(float) Load 94(inF0)
-            1684:          68 Load 98(inFM0)
-            1685:          68 MatrixTimesScalar 1684 1683
-                              Store 1682(r6) 1685
+            1680:   36(fvec3) VectorTimesMatrix 1678 1679
+                              Store 1677(r4) 1680
+            1682:          68 Load 98(inFM0)
+            1683:   36(fvec3) Load 96(inFV0)
+            1684:   36(fvec3) MatrixTimesVector 1682 1683
+                              Store 1681(r5) 1684
+            1686:    6(float) Load 94(inF0)
             1687:          68 Load 98(inFM0)
-            1688:    6(float) Load 94(inF0)
-            1689:          68 MatrixTimesScalar 1687 1688
-                              Store 1686(r7) 1689
-            1691:          68 Load 99(inFM1)
-            1692:          68 Load 98(inFM0)
-            1693:          68 MatrixTimesMatrix 1691 1692
-                              Store 1690(r8) 1693
+            1688:          68 MatrixTimesScalar 1687 1686
+                              Store 1685(r6) 1688
+            1690:          68 Load 98(inFM0)
+            1691:    6(float) Load 94(inF0)
+            1692:          68 MatrixTimesScalar 1690 1691
+                              Store 1689(r7) 1692
+            1694:          68 Load 99(inFM1)
+            1695:          68 Load 98(inFM0)
+            1696:          68 MatrixTimesMatrix 1694 1695
+                              Store 1693(r8) 1696
                               Return
                               FunctionEnd
 109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
@@ -8287,51 +8292,51 @@ gl_FragCoord origin is upper left
       107(inFM0):     77(ptr) FunctionParameter
       108(inFM1):     77(ptr) FunctionParameter
              110:             Label
-        1694(r0):      7(ptr) Variable Function
-        1698(r1):     49(ptr) Variable Function
-        1702(r2):     49(ptr) Variable Function
-        1706(r3):      7(ptr) Variable Function
-        1710(r4):     49(ptr) Variable Function
-        1714(r5):     49(ptr) Variable Function
-        1718(r6):     77(ptr) Variable Function
-        1722(r7):     77(ptr) Variable Function
-        1726(r8):     77(ptr) Variable Function
-            1695:    6(float) Load 104(inF1)
-            1696:    6(float) Load 103(inF0)
-            1697:    6(float) FMul 1695 1696
-                              Store 1694(r0) 1697
+        1697(r0):      7(ptr) Variable Function
+        1701(r1):     49(ptr) Variable Function
+        1705(r2):     49(ptr) Variable Function
+        1709(r3):      7(ptr) Variable Function
+        1713(r4):     49(ptr) Variable Function
+        1717(r5):     49(ptr) Variable Function
+        1721(r6):     77(ptr) Variable Function
+        1725(r7):     77(ptr) Variable Function
+        1729(r8):     77(ptr) Variable Function
+            1698:    6(float) Load 104(inF1)
             1699:    6(float) Load 103(inF0)
-            1700:   48(fvec4) Load 105(inFV0)
-            1701:   48(fvec4) VectorTimesScalar 1700 1699
-                              Store 1698(r1) 1701
+            1700:    6(float) FMul 1698 1699
+                              Store 1697(r0) 1700
+            1702:    6(float) Load 103(inF0)
             1703:   48(fvec4) Load 105(inFV0)
-            1704:    6(float) Load 103(inF0)
-            1705:   48(fvec4) VectorTimesScalar 1703 1704
-                              Store 1702(r2) 1705
-            1707:   48(fvec4) Load 105(inFV0)
-            1708:   48(fvec4) Load 106(inFV1)
-            1709:    6(float) Dot 1707 1708
-                              Store 1706(r3) 1709
-            1711:   48(fvec4) Load 105(inFV0)
-            1712:          76 Load 107(inFM0)
-            1713:   48(fvec4) VectorTimesMatrix 1711 1712
-                              Store 1710(r4) 1713
+            1704:   48(fvec4) VectorTimesScalar 1703 1702
+                              Store 1701(r1) 1704
+            1706:   48(fvec4) Load 105(inFV0)
+            1707:    6(float) Load 103(inF0)
+            1708:   48(fvec4) VectorTimesScalar 1706 1707
+                              Store 1705(r2) 1708
+            1710:   48(fvec4) Load 105(inFV0)
+            1711:   48(fvec4) Load 106(inFV1)
+            1712:    6(float) Dot 1710 1711
+                              Store 1709(r3) 1712
+            1714:   48(fvec4) Load 105(inFV0)
             1715:          76 Load 107(inFM0)
-            1716:   48(fvec4) Load 105(inFV0)
-            1717:   48(fvec4) MatrixTimesVector 1715 1716
-                              Store 1714(r5) 1717
-            1719:    6(float) Load 103(inF0)
-            1720:          76 Load 107(inFM0)
-            1721:          76 MatrixTimesScalar 1720 1719
-                              Store 1718(r6) 1721
+            1716:   48(fvec4) VectorTimesMatrix 1714 1715
+                              Store 1713(r4) 1716
+            1718:          76 Load 107(inFM0)
+            1719:   48(fvec4) Load 105(inFV0)
+            1720:   48(fvec4) MatrixTimesVector 1718 1719
+                              Store 1717(r5) 1720
+            1722:    6(float) Load 103(inF0)
             1723:          76 Load 107(inFM0)
-            1724:    6(float) Load 103(inF0)
-            1725:          76 MatrixTimesScalar 1723 1724
-                              Store 1722(r7) 1725
-            1727:          76 Load 108(inFM1)
-            1728:          76 Load 107(inFM0)
-            1729:          76 MatrixTimesMatrix 1727 1728
-                              Store 1726(r8) 1729
+            1724:          76 MatrixTimesScalar 1723 1722
+                              Store 1721(r6) 1724
+            1726:          76 Load 107(inFM0)
+            1727:    6(float) Load 103(inF0)
+            1728:          76 MatrixTimesScalar 1726 1727
+                              Store 1725(r7) 1728
+            1730:          76 Load 108(inFM1)
+            1731:          76 Load 107(inFM0)
+            1732:          76 MatrixTimesMatrix 1730 1731
+                              Store 1729(r8) 1732
                               Return
                               FunctionEnd
 129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
@@ -8345,90 +8350,90 @@ gl_FragCoord origin is upper left
     127(inFM3x4):    116(ptr) FunctionParameter
     128(inFM2x4):    118(ptr) FunctionParameter
              130:             Label
-       1730(r00):      7(ptr) Variable Function
-       1734(r01):     25(ptr) Variable Function
-       1738(r02):     37(ptr) Variable Function
-       1742(r03):     25(ptr) Variable Function
-       1746(r04):     37(ptr) Variable Function
-       1750(r05):      7(ptr) Variable Function
-       1754(r06):      7(ptr) Variable Function
-       1758(r07):     37(ptr) Variable Function
-       1762(r08):     25(ptr) Variable Function
-       1766(r09):     25(ptr) Variable Function
-       1770(r10):     37(ptr) Variable Function
-       1774(r11):    112(ptr) Variable Function
-       1778(r12):    114(ptr) Variable Function
-       1782(r13):     61(ptr) Variable Function
-       1786(r14):    112(ptr) Variable Function
-       1790(r15):    118(ptr) Variable Function
-       1794(r16):    116(ptr) Variable Function
-            1731:    6(float) Load 121(inF1)
-            1732:    6(float) Load 120(inF0)
-            1733:    6(float) FMul 1731 1732
-                              Store 1730(r00) 1733
+       1733(r00):      7(ptr) Variable Function
+       1737(r01):     25(ptr) Variable Function
+       1741(r02):     37(ptr) Variable Function
+       1745(r03):     25(ptr) Variable Function
+       1749(r04):     37(ptr) Variable Function
+       1753(r05):      7(ptr) Variable Function
+       1757(r06):      7(ptr) Variable Function
+       1761(r07):     37(ptr) Variable Function
+       1765(r08):     25(ptr) Variable Function
+       1769(r09):     25(ptr) Variable Function
+       1773(r10):     37(ptr) Variable Function
+       1777(r11):    112(ptr) Variable Function
+       1781(r12):    114(ptr) Variable Function
+       1785(r13):     61(ptr) Variable Function
+       1789(r14):    112(ptr) Variable Function
+       1793(r15):    118(ptr) Variable Function
+       1797(r16):    116(ptr) Variable Function
+            1734:    6(float) Load 121(inF1)
             1735:    6(float) Load 120(inF0)
-            1736:   24(fvec2) Load 122(inFV2)
-            1737:   24(fvec2) VectorTimesScalar 1736 1735
-                              Store 1734(r01) 1737
-            1739:    6(float) Load 120(inF0)
-            1740:   36(fvec3) Load 123(inFV3)
-            1741:   36(fvec3) VectorTimesScalar 1740 1739
-                              Store 1738(r02) 1741
-            1743:   24(fvec2) Load 122(inFV2)
-            1744:    6(float) Load 120(inF0)
-            1745:   24(fvec2) VectorTimesScalar 1743 1744
-                              Store 1742(r03) 1745
-            1747:   36(fvec3) Load 123(inFV3)
-            1748:    6(float) Load 120(inF0)
-            1749:   36(fvec3) VectorTimesScalar 1747 1748
-                              Store 1746(r04) 1749
-            1751:   24(fvec2) Load 122(inFV2)
-            1752:   24(fvec2) Load 122(inFV2)
-            1753:    6(float) Dot 1751 1752
-                              Store 1750(r05) 1753
-            1755:   36(fvec3) Load 123(inFV3)
-            1756:   36(fvec3) Load 123(inFV3)
-            1757:    6(float) Dot 1755 1756
-                              Store 1754(r06) 1757
-            1759:         111 Load 124(inFM2x3)
-            1760:   24(fvec2) Load 122(inFV2)
-            1761:   36(fvec3) MatrixTimesVector 1759 1760
-                              Store 1758(r07) 1761
-            1763:         113 Load 125(inFM3x2)
-            1764:   36(fvec3) Load 123(inFV3)
-            1765:   24(fvec2) MatrixTimesVector 1763 1764
-                              Store 1762(r08) 1765
+            1736:    6(float) FMul 1734 1735
+                              Store 1733(r00) 1736
+            1738:    6(float) Load 120(inF0)
+            1739:   24(fvec2) Load 122(inFV2)
+            1740:   24(fvec2) VectorTimesScalar 1739 1738
+                              Store 1737(r01) 1740
+            1742:    6(float) Load 120(inF0)
+            1743:   36(fvec3) Load 123(inFV3)
+            1744:   36(fvec3) VectorTimesScalar 1743 1742
+                              Store 1741(r02) 1744
+            1746:   24(fvec2) Load 122(inFV2)
+            1747:    6(float) Load 120(inF0)
+            1748:   24(fvec2) VectorTimesScalar 1746 1747
+                              Store 1745(r03) 1748
+            1750:   36(fvec3) Load 123(inFV3)
+            1751:    6(float) Load 120(inF0)
+            1752:   36(fvec3) VectorTimesScalar 1750 1751
+                              Store 1749(r04) 1752
+            1754:   24(fvec2) Load 122(inFV2)
+            1755:   24(fvec2) Load 122(inFV2)
+            1756:    6(float) Dot 1754 1755
+                              Store 1753(r05) 1756
+            1758:   36(fvec3) Load 123(inFV3)
+            1759:   36(fvec3) Load 123(inFV3)
+            1760:    6(float) Dot 1758 1759
+                              Store 1757(r06) 1760
+            1762:         111 Load 124(inFM2x3)
+            1763:   24(fvec2) Load 122(inFV2)
+            1764:   36(fvec3) MatrixTimesVector 1762 1763
+                              Store 1761(r07) 1764
+            1766:         113 Load 125(inFM3x2)
             1767:   36(fvec3) Load 123(inFV3)
-            1768:         111 Load 124(inFM2x3)
-            1769:   24(fvec2) VectorTimesMatrix 1767 1768
-                              Store 1766(r09) 1769
-            1771:   24(fvec2) Load 122(inFV2)
-            1772:         113 Load 125(inFM3x2)
-            1773:   36(fvec3) VectorTimesMatrix 1771 1772
-                              Store 1770(r10) 1773
-            1775:    6(float) Load 120(inF0)
-            1776:         111 Load 124(inFM2x3)
-            1777:         111 MatrixTimesScalar 1776 1775
-                              Store 1774(r11) 1777
-            1779:    6(float) Load 120(inF0)
-            1780:         113 Load 125(inFM3x2)
-            1781:         113 MatrixTimesScalar 1780 1779
-                              Store 1778(r12) 1781
+            1768:   24(fvec2) MatrixTimesVector 1766 1767
+                              Store 1765(r08) 1768
+            1770:   36(fvec3) Load 123(inFV3)
+            1771:         111 Load 124(inFM2x3)
+            1772:   24(fvec2) VectorTimesMatrix 1770 1771
+                              Store 1769(r09) 1772
+            1774:   24(fvec2) Load 122(inFV2)
+            1775:         113 Load 125(inFM3x2)
+            1776:   36(fvec3) VectorTimesMatrix 1774 1775
+                              Store 1773(r10) 1776
+            1778:    6(float) Load 120(inF0)
+            1779:         111 Load 124(inFM2x3)
+            1780:         111 MatrixTimesScalar 1779 1778
+                              Store 1777(r11) 1780
+            1782:    6(float) Load 120(inF0)
             1783:         113 Load 125(inFM3x2)
-            1784:         111 Load 124(inFM2x3)
-            1785:          60 MatrixTimesMatrix 1783 1784
-                              Store 1782(r13) 1785
-            1787:          68 Load 126(inFM3x3)
-            1788:         111 Load 124(inFM2x3)
-            1789:         111 MatrixTimesMatrix 1787 1788
-                              Store 1786(r14) 1789
-            1791:         115 Load 127(inFM3x4)
-            1792:         111 Load 124(inFM2x3)
-            1793:         117 MatrixTimesMatrix 1791 1792
-                              Store 1790(r15) 1793
-            1795:         117 Load 128(inFM2x4)
-            1796:         113 Load 125(inFM3x2)
-            1797:         115 MatrixTimesMatrix 1795 1796
-                              Store 1794(r16) 1797
+            1784:         113 MatrixTimesScalar 1783 1782
+                              Store 1781(r12) 1784
+            1786:         113 Load 125(inFM3x2)
+            1787:         111 Load 124(inFM2x3)
+            1788:          60 MatrixTimesMatrix 1786 1787
+                              Store 1785(r13) 1788
+            1790:          68 Load 126(inFM3x3)
+            1791:         111 Load 124(inFM2x3)
+            1792:         111 MatrixTimesMatrix 1790 1791
+                              Store 1789(r14) 1792
+            1794:         115 Load 127(inFM3x4)
+            1795:         111 Load 124(inFM2x3)
+            1796:         117 MatrixTimesMatrix 1794 1795
+                              Store 1793(r15) 1796
+            1798:         117 Load 128(inFM2x4)
+            1799:         113 Load 125(inFM3x2)
+            1800:         115 MatrixTimesMatrix 1798 1799
+                              Store 1797(r16) 1800
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index eb3cee7d770245cd6c76dcea9c9df438c48bd23e..6b393048e7f087023f7622cad543158dbb5a75ea 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -2,7 +2,7 @@ hlsl.intrinsics.lit.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1;f1;f1; (global 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)
@@ -47,7 +47,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(f1;f1;f1; (global 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)
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index 01008644462bc896e78d5582a1b37f57af474f5f..44dedf77061807c5bf186311b04ec0e3b88cae03 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -2,7 +2,7 @@ hlsl.intrinsics.negative.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:2  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (global float)
+0:2  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -12,7 +12,7 @@ local_size = (1, 1, 1)
 0:53      Branch: Return with expression
 0:53        Constant:
 0:53          0.000000
-0:57  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:57  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:57    Function Parameters: 
 0:57      'inF0' (in 1-component vector of float)
 0:57      'inF1' (in 1-component vector of float)
@@ -22,7 +22,7 @@ local_size = (1, 1, 1)
 0:62      Branch: Return with expression
 0:62        Constant:
 0:62          0.000000
-0:66  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:66  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:66    Function Parameters: 
 0:66      'inF0' (in 2-component vector of float)
 0:66      'inF1' (in 2-component vector of float)
@@ -33,7 +33,7 @@ local_size = (1, 1, 1)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:113  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:113  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:113    Function Parameters: 
 0:113      'inF0' (in 3-component vector of float)
 0:113      'inF1' (in 3-component vector of float)
@@ -45,7 +45,7 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:158  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (global 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)
@@ -75,7 +75,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:2  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (global float)
+0:2  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -85,7 +85,7 @@ local_size = (1, 1, 1)
 0:53      Branch: Return with expression
 0:53        Constant:
 0:53          0.000000
-0:57  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:57  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:57    Function Parameters: 
 0:57      'inF0' (in 1-component vector of float)
 0:57      'inF1' (in 1-component vector of float)
@@ -95,7 +95,7 @@ local_size = (1, 1, 1)
 0:62      Branch: Return with expression
 0:62        Constant:
 0:62          0.000000
-0:66  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:66  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:66    Function Parameters: 
 0:66      'inF0' (in 2-component vector of float)
 0:66      'inF1' (in 2-component vector of float)
@@ -106,7 +106,7 @@ local_size = (1, 1, 1)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:113  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:113  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:113    Function Parameters: 
 0:113      'inF0' (in 3-component vector of float)
 0:113      'inF1' (in 3-component vector of float)
@@ -118,7 +118,7 @@ local_size = (1, 1, 1)
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:158  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (global 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)
diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out
index 2244e8bce25f5189b4887bddcf2c0549977f3636..e275054325c126c96eaa1a2ffede465ff40d7f98 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out
@@ -65,7 +65,7 @@ ERROR: 60 compilation errors.  No code generated.
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:2  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (global float)
+0:2  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -78,36 +78,36 @@ ERROR: node is still EOpNull!
 0:5            'inF0' (in float)
 0:5          Convert float to uint (temp uint)
 0:5            'inF1' (in float)
-0:6      Function Call: CheckAccessFullyMapped(u1; (global bool)
+0:6      Function Call: CheckAccessFullyMapped(u1; (temp bool)
 0:6        Constant:
 0:6          3 (const uint)
-0:7      bitCount (global uint)
+0:7      bitCount (temp uint)
 0:7        Convert float to uint (temp uint)
 0:7          'inF0' (in float)
-0:8      cross-product (global 3-component vector of float)
+0:8      cross-product (temp 3-component vector of float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF0' (in float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF1' (in float)
-0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (global 4-component vector of int)
+0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (temp 4-component vector of int)
 0:9        Construct vec4 (in 4-component vector of float)
 0:9          'inF0' (in float)
 0:10      Constant:
 0:10        0.000000
 0:12      ERROR: Bad unary op
- (global float)
+ (temp float)
 0:12        Convert float to uint (temp uint)
 0:12          'inF0' (in float)
-0:13      findMSB (global uint)
+0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
-0:14      findLSB (global uint)
+0:14      findLSB (temp uint)
 0:14        Convert float to uint (temp uint)
 0:14          'inF0' (in float)
-0:23      length (global float)
+0:23      length (temp float)
 0:23        Construct vec2 (in 2-component vector of float)
 0:23          'inF0' (in float)
-0:24      Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint)
+0:24      Function Call: msad4(u1;vu2;vu4; (temp 4-component vector of uint)
 0:24        Convert float to uint (temp uint)
 0:24          'inF0' (in float)
 0:24        Constant:
@@ -118,15 +118,15 @@ ERROR: node is still EOpNull!
 0:24          0 (const uint)
 0:24          0 (const uint)
 0:24          0 (const uint)
-0:25      normalize (global 2-component vector of float)
+0:25      normalize (temp 2-component vector of float)
 0:25        Construct vec2 (in 2-component vector of float)
 0:25          'inF0' (in float)
-0:26      reflect (global 2-component vector of float)
+0:26      reflect (temp 2-component vector of float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF0' (in float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF1' (in float)
-0:27      refract (global 2-component vector of float)
+0:27      refract (temp 2-component vector of float)
 0:27        Construct vec2 (in 2-component vector of float)
 0:27          'inF0' (in float)
 0:27        Construct vec2 (in 2-component vector of float)
@@ -134,7 +134,7 @@ ERROR: node is still EOpNull!
 0:27        'inF2' (in float)
 0:28      Constant:
 0:28        0.000000
-0:29      bitFieldReverse (global uint)
+0:29      bitFieldReverse (temp uint)
 0:29        Convert float to uint (temp uint)
 0:29          'inF0' (in float)
 0:30      Constant:
@@ -142,7 +142,7 @@ ERROR: node is still EOpNull!
 0:32      Branch: Return with expression
 0:32        Constant:
 0:32          0.000000
-0:36  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:36  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:36    Function Parameters: 
 0:36      'inF0' (in 1-component vector of float)
 0:36      'inF1' (in 1-component vector of float)
@@ -154,7 +154,7 @@ ERROR: node is still EOpNull!
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:45  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:45  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 2-component vector of float)
 0:45      'inF1' (in 2-component vector of float)
@@ -162,14 +162,14 @@ ERROR: node is still EOpNull!
 0:45      'inI0' (in 2-component vector of int)
 0:?     Sequence
 0:46      ERROR: Bad aggregation op
- (global 2-component vector of double)
+ (temp 2-component vector of double)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF0' (in 2-component vector of float)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF1' (in 2-component vector of float)
 0:47      Constant:
 0:47        0.000000
-0:48      bitCount (global 2-component vector of uint)
+0:48      bitCount (temp 2-component vector of uint)
 0:48        Convert float to uint (temp 2-component vector of uint)
 0:48          'inF0' (in 2-component vector of float)
 0:49      Constant:
@@ -179,16 +179,16 @@ ERROR: node is still EOpNull!
 0:51      Constant:
 0:51        0.000000
 0:52      ERROR: Bad unary op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:52        Convert float to uint (temp 2-component vector of uint)
 0:52          'inF0' (in 2-component vector of float)
-0:53      findMSB (global 2-component vector of uint)
+0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
-0:54      findLSB (global 2-component vector of uint)
+0:54      findLSB (temp 2-component vector of uint)
 0:54        Convert float to uint (temp 2-component vector of uint)
 0:54          'inF0' (in 2-component vector of float)
-0:56      bitFieldReverse (global 2-component vector of uint)
+0:56      bitFieldReverse (temp 2-component vector of uint)
 0:56        Convert float to uint (temp 2-component vector of uint)
 0:56          'inF0' (in 2-component vector of float)
 0:57      Constant:
@@ -197,7 +197,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:63  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:63  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:63    Function Parameters: 
 0:63      'inF0' (in 3-component vector of float)
 0:63      'inF1' (in 3-component vector of float)
@@ -206,7 +206,7 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:64      Constant:
 0:64        0.000000
-0:65      bitCount (global 3-component vector of uint)
+0:65      bitCount (temp 3-component vector of uint)
 0:65        Convert float to uint (temp 3-component vector of uint)
 0:65          'inF0' (in 3-component vector of float)
 0:66      Constant:
@@ -214,16 +214,16 @@ ERROR: node is still EOpNull!
 0:67      Constant:
 0:67        0.000000
 0:68      ERROR: Bad unary op
- (global 3-component vector of float)
+ (temp 3-component vector of float)
 0:68        Convert float to uint (temp 3-component vector of uint)
 0:68          'inF0' (in 3-component vector of float)
-0:69      findMSB (global 3-component vector of uint)
+0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
-0:70      findLSB (global 3-component vector of uint)
+0:70      findLSB (temp 3-component vector of uint)
 0:70        Convert float to uint (temp 3-component vector of uint)
 0:70          'inF0' (in 3-component vector of float)
-0:72      bitFieldReverse (global 3-component vector of uint)
+0:72      bitFieldReverse (temp 3-component vector of uint)
 0:72        Convert float to uint (temp 3-component vector of uint)
 0:72          'inF0' (in 3-component vector of float)
 0:73      Constant:
@@ -233,7 +233,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:80  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (global 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)
@@ -242,10 +242,10 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
-0:82      bitCount (global 4-component vector of uint)
+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:83      cross-product (global 3-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        Construct vec3 (in 3-component vector of float)
@@ -253,16 +253,16 @@ ERROR: node is still EOpNull!
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
- (global 4-component vector of float)
+ (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:86      findMSB (global 4-component vector of uint)
+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:87      findLSB (global 4-component vector of uint)
+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:89      bitFieldReverse (global 4-component vector of uint)
+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:90      Constant:
@@ -276,7 +276,7 @@ ERROR: node is still EOpNull!
 0:?             3.000000
 0:?             4.000000
 0:92        Branch: Return
-0:115  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+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)
 0:115      'inF1' (in 2X2 matrix of float)
@@ -314,7 +314,7 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:123  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:123  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:123    Function Parameters: 
 0:123      'inF0' (in 3X3 matrix of float)
 0:123      'inF1' (in 3X3 matrix of float)
@@ -357,7 +357,7 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:131  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:131  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 4X4 matrix of float)
 0:131      'inF1' (in 4X4 matrix of float)
@@ -421,7 +421,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:2  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (global float)
+0:2  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -434,36 +434,36 @@ ERROR: node is still EOpNull!
 0:5            'inF0' (in float)
 0:5          Convert float to uint (temp uint)
 0:5            'inF1' (in float)
-0:6      Function Call: CheckAccessFullyMapped(u1; (global bool)
+0:6      Function Call: CheckAccessFullyMapped(u1; (temp bool)
 0:6        Constant:
 0:6          3 (const uint)
-0:7      bitCount (global uint)
+0:7      bitCount (temp uint)
 0:7        Convert float to uint (temp uint)
 0:7          'inF0' (in float)
-0:8      cross-product (global 3-component vector of float)
+0:8      cross-product (temp 3-component vector of float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF0' (in float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF1' (in float)
-0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (global 4-component vector of int)
+0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (temp 4-component vector of int)
 0:9        Construct vec4 (in 4-component vector of float)
 0:9          'inF0' (in float)
 0:10      Constant:
 0:10        0.000000
 0:12      ERROR: Bad unary op
- (global float)
+ (temp float)
 0:12        Convert float to uint (temp uint)
 0:12          'inF0' (in float)
-0:13      findMSB (global uint)
+0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
-0:14      findLSB (global uint)
+0:14      findLSB (temp uint)
 0:14        Convert float to uint (temp uint)
 0:14          'inF0' (in float)
-0:23      length (global float)
+0:23      length (temp float)
 0:23        Construct vec2 (in 2-component vector of float)
 0:23          'inF0' (in float)
-0:24      Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint)
+0:24      Function Call: msad4(u1;vu2;vu4; (temp 4-component vector of uint)
 0:24        Convert float to uint (temp uint)
 0:24          'inF0' (in float)
 0:24        Constant:
@@ -474,15 +474,15 @@ ERROR: node is still EOpNull!
 0:24          0 (const uint)
 0:24          0 (const uint)
 0:24          0 (const uint)
-0:25      normalize (global 2-component vector of float)
+0:25      normalize (temp 2-component vector of float)
 0:25        Construct vec2 (in 2-component vector of float)
 0:25          'inF0' (in float)
-0:26      reflect (global 2-component vector of float)
+0:26      reflect (temp 2-component vector of float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF0' (in float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF1' (in float)
-0:27      refract (global 2-component vector of float)
+0:27      refract (temp 2-component vector of float)
 0:27        Construct vec2 (in 2-component vector of float)
 0:27          'inF0' (in float)
 0:27        Construct vec2 (in 2-component vector of float)
@@ -490,7 +490,7 @@ ERROR: node is still EOpNull!
 0:27        'inF2' (in float)
 0:28      Constant:
 0:28        0.000000
-0:29      bitFieldReverse (global uint)
+0:29      bitFieldReverse (temp uint)
 0:29        Convert float to uint (temp uint)
 0:29          'inF0' (in float)
 0:30      Constant:
@@ -498,7 +498,7 @@ ERROR: node is still EOpNull!
 0:32      Branch: Return with expression
 0:32        Constant:
 0:32          0.000000
-0:36  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:36  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:36    Function Parameters: 
 0:36      'inF0' (in 1-component vector of float)
 0:36      'inF1' (in 1-component vector of float)
@@ -510,7 +510,7 @@ ERROR: node is still EOpNull!
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:45  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:45  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 2-component vector of float)
 0:45      'inF1' (in 2-component vector of float)
@@ -518,14 +518,14 @@ ERROR: node is still EOpNull!
 0:45      'inI0' (in 2-component vector of int)
 0:?     Sequence
 0:46      ERROR: Bad aggregation op
- (global 2-component vector of double)
+ (temp 2-component vector of double)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF0' (in 2-component vector of float)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF1' (in 2-component vector of float)
 0:47      Constant:
 0:47        0.000000
-0:48      bitCount (global 2-component vector of uint)
+0:48      bitCount (temp 2-component vector of uint)
 0:48        Convert float to uint (temp 2-component vector of uint)
 0:48          'inF0' (in 2-component vector of float)
 0:49      Constant:
@@ -535,16 +535,16 @@ ERROR: node is still EOpNull!
 0:51      Constant:
 0:51        0.000000
 0:52      ERROR: Bad unary op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:52        Convert float to uint (temp 2-component vector of uint)
 0:52          'inF0' (in 2-component vector of float)
-0:53      findMSB (global 2-component vector of uint)
+0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
-0:54      findLSB (global 2-component vector of uint)
+0:54      findLSB (temp 2-component vector of uint)
 0:54        Convert float to uint (temp 2-component vector of uint)
 0:54          'inF0' (in 2-component vector of float)
-0:56      bitFieldReverse (global 2-component vector of uint)
+0:56      bitFieldReverse (temp 2-component vector of uint)
 0:56        Convert float to uint (temp 2-component vector of uint)
 0:56          'inF0' (in 2-component vector of float)
 0:57      Constant:
@@ -553,7 +553,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:63  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:63  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:63    Function Parameters: 
 0:63      'inF0' (in 3-component vector of float)
 0:63      'inF1' (in 3-component vector of float)
@@ -562,7 +562,7 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:64      Constant:
 0:64        0.000000
-0:65      bitCount (global 3-component vector of uint)
+0:65      bitCount (temp 3-component vector of uint)
 0:65        Convert float to uint (temp 3-component vector of uint)
 0:65          'inF0' (in 3-component vector of float)
 0:66      Constant:
@@ -570,16 +570,16 @@ ERROR: node is still EOpNull!
 0:67      Constant:
 0:67        0.000000
 0:68      ERROR: Bad unary op
- (global 3-component vector of float)
+ (temp 3-component vector of float)
 0:68        Convert float to uint (temp 3-component vector of uint)
 0:68          'inF0' (in 3-component vector of float)
-0:69      findMSB (global 3-component vector of uint)
+0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
-0:70      findLSB (global 3-component vector of uint)
+0:70      findLSB (temp 3-component vector of uint)
 0:70        Convert float to uint (temp 3-component vector of uint)
 0:70          'inF0' (in 3-component vector of float)
-0:72      bitFieldReverse (global 3-component vector of uint)
+0:72      bitFieldReverse (temp 3-component vector of uint)
 0:72        Convert float to uint (temp 3-component vector of uint)
 0:72          'inF0' (in 3-component vector of float)
 0:73      Constant:
@@ -589,7 +589,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:80  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (global 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)
@@ -598,10 +598,10 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
-0:82      bitCount (global 4-component vector of uint)
+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:83      cross-product (global 3-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        Construct vec3 (in 3-component vector of float)
@@ -609,16 +609,16 @@ ERROR: node is still EOpNull!
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
- (global 4-component vector of float)
+ (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:86      findMSB (global 4-component vector of uint)
+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:87      findLSB (global 4-component vector of uint)
+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:89      bitFieldReverse (global 4-component vector of uint)
+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:90      Constant:
@@ -632,7 +632,7 @@ ERROR: node is still EOpNull!
 0:?             3.000000
 0:?             4.000000
 0:92        Branch: Return
-0:115  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+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)
 0:115      'inF1' (in 2X2 matrix of float)
@@ -670,7 +670,7 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:123  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:123  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:123    Function Parameters: 
 0:123      'inF0' (in 3X3 matrix of float)
 0:123      'inF1' (in 3X3 matrix of float)
@@ -713,7 +713,7 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:131  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:131  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 4X4 matrix of float)
 0:131      'inF1' (in 4X4 matrix of float)
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index e702d332cc3a526c61bbb2b03501ba0c950428eb..b57a5a9a278d625b28f92866f9f9d3500e342846 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -1,7 +1,7 @@
 hlsl.intrinsics.negative.vert
 Shader version: 450
 0:? Sequence
-0:15  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (global float)
+0:15  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:15    Function Parameters: 
 0:15      'inF0' (in float)
 0:15      'inF1' (in float)
@@ -11,7 +11,7 @@ Shader version: 450
 0:71      Branch: Return with expression
 0:71        Constant:
 0:71          0.000000
-0:75  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:75  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:75    Function Parameters: 
 0:75      'inF0' (in 1-component vector of float)
 0:75      'inF1' (in 1-component vector of float)
@@ -21,7 +21,7 @@ Shader version: 450
 0:80      Branch: Return with expression
 0:80        Constant:
 0:80          0.000000
-0:84  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:84  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:84    Function Parameters: 
 0:84      'inF0' (in 2-component vector of float)
 0:84      'inF1' (in 2-component vector of float)
@@ -32,7 +32,7 @@ Shader version: 450
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:131  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:131  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 3-component vector of float)
 0:131      'inF1' (in 3-component vector of float)
@@ -44,7 +44,7 @@ Shader version: 450
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:176  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (global 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)
@@ -60,7 +60,7 @@ Shader version: 450
 0:?             3.000000
 0:?             4.000000
 0:217        Branch: Return
-0:226  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+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)
 0:226      'inF1' (in 2X2 matrix of float)
@@ -72,7 +72,7 @@ Shader version: 450
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:234  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:234  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:234    Function Parameters: 
 0:234      'inF0' (in 3X3 matrix of float)
 0:234      'inF1' (in 3X3 matrix of float)
@@ -89,7 +89,7 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:242  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:242  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:242    Function Parameters: 
 0:242      'inF0' (in 4X4 matrix of float)
 0:242      'inF1' (in 4X4 matrix of float)
@@ -114,6 +114,11 @@ 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)
@@ -126,11 +131,6 @@ 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:
@@ -138,7 +138,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:15  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (global float)
+0:15  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (temp float)
 0:15    Function Parameters: 
 0:15      'inF0' (in float)
 0:15      'inF1' (in float)
@@ -148,7 +148,7 @@ Shader version: 450
 0:71      Branch: Return with expression
 0:71        Constant:
 0:71          0.000000
-0:75  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
+0:75  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
 0:75    Function Parameters: 
 0:75      'inF0' (in 1-component vector of float)
 0:75      'inF1' (in 1-component vector of float)
@@ -158,7 +158,7 @@ Shader version: 450
 0:80      Branch: Return with expression
 0:80        Constant:
 0:80          0.000000
-0:84  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
+0:84  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
 0:84    Function Parameters: 
 0:84      'inF0' (in 2-component vector of float)
 0:84      'inF1' (in 2-component vector of float)
@@ -169,7 +169,7 @@ Shader version: 450
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:131  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
+0:131  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 3-component vector of float)
 0:131      'inF1' (in 3-component vector of float)
@@ -181,7 +181,7 @@ Shader version: 450
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:176  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (global 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)
@@ -197,7 +197,7 @@ Shader version: 450
 0:?             3.000000
 0:?             4.000000
 0:217        Branch: Return
-0:226  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+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)
 0:226      'inF1' (in 2X2 matrix of float)
@@ -209,7 +209,7 @@ Shader version: 450
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:234  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:234  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:234    Function Parameters: 
 0:234      'inF0' (in 3X3 matrix of float)
 0:234      'inF1' (in 3X3 matrix of float)
@@ -226,7 +226,7 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:242  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:242  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:242    Function Parameters: 
 0:242      'inF0' (in 4X4 matrix of float)
 0:242      'inF1' (in 4X4 matrix of float)
@@ -251,6 +251,11 @@ 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)
@@ -263,11 +268,6 @@ 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
@@ -276,7 +276,7 @@ Shader version: 450
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "VertexShaderFunction" 85 122 123 124 127
+                              EntryPoint Vertex 4  "VertexShaderFunction" 85 102 103 104 107
                               Name 4  "VertexShaderFunction"
                               Name 15  "VertexShaderFunctionS(f1;f1;f1;i1;"
                               Name 11  "inF0"
@@ -311,27 +311,27 @@ Shader version: 450
                               Name 66  "inF1"
                               Name 67  "inF2"
                               Name 85  "@entryPointOutput"
-                              Name 103  "gs_ua"
-                              Name 104  "gs_ub"
-                              Name 105  "gs_uc"
-                              Name 108  "gs_ua2"
-                              Name 109  "gs_ub2"
-                              Name 110  "gs_uc2"
-                              Name 113  "gs_ua3"
-                              Name 114  "gs_ub3"
-                              Name 115  "gs_uc3"
-                              Name 118  "gs_ua4"
-                              Name 119  "gs_ub4"
-                              Name 120  "gs_uc4"
-                              Name 122  "inF0"
-                              Name 123  "inF1"
-                              Name 124  "inF2"
-                              Name 127  "inI0"
+                              Name 102  "inF0"
+                              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 122(inF0) Location 0
-                              Decorate 123(inF1) Location 1
-                              Decorate 124(inF2) Location 2
-                              Decorate 127(inI0) Location 3
+                              Decorate 102(inF0) Location 0
+                              Decorate 103(inF1) Location 1
+                              Decorate 104(inF2) Location 2
+                              Decorate 107(inI0) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -375,33 +375,33 @@ Shader version: 450
               94:          53 ConstantComposite 93 93 93
               97:   61(fvec4) ConstantComposite 86 86 86 86
               98:          62 ConstantComposite 97 97 97 97
-             101:             TypeInt 32 0
-             102:             TypePointer Private 101(int)
-      103(gs_ua):    102(ptr) Variable Private
-      104(gs_ub):    102(ptr) Variable Private
-      105(gs_uc):    102(ptr) Variable Private
-             106:             TypeVector 101(int) 2
-             107:             TypePointer Private 106(ivec2)
-     108(gs_ua2):    107(ptr) Variable Private
-     109(gs_ub2):    107(ptr) Variable Private
-     110(gs_uc2):    107(ptr) Variable Private
-             111:             TypeVector 101(int) 3
-             112:             TypePointer Private 111(ivec3)
-     113(gs_ua3):    112(ptr) Variable Private
-     114(gs_ub3):    112(ptr) Variable Private
-     115(gs_uc3):    112(ptr) Variable Private
-             116:             TypeVector 101(int) 4
-             117:             TypePointer Private 116(ivec4)
-     118(gs_ua4):    117(ptr) Variable Private
-     119(gs_ub4):    117(ptr) Variable Private
-     120(gs_uc4):    117(ptr) Variable Private
-             121:             TypePointer Input 61(fvec4)
-       122(inF0):    121(ptr) Variable Input
-       123(inF1):    121(ptr) Variable Input
-       124(inF2):    121(ptr) Variable Input
-             125:             TypeVector 8(int) 4
-             126:             TypePointer Input 125(ivec4)
-       127(inI0):    126(ptr) Variable Input
+             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
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
                               Store 85(@entryPointOutput) 87
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..f5ba86b023d17cca689255b3c93b536e144515db
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -0,0 +1,184 @@
+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 Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp uint)
+0:16          'r00' (temp uint)
+0:16          bitCount (temp uint)
+0:16            Convert float to uint (temp uint)
+0:16              f: direct index for structure (layout(offset=8 ) uniform float)
+0:16                '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})
+0:16                Constant:
+0:16                  2 (const uint)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r01' (temp 2-component vector of uint)
+0:17          bitFieldReverse (temp 2-component vector of uint)
+0:17            Convert float to uint (temp 2-component vector of uint)
+0:17              f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:17                '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})
+0:17                Constant:
+0:17                  6 (const uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:20        color: direct index for structure (temp 4-component vector of float)
+0:20          'ps_output' (temp structure{temp 4-component vector of float color})
+0:20          Constant:
+0:20            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp uint)
+0:16          'r00' (temp uint)
+0:16          bitCount (temp uint)
+0:16            Convert float to uint (temp uint)
+0:16              f: direct index for structure (layout(offset=8 ) uniform float)
+0:16                '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})
+0:16                Constant:
+0:16                  2 (const uint)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r01' (temp 2-component vector of uint)
+0:17          bitFieldReverse (temp 2-component vector of uint)
+0:17            Convert float to uint (temp 2-component vector of uint)
+0:17              f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:17                '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})
+0:17                Constant:
+0:17                  6 (const uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:20        color: direct index for structure (temp 4-component vector of float)
+0:20          'ps_output' (temp structure{temp 4-component vector of float color})
+0:20          Constant:
+0:20            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 41
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..82b9e6861bfacf5eef5c8cfc7ac59948c7167fb0
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -0,0 +1,1313 @@
+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 Parameters: 
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child (temp float)
+0:23          'r00' (temp float)
+0:23          max (temp float)
+0:23            Convert bool to float (temp float)
+0:23              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:23                '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})
+0:23                Constant:
+0:23                  3 (const uint)
+0:23            f: direct index for structure (layout(offset=8 ) uniform float)
+0:23              '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})
+0:23              Constant:
+0:23                2 (const uint)
+0:24      Sequence
+0:24        move second child to first child (temp uint)
+0:24          'r01' (temp uint)
+0:24          max (temp uint)
+0:24            Convert bool to uint (temp uint)
+0:24              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:24                '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})
+0:24                Constant:
+0:24                  3 (const uint)
+0:24            u: direct index for structure (layout(offset=4 ) uniform uint)
+0:24              '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})
+0:24              Constant:
+0:24                1 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r02' (temp int)
+0:25          max (temp int)
+0:25            Convert bool to int (temp int)
+0:25              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:25                '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})
+0:25                Constant:
+0:25                  3 (const uint)
+0:25            i: direct index for structure (layout(offset=0 ) uniform int)
+0:25              '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})
+0:25              Constant:
+0:25                0 (const uint)
+0:26      Sequence
+0:26        move second child to first child (temp float)
+0:26          'r03' (temp float)
+0:26          max (temp float)
+0:26            Convert int to float (temp float)
+0:26              i: direct index for structure (layout(offset=0 ) uniform int)
+0:26                '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})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26            f: direct index for structure (layout(offset=8 ) uniform float)
+0:26              '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})
+0:26              Constant:
+0:26                2 (const uint)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r04' (temp float)
+0:27          max (temp float)
+0:27            Convert uint to float (temp float)
+0:27              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:27                '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})
+0:27                Constant:
+0:27                  1 (const uint)
+0:27            f: direct index for structure (layout(offset=8 ) uniform float)
+0:27              '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})
+0:27              Constant:
+0:27                2 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp 2-component vector of float)
+0:29          'r10' (temp 2-component vector of float)
+0:29          max (temp 2-component vector of float)
+0:29            Convert bool to float (temp 2-component vector of float)
+0:29              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:29                '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})
+0:29                Constant:
+0:29                  7 (const uint)
+0:29            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:29              '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})
+0:29              Constant:
+0:29                6 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp 2-component vector of uint)
+0:30          'r11' (temp 2-component vector of uint)
+0:30          max (temp 2-component vector of uint)
+0:30            Convert bool to uint (temp 2-component vector of uint)
+0:30              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:30                '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})
+0:30                Constant:
+0:30                  7 (const uint)
+0:30            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:30              '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})
+0:30              Constant:
+0:30                5 (const uint)
+0:31      Sequence
+0:31        move second child to first child (temp 2-component vector of int)
+0:31          'r12' (temp 2-component vector of int)
+0:31          max (temp 2-component vector of int)
+0:31            Convert bool to int (temp 2-component vector of int)
+0:31              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:31                '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})
+0:31                Constant:
+0:31                  7 (const uint)
+0:31            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:31              '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})
+0:31              Constant:
+0:31                4 (const uint)
+0:32      Sequence
+0:32        move second child to first child (temp 2-component vector of float)
+0:32          'r13' (temp 2-component vector of float)
+0:32          max (temp 2-component vector of float)
+0:32            Convert int to float (temp 2-component vector of float)
+0:32              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:32                '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})
+0:32                Constant:
+0:32                  4 (const uint)
+0:32            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:32              '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})
+0:32              Constant:
+0:32                6 (const uint)
+0:33      Sequence
+0:33        move second child to first child (temp 2-component vector of float)
+0:33          'r14' (temp 2-component vector of float)
+0:33          max (temp 2-component vector of float)
+0:33            Convert uint to float (temp 2-component vector of float)
+0:33              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:33                '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})
+0:33                Constant:
+0:33                  5 (const uint)
+0:33            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:33              '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})
+0:33              Constant:
+0:33                6 (const uint)
+0:35      Sequence
+0:35        move second child to first child (temp 2-component vector of float)
+0:35          'r20' (temp 2-component vector of float)
+0:35          clamp (temp 2-component vector of float)
+0:35            Convert int to float (temp 2-component vector of float)
+0:35              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:35                '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})
+0:35                Constant:
+0:35                  4 (const uint)
+0:35            Convert uint to float (temp 2-component vector of float)
+0:35              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:35                '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})
+0:35                Constant:
+0:35                  5 (const uint)
+0:35            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:35              '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})
+0:35              Constant:
+0:35                6 (const uint)
+0:36      Sequence
+0:36        move second child to first child (temp 2-component vector of uint)
+0:36          'r21' (temp 2-component vector of uint)
+0:36          clamp (temp 2-component vector of uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                '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})
+0:36                Constant:
+0:36                  7 (const uint)
+0:36            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:36              '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})
+0:36              Constant:
+0:36                5 (const uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                '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})
+0:36                Constant:
+0:36                  7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp 2-component vector of float)
+0:37          'r22' (temp 2-component vector of float)
+0:37          clamp (temp 2-component vector of float)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                '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})
+0:37                Constant:
+0:37                  7 (const uint)
+0:37            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:37              '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})
+0:37              Constant:
+0:37                6 (const uint)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                '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})
+0:37                Constant:
+0:37                  7 (const uint)
+0:40      Sequence
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          'r30' (temp 2-component vector of float)
+0:40          max (temp 2-component vector of float)
+0:40            Construct vec2 (in 2-component vector of float)
+0:40              Convert bool to float (temp float)
+0:40                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:40                  '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})
+0:40                  Constant:
+0:40                    3 (const uint)
+0:40            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                6 (const uint)
+0:41      Sequence
+0:41        move second child to first child (temp 2-component vector of uint)
+0:41          'r31' (temp 2-component vector of uint)
+0:41          max (temp 2-component vector of uint)
+0:41            Construct uvec2 (in 2-component vector of uint)
+0:41              Convert bool to uint (temp uint)
+0:41                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:41                  '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})
+0:41                  Constant:
+0:41                    3 (const uint)
+0:41            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:41              '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})
+0:41              Constant:
+0:41                5 (const uint)
+0:42      Sequence
+0:42        move second child to first child (temp 2-component vector of int)
+0:42          'r32' (temp 2-component vector of int)
+0:42          max (temp 2-component vector of int)
+0:42            Construct ivec2 (in 2-component vector of int)
+0:42              Convert bool to int (temp int)
+0:42                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:42                  '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})
+0:42                  Constant:
+0:42                    3 (const uint)
+0:42            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:42              '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})
+0:42              Constant:
+0:42                4 (const uint)
+0:43      Sequence
+0:43        move second child to first child (temp 2-component vector of float)
+0:43          'r33' (temp 2-component vector of float)
+0:43          max (temp 2-component vector of float)
+0:43            Construct vec2 (in 2-component vector of float)
+0:43              Convert int to float (temp float)
+0:43                i: direct index for structure (layout(offset=0 ) uniform int)
+0:43                  '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})
+0:43                  Constant:
+0:43                    0 (const uint)
+0:43            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                6 (const uint)
+0:44      Sequence
+0:44        move second child to first child (temp 2-component vector of float)
+0:44          'r34' (temp 2-component vector of float)
+0:44          max (temp 2-component vector of float)
+0:44            Construct vec2 (in 2-component vector of float)
+0:44              Convert uint to float (temp float)
+0:44                u: direct index for structure (layout(offset=4 ) uniform uint)
+0:44                  '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})
+0:44                  Constant:
+0:44                    1 (const uint)
+0:44            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                6 (const uint)
+0:46      Sequence
+0:46        move second child to first child (temp 2-component vector of float)
+0:46          'r40' (temp 2-component vector of float)
+0:46          clamp (temp 2-component vector of float)
+0:46            Construct vec2 (in 2-component vector of float)
+0:46              Convert int to float (temp float)
+0:46                i: direct index for structure (layout(offset=0 ) uniform int)
+0:46                  '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})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46            Convert uint to float (temp 2-component vector of float)
+0:46              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                6 (const uint)
+0:47      Sequence
+0:47        move second child to first child (temp 2-component vector of uint)
+0:47          'r41' (temp 2-component vector of uint)
+0:47          clamp (temp 2-component vector of uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                '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})
+0:47                Constant:
+0:47                  7 (const uint)
+0:47            Construct uvec2 (in 2-component vector of uint)
+0:47              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:47                '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})
+0:47                Constant:
+0:47                  1 (const uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                '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})
+0:47                Constant:
+0:47                  7 (const uint)
+0:48      Sequence
+0:48        move second child to first child (temp 2-component vector of float)
+0:48          'r42' (temp 2-component vector of float)
+0:48          clamp (temp 2-component vector of float)
+0:48            Convert bool to float (temp 2-component vector of float)
+0:48              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:48                '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})
+0:48                Constant:
+0:48                  7 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              f: direct index for structure (layout(offset=8 ) uniform float)
+0:48                '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})
+0:48                Constant:
+0:48                  2 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              Convert bool to float (temp float)
+0:48                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:48                  '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})
+0:48                  Constant:
+0:48                    3 (const uint)
+0:49      Sequence
+0:49        move second child to first child (temp 2-component vector of int)
+0:49          'r43' (temp 2-component vector of int)
+0:49          Convert uint to int (temp 2-component vector of int)
+0:49            clamp (temp 2-component vector of uint)
+0:49              Construct uvec2 (in 2-component vector of uint)
+0:49                Convert int to uint (temp uint)
+0:49                  i: direct index for structure (layout(offset=0 ) uniform int)
+0:49                    '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})
+0:49                    Constant:
+0:49                      0 (const uint)
+0:49              Convert int to uint (temp 2-component vector of uint)
+0:49                i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:49                  '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})
+0:49                  Constant:
+0:49                    4 (const uint)
+0:49              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:49                '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})
+0:49                Constant:
+0:49                  5 (const uint)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r50' (temp float)
+0:51          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:51              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:51              Convert uint to int (temp int)
+0:51                upos: direct index for structure (layout(offset=48 ) uniform uint)
+0:51                  '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})
+0:51                  Constant:
+0:51                    8 (const uint)
+0:52      Sequence
+0:52        move second child to first child (temp float)
+0:52          'r51' (temp float)
+0:52          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:52              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:52              Convert float to int (temp int)
+0:52                fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:52                  '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})
+0:52                  Constant:
+0:52                    9 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1df4' (uniform texture1D)
+0:70        move second child to first child (temp int)
+0:70          'WidthI' (temp int)
+0:70          Convert uint to int (temp int)
+0:70            'sizeQueryTemp' (temp uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'sizeQueryTemp' (temp uint)
+0:71          textureSize (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:71            Constant:
+0:71              6 (const uint)
+0:71        move second child to first child (temp int)
+0:71          'WidthI' (temp int)
+0:71          Convert uint to int (temp int)
+0:71            'sizeQueryTemp' (temp uint)
+0:71        move second child to first child (temp uint)
+0:71          'NumberOfLevelsU' (temp uint)
+0:71          textureQueryLevels (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:72      Sequence
+0:72        move second child to first child (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72          textureSize (temp uint)
+0:72            'g_tTex1df4' (uniform texture1D)
+0:72            Constant:
+0:72              6 (const uint)
+0:72        move second child to first child (temp uint)
+0:72          'WidthU' (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72        move second child to first child (temp int)
+0:72          'NumberOfLevelsI' (temp int)
+0:72          Convert uint to int (temp int)
+0:72            textureQueryLevels (temp uint)
+0:72              'g_tTex1df4' (uniform texture1D)
+0:73      Sequence
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1df4' (uniform texture1D)
+0:73            Constant:
+0:73              6 (const uint)
+0:73        move second child to first child (temp int)
+0:73          'WidthI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            'sizeQueryTemp' (temp uint)
+0:73        move second child to first child (temp int)
+0:73          'NumberOfLevelsI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            textureQueryLevels (temp uint)
+0:73              'g_tTex1df4' (uniform texture1D)
+0:77      move second child to first child (temp 4-component vector of float)
+0:77        color: direct index for structure (temp 4-component vector of float)
+0:77          'ps_output' (temp structure{temp 4-component vector of float color})
+0:77          Constant:
+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:?   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:?     '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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child (temp float)
+0:23          'r00' (temp float)
+0:23          max (temp float)
+0:23            Convert bool to float (temp float)
+0:23              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:23                '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})
+0:23                Constant:
+0:23                  3 (const uint)
+0:23            f: direct index for structure (layout(offset=8 ) uniform float)
+0:23              '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})
+0:23              Constant:
+0:23                2 (const uint)
+0:24      Sequence
+0:24        move second child to first child (temp uint)
+0:24          'r01' (temp uint)
+0:24          max (temp uint)
+0:24            Convert bool to uint (temp uint)
+0:24              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:24                '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})
+0:24                Constant:
+0:24                  3 (const uint)
+0:24            u: direct index for structure (layout(offset=4 ) uniform uint)
+0:24              '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})
+0:24              Constant:
+0:24                1 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r02' (temp int)
+0:25          max (temp int)
+0:25            Convert bool to int (temp int)
+0:25              b: direct index for structure (layout(offset=12 ) uniform bool)
+0:25                '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})
+0:25                Constant:
+0:25                  3 (const uint)
+0:25            i: direct index for structure (layout(offset=0 ) uniform int)
+0:25              '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})
+0:25              Constant:
+0:25                0 (const uint)
+0:26      Sequence
+0:26        move second child to first child (temp float)
+0:26          'r03' (temp float)
+0:26          max (temp float)
+0:26            Convert int to float (temp float)
+0:26              i: direct index for structure (layout(offset=0 ) uniform int)
+0:26                '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})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26            f: direct index for structure (layout(offset=8 ) uniform float)
+0:26              '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})
+0:26              Constant:
+0:26                2 (const uint)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r04' (temp float)
+0:27          max (temp float)
+0:27            Convert uint to float (temp float)
+0:27              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:27                '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})
+0:27                Constant:
+0:27                  1 (const uint)
+0:27            f: direct index for structure (layout(offset=8 ) uniform float)
+0:27              '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})
+0:27              Constant:
+0:27                2 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp 2-component vector of float)
+0:29          'r10' (temp 2-component vector of float)
+0:29          max (temp 2-component vector of float)
+0:29            Convert bool to float (temp 2-component vector of float)
+0:29              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:29                '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})
+0:29                Constant:
+0:29                  7 (const uint)
+0:29            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:29              '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})
+0:29              Constant:
+0:29                6 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp 2-component vector of uint)
+0:30          'r11' (temp 2-component vector of uint)
+0:30          max (temp 2-component vector of uint)
+0:30            Convert bool to uint (temp 2-component vector of uint)
+0:30              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:30                '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})
+0:30                Constant:
+0:30                  7 (const uint)
+0:30            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:30              '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})
+0:30              Constant:
+0:30                5 (const uint)
+0:31      Sequence
+0:31        move second child to first child (temp 2-component vector of int)
+0:31          'r12' (temp 2-component vector of int)
+0:31          max (temp 2-component vector of int)
+0:31            Convert bool to int (temp 2-component vector of int)
+0:31              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:31                '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})
+0:31                Constant:
+0:31                  7 (const uint)
+0:31            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:31              '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})
+0:31              Constant:
+0:31                4 (const uint)
+0:32      Sequence
+0:32        move second child to first child (temp 2-component vector of float)
+0:32          'r13' (temp 2-component vector of float)
+0:32          max (temp 2-component vector of float)
+0:32            Convert int to float (temp 2-component vector of float)
+0:32              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:32                '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})
+0:32                Constant:
+0:32                  4 (const uint)
+0:32            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:32              '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})
+0:32              Constant:
+0:32                6 (const uint)
+0:33      Sequence
+0:33        move second child to first child (temp 2-component vector of float)
+0:33          'r14' (temp 2-component vector of float)
+0:33          max (temp 2-component vector of float)
+0:33            Convert uint to float (temp 2-component vector of float)
+0:33              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:33                '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})
+0:33                Constant:
+0:33                  5 (const uint)
+0:33            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:33              '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})
+0:33              Constant:
+0:33                6 (const uint)
+0:35      Sequence
+0:35        move second child to first child (temp 2-component vector of float)
+0:35          'r20' (temp 2-component vector of float)
+0:35          clamp (temp 2-component vector of float)
+0:35            Convert int to float (temp 2-component vector of float)
+0:35              i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:35                '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})
+0:35                Constant:
+0:35                  4 (const uint)
+0:35            Convert uint to float (temp 2-component vector of float)
+0:35              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:35                '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})
+0:35                Constant:
+0:35                  5 (const uint)
+0:35            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:35              '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})
+0:35              Constant:
+0:35                6 (const uint)
+0:36      Sequence
+0:36        move second child to first child (temp 2-component vector of uint)
+0:36          'r21' (temp 2-component vector of uint)
+0:36          clamp (temp 2-component vector of uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                '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})
+0:36                Constant:
+0:36                  7 (const uint)
+0:36            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:36              '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})
+0:36              Constant:
+0:36                5 (const uint)
+0:36            Convert bool to uint (temp 2-component vector of uint)
+0:36              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:36                '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})
+0:36                Constant:
+0:36                  7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp 2-component vector of float)
+0:37          'r22' (temp 2-component vector of float)
+0:37          clamp (temp 2-component vector of float)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                '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})
+0:37                Constant:
+0:37                  7 (const uint)
+0:37            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:37              '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})
+0:37              Constant:
+0:37                6 (const uint)
+0:37            Convert bool to float (temp 2-component vector of float)
+0:37              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:37                '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})
+0:37                Constant:
+0:37                  7 (const uint)
+0:40      Sequence
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          'r30' (temp 2-component vector of float)
+0:40          max (temp 2-component vector of float)
+0:40            Construct vec2 (in 2-component vector of float)
+0:40              Convert bool to float (temp float)
+0:40                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:40                  '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})
+0:40                  Constant:
+0:40                    3 (const uint)
+0:40            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:40              '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})
+0:40              Constant:
+0:40                6 (const uint)
+0:41      Sequence
+0:41        move second child to first child (temp 2-component vector of uint)
+0:41          'r31' (temp 2-component vector of uint)
+0:41          max (temp 2-component vector of uint)
+0:41            Construct uvec2 (in 2-component vector of uint)
+0:41              Convert bool to uint (temp uint)
+0:41                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:41                  '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})
+0:41                  Constant:
+0:41                    3 (const uint)
+0:41            u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:41              '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})
+0:41              Constant:
+0:41                5 (const uint)
+0:42      Sequence
+0:42        move second child to first child (temp 2-component vector of int)
+0:42          'r32' (temp 2-component vector of int)
+0:42          max (temp 2-component vector of int)
+0:42            Construct ivec2 (in 2-component vector of int)
+0:42              Convert bool to int (temp int)
+0:42                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:42                  '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})
+0:42                  Constant:
+0:42                    3 (const uint)
+0:42            i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:42              '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})
+0:42              Constant:
+0:42                4 (const uint)
+0:43      Sequence
+0:43        move second child to first child (temp 2-component vector of float)
+0:43          'r33' (temp 2-component vector of float)
+0:43          max (temp 2-component vector of float)
+0:43            Construct vec2 (in 2-component vector of float)
+0:43              Convert int to float (temp float)
+0:43                i: direct index for structure (layout(offset=0 ) uniform int)
+0:43                  '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})
+0:43                  Constant:
+0:43                    0 (const uint)
+0:43            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:43              '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})
+0:43              Constant:
+0:43                6 (const uint)
+0:44      Sequence
+0:44        move second child to first child (temp 2-component vector of float)
+0:44          'r34' (temp 2-component vector of float)
+0:44          max (temp 2-component vector of float)
+0:44            Construct vec2 (in 2-component vector of float)
+0:44              Convert uint to float (temp float)
+0:44                u: direct index for structure (layout(offset=4 ) uniform uint)
+0:44                  '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})
+0:44                  Constant:
+0:44                    1 (const uint)
+0:44            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:44              '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})
+0:44              Constant:
+0:44                6 (const uint)
+0:46      Sequence
+0:46        move second child to first child (temp 2-component vector of float)
+0:46          'r40' (temp 2-component vector of float)
+0:46          clamp (temp 2-component vector of float)
+0:46            Construct vec2 (in 2-component vector of float)
+0:46              Convert int to float (temp float)
+0:46                i: direct index for structure (layout(offset=0 ) uniform int)
+0:46                  '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})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46            Convert uint to float (temp 2-component vector of float)
+0:46              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:46                '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})
+0:46                Constant:
+0:46                  5 (const uint)
+0:46            f2: direct index for structure (layout(offset=32 ) uniform 2-component vector of float)
+0:46              '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})
+0:46              Constant:
+0:46                6 (const uint)
+0:47      Sequence
+0:47        move second child to first child (temp 2-component vector of uint)
+0:47          'r41' (temp 2-component vector of uint)
+0:47          clamp (temp 2-component vector of uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                '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})
+0:47                Constant:
+0:47                  7 (const uint)
+0:47            Construct uvec2 (in 2-component vector of uint)
+0:47              u: direct index for structure (layout(offset=4 ) uniform uint)
+0:47                '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})
+0:47                Constant:
+0:47                  1 (const uint)
+0:47            Convert bool to uint (temp 2-component vector of uint)
+0:47              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:47                '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})
+0:47                Constant:
+0:47                  7 (const uint)
+0:48      Sequence
+0:48        move second child to first child (temp 2-component vector of float)
+0:48          'r42' (temp 2-component vector of float)
+0:48          clamp (temp 2-component vector of float)
+0:48            Convert bool to float (temp 2-component vector of float)
+0:48              b2: direct index for structure (layout(offset=40 ) uniform 2-component vector of bool)
+0:48                '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})
+0:48                Constant:
+0:48                  7 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              f: direct index for structure (layout(offset=8 ) uniform float)
+0:48                '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})
+0:48                Constant:
+0:48                  2 (const uint)
+0:48            Construct vec2 (in 2-component vector of float)
+0:48              Convert bool to float (temp float)
+0:48                b: direct index for structure (layout(offset=12 ) uniform bool)
+0:48                  '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})
+0:48                  Constant:
+0:48                    3 (const uint)
+0:49      Sequence
+0:49        move second child to first child (temp 2-component vector of int)
+0:49          'r43' (temp 2-component vector of int)
+0:49          Convert uint to int (temp 2-component vector of int)
+0:49            clamp (temp 2-component vector of uint)
+0:49              Construct uvec2 (in 2-component vector of uint)
+0:49                Convert int to uint (temp uint)
+0:49                  i: direct index for structure (layout(offset=0 ) uniform int)
+0:49                    '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})
+0:49                    Constant:
+0:49                      0 (const uint)
+0:49              Convert int to uint (temp 2-component vector of uint)
+0:49                i2: direct index for structure (layout(offset=16 ) uniform 2-component vector of int)
+0:49                  '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})
+0:49                  Constant:
+0:49                    4 (const uint)
+0:49              u2: direct index for structure (layout(offset=24 ) uniform 2-component vector of uint)
+0:49                '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})
+0:49                Constant:
+0:49                  5 (const uint)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r50' (temp float)
+0:51          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:51              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:51              Convert uint to int (temp int)
+0:51                upos: direct index for structure (layout(offset=48 ) uniform uint)
+0:51                  '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})
+0:51                  Constant:
+0:51                    8 (const uint)
+0:52      Sequence
+0:52        move second child to first child (temp float)
+0:52          'r51' (temp float)
+0:52          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:52              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:52              Convert float to int (temp int)
+0:52                fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:52                  '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})
+0:52                  Constant:
+0:52                    9 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1df4' (uniform texture1D)
+0:70        move second child to first child (temp int)
+0:70          'WidthI' (temp int)
+0:70          Convert uint to int (temp int)
+0:70            'sizeQueryTemp' (temp uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'sizeQueryTemp' (temp uint)
+0:71          textureSize (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:71            Constant:
+0:71              6 (const uint)
+0:71        move second child to first child (temp int)
+0:71          'WidthI' (temp int)
+0:71          Convert uint to int (temp int)
+0:71            'sizeQueryTemp' (temp uint)
+0:71        move second child to first child (temp uint)
+0:71          'NumberOfLevelsU' (temp uint)
+0:71          textureQueryLevels (temp uint)
+0:71            'g_tTex1df4' (uniform texture1D)
+0:72      Sequence
+0:72        move second child to first child (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72          textureSize (temp uint)
+0:72            'g_tTex1df4' (uniform texture1D)
+0:72            Constant:
+0:72              6 (const uint)
+0:72        move second child to first child (temp uint)
+0:72          'WidthU' (temp uint)
+0:72          'sizeQueryTemp' (temp uint)
+0:72        move second child to first child (temp int)
+0:72          'NumberOfLevelsI' (temp int)
+0:72          Convert uint to int (temp int)
+0:72            textureQueryLevels (temp uint)
+0:72              'g_tTex1df4' (uniform texture1D)
+0:73      Sequence
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1df4' (uniform texture1D)
+0:73            Constant:
+0:73              6 (const uint)
+0:73        move second child to first child (temp int)
+0:73          'WidthI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            'sizeQueryTemp' (temp uint)
+0:73        move second child to first child (temp int)
+0:73          'NumberOfLevelsI' (temp int)
+0:73          Convert uint to int (temp int)
+0:73            textureQueryLevels (temp uint)
+0:73              'g_tTex1df4' (uniform texture1D)
+0:77      move second child to first child (temp 4-component vector of float)
+0:77        color: direct index for structure (temp 4-component vector of float)
+0:77          'ps_output' (temp structure{temp 4-component vector of float color})
+0:77          Constant:
+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:?   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:?     '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
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 316
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..ebe6a24c8399ad8f6184091137c472e82745f9a4
--- /dev/null
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -0,0 +1,337 @@
+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 Parameters: 
+0:?     Sequence
+0:37      clamp (temp float)
+0:37        fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:37          '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})
+0:37          Constant:
+0:37            9 (const uint)
+0:37        Constant:
+0:37          0.000000
+0:37        Constant:
+0:37          1.000000
+0:40      Sequence
+0:40        move second child to first child (temp uint)
+0:40          'sizeQueryTemp' (temp uint)
+0:40          textureSize (temp uint)
+0:40            'g_tTex1df4' (uniform texture1D)
+0:40        move second child to first child (temp int)
+0:40          'WidthI' (temp int)
+0:40          Convert uint to int (temp int)
+0:40            'sizeQueryTemp' (temp uint)
+0:41      Sequence
+0:41        move second child to first child (temp uint)
+0:41          'sizeQueryTemp' (temp uint)
+0:41          textureSize (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:41            Constant:
+0:41              6 (const uint)
+0:41        move second child to first child (temp int)
+0:41          'WidthI' (temp int)
+0:41          Convert uint to int (temp int)
+0:41            'sizeQueryTemp' (temp uint)
+0:41        move second child to first child (temp uint)
+0:41          'NumberOfLevelsU' (temp uint)
+0:41          textureQueryLevels (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:42      Sequence
+0:42        move second child to first child (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42          textureSize (temp uint)
+0:42            'g_tTex1df4' (uniform texture1D)
+0:42            Constant:
+0:42              6 (const uint)
+0:42        move second child to first child (temp uint)
+0:42          'WidthU' (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42        move second child to first child (temp int)
+0:42          'NumberOfLevelsI' (temp int)
+0:42          Convert uint to int (temp int)
+0:42            textureQueryLevels (temp uint)
+0:42              'g_tTex1df4' (uniform texture1D)
+0:43      Sequence
+0:43        move second child to first child (temp uint)
+0:43          'sizeQueryTemp' (temp uint)
+0:43          textureSize (temp uint)
+0:43            'g_tTex1df4' (uniform texture1D)
+0:43            Constant:
+0:43              6 (const uint)
+0:43        move second child to first child (temp int)
+0:43          'WidthI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            'sizeQueryTemp' (temp uint)
+0:43        move second child to first child (temp int)
+0:43          'NumberOfLevelsI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            textureQueryLevels (temp uint)
+0:43              'g_tTex1df4' (uniform texture1D)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        color: direct index for structure (temp 4-component vector of float)
+0:47          'ps_output' (temp structure{temp 4-component vector of float color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+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:?   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:?     '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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:37      clamp (temp float)
+0:37        fpos: direct index for structure (layout(offset=52 ) uniform float)
+0:37          '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})
+0:37          Constant:
+0:37            9 (const uint)
+0:37        Constant:
+0:37          0.000000
+0:37        Constant:
+0:37          1.000000
+0:40      Sequence
+0:40        move second child to first child (temp uint)
+0:40          'sizeQueryTemp' (temp uint)
+0:40          textureSize (temp uint)
+0:40            'g_tTex1df4' (uniform texture1D)
+0:40        move second child to first child (temp int)
+0:40          'WidthI' (temp int)
+0:40          Convert uint to int (temp int)
+0:40            'sizeQueryTemp' (temp uint)
+0:41      Sequence
+0:41        move second child to first child (temp uint)
+0:41          'sizeQueryTemp' (temp uint)
+0:41          textureSize (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:41            Constant:
+0:41              6 (const uint)
+0:41        move second child to first child (temp int)
+0:41          'WidthI' (temp int)
+0:41          Convert uint to int (temp int)
+0:41            'sizeQueryTemp' (temp uint)
+0:41        move second child to first child (temp uint)
+0:41          'NumberOfLevelsU' (temp uint)
+0:41          textureQueryLevels (temp uint)
+0:41            'g_tTex1df4' (uniform texture1D)
+0:42      Sequence
+0:42        move second child to first child (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42          textureSize (temp uint)
+0:42            'g_tTex1df4' (uniform texture1D)
+0:42            Constant:
+0:42              6 (const uint)
+0:42        move second child to first child (temp uint)
+0:42          'WidthU' (temp uint)
+0:42          'sizeQueryTemp' (temp uint)
+0:42        move second child to first child (temp int)
+0:42          'NumberOfLevelsI' (temp int)
+0:42          Convert uint to int (temp int)
+0:42            textureQueryLevels (temp uint)
+0:42              'g_tTex1df4' (uniform texture1D)
+0:43      Sequence
+0:43        move second child to first child (temp uint)
+0:43          'sizeQueryTemp' (temp uint)
+0:43          textureSize (temp uint)
+0:43            'g_tTex1df4' (uniform texture1D)
+0:43            Constant:
+0:43              6 (const uint)
+0:43        move second child to first child (temp int)
+0:43          'WidthI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            'sizeQueryTemp' (temp uint)
+0:43        move second child to first child (temp int)
+0:43          'NumberOfLevelsI' (temp int)
+0:43          Convert uint to int (temp int)
+0:43            textureQueryLevels (temp uint)
+0:43              'g_tTex1df4' (uniform texture1D)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        color: direct index for structure (temp 4-component vector of float)
+0:47          'ps_output' (temp structure{temp 4-component vector of float color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+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:?   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:?     '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
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 68
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 121c809328f65f5984094cf686311a71fcd303b5..84146e660e09ce90cea1a581800844a099bdac84 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -1,7 +1,7 @@
 hlsl.intrinsics.vert
 Shader version: 450
 0:? Sequence
-0:2  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:2  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -9,99 +9,99 @@ Shader version: 450
 0:2      'inU0' (in uint)
 0:2      'inU1' (in uint)
 0:?     Sequence
-0:3      all (global bool)
+0:3      all (temp bool)
 0:3        'inF0' (in float)
-0:4      Absolute value (global float)
+0:4      Absolute value (temp float)
 0:4        'inF0' (in float)
-0:5      arc cosine (global float)
+0:5      arc cosine (temp float)
 0:5        'inF0' (in float)
-0:6      any (global bool)
+0:6      any (temp bool)
 0:6        'inF0' (in float)
-0:7      arc sine (global float)
+0:7      arc sine (temp float)
 0:7        'inF0' (in float)
-0:8      floatBitsToInt (global int)
+0:8      floatBitsToInt (temp int)
 0:8        'inF0' (in float)
-0:9      floatBitsToUint (global uint)
+0:9      floatBitsToUint (temp uint)
 0:9        'inF0' (in float)
-0:10      intBitsToFloat (global float)
+0:10      intBitsToFloat (temp float)
 0:10        'inU0' (in uint)
-0:12      arc tangent (global float)
+0:12      arc tangent (temp float)
 0:12        'inF0' (in float)
-0:13      arc tangent (global float)
+0:13      arc tangent (temp float)
 0:13        'inF0' (in float)
 0:13        'inF1' (in float)
-0:14      Ceiling (global float)
+0:14      Ceiling (temp float)
 0:14        'inF0' (in float)
-0:15      clamp (global float)
+0:15      clamp (temp float)
 0:15        'inF0' (in float)
 0:15        'inF1' (in float)
 0:15        'inF2' (in float)
-0:16      cosine (global float)
+0:16      cosine (temp float)
 0:16        'inF0' (in float)
-0:17      hyp. cosine (global float)
+0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (global uint)
+0:18      bitCount (temp int)
 0:18        Constant:
-0:18          7 (const uint)
-0:19      degrees (global float)
+0:18          7 (const int)
+0:19      degrees (temp float)
 0:19        'inF0' (in float)
-0:23      exp (global float)
+0:23      exp (temp float)
 0:23        'inF0' (in float)
-0:24      exp2 (global float)
+0:24      exp2 (temp float)
 0:24        'inF0' (in float)
-0:25      findMSB (global int)
+0:25      findMSB (temp int)
 0:25        Constant:
 0:25          7 (const int)
-0:26      findLSB (global int)
+0:26      findLSB (temp int)
 0:26        Constant:
 0:26          7 (const int)
-0:27      Floor (global float)
+0:27      Floor (temp float)
 0:27        'inF0' (in float)
-0:29      mod (global float)
+0:29      mod (temp float)
 0:29        'inF0' (in float)
 0:29        'inF1' (in float)
-0:30      Fraction (global float)
+0:30      Fraction (temp float)
 0:30        'inF0' (in float)
-0:31      frexp (global float)
+0:31      frexp (temp float)
 0:31        'inF0' (in float)
 0:31        'inF1' (in float)
-0:32      isinf (global bool)
+0:32      isinf (temp bool)
 0:32        'inF0' (in float)
-0:33      isnan (global bool)
+0:33      isnan (temp bool)
 0:33        'inF0' (in float)
-0:34      ldexp (global float)
+0:34      ldexp (temp float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      mix (global float)
+0:35      mix (temp float)
 0:35        'inF0' (in float)
 0:35        'inF1' (in float)
 0:35        'inF2' (in float)
-0:36      log (global float)
+0:36      log (temp float)
 0:36        'inF0' (in float)
 0:37      component-wise multiply (temp float)
 0:37        log2 (temp float)
 0:37          'inF0' (in float)
 0:37        Constant:
 0:37          0.301030
-0:38      log2 (global float)
+0:38      log2 (temp float)
 0:38        'inF0' (in float)
-0:39      max (global float)
+0:39      max (temp float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:40      min (global float)
+0:40      min (temp float)
 0:40        'inF0' (in float)
 0:40        'inF1' (in float)
-0:42      pow (global float)
+0:42      pow (temp float)
 0:42        'inF0' (in float)
 0:42        'inF1' (in float)
-0:43      radians (global float)
+0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (global uint)
+0:44      bitFieldReverse (temp int)
 0:44        Constant:
-0:44          2 (const uint)
-0:45      roundEven (global float)
+0:44          2 (const int)
+0:45      roundEven (temp float)
 0:45        'inF0' (in float)
-0:46      inverse sqrt (global float)
+0:46      inverse sqrt (temp float)
 0:46        'inF0' (in float)
 0:47      clamp (temp float)
 0:47        'inF0' (in float)
@@ -109,9 +109,9 @@ Shader version: 450
 0:47          0.000000
 0:47        Constant:
 0:47          1.000000
-0:48      Sign (global float)
+0:48      Sign (temp float)
 0:48        'inF0' (in float)
-0:49      sine (global float)
+0:49      sine (temp float)
 0:49        'inF0' (in float)
 0:50      Sequence
 0:50        move second child to first child (temp float)
@@ -122,27 +122,27 @@ Shader version: 450
 0:50          'inF2' (in float)
 0:50          cosine (temp float)
 0:50            'inF0' (in float)
-0:51      hyp. sine (global float)
+0:51      hyp. sine (temp float)
 0:51        'inF0' (in float)
-0:52      smoothstep (global float)
+0:52      smoothstep (temp float)
 0:52        'inF0' (in float)
 0:52        'inF1' (in float)
 0:52        'inF2' (in float)
-0:53      sqrt (global float)
+0:53      sqrt (temp float)
 0:53        'inF0' (in float)
-0:54      step (global float)
+0:54      step (temp float)
 0:54        'inF0' (in float)
 0:54        'inF1' (in float)
-0:55      tangent (global float)
+0:55      tangent (temp float)
 0:55        'inF0' (in float)
-0:56      hyp. tangent (global float)
+0:56      hyp. tangent (temp float)
 0:56        'inF0' (in float)
-0:58      trunc (global float)
+0:58      trunc (temp float)
 0:58        'inF0' (in float)
 0:60      Branch: Return with expression
 0:60        Constant:
 0:60          0.000000
-0:64  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:64  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:64    Function Parameters: 
 0:64      'inF0' (in 1-component vector of float)
 0:64      'inF1' (in 1-component vector of float)
@@ -151,7 +151,7 @@ Shader version: 450
 0:66      Branch: Return with expression
 0:66        Constant:
 0:66          0.000000
-0:70  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:70  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:70    Function Parameters: 
 0:70      'inF0' (in 2-component vector of float)
 0:70      'inF1' (in 2-component vector of float)
@@ -159,123 +159,123 @@ Shader version: 450
 0:70      'inU0' (in 2-component vector of uint)
 0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:71      all (global bool)
+0:71      all (temp bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      Absolute value (global 2-component vector of float)
+0:72      Absolute value (temp 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      arc cosine (global 2-component vector of float)
+0:73      arc cosine (temp 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      any (global bool)
+0:74      any (temp bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      arc sine (global 2-component vector of float)
+0:75      arc sine (temp 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToInt (global 2-component vector of int)
+0:76      floatBitsToInt (temp 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      floatBitsToUint (global 2-component vector of uint)
+0:77      floatBitsToUint (temp 2-component vector of uint)
 0:77        'inF0' (in 2-component vector of float)
-0:78      intBitsToFloat (global 2-component vector of float)
+0:78      intBitsToFloat (temp 2-component vector of float)
 0:78        'inU0' (in 2-component vector of uint)
-0:80      arc tangent (global 2-component vector of float)
+0:80      arc tangent (temp 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:81      arc tangent (global 2-component vector of float)
+0:81      arc tangent (temp 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
 0:81        'inF1' (in 2-component vector of float)
-0:82      Ceiling (global 2-component vector of float)
+0:82      Ceiling (temp 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:83      clamp (global 2-component vector of float)
+0:83      clamp (temp 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
 0:83        'inF1' (in 2-component vector of float)
 0:83        'inF2' (in 2-component vector of float)
-0:84      cosine (global 2-component vector of float)
+0:84      cosine (temp 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
-0:85      hyp. cosine (global 2-component vector of float)
+0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:87      degrees (global 2-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:88      distance (global float)
+0:88      distance (temp float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:89      dot-product (global float)
+0:89      dot-product (temp float)
 0:89        'inF0' (in 2-component vector of float)
 0:89        'inF1' (in 2-component vector of float)
-0:93      exp (global 2-component vector of float)
+0:93      exp (temp 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      exp2 (global 2-component vector of float)
+0:94      exp2 (temp 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:95      face-forward (global 2-component vector of float)
+0:95      face-forward (temp 2-component vector of float)
 0:95        'inF0' (in 2-component vector of float)
 0:95        'inF1' (in 2-component vector of float)
 0:95        'inF2' (in 2-component vector of float)
-0:96      findMSB (global int)
+0:96      findMSB (temp int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      findLSB (global int)
+0:97      findLSB (temp int)
 0:97        Constant:
 0:97          7 (const int)
-0:98      Floor (global 2-component vector of float)
+0:98      Floor (temp 2-component vector of float)
 0:98        'inF0' (in 2-component vector of float)
-0:100      mod (global 2-component vector of float)
+0:100      mod (temp 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
 0:100        'inF1' (in 2-component vector of float)
-0:101      Fraction (global 2-component vector of float)
+0:101      Fraction (temp 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:102      frexp (global 2-component vector of float)
+0:102      frexp (temp 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
 0:102        'inF1' (in 2-component vector of float)
-0:103      isinf (global 2-component vector of bool)
+0:103      isinf (temp 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      isnan (global 2-component vector of bool)
+0:104      isnan (temp 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:105      ldexp (global 2-component vector of float)
+0:105      ldexp (temp 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
 0:105        'inF1' (in 2-component vector of float)
-0:106      mix (global 2-component vector of float)
+0:106      mix (temp 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
 0:106        'inF1' (in 2-component vector of float)
 0:106        'inF2' (in 2-component vector of float)
-0:107      length (global float)
+0:107      length (temp float)
 0:107        'inF0' (in 2-component vector of float)
-0:108      log (global 2-component vector of float)
+0:108      log (temp 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
 0:109      vector-scale (temp 2-component vector of float)
 0:109        log2 (temp 2-component vector of float)
 0:109          'inF0' (in 2-component vector of float)
 0:109        Constant:
 0:109          0.301030
-0:110      log2 (global 2-component vector of float)
+0:110      log2 (temp 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:111      max (global 2-component vector of float)
+0:111      max (temp 2-component vector of float)
 0:111        'inF0' (in 2-component vector of float)
 0:111        'inF1' (in 2-component vector of float)
-0:112      min (global 2-component vector of float)
+0:112      min (temp 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
 0:112        'inF1' (in 2-component vector of float)
-0:114      normalize (global 2-component vector of float)
+0:114      normalize (temp 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      pow (global 2-component vector of float)
+0:115      pow (temp 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      radians (global 2-component vector of float)
+0:116      radians (temp 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:117      reflect (global 2-component vector of float)
+0:117      reflect (temp 2-component vector of float)
 0:117        'inF0' (in 2-component vector of float)
 0:117        'inF1' (in 2-component vector of float)
-0:118      refract (global 2-component vector of float)
+0:118      refract (temp 2-component vector of float)
 0:118        'inF0' (in 2-component vector of float)
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:120      roundEven (global 2-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:121      inverse sqrt (global 2-component vector of float)
+0:121      inverse sqrt (temp 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
 0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (in 2-component vector of float)
@@ -283,9 +283,9 @@ Shader version: 450
 0:122          0.000000
 0:122        Constant:
 0:122          1.000000
-0:123      Sign (global 2-component vector of float)
+0:123      Sign (temp 2-component vector of float)
 0:123        'inF0' (in 2-component vector of float)
-0:124      sine (global 2-component vector of float)
+0:124      sine (temp 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of float)
@@ -296,28 +296,28 @@ Shader version: 450
 0:125          'inF2' (in 2-component vector of float)
 0:125          cosine (temp 2-component vector of float)
 0:125            'inF0' (in 2-component vector of float)
-0:126      hyp. sine (global 2-component vector of float)
+0:126      hyp. sine (temp 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      smoothstep (global 2-component vector of float)
+0:127      smoothstep (temp 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
 0:127        'inF2' (in 2-component vector of float)
-0:128      sqrt (global 2-component vector of float)
+0:128      sqrt (temp 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      step (global 2-component vector of float)
+0:129      step (temp 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
 0:129        'inF1' (in 2-component vector of float)
-0:130      tangent (global 2-component vector of float)
+0:130      tangent (temp 2-component vector of float)
 0:130        'inF0' (in 2-component vector of float)
-0:131      hyp. tangent (global 2-component vector of float)
+0:131      hyp. tangent (temp 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:133      trunc (global 2-component vector of float)
+0:133      trunc (temp 2-component vector of float)
 0:133        'inF0' (in 2-component vector of float)
 0:136      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:140  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:140  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:140    Function Parameters: 
 0:140      'inF0' (in 3-component vector of float)
 0:140      'inF1' (in 3-component vector of float)
@@ -325,128 +325,128 @@ Shader version: 450
 0:140      'inU0' (in 3-component vector of uint)
 0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:141      all (global bool)
+0:141      all (temp bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      Absolute value (global 3-component vector of float)
+0:142      Absolute value (temp 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc cosine (global 3-component vector of float)
+0:143      arc cosine (temp 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      any (global bool)
+0:144      any (temp bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      arc sine (global 3-component vector of float)
+0:145      arc sine (temp 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      floatBitsToInt (global 3-component vector of int)
+0:146      floatBitsToInt (temp 3-component vector of int)
 0:146        'inF0' (in 3-component vector of float)
-0:147      floatBitsToUint (global 3-component vector of uint)
+0:147      floatBitsToUint (temp 3-component vector of uint)
 0:147        'inF0' (in 3-component vector of float)
-0:148      intBitsToFloat (global 3-component vector of float)
+0:148      intBitsToFloat (temp 3-component vector of float)
 0:148        'inU0' (in 3-component vector of uint)
-0:150      arc tangent (global 3-component vector of float)
+0:150      arc tangent (temp 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      arc tangent (global 3-component vector of float)
+0:151      arc tangent (temp 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:152      Ceiling (global 3-component vector of float)
+0:152      Ceiling (temp 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      clamp (global 3-component vector of float)
+0:153      clamp (temp 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
 0:153        'inF1' (in 3-component vector of float)
 0:153        'inF2' (in 3-component vector of float)
-0:154      cosine (global 3-component vector of float)
+0:154      cosine (temp 3-component vector of float)
 0:154        'inF0' (in 3-component vector of float)
-0:155      hyp. cosine (global 3-component vector of float)
+0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:157      cross-product (global 3-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      degrees (global 3-component vector of float)
+0:158      degrees (temp 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:159      distance (global float)
+0:159      distance (temp float)
 0:159        'inF0' (in 3-component vector of float)
 0:159        'inF1' (in 3-component vector of float)
-0:160      dot-product (global float)
+0:160      dot-product (temp float)
 0:160        'inF0' (in 3-component vector of float)
 0:160        'inF1' (in 3-component vector of float)
-0:164      exp (global 3-component vector of float)
+0:164      exp (temp 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:165      exp2 (global 3-component vector of float)
+0:165      exp2 (temp 3-component vector of float)
 0:165        'inF0' (in 3-component vector of float)
-0:166      face-forward (global 3-component vector of float)
+0:166      face-forward (temp 3-component vector of float)
 0:166        'inF0' (in 3-component vector of float)
 0:166        'inF1' (in 3-component vector of float)
 0:166        'inF2' (in 3-component vector of float)
-0:167      findMSB (global int)
+0:167      findMSB (temp int)
 0:167        Constant:
 0:167          7 (const int)
-0:168      findLSB (global int)
+0:168      findLSB (temp int)
 0:168        Constant:
 0:168          7 (const int)
-0:169      Floor (global 3-component vector of float)
+0:169      Floor (temp 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:171      mod (global 3-component vector of float)
+0:171      mod (temp 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      Fraction (global 3-component vector of float)
+0:172      Fraction (temp 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      frexp (global 3-component vector of float)
+0:173      frexp (temp 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
 0:173        'inF1' (in 3-component vector of float)
-0:174      isinf (global 3-component vector of bool)
+0:174      isinf (temp 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:175      isnan (global 3-component vector of bool)
+0:175      isnan (temp 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      ldexp (global 3-component vector of float)
+0:176      ldexp (temp 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
 0:176        'inF1' (in 3-component vector of float)
-0:177      mix (global 3-component vector of float)
+0:177      mix (temp 3-component vector of float)
 0:177        'inF0' (in 3-component vector of float)
 0:177        'inF1' (in 3-component vector of float)
 0:177        'inF2' (in 3-component vector of float)
-0:178      length (global float)
+0:178      length (temp float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      log (global 3-component vector of float)
+0:179      log (temp 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
 0:180      vector-scale (temp 3-component vector of float)
 0:180        log2 (temp 3-component vector of float)
 0:180          'inF0' (in 3-component vector of float)
 0:180        Constant:
 0:180          0.301030
-0:181      log2 (global 3-component vector of float)
+0:181      log2 (temp 3-component vector of float)
 0:181        'inF0' (in 3-component vector of float)
-0:182      max (global 3-component vector of float)
+0:182      max (temp 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
 0:182        'inF1' (in 3-component vector of float)
-0:183      min (global 3-component vector of float)
+0:183      min (temp 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:185      normalize (global 3-component vector of float)
+0:185      normalize (temp 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:186      pow (global 3-component vector of float)
+0:186      pow (temp 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:187      radians (global 3-component vector of float)
+0:187      radians (temp 3-component vector of float)
 0:187        'inF0' (in 3-component vector of float)
-0:188      reflect (global 3-component vector of float)
+0:188      reflect (temp 3-component vector of float)
 0:188        'inF0' (in 3-component vector of float)
 0:188        'inF1' (in 3-component vector of float)
-0:189      refract (global 3-component vector of float)
+0:189      refract (temp 3-component vector of float)
 0:189        'inF0' (in 3-component vector of float)
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:191      roundEven (global 3-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      inverse sqrt (global 3-component vector of float)
+0:192      inverse sqrt (temp 3-component vector of float)
 0:192        'inF0' (in 3-component vector of float)
 0:193      clamp (temp 3-component vector of float)
 0:193        'inF0' (in 3-component vector of float)
@@ -454,9 +454,9 @@ Shader version: 450
 0:193          0.000000
 0:193        Constant:
 0:193          1.000000
-0:194      Sign (global 3-component vector of float)
+0:194      Sign (temp 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      sine (global 3-component vector of float)
+0:195      sine (temp 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
@@ -467,29 +467,29 @@ Shader version: 450
 0:196          'inF2' (in 3-component vector of float)
 0:196          cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
-0:197      hyp. sine (global 3-component vector of float)
+0:197      hyp. sine (temp 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:198      smoothstep (global 3-component vector of float)
+0:198      smoothstep (temp 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
 0:198        'inF1' (in 3-component vector of float)
 0:198        'inF2' (in 3-component vector of float)
-0:199      sqrt (global 3-component vector of float)
+0:199      sqrt (temp 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:200      step (global 3-component vector of float)
+0:200      step (temp 3-component vector of float)
 0:200        'inF0' (in 3-component vector of float)
 0:200        'inF1' (in 3-component vector of float)
-0:201      tangent (global 3-component vector of float)
+0:201      tangent (temp 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:202      hyp. tangent (global 3-component vector of float)
+0:202      hyp. tangent (temp 3-component vector of float)
 0:202        'inF0' (in 3-component vector of float)
-0:204      trunc (global 3-component vector of float)
+0:204      trunc (temp 3-component vector of float)
 0:204        'inF0' (in 3-component vector of float)
 0:207      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:211  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:211  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:211    Function Parameters: 
 0:211      'inF0' (in 4-component vector of float)
 0:211      'inF1' (in 4-component vector of float)
@@ -497,49 +497,49 @@ Shader version: 450
 0:211      'inU0' (in 4-component vector of uint)
 0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:212      all (global bool)
+0:212      all (temp bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      Absolute value (global 4-component vector of float)
+0:213      Absolute value (temp 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      arc cosine (global 4-component vector of float)
+0:214      arc cosine (temp 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      any (global bool)
+0:215      any (temp bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      arc sine (global 4-component vector of float)
+0:216      arc sine (temp 4-component vector of float)
 0:216        'inF0' (in 4-component vector of float)
-0:217      floatBitsToInt (global 4-component vector of int)
+0:217      floatBitsToInt (temp 4-component vector of int)
 0:217        'inF0' (in 4-component vector of float)
-0:218      floatBitsToUint (global 4-component vector of uint)
+0:218      floatBitsToUint (temp 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      intBitsToFloat (global 4-component vector of float)
+0:219      intBitsToFloat (temp 4-component vector of float)
 0:219        'inU0' (in 4-component vector of uint)
-0:221      arc tangent (global 4-component vector of float)
+0:221      arc tangent (temp 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:222      arc tangent (global 4-component vector of float)
+0:222      arc tangent (temp 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
 0:222        'inF1' (in 4-component vector of float)
-0:223      Ceiling (global 4-component vector of float)
+0:223      Ceiling (temp 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
-0:224      clamp (global 4-component vector of float)
+0:224      clamp (temp 4-component vector of float)
 0:224        'inF0' (in 4-component vector of float)
 0:224        'inF1' (in 4-component vector of float)
 0:224        'inF2' (in 4-component vector of float)
-0:225      cosine (global 4-component vector of float)
+0:225      cosine (temp 4-component vector of float)
 0:225        'inF0' (in 4-component vector of float)
-0:226      hyp. cosine (global 4-component vector of float)
+0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
-0:228      degrees (global 4-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:?           2 (const int)
+0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
-0:229      distance (global float)
+0:229      distance (temp float)
 0:229        'inF0' (in 4-component vector of float)
 0:229        'inF1' (in 4-component vector of float)
-0:230      dot-product (global float)
+0:230      dot-product (temp float)
 0:230        'inF0' (in 4-component vector of float)
 0:230        'inF1' (in 4-component vector of float)
 0:231      Construct vec4 (temp 4-component vector of float)
@@ -562,82 +562,82 @@ Shader version: 450
 0:231          'inF1' (in 4-component vector of float)
 0:231          Constant:
 0:231            3 (const int)
-0:235      exp (global 4-component vector of float)
+0:235      exp (temp 4-component vector of float)
 0:235        'inF0' (in 4-component vector of float)
-0:236      exp2 (global 4-component vector of float)
+0:236      exp2 (temp 4-component vector of float)
 0:236        'inF0' (in 4-component vector of float)
-0:237      face-forward (global 4-component vector of float)
+0:237      face-forward (temp 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
 0:237        'inF1' (in 4-component vector of float)
 0:237        'inF2' (in 4-component vector of float)
-0:238      findMSB (global int)
+0:238      findMSB (temp int)
 0:238        Constant:
 0:238          7 (const int)
-0:239      findLSB (global int)
+0:239      findLSB (temp int)
 0:239        Constant:
 0:239          7 (const int)
-0:240      Floor (global 4-component vector of float)
+0:240      Floor (temp 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:242      mod (global 4-component vector of float)
+0:242      mod (temp 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
 0:242        'inF1' (in 4-component vector of float)
-0:243      Fraction (global 4-component vector of float)
+0:243      Fraction (temp 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      frexp (global 4-component vector of float)
+0:244      frexp (temp 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      isinf (global 4-component vector of bool)
+0:245      isinf (temp 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      isnan (global 4-component vector of bool)
+0:246      isnan (temp 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      ldexp (global 4-component vector of float)
+0:247      ldexp (temp 4-component vector of float)
 0:247        'inF0' (in 4-component vector of float)
 0:247        'inF1' (in 4-component vector of float)
-0:248      mix (global 4-component vector of float)
+0:248      mix (temp 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
 0:248        'inF1' (in 4-component vector of float)
 0:248        'inF2' (in 4-component vector of float)
-0:249      length (global float)
+0:249      length (temp float)
 0:249        'inF0' (in 4-component vector of float)
-0:250      log (global 4-component vector of float)
+0:250      log (temp 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
 0:251      vector-scale (temp 4-component vector of float)
 0:251        log2 (temp 4-component vector of float)
 0:251          'inF0' (in 4-component vector of float)
 0:251        Constant:
 0:251          0.301030
-0:252      log2 (global 4-component vector of float)
+0:252      log2 (temp 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      max (global 4-component vector of float)
+0:253      max (temp 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      min (global 4-component vector of float)
+0:254      min (temp 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
 0:254        'inF1' (in 4-component vector of float)
-0:256      normalize (global 4-component vector of float)
+0:256      normalize (temp 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:257      pow (global 4-component vector of float)
+0:257      pow (temp 4-component vector of float)
 0:257        'inF0' (in 4-component vector of float)
 0:257        'inF1' (in 4-component vector of float)
-0:258      radians (global 4-component vector of float)
+0:258      radians (temp 4-component vector of float)
 0:258        'inF0' (in 4-component vector of float)
-0:259      reflect (global 4-component vector of float)
+0:259      reflect (temp 4-component vector of float)
 0:259        'inF0' (in 4-component vector of float)
 0:259        'inF1' (in 4-component vector of float)
-0:260      refract (global 4-component vector of float)
+0:260      refract (temp 4-component vector of float)
 0:260        'inF0' (in 4-component vector of float)
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
-0:262      roundEven (global 4-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:?           4 (const int)
+0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      inverse sqrt (global 4-component vector of float)
+0:263      inverse sqrt (temp 4-component vector of float)
 0:263        'inF0' (in 4-component vector of float)
 0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
@@ -645,9 +645,9 @@ Shader version: 450
 0:264          0.000000
 0:264        Constant:
 0:264          1.000000
-0:265      Sign (global 4-component vector of float)
+0:265      Sign (temp 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:266      sine (global 4-component vector of float)
+0:266      sine (temp 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
@@ -658,22 +658,22 @@ Shader version: 450
 0:267          'inF2' (in 4-component vector of float)
 0:267          cosine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
-0:268      hyp. sine (global 4-component vector of float)
+0:268      hyp. sine (temp 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      smoothstep (global 4-component vector of float)
+0:269      smoothstep (temp 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
 0:269        'inF1' (in 4-component vector of float)
 0:269        'inF2' (in 4-component vector of float)
-0:270      sqrt (global 4-component vector of float)
+0:270      sqrt (temp 4-component vector of float)
 0:270        'inF0' (in 4-component vector of float)
-0:271      step (global 4-component vector of float)
+0:271      step (temp 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
 0:271        'inF1' (in 4-component vector of float)
-0:272      tangent (global 4-component vector of float)
+0:272      tangent (temp 4-component vector of float)
 0:272        'inF0' (in 4-component vector of float)
-0:273      hyp. tangent (global 4-component vector of float)
+0:273      hyp. tangent (temp 4-component vector of float)
 0:273        'inF0' (in 4-component vector of float)
-0:275      trunc (global 4-component vector of float)
+0:275      trunc (temp 4-component vector of float)
 0:275        'inF0' (in 4-component vector of float)
 0:278      Branch: Return with expression
 0:?         Constant:
@@ -681,91 +681,91 @@ Shader version: 450
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:336  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:336  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:336    Function Parameters: 
 0:336      'inF0' (in 2X2 matrix of float)
 0:336      'inF1' (in 2X2 matrix of float)
 0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:338      all (global bool)
+0:338      all (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      Absolute value (global 2X2 matrix of float)
+0:338      Absolute value (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc cosine (global 2X2 matrix of float)
+0:338      arc cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      any (global bool)
+0:338      any (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc sine (global 2X2 matrix of float)
+0:338      arc sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Ceiling (global 2X2 matrix of float)
+0:338      Ceiling (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      clamp (global 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      cosine (global 2X2 matrix of float)
+0:338      cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. cosine (global 2X2 matrix of float)
+0:338      hyp. cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      degrees (global 2X2 matrix of float)
+0:338      degrees (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      determinant (global float)
+0:338      determinant (temp float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp (global 2X2 matrix of float)
+0:338      exp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp2 (global 2X2 matrix of float)
+0:338      exp2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      findMSB (global int)
+0:338      findMSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      findLSB (global int)
+0:338      findLSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      Floor (global 2X2 matrix of float)
+0:338      Floor (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      mod (global 2X2 matrix of float)
+0:338      mod (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Fraction (global 2X2 matrix of float)
+0:338      Fraction (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      frexp (global 2X2 matrix of float)
+0:338      frexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      ldexp (global 2X2 matrix of float)
+0:338      ldexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      mix (global 2X2 matrix of float)
+0:338      mix (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      log (global 2X2 matrix of float)
+0:338      log (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      matrix-scale (temp 2X2 matrix of float)
 0:338        log2 (temp 2X2 matrix of float)
 0:338          'inF0' (in 2X2 matrix of float)
 0:338        Constant:
 0:338          0.301030
-0:338      log2 (global 2X2 matrix of float)
+0:338      log2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      max (global 2X2 matrix of float)
+0:338      max (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      min (global 2X2 matrix of float)
+0:338      min (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      pow (global 2X2 matrix of float)
+0:338      pow (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      radians (global 2X2 matrix of float)
+0:338      radians (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      roundEven (global 2X2 matrix of float)
+0:338      roundEven (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      inverse sqrt (global 2X2 matrix of float)
+0:338      inverse sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
@@ -773,9 +773,9 @@ Shader version: 450
 0:338          0.000000
 0:338        Constant:
 0:338          1.000000
-0:338      Sign (global 2X2 matrix of float)
+0:338      Sign (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      sine (global 2X2 matrix of float)
+0:338      sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      Sequence
 0:338        move second child to first child (temp 2X2 matrix of float)
@@ -786,24 +786,24 @@ Shader version: 450
 0:338          'inF2' (in 2X2 matrix of float)
 0:338          cosine (temp 2X2 matrix of float)
 0:338            'inF0' (in 2X2 matrix of float)
-0:338      hyp. sine (global 2X2 matrix of float)
+0:338      hyp. sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      smoothstep (global 2X2 matrix of float)
+0:338      smoothstep (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      sqrt (global 2X2 matrix of float)
+0:338      sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      step (global 2X2 matrix of float)
+0:338      step (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      tangent (global 2X2 matrix of float)
+0:338      tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. tangent (global 2X2 matrix of float)
+0:338      hyp. tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      transpose (global 2X2 matrix of float)
+0:338      transpose (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      trunc (global 2X2 matrix of float)
+0:338      trunc (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:341      Branch: Return with expression
 0:?         Constant:
@@ -811,91 +811,91 @@ Shader version: 450
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:345  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:345  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:345    Function Parameters: 
 0:345      'inF0' (in 3X3 matrix of float)
 0:345      'inF1' (in 3X3 matrix of float)
 0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:347      all (global bool)
+0:347      all (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      Absolute value (global 3X3 matrix of float)
+0:347      Absolute value (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc cosine (global 3X3 matrix of float)
+0:347      arc cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      any (global bool)
+0:347      any (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc sine (global 3X3 matrix of float)
+0:347      arc sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Ceiling (global 3X3 matrix of float)
+0:347      Ceiling (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      clamp (global 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      cosine (global 3X3 matrix of float)
+0:347      cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. cosine (global 3X3 matrix of float)
+0:347      hyp. cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      degrees (global 3X3 matrix of float)
+0:347      degrees (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      determinant (global float)
+0:347      determinant (temp float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp (global 3X3 matrix of float)
+0:347      exp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp2 (global 3X3 matrix of float)
+0:347      exp2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      findMSB (global int)
+0:347      findMSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      findLSB (global int)
+0:347      findLSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      Floor (global 3X3 matrix of float)
+0:347      Floor (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      mod (global 3X3 matrix of float)
+0:347      mod (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Fraction (global 3X3 matrix of float)
+0:347      Fraction (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      frexp (global 3X3 matrix of float)
+0:347      frexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      ldexp (global 3X3 matrix of float)
+0:347      ldexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      mix (global 3X3 matrix of float)
+0:347      mix (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      log (global 3X3 matrix of float)
+0:347      log (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      matrix-scale (temp 3X3 matrix of float)
 0:347        log2 (temp 3X3 matrix of float)
 0:347          'inF0' (in 3X3 matrix of float)
 0:347        Constant:
 0:347          0.301030
-0:347      log2 (global 3X3 matrix of float)
+0:347      log2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      max (global 3X3 matrix of float)
+0:347      max (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      min (global 3X3 matrix of float)
+0:347      min (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      pow (global 3X3 matrix of float)
+0:347      pow (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      radians (global 3X3 matrix of float)
+0:347      radians (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      roundEven (global 3X3 matrix of float)
+0:347      roundEven (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      inverse sqrt (global 3X3 matrix of float)
+0:347      inverse sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
@@ -903,9 +903,9 @@ Shader version: 450
 0:347          0.000000
 0:347        Constant:
 0:347          1.000000
-0:347      Sign (global 3X3 matrix of float)
+0:347      Sign (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      sine (global 3X3 matrix of float)
+0:347      sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      Sequence
 0:347        move second child to first child (temp 3X3 matrix of float)
@@ -916,24 +916,24 @@ Shader version: 450
 0:347          'inF2' (in 3X3 matrix of float)
 0:347          cosine (temp 3X3 matrix of float)
 0:347            'inF0' (in 3X3 matrix of float)
-0:347      hyp. sine (global 3X3 matrix of float)
+0:347      hyp. sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      smoothstep (global 3X3 matrix of float)
+0:347      smoothstep (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      sqrt (global 3X3 matrix of float)
+0:347      sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      step (global 3X3 matrix of float)
+0:347      step (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      tangent (global 3X3 matrix of float)
+0:347      tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. tangent (global 3X3 matrix of float)
+0:347      hyp. tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      transpose (global 3X3 matrix of float)
+0:347      transpose (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      trunc (global 3X3 matrix of float)
+0:347      trunc (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:350      Branch: Return with expression
 0:?         Constant:
@@ -946,91 +946,91 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:354  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:354  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:354    Function Parameters: 
 0:354      'inF0' (in 4X4 matrix of float)
 0:354      'inF1' (in 4X4 matrix of float)
 0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:356      all (global bool)
+0:356      all (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      Absolute value (global 4X4 matrix of float)
+0:356      Absolute value (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc cosine (global 4X4 matrix of float)
+0:356      arc cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      any (global bool)
+0:356      any (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc sine (global 4X4 matrix of float)
+0:356      arc sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Ceiling (global 4X4 matrix of float)
+0:356      Ceiling (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      clamp (global 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      cosine (global 4X4 matrix of float)
+0:356      cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. cosine (global 4X4 matrix of float)
+0:356      hyp. cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      degrees (global 4X4 matrix of float)
+0:356      degrees (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      determinant (global float)
+0:356      determinant (temp float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp (global 4X4 matrix of float)
+0:356      exp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp2 (global 4X4 matrix of float)
+0:356      exp2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      findMSB (global int)
+0:356      findMSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      findLSB (global int)
+0:356      findLSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      Floor (global 4X4 matrix of float)
+0:356      Floor (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      mod (global 4X4 matrix of float)
+0:356      mod (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Fraction (global 4X4 matrix of float)
+0:356      Fraction (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      frexp (global 4X4 matrix of float)
+0:356      frexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      ldexp (global 4X4 matrix of float)
+0:356      ldexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      mix (global 4X4 matrix of float)
+0:356      mix (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      log (global 4X4 matrix of float)
+0:356      log (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      matrix-scale (temp 4X4 matrix of float)
 0:356        log2 (temp 4X4 matrix of float)
 0:356          'inF0' (in 4X4 matrix of float)
 0:356        Constant:
 0:356          0.301030
-0:356      log2 (global 4X4 matrix of float)
+0:356      log2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      max (global 4X4 matrix of float)
+0:356      max (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      min (global 4X4 matrix of float)
+0:356      min (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      pow (global 4X4 matrix of float)
+0:356      pow (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      radians (global 4X4 matrix of float)
+0:356      radians (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      roundEven (global 4X4 matrix of float)
+0:356      roundEven (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      inverse sqrt (global 4X4 matrix of float)
+0:356      inverse sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
@@ -1038,9 +1038,9 @@ Shader version: 450
 0:356          0.000000
 0:356        Constant:
 0:356          1.000000
-0:356      Sign (global 4X4 matrix of float)
+0:356      Sign (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      sine (global 4X4 matrix of float)
+0:356      sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      Sequence
 0:356        move second child to first child (temp 4X4 matrix of float)
@@ -1051,24 +1051,24 @@ Shader version: 450
 0:356          'inF2' (in 4X4 matrix of float)
 0:356          cosine (temp 4X4 matrix of float)
 0:356            'inF0' (in 4X4 matrix of float)
-0:356      hyp. sine (global 4X4 matrix of float)
+0:356      hyp. sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      smoothstep (global 4X4 matrix of float)
+0:356      smoothstep (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      sqrt (global 4X4 matrix of float)
+0:356      sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      step (global 4X4 matrix of float)
+0:356      step (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      tangent (global 4X4 matrix of float)
+0:356      tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. tangent (global 4X4 matrix of float)
+0:356      hyp. tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      transpose (global 4X4 matrix of float)
+0:356      transpose (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      trunc (global 4X4 matrix of float)
+0:356      trunc (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:359      Branch: Return with expression
 0:?         Constant:
@@ -1088,7 +1088,7 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:377  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:377  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (temp void)
 0:377    Function Parameters: 
 0:377      'inF0' (in float)
 0:377      'inF1' (in float)
@@ -1118,7 +1118,7 @@ Shader version: 450
 0:378      Sequence
 0:378        move second child to first child (temp float)
 0:378          'r3' (temp float)
-0:378          dot-product (global float)
+0:378          dot-product (temp float)
 0:378            'inFV0' (in 2-component vector of float)
 0:378            'inFV1' (in 2-component vector of float)
 0:378      Sequence
@@ -1151,7 +1151,7 @@ Shader version: 450
 0:378          matrix-multiply (temp 2X2 matrix of float)
 0:378            'inFM1' (in 2X2 matrix of float)
 0:378            'inFM0' (in 2X2 matrix of float)
-0:384  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:384  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (temp void)
 0:384    Function Parameters: 
 0:384      'inF0' (in float)
 0:384      'inF1' (in float)
@@ -1181,7 +1181,7 @@ Shader version: 450
 0:385      Sequence
 0:385        move second child to first child (temp float)
 0:385          'r3' (temp float)
-0:385          dot-product (global float)
+0:385          dot-product (temp float)
 0:385            'inFV0' (in 3-component vector of float)
 0:385            'inFV1' (in 3-component vector of float)
 0:385      Sequence
@@ -1214,7 +1214,7 @@ Shader version: 450
 0:385          matrix-multiply (temp 3X3 matrix of float)
 0:385            'inFM1' (in 3X3 matrix of float)
 0:385            'inFM0' (in 3X3 matrix of float)
-0:391  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:391  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (temp void)
 0:391    Function Parameters: 
 0:391      'inF0' (in float)
 0:391      'inF1' (in float)
@@ -1244,7 +1244,7 @@ Shader version: 450
 0:392      Sequence
 0:392        move second child to first child (temp float)
 0:392          'r3' (temp float)
-0:392          dot-product (global float)
+0:392          dot-product (temp float)
 0:392            'inFV0' (in 4-component vector of float)
 0:392            'inFV1' (in 4-component vector of float)
 0:392      Sequence
@@ -1277,7 +1277,7 @@ Shader version: 450
 0:392          matrix-multiply (temp 4X4 matrix of float)
 0:392            'inFM1' (in 4X4 matrix of float)
 0:392            'inFM0' (in 4X4 matrix of float)
-0:401  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (global void)
+0:401  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (temp void)
 0:401    Function Parameters: 
 0:401      'inF0' (in float)
 0:401      'inF1' (in float)
@@ -1322,13 +1322,13 @@ Shader version: 450
 0:407      Sequence
 0:407        move second child to first child (temp float)
 0:407          'r05' (temp float)
-0:407          dot-product (global float)
+0:407          dot-product (temp float)
 0:407            'inFV2' (in 2-component vector of float)
 0:407            'inFV2' (in 2-component vector of float)
 0:408      Sequence
 0:408        move second child to first child (temp float)
 0:408          'r06' (temp float)
-0:408          dot-product (global float)
+0:408          dot-product (temp float)
 0:408            'inFV3' (in 3-component vector of float)
 0:408            'inFV3' (in 3-component vector of float)
 0:409      Sequence
@@ -1396,10 +1396,11 @@ Shader version: 450
 
 Linked vertex stage:
 
+WARNING: Linking vertex stage: Entry point not found
 
 Shader version: 450
 0:? Sequence
-0:2  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (global float)
+0:2  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (temp float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -1407,99 +1408,99 @@ Shader version: 450
 0:2      'inU0' (in uint)
 0:2      'inU1' (in uint)
 0:?     Sequence
-0:3      all (global bool)
+0:3      all (temp bool)
 0:3        'inF0' (in float)
-0:4      Absolute value (global float)
+0:4      Absolute value (temp float)
 0:4        'inF0' (in float)
-0:5      arc cosine (global float)
+0:5      arc cosine (temp float)
 0:5        'inF0' (in float)
-0:6      any (global bool)
+0:6      any (temp bool)
 0:6        'inF0' (in float)
-0:7      arc sine (global float)
+0:7      arc sine (temp float)
 0:7        'inF0' (in float)
-0:8      floatBitsToInt (global int)
+0:8      floatBitsToInt (temp int)
 0:8        'inF0' (in float)
-0:9      floatBitsToUint (global uint)
+0:9      floatBitsToUint (temp uint)
 0:9        'inF0' (in float)
-0:10      intBitsToFloat (global float)
+0:10      intBitsToFloat (temp float)
 0:10        'inU0' (in uint)
-0:12      arc tangent (global float)
+0:12      arc tangent (temp float)
 0:12        'inF0' (in float)
-0:13      arc tangent (global float)
+0:13      arc tangent (temp float)
 0:13        'inF0' (in float)
 0:13        'inF1' (in float)
-0:14      Ceiling (global float)
+0:14      Ceiling (temp float)
 0:14        'inF0' (in float)
-0:15      clamp (global float)
+0:15      clamp (temp float)
 0:15        'inF0' (in float)
 0:15        'inF1' (in float)
 0:15        'inF2' (in float)
-0:16      cosine (global float)
+0:16      cosine (temp float)
 0:16        'inF0' (in float)
-0:17      hyp. cosine (global float)
+0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (global uint)
+0:18      bitCount (temp int)
 0:18        Constant:
-0:18          7 (const uint)
-0:19      degrees (global float)
+0:18          7 (const int)
+0:19      degrees (temp float)
 0:19        'inF0' (in float)
-0:23      exp (global float)
+0:23      exp (temp float)
 0:23        'inF0' (in float)
-0:24      exp2 (global float)
+0:24      exp2 (temp float)
 0:24        'inF0' (in float)
-0:25      findMSB (global int)
+0:25      findMSB (temp int)
 0:25        Constant:
 0:25          7 (const int)
-0:26      findLSB (global int)
+0:26      findLSB (temp int)
 0:26        Constant:
 0:26          7 (const int)
-0:27      Floor (global float)
+0:27      Floor (temp float)
 0:27        'inF0' (in float)
-0:29      mod (global float)
+0:29      mod (temp float)
 0:29        'inF0' (in float)
 0:29        'inF1' (in float)
-0:30      Fraction (global float)
+0:30      Fraction (temp float)
 0:30        'inF0' (in float)
-0:31      frexp (global float)
+0:31      frexp (temp float)
 0:31        'inF0' (in float)
 0:31        'inF1' (in float)
-0:32      isinf (global bool)
+0:32      isinf (temp bool)
 0:32        'inF0' (in float)
-0:33      isnan (global bool)
+0:33      isnan (temp bool)
 0:33        'inF0' (in float)
-0:34      ldexp (global float)
+0:34      ldexp (temp float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      mix (global float)
+0:35      mix (temp float)
 0:35        'inF0' (in float)
 0:35        'inF1' (in float)
 0:35        'inF2' (in float)
-0:36      log (global float)
+0:36      log (temp float)
 0:36        'inF0' (in float)
 0:37      component-wise multiply (temp float)
 0:37        log2 (temp float)
 0:37          'inF0' (in float)
 0:37        Constant:
 0:37          0.301030
-0:38      log2 (global float)
+0:38      log2 (temp float)
 0:38        'inF0' (in float)
-0:39      max (global float)
+0:39      max (temp float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:40      min (global float)
+0:40      min (temp float)
 0:40        'inF0' (in float)
 0:40        'inF1' (in float)
-0:42      pow (global float)
+0:42      pow (temp float)
 0:42        'inF0' (in float)
 0:42        'inF1' (in float)
-0:43      radians (global float)
+0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (global uint)
+0:44      bitFieldReverse (temp int)
 0:44        Constant:
-0:44          2 (const uint)
-0:45      roundEven (global float)
+0:44          2 (const int)
+0:45      roundEven (temp float)
 0:45        'inF0' (in float)
-0:46      inverse sqrt (global float)
+0:46      inverse sqrt (temp float)
 0:46        'inF0' (in float)
 0:47      clamp (temp float)
 0:47        'inF0' (in float)
@@ -1507,9 +1508,9 @@ Shader version: 450
 0:47          0.000000
 0:47        Constant:
 0:47          1.000000
-0:48      Sign (global float)
+0:48      Sign (temp float)
 0:48        'inF0' (in float)
-0:49      sine (global float)
+0:49      sine (temp float)
 0:49        'inF0' (in float)
 0:50      Sequence
 0:50        move second child to first child (temp float)
@@ -1520,27 +1521,27 @@ Shader version: 450
 0:50          'inF2' (in float)
 0:50          cosine (temp float)
 0:50            'inF0' (in float)
-0:51      hyp. sine (global float)
+0:51      hyp. sine (temp float)
 0:51        'inF0' (in float)
-0:52      smoothstep (global float)
+0:52      smoothstep (temp float)
 0:52        'inF0' (in float)
 0:52        'inF1' (in float)
 0:52        'inF2' (in float)
-0:53      sqrt (global float)
+0:53      sqrt (temp float)
 0:53        'inF0' (in float)
-0:54      step (global float)
+0:54      step (temp float)
 0:54        'inF0' (in float)
 0:54        'inF1' (in float)
-0:55      tangent (global float)
+0:55      tangent (temp float)
 0:55        'inF0' (in float)
-0:56      hyp. tangent (global float)
+0:56      hyp. tangent (temp float)
 0:56        'inF0' (in float)
-0:58      trunc (global float)
+0:58      trunc (temp float)
 0:58        'inF0' (in float)
 0:60      Branch: Return with expression
 0:60        Constant:
 0:60          0.000000
-0:64  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:64  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (temp 1-component vector of float)
 0:64    Function Parameters: 
 0:64      'inF0' (in 1-component vector of float)
 0:64      'inF1' (in 1-component vector of float)
@@ -1549,7 +1550,7 @@ Shader version: 450
 0:66      Branch: Return with expression
 0:66        Constant:
 0:66          0.000000
-0:70  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:70  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
 0:70    Function Parameters: 
 0:70      'inF0' (in 2-component vector of float)
 0:70      'inF1' (in 2-component vector of float)
@@ -1557,123 +1558,123 @@ Shader version: 450
 0:70      'inU0' (in 2-component vector of uint)
 0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:71      all (global bool)
+0:71      all (temp bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      Absolute value (global 2-component vector of float)
+0:72      Absolute value (temp 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      arc cosine (global 2-component vector of float)
+0:73      arc cosine (temp 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      any (global bool)
+0:74      any (temp bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      arc sine (global 2-component vector of float)
+0:75      arc sine (temp 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToInt (global 2-component vector of int)
+0:76      floatBitsToInt (temp 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      floatBitsToUint (global 2-component vector of uint)
+0:77      floatBitsToUint (temp 2-component vector of uint)
 0:77        'inF0' (in 2-component vector of float)
-0:78      intBitsToFloat (global 2-component vector of float)
+0:78      intBitsToFloat (temp 2-component vector of float)
 0:78        'inU0' (in 2-component vector of uint)
-0:80      arc tangent (global 2-component vector of float)
+0:80      arc tangent (temp 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:81      arc tangent (global 2-component vector of float)
+0:81      arc tangent (temp 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
 0:81        'inF1' (in 2-component vector of float)
-0:82      Ceiling (global 2-component vector of float)
+0:82      Ceiling (temp 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:83      clamp (global 2-component vector of float)
+0:83      clamp (temp 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
 0:83        'inF1' (in 2-component vector of float)
 0:83        'inF2' (in 2-component vector of float)
-0:84      cosine (global 2-component vector of float)
+0:84      cosine (temp 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
-0:85      hyp. cosine (global 2-component vector of float)
+0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:87      degrees (global 2-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:88      distance (global float)
+0:88      distance (temp float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:89      dot-product (global float)
+0:89      dot-product (temp float)
 0:89        'inF0' (in 2-component vector of float)
 0:89        'inF1' (in 2-component vector of float)
-0:93      exp (global 2-component vector of float)
+0:93      exp (temp 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      exp2 (global 2-component vector of float)
+0:94      exp2 (temp 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:95      face-forward (global 2-component vector of float)
+0:95      face-forward (temp 2-component vector of float)
 0:95        'inF0' (in 2-component vector of float)
 0:95        'inF1' (in 2-component vector of float)
 0:95        'inF2' (in 2-component vector of float)
-0:96      findMSB (global int)
+0:96      findMSB (temp int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      findLSB (global int)
+0:97      findLSB (temp int)
 0:97        Constant:
 0:97          7 (const int)
-0:98      Floor (global 2-component vector of float)
+0:98      Floor (temp 2-component vector of float)
 0:98        'inF0' (in 2-component vector of float)
-0:100      mod (global 2-component vector of float)
+0:100      mod (temp 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
 0:100        'inF1' (in 2-component vector of float)
-0:101      Fraction (global 2-component vector of float)
+0:101      Fraction (temp 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:102      frexp (global 2-component vector of float)
+0:102      frexp (temp 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
 0:102        'inF1' (in 2-component vector of float)
-0:103      isinf (global 2-component vector of bool)
+0:103      isinf (temp 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      isnan (global 2-component vector of bool)
+0:104      isnan (temp 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:105      ldexp (global 2-component vector of float)
+0:105      ldexp (temp 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
 0:105        'inF1' (in 2-component vector of float)
-0:106      mix (global 2-component vector of float)
+0:106      mix (temp 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
 0:106        'inF1' (in 2-component vector of float)
 0:106        'inF2' (in 2-component vector of float)
-0:107      length (global float)
+0:107      length (temp float)
 0:107        'inF0' (in 2-component vector of float)
-0:108      log (global 2-component vector of float)
+0:108      log (temp 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
 0:109      vector-scale (temp 2-component vector of float)
 0:109        log2 (temp 2-component vector of float)
 0:109          'inF0' (in 2-component vector of float)
 0:109        Constant:
 0:109          0.301030
-0:110      log2 (global 2-component vector of float)
+0:110      log2 (temp 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:111      max (global 2-component vector of float)
+0:111      max (temp 2-component vector of float)
 0:111        'inF0' (in 2-component vector of float)
 0:111        'inF1' (in 2-component vector of float)
-0:112      min (global 2-component vector of float)
+0:112      min (temp 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
 0:112        'inF1' (in 2-component vector of float)
-0:114      normalize (global 2-component vector of float)
+0:114      normalize (temp 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      pow (global 2-component vector of float)
+0:115      pow (temp 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      radians (global 2-component vector of float)
+0:116      radians (temp 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:117      reflect (global 2-component vector of float)
+0:117      reflect (temp 2-component vector of float)
 0:117        'inF0' (in 2-component vector of float)
 0:117        'inF1' (in 2-component vector of float)
-0:118      refract (global 2-component vector of float)
+0:118      refract (temp 2-component vector of float)
 0:118        'inF0' (in 2-component vector of float)
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:120      roundEven (global 2-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:121      inverse sqrt (global 2-component vector of float)
+0:121      inverse sqrt (temp 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
 0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (in 2-component vector of float)
@@ -1681,9 +1682,9 @@ Shader version: 450
 0:122          0.000000
 0:122        Constant:
 0:122          1.000000
-0:123      Sign (global 2-component vector of float)
+0:123      Sign (temp 2-component vector of float)
 0:123        'inF0' (in 2-component vector of float)
-0:124      sine (global 2-component vector of float)
+0:124      sine (temp 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of float)
@@ -1694,28 +1695,28 @@ Shader version: 450
 0:125          'inF2' (in 2-component vector of float)
 0:125          cosine (temp 2-component vector of float)
 0:125            'inF0' (in 2-component vector of float)
-0:126      hyp. sine (global 2-component vector of float)
+0:126      hyp. sine (temp 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      smoothstep (global 2-component vector of float)
+0:127      smoothstep (temp 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
 0:127        'inF2' (in 2-component vector of float)
-0:128      sqrt (global 2-component vector of float)
+0:128      sqrt (temp 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      step (global 2-component vector of float)
+0:129      step (temp 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
 0:129        'inF1' (in 2-component vector of float)
-0:130      tangent (global 2-component vector of float)
+0:130      tangent (temp 2-component vector of float)
 0:130        'inF0' (in 2-component vector of float)
-0:131      hyp. tangent (global 2-component vector of float)
+0:131      hyp. tangent (temp 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:133      trunc (global 2-component vector of float)
+0:133      trunc (temp 2-component vector of float)
 0:133        'inF0' (in 2-component vector of float)
 0:136      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:140  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:140  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
 0:140    Function Parameters: 
 0:140      'inF0' (in 3-component vector of float)
 0:140      'inF1' (in 3-component vector of float)
@@ -1723,128 +1724,128 @@ Shader version: 450
 0:140      'inU0' (in 3-component vector of uint)
 0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:141      all (global bool)
+0:141      all (temp bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      Absolute value (global 3-component vector of float)
+0:142      Absolute value (temp 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc cosine (global 3-component vector of float)
+0:143      arc cosine (temp 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      any (global bool)
+0:144      any (temp bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      arc sine (global 3-component vector of float)
+0:145      arc sine (temp 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      floatBitsToInt (global 3-component vector of int)
+0:146      floatBitsToInt (temp 3-component vector of int)
 0:146        'inF0' (in 3-component vector of float)
-0:147      floatBitsToUint (global 3-component vector of uint)
+0:147      floatBitsToUint (temp 3-component vector of uint)
 0:147        'inF0' (in 3-component vector of float)
-0:148      intBitsToFloat (global 3-component vector of float)
+0:148      intBitsToFloat (temp 3-component vector of float)
 0:148        'inU0' (in 3-component vector of uint)
-0:150      arc tangent (global 3-component vector of float)
+0:150      arc tangent (temp 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      arc tangent (global 3-component vector of float)
+0:151      arc tangent (temp 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:152      Ceiling (global 3-component vector of float)
+0:152      Ceiling (temp 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      clamp (global 3-component vector of float)
+0:153      clamp (temp 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
 0:153        'inF1' (in 3-component vector of float)
 0:153        'inF2' (in 3-component vector of float)
-0:154      cosine (global 3-component vector of float)
+0:154      cosine (temp 3-component vector of float)
 0:154        'inF0' (in 3-component vector of float)
-0:155      hyp. cosine (global 3-component vector of float)
+0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:157      cross-product (global 3-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      degrees (global 3-component vector of float)
+0:158      degrees (temp 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:159      distance (global float)
+0:159      distance (temp float)
 0:159        'inF0' (in 3-component vector of float)
 0:159        'inF1' (in 3-component vector of float)
-0:160      dot-product (global float)
+0:160      dot-product (temp float)
 0:160        'inF0' (in 3-component vector of float)
 0:160        'inF1' (in 3-component vector of float)
-0:164      exp (global 3-component vector of float)
+0:164      exp (temp 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:165      exp2 (global 3-component vector of float)
+0:165      exp2 (temp 3-component vector of float)
 0:165        'inF0' (in 3-component vector of float)
-0:166      face-forward (global 3-component vector of float)
+0:166      face-forward (temp 3-component vector of float)
 0:166        'inF0' (in 3-component vector of float)
 0:166        'inF1' (in 3-component vector of float)
 0:166        'inF2' (in 3-component vector of float)
-0:167      findMSB (global int)
+0:167      findMSB (temp int)
 0:167        Constant:
 0:167          7 (const int)
-0:168      findLSB (global int)
+0:168      findLSB (temp int)
 0:168        Constant:
 0:168          7 (const int)
-0:169      Floor (global 3-component vector of float)
+0:169      Floor (temp 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:171      mod (global 3-component vector of float)
+0:171      mod (temp 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      Fraction (global 3-component vector of float)
+0:172      Fraction (temp 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      frexp (global 3-component vector of float)
+0:173      frexp (temp 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
 0:173        'inF1' (in 3-component vector of float)
-0:174      isinf (global 3-component vector of bool)
+0:174      isinf (temp 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:175      isnan (global 3-component vector of bool)
+0:175      isnan (temp 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      ldexp (global 3-component vector of float)
+0:176      ldexp (temp 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
 0:176        'inF1' (in 3-component vector of float)
-0:177      mix (global 3-component vector of float)
+0:177      mix (temp 3-component vector of float)
 0:177        'inF0' (in 3-component vector of float)
 0:177        'inF1' (in 3-component vector of float)
 0:177        'inF2' (in 3-component vector of float)
-0:178      length (global float)
+0:178      length (temp float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      log (global 3-component vector of float)
+0:179      log (temp 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
 0:180      vector-scale (temp 3-component vector of float)
 0:180        log2 (temp 3-component vector of float)
 0:180          'inF0' (in 3-component vector of float)
 0:180        Constant:
 0:180          0.301030
-0:181      log2 (global 3-component vector of float)
+0:181      log2 (temp 3-component vector of float)
 0:181        'inF0' (in 3-component vector of float)
-0:182      max (global 3-component vector of float)
+0:182      max (temp 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
 0:182        'inF1' (in 3-component vector of float)
-0:183      min (global 3-component vector of float)
+0:183      min (temp 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:185      normalize (global 3-component vector of float)
+0:185      normalize (temp 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:186      pow (global 3-component vector of float)
+0:186      pow (temp 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:187      radians (global 3-component vector of float)
+0:187      radians (temp 3-component vector of float)
 0:187        'inF0' (in 3-component vector of float)
-0:188      reflect (global 3-component vector of float)
+0:188      reflect (temp 3-component vector of float)
 0:188        'inF0' (in 3-component vector of float)
 0:188        'inF1' (in 3-component vector of float)
-0:189      refract (global 3-component vector of float)
+0:189      refract (temp 3-component vector of float)
 0:189        'inF0' (in 3-component vector of float)
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:191      roundEven (global 3-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      inverse sqrt (global 3-component vector of float)
+0:192      inverse sqrt (temp 3-component vector of float)
 0:192        'inF0' (in 3-component vector of float)
 0:193      clamp (temp 3-component vector of float)
 0:193        'inF0' (in 3-component vector of float)
@@ -1852,9 +1853,9 @@ Shader version: 450
 0:193          0.000000
 0:193        Constant:
 0:193          1.000000
-0:194      Sign (global 3-component vector of float)
+0:194      Sign (temp 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      sine (global 3-component vector of float)
+0:195      sine (temp 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
@@ -1865,29 +1866,29 @@ Shader version: 450
 0:196          'inF2' (in 3-component vector of float)
 0:196          cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
-0:197      hyp. sine (global 3-component vector of float)
+0:197      hyp. sine (temp 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:198      smoothstep (global 3-component vector of float)
+0:198      smoothstep (temp 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
 0:198        'inF1' (in 3-component vector of float)
 0:198        'inF2' (in 3-component vector of float)
-0:199      sqrt (global 3-component vector of float)
+0:199      sqrt (temp 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:200      step (global 3-component vector of float)
+0:200      step (temp 3-component vector of float)
 0:200        'inF0' (in 3-component vector of float)
 0:200        'inF1' (in 3-component vector of float)
-0:201      tangent (global 3-component vector of float)
+0:201      tangent (temp 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:202      hyp. tangent (global 3-component vector of float)
+0:202      hyp. tangent (temp 3-component vector of float)
 0:202        'inF0' (in 3-component vector of float)
-0:204      trunc (global 3-component vector of float)
+0:204      trunc (temp 3-component vector of float)
 0:204        'inF0' (in 3-component vector of float)
 0:207      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:211  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:211  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
 0:211    Function Parameters: 
 0:211      'inF0' (in 4-component vector of float)
 0:211      'inF1' (in 4-component vector of float)
@@ -1895,49 +1896,49 @@ Shader version: 450
 0:211      'inU0' (in 4-component vector of uint)
 0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:212      all (global bool)
+0:212      all (temp bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      Absolute value (global 4-component vector of float)
+0:213      Absolute value (temp 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      arc cosine (global 4-component vector of float)
+0:214      arc cosine (temp 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      any (global bool)
+0:215      any (temp bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      arc sine (global 4-component vector of float)
+0:216      arc sine (temp 4-component vector of float)
 0:216        'inF0' (in 4-component vector of float)
-0:217      floatBitsToInt (global 4-component vector of int)
+0:217      floatBitsToInt (temp 4-component vector of int)
 0:217        'inF0' (in 4-component vector of float)
-0:218      floatBitsToUint (global 4-component vector of uint)
+0:218      floatBitsToUint (temp 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      intBitsToFloat (global 4-component vector of float)
+0:219      intBitsToFloat (temp 4-component vector of float)
 0:219        'inU0' (in 4-component vector of uint)
-0:221      arc tangent (global 4-component vector of float)
+0:221      arc tangent (temp 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:222      arc tangent (global 4-component vector of float)
+0:222      arc tangent (temp 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
 0:222        'inF1' (in 4-component vector of float)
-0:223      Ceiling (global 4-component vector of float)
+0:223      Ceiling (temp 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
-0:224      clamp (global 4-component vector of float)
+0:224      clamp (temp 4-component vector of float)
 0:224        'inF0' (in 4-component vector of float)
 0:224        'inF1' (in 4-component vector of float)
 0:224        'inF2' (in 4-component vector of float)
-0:225      cosine (global 4-component vector of float)
+0:225      cosine (temp 4-component vector of float)
 0:225        'inF0' (in 4-component vector of float)
-0:226      hyp. cosine (global 4-component vector of float)
+0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of int)
 0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
-0:228      degrees (global 4-component vector of float)
+0:?           7 (const int)
+0:?           3 (const int)
+0:?           5 (const int)
+0:?           2 (const int)
+0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
-0:229      distance (global float)
+0:229      distance (temp float)
 0:229        'inF0' (in 4-component vector of float)
 0:229        'inF1' (in 4-component vector of float)
-0:230      dot-product (global float)
+0:230      dot-product (temp float)
 0:230        'inF0' (in 4-component vector of float)
 0:230        'inF1' (in 4-component vector of float)
 0:231      Construct vec4 (temp 4-component vector of float)
@@ -1960,82 +1961,82 @@ Shader version: 450
 0:231          'inF1' (in 4-component vector of float)
 0:231          Constant:
 0:231            3 (const int)
-0:235      exp (global 4-component vector of float)
+0:235      exp (temp 4-component vector of float)
 0:235        'inF0' (in 4-component vector of float)
-0:236      exp2 (global 4-component vector of float)
+0:236      exp2 (temp 4-component vector of float)
 0:236        'inF0' (in 4-component vector of float)
-0:237      face-forward (global 4-component vector of float)
+0:237      face-forward (temp 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
 0:237        'inF1' (in 4-component vector of float)
 0:237        'inF2' (in 4-component vector of float)
-0:238      findMSB (global int)
+0:238      findMSB (temp int)
 0:238        Constant:
 0:238          7 (const int)
-0:239      findLSB (global int)
+0:239      findLSB (temp int)
 0:239        Constant:
 0:239          7 (const int)
-0:240      Floor (global 4-component vector of float)
+0:240      Floor (temp 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:242      mod (global 4-component vector of float)
+0:242      mod (temp 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
 0:242        'inF1' (in 4-component vector of float)
-0:243      Fraction (global 4-component vector of float)
+0:243      Fraction (temp 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      frexp (global 4-component vector of float)
+0:244      frexp (temp 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      isinf (global 4-component vector of bool)
+0:245      isinf (temp 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      isnan (global 4-component vector of bool)
+0:246      isnan (temp 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      ldexp (global 4-component vector of float)
+0:247      ldexp (temp 4-component vector of float)
 0:247        'inF0' (in 4-component vector of float)
 0:247        'inF1' (in 4-component vector of float)
-0:248      mix (global 4-component vector of float)
+0:248      mix (temp 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
 0:248        'inF1' (in 4-component vector of float)
 0:248        'inF2' (in 4-component vector of float)
-0:249      length (global float)
+0:249      length (temp float)
 0:249        'inF0' (in 4-component vector of float)
-0:250      log (global 4-component vector of float)
+0:250      log (temp 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
 0:251      vector-scale (temp 4-component vector of float)
 0:251        log2 (temp 4-component vector of float)
 0:251          'inF0' (in 4-component vector of float)
 0:251        Constant:
 0:251          0.301030
-0:252      log2 (global 4-component vector of float)
+0:252      log2 (temp 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      max (global 4-component vector of float)
+0:253      max (temp 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      min (global 4-component vector of float)
+0:254      min (temp 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
 0:254        'inF1' (in 4-component vector of float)
-0:256      normalize (global 4-component vector of float)
+0:256      normalize (temp 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:257      pow (global 4-component vector of float)
+0:257      pow (temp 4-component vector of float)
 0:257        'inF0' (in 4-component vector of float)
 0:257        'inF1' (in 4-component vector of float)
-0:258      radians (global 4-component vector of float)
+0:258      radians (temp 4-component vector of float)
 0:258        'inF0' (in 4-component vector of float)
-0:259      reflect (global 4-component vector of float)
+0:259      reflect (temp 4-component vector of float)
 0:259        'inF0' (in 4-component vector of float)
 0:259        'inF1' (in 4-component vector of float)
-0:260      refract (global 4-component vector of float)
+0:260      refract (temp 4-component vector of float)
 0:260        'inF0' (in 4-component vector of float)
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of int)
 0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
-0:262      roundEven (global 4-component vector of float)
+0:?           1 (const int)
+0:?           2 (const int)
+0:?           3 (const int)
+0:?           4 (const int)
+0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      inverse sqrt (global 4-component vector of float)
+0:263      inverse sqrt (temp 4-component vector of float)
 0:263        'inF0' (in 4-component vector of float)
 0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
@@ -2043,9 +2044,9 @@ Shader version: 450
 0:264          0.000000
 0:264        Constant:
 0:264          1.000000
-0:265      Sign (global 4-component vector of float)
+0:265      Sign (temp 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:266      sine (global 4-component vector of float)
+0:266      sine (temp 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
@@ -2056,22 +2057,22 @@ Shader version: 450
 0:267          'inF2' (in 4-component vector of float)
 0:267          cosine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
-0:268      hyp. sine (global 4-component vector of float)
+0:268      hyp. sine (temp 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      smoothstep (global 4-component vector of float)
+0:269      smoothstep (temp 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
 0:269        'inF1' (in 4-component vector of float)
 0:269        'inF2' (in 4-component vector of float)
-0:270      sqrt (global 4-component vector of float)
+0:270      sqrt (temp 4-component vector of float)
 0:270        'inF0' (in 4-component vector of float)
-0:271      step (global 4-component vector of float)
+0:271      step (temp 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
 0:271        'inF1' (in 4-component vector of float)
-0:272      tangent (global 4-component vector of float)
+0:272      tangent (temp 4-component vector of float)
 0:272        'inF0' (in 4-component vector of float)
-0:273      hyp. tangent (global 4-component vector of float)
+0:273      hyp. tangent (temp 4-component vector of float)
 0:273        'inF0' (in 4-component vector of float)
-0:275      trunc (global 4-component vector of float)
+0:275      trunc (temp 4-component vector of float)
 0:275        'inF0' (in 4-component vector of float)
 0:278      Branch: Return with expression
 0:?         Constant:
@@ -2079,91 +2080,91 @@ Shader version: 450
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:336  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:336  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (temp 2X2 matrix of float)
 0:336    Function Parameters: 
 0:336      'inF0' (in 2X2 matrix of float)
 0:336      'inF1' (in 2X2 matrix of float)
 0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:338      all (global bool)
+0:338      all (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      Absolute value (global 2X2 matrix of float)
+0:338      Absolute value (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc cosine (global 2X2 matrix of float)
+0:338      arc cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      any (global bool)
+0:338      any (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc sine (global 2X2 matrix of float)
+0:338      arc sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Ceiling (global 2X2 matrix of float)
+0:338      Ceiling (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      clamp (global 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      cosine (global 2X2 matrix of float)
+0:338      cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. cosine (global 2X2 matrix of float)
+0:338      hyp. cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      degrees (global 2X2 matrix of float)
+0:338      degrees (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      determinant (global float)
+0:338      determinant (temp float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp (global 2X2 matrix of float)
+0:338      exp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp2 (global 2X2 matrix of float)
+0:338      exp2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      findMSB (global int)
+0:338      findMSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      findLSB (global int)
+0:338      findLSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      Floor (global 2X2 matrix of float)
+0:338      Floor (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      mod (global 2X2 matrix of float)
+0:338      mod (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Fraction (global 2X2 matrix of float)
+0:338      Fraction (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      frexp (global 2X2 matrix of float)
+0:338      frexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      ldexp (global 2X2 matrix of float)
+0:338      ldexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      mix (global 2X2 matrix of float)
+0:338      mix (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      log (global 2X2 matrix of float)
+0:338      log (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      matrix-scale (temp 2X2 matrix of float)
 0:338        log2 (temp 2X2 matrix of float)
 0:338          'inF0' (in 2X2 matrix of float)
 0:338        Constant:
 0:338          0.301030
-0:338      log2 (global 2X2 matrix of float)
+0:338      log2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      max (global 2X2 matrix of float)
+0:338      max (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      min (global 2X2 matrix of float)
+0:338      min (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      pow (global 2X2 matrix of float)
+0:338      pow (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      radians (global 2X2 matrix of float)
+0:338      radians (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      roundEven (global 2X2 matrix of float)
+0:338      roundEven (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      inverse sqrt (global 2X2 matrix of float)
+0:338      inverse sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
@@ -2171,9 +2172,9 @@ Shader version: 450
 0:338          0.000000
 0:338        Constant:
 0:338          1.000000
-0:338      Sign (global 2X2 matrix of float)
+0:338      Sign (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      sine (global 2X2 matrix of float)
+0:338      sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      Sequence
 0:338        move second child to first child (temp 2X2 matrix of float)
@@ -2184,24 +2185,24 @@ Shader version: 450
 0:338          'inF2' (in 2X2 matrix of float)
 0:338          cosine (temp 2X2 matrix of float)
 0:338            'inF0' (in 2X2 matrix of float)
-0:338      hyp. sine (global 2X2 matrix of float)
+0:338      hyp. sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      smoothstep (global 2X2 matrix of float)
+0:338      smoothstep (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      sqrt (global 2X2 matrix of float)
+0:338      sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      step (global 2X2 matrix of float)
+0:338      step (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      tangent (global 2X2 matrix of float)
+0:338      tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. tangent (global 2X2 matrix of float)
+0:338      hyp. tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      transpose (global 2X2 matrix of float)
+0:338      transpose (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      trunc (global 2X2 matrix of float)
+0:338      trunc (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:341      Branch: Return with expression
 0:?         Constant:
@@ -2209,91 +2210,91 @@ Shader version: 450
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:345  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:345  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (temp 3X3 matrix of float)
 0:345    Function Parameters: 
 0:345      'inF0' (in 3X3 matrix of float)
 0:345      'inF1' (in 3X3 matrix of float)
 0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:347      all (global bool)
+0:347      all (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      Absolute value (global 3X3 matrix of float)
+0:347      Absolute value (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc cosine (global 3X3 matrix of float)
+0:347      arc cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      any (global bool)
+0:347      any (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc sine (global 3X3 matrix of float)
+0:347      arc sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Ceiling (global 3X3 matrix of float)
+0:347      Ceiling (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      clamp (global 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      cosine (global 3X3 matrix of float)
+0:347      cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. cosine (global 3X3 matrix of float)
+0:347      hyp. cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      degrees (global 3X3 matrix of float)
+0:347      degrees (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      determinant (global float)
+0:347      determinant (temp float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp (global 3X3 matrix of float)
+0:347      exp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp2 (global 3X3 matrix of float)
+0:347      exp2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      findMSB (global int)
+0:347      findMSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      findLSB (global int)
+0:347      findLSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      Floor (global 3X3 matrix of float)
+0:347      Floor (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      mod (global 3X3 matrix of float)
+0:347      mod (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Fraction (global 3X3 matrix of float)
+0:347      Fraction (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      frexp (global 3X3 matrix of float)
+0:347      frexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      ldexp (global 3X3 matrix of float)
+0:347      ldexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      mix (global 3X3 matrix of float)
+0:347      mix (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      log (global 3X3 matrix of float)
+0:347      log (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      matrix-scale (temp 3X3 matrix of float)
 0:347        log2 (temp 3X3 matrix of float)
 0:347          'inF0' (in 3X3 matrix of float)
 0:347        Constant:
 0:347          0.301030
-0:347      log2 (global 3X3 matrix of float)
+0:347      log2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      max (global 3X3 matrix of float)
+0:347      max (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      min (global 3X3 matrix of float)
+0:347      min (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      pow (global 3X3 matrix of float)
+0:347      pow (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      radians (global 3X3 matrix of float)
+0:347      radians (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      roundEven (global 3X3 matrix of float)
+0:347      roundEven (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      inverse sqrt (global 3X3 matrix of float)
+0:347      inverse sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
@@ -2301,9 +2302,9 @@ Shader version: 450
 0:347          0.000000
 0:347        Constant:
 0:347          1.000000
-0:347      Sign (global 3X3 matrix of float)
+0:347      Sign (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      sine (global 3X3 matrix of float)
+0:347      sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      Sequence
 0:347        move second child to first child (temp 3X3 matrix of float)
@@ -2314,24 +2315,24 @@ Shader version: 450
 0:347          'inF2' (in 3X3 matrix of float)
 0:347          cosine (temp 3X3 matrix of float)
 0:347            'inF0' (in 3X3 matrix of float)
-0:347      hyp. sine (global 3X3 matrix of float)
+0:347      hyp. sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      smoothstep (global 3X3 matrix of float)
+0:347      smoothstep (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      sqrt (global 3X3 matrix of float)
+0:347      sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      step (global 3X3 matrix of float)
+0:347      step (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      tangent (global 3X3 matrix of float)
+0:347      tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. tangent (global 3X3 matrix of float)
+0:347      hyp. tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      transpose (global 3X3 matrix of float)
+0:347      transpose (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      trunc (global 3X3 matrix of float)
+0:347      trunc (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:350      Branch: Return with expression
 0:?         Constant:
@@ -2344,91 +2345,91 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:354  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:354  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (temp 4X4 matrix of float)
 0:354    Function Parameters: 
 0:354      'inF0' (in 4X4 matrix of float)
 0:354      'inF1' (in 4X4 matrix of float)
 0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:356      all (global bool)
+0:356      all (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      Absolute value (global 4X4 matrix of float)
+0:356      Absolute value (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc cosine (global 4X4 matrix of float)
+0:356      arc cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      any (global bool)
+0:356      any (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc sine (global 4X4 matrix of float)
+0:356      arc sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Ceiling (global 4X4 matrix of float)
+0:356      Ceiling (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      clamp (global 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      cosine (global 4X4 matrix of float)
+0:356      cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. cosine (global 4X4 matrix of float)
+0:356      hyp. cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      degrees (global 4X4 matrix of float)
+0:356      degrees (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      determinant (global float)
+0:356      determinant (temp float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp (global 4X4 matrix of float)
+0:356      exp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp2 (global 4X4 matrix of float)
+0:356      exp2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      findMSB (global int)
+0:356      findMSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      findLSB (global int)
+0:356      findLSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      Floor (global 4X4 matrix of float)
+0:356      Floor (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      mod (global 4X4 matrix of float)
+0:356      mod (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Fraction (global 4X4 matrix of float)
+0:356      Fraction (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      frexp (global 4X4 matrix of float)
+0:356      frexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      ldexp (global 4X4 matrix of float)
+0:356      ldexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      mix (global 4X4 matrix of float)
+0:356      mix (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      log (global 4X4 matrix of float)
+0:356      log (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      matrix-scale (temp 4X4 matrix of float)
 0:356        log2 (temp 4X4 matrix of float)
 0:356          'inF0' (in 4X4 matrix of float)
 0:356        Constant:
 0:356          0.301030
-0:356      log2 (global 4X4 matrix of float)
+0:356      log2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      max (global 4X4 matrix of float)
+0:356      max (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      min (global 4X4 matrix of float)
+0:356      min (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      pow (global 4X4 matrix of float)
+0:356      pow (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      radians (global 4X4 matrix of float)
+0:356      radians (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      roundEven (global 4X4 matrix of float)
+0:356      roundEven (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      inverse sqrt (global 4X4 matrix of float)
+0:356      inverse sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
@@ -2436,9 +2437,9 @@ Shader version: 450
 0:356          0.000000
 0:356        Constant:
 0:356          1.000000
-0:356      Sign (global 4X4 matrix of float)
+0:356      Sign (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      sine (global 4X4 matrix of float)
+0:356      sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      Sequence
 0:356        move second child to first child (temp 4X4 matrix of float)
@@ -2449,24 +2450,24 @@ Shader version: 450
 0:356          'inF2' (in 4X4 matrix of float)
 0:356          cosine (temp 4X4 matrix of float)
 0:356            'inF0' (in 4X4 matrix of float)
-0:356      hyp. sine (global 4X4 matrix of float)
+0:356      hyp. sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      smoothstep (global 4X4 matrix of float)
+0:356      smoothstep (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      sqrt (global 4X4 matrix of float)
+0:356      sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      step (global 4X4 matrix of float)
+0:356      step (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      tangent (global 4X4 matrix of float)
+0:356      tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. tangent (global 4X4 matrix of float)
+0:356      hyp. tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      transpose (global 4X4 matrix of float)
+0:356      transpose (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      trunc (global 4X4 matrix of float)
+0:356      trunc (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:359      Branch: Return with expression
 0:?         Constant:
@@ -2486,7 +2487,7 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:377  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:377  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (temp void)
 0:377    Function Parameters: 
 0:377      'inF0' (in float)
 0:377      'inF1' (in float)
@@ -2516,7 +2517,7 @@ Shader version: 450
 0:378      Sequence
 0:378        move second child to first child (temp float)
 0:378          'r3' (temp float)
-0:378          dot-product (global float)
+0:378          dot-product (temp float)
 0:378            'inFV0' (in 2-component vector of float)
 0:378            'inFV1' (in 2-component vector of float)
 0:378      Sequence
@@ -2549,7 +2550,7 @@ Shader version: 450
 0:378          matrix-multiply (temp 2X2 matrix of float)
 0:378            'inFM1' (in 2X2 matrix of float)
 0:378            'inFM0' (in 2X2 matrix of float)
-0:384  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:384  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (temp void)
 0:384    Function Parameters: 
 0:384      'inF0' (in float)
 0:384      'inF1' (in float)
@@ -2579,7 +2580,7 @@ Shader version: 450
 0:385      Sequence
 0:385        move second child to first child (temp float)
 0:385          'r3' (temp float)
-0:385          dot-product (global float)
+0:385          dot-product (temp float)
 0:385            'inFV0' (in 3-component vector of float)
 0:385            'inFV1' (in 3-component vector of float)
 0:385      Sequence
@@ -2612,7 +2613,7 @@ Shader version: 450
 0:385          matrix-multiply (temp 3X3 matrix of float)
 0:385            'inFM1' (in 3X3 matrix of float)
 0:385            'inFM0' (in 3X3 matrix of float)
-0:391  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:391  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (temp void)
 0:391    Function Parameters: 
 0:391      'inF0' (in float)
 0:391      'inF1' (in float)
@@ -2642,7 +2643,7 @@ Shader version: 450
 0:392      Sequence
 0:392        move second child to first child (temp float)
 0:392          'r3' (temp float)
-0:392          dot-product (global float)
+0:392          dot-product (temp float)
 0:392            'inFV0' (in 4-component vector of float)
 0:392            'inFV1' (in 4-component vector of float)
 0:392      Sequence
@@ -2675,7 +2676,7 @@ Shader version: 450
 0:392          matrix-multiply (temp 4X4 matrix of float)
 0:392            'inFM1' (in 4X4 matrix of float)
 0:392            'inFM0' (in 4X4 matrix of float)
-0:401  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (global void)
+0:401  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; (temp void)
 0:401    Function Parameters: 
 0:401      'inF0' (in float)
 0:401      'inF1' (in float)
@@ -2720,13 +2721,13 @@ Shader version: 450
 0:407      Sequence
 0:407        move second child to first child (temp float)
 0:407          'r05' (temp float)
-0:407          dot-product (global float)
+0:407          dot-product (temp float)
 0:407            'inFV2' (in 2-component vector of float)
 0:407            'inFV2' (in 2-component vector of float)
 0:408      Sequence
 0:408        move second child to first child (temp float)
 0:408          'r06' (temp float)
-0:408          dot-product (global float)
+0:408          dot-product (temp float)
 0:408            'inFV3' (in 3-component vector of float)
 0:408            'inFV3' (in 3-component vector of float)
 0:409      Sequence
@@ -2793,7 +2794,7 @@ Shader version: 450
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1238
+// Id's are bound by 1240
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -2871,57 +2872,57 @@ Shader version: 450
                               Name 126  "inFM3x3"
                               Name 127  "inFM3x4"
                               Name 128  "inFM2x4"
-                              Name 183  "ResType"
-                              Name 317  "ResType"
-                              Name 465  "ResType"
-                              Name 618  "ResType"
-                              Name 751  "ResType"
-                              Name 871  "ResType"
-                              Name 994  "ResType"
-                              Name 1062  "r0"
-                              Name 1066  "r1"
-                              Name 1070  "r2"
-                              Name 1074  "r3"
-                              Name 1078  "r4"
-                              Name 1082  "r5"
-                              Name 1086  "r6"
-                              Name 1090  "r7"
-                              Name 1094  "r8"
-                              Name 1098  "r0"
-                              Name 1102  "r1"
-                              Name 1106  "r2"
-                              Name 1110  "r3"
-                              Name 1114  "r4"
-                              Name 1118  "r5"
-                              Name 1122  "r6"
-                              Name 1126  "r7"
-                              Name 1130  "r8"
-                              Name 1134  "r0"
-                              Name 1138  "r1"
-                              Name 1142  "r2"
-                              Name 1146  "r3"
-                              Name 1150  "r4"
-                              Name 1154  "r5"
-                              Name 1158  "r6"
-                              Name 1162  "r7"
-                              Name 1166  "r8"
-                              Name 1170  "r00"
-                              Name 1174  "r01"
-                              Name 1178  "r02"
-                              Name 1182  "r03"
-                              Name 1186  "r04"
-                              Name 1190  "r05"
-                              Name 1194  "r06"
-                              Name 1198  "r07"
-                              Name 1202  "r08"
-                              Name 1206  "r09"
-                              Name 1210  "r10"
-                              Name 1214  "r11"
-                              Name 1218  "r12"
-                              Name 1222  "r13"
-                              Name 1226  "r14"
-                              Name 1230  "r15"
-                              Name 1234  "r16"
+                              Name 182  "ResType"
+                              Name 316  "ResType"
+                              Name 464  "ResType"
+                              Name 620  "ResType"
+                              Name 753  "ResType"
+                              Name 873  "ResType"
+                              Name 996  "ResType"
+                              Name 1064  "r0"
+                              Name 1068  "r1"
+                              Name 1072  "r2"
+                              Name 1076  "r3"
+                              Name 1080  "r4"
+                              Name 1084  "r5"
+                              Name 1088  "r6"
+                              Name 1092  "r7"
+                              Name 1096  "r8"
+                              Name 1100  "r0"
+                              Name 1104  "r1"
+                              Name 1108  "r2"
+                              Name 1112  "r3"
+                              Name 1116  "r4"
+                              Name 1120  "r5"
+                              Name 1124  "r6"
+                              Name 1128  "r7"
+                              Name 1132  "r8"
+                              Name 1136  "r0"
+                              Name 1140  "r1"
+                              Name 1144  "r2"
+                              Name 1148  "r3"
+                              Name 1152  "r4"
+                              Name 1156  "r5"
+                              Name 1160  "r6"
+                              Name 1164  "r7"
+                              Name 1168  "r8"
+                              Name 1172  "r00"
+                              Name 1176  "r01"
+                              Name 1180  "r02"
+                              Name 1184  "r03"
+                              Name 1188  "r04"
+                              Name 1192  "r05"
+                              Name 1196  "r06"
+                              Name 1200  "r07"
+                              Name 1204  "r08"
+                              Name 1208  "r09"
+                              Name 1212  "r10"
+                              Name 1216  "r11"
+                              Name 1220  "r12"
+                              Name 1224  "r13"
+                              Name 1228  "r14"
+                              Name 1232  "r15"
+                              Name 1236  "r16"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -2968,49 +2969,52 @@ Shader version: 450
              119:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 112(ptr) 114(ptr) 69(ptr) 116(ptr) 118(ptr)
              132:             TypeBool
              143:             TypeInt 32 1
-             164:      8(int) Constant 7
-             172:    143(int) Constant 7
-    183(ResType):             TypeStruct 6(float) 143(int)
-             202:    6(float) Constant 1050288283
-             217:      8(int) Constant 2
-             224:    6(float) Constant 0
-             225:    6(float) Constant 1065353216
-             267:             TypeVector 143(int) 2
-             288:      8(int) Constant 3
-             289:   26(ivec2) ConstantComposite 164 288
-    317(ResType):             TypeStruct 24(fvec2) 267(ivec2)
-             322:             TypeVector 132(bool) 2
-             360:    6(float) Constant 1073741824
-             362:      8(int) Constant 1
-             363:   26(ivec2) ConstantComposite 362 217
-             398:   24(fvec2) ConstantComposite 225 360
-             412:             TypeVector 143(int) 3
-             433:      8(int) Constant 5
-             434:   38(ivec3) ConstantComposite 164 288 433
-    465(ResType):             TypeStruct 36(fvec3) 412(ivec3)
-             470:             TypeVector 132(bool) 3
-             509:   38(ivec3) ConstantComposite 362 217 288
-             544:    6(float) Constant 1077936128
-             545:   36(fvec3) ConstantComposite 225 360 544
-             559:             TypeVector 143(int) 4
-             580:   50(ivec4) ConstantComposite 164 288 433 217
-    618(ResType):             TypeStruct 48(fvec4) 559(ivec4)
-             623:             TypeVector 132(bool) 4
-             662:      8(int) Constant 4
-             663:   50(ivec4) ConstantComposite 362 217 288 662
-             698:    6(float) Constant 1082130432
-             699:   48(fvec4) ConstantComposite 225 360 544 698
-    751(ResType):             TypeStruct 60 267(ivec2)
-             815:   24(fvec2) ConstantComposite 360 360
-             816:          60 ConstantComposite 815 815
-    871(ResType):             TypeStruct 68 412(ivec3)
-             935:   36(fvec3) ConstantComposite 544 544 544
-             936:          68 ConstantComposite 935 935 935
-    994(ResType):             TypeStruct 76 559(ivec4)
-            1058:   48(fvec4) ConstantComposite 698 698 698 698
-            1059:          76 ConstantComposite 1058 1058 1058 1058
+             164:    143(int) Constant 7
+    182(ResType):             TypeStruct 6(float) 143(int)
+             201:    6(float) Constant 1050288283
+             216:    143(int) Constant 2
+             223:    6(float) Constant 0
+             224:    6(float) Constant 1065353216
+             266:             TypeVector 143(int) 2
+             287:    143(int) Constant 3
+             288:  266(ivec2) ConstantComposite 164 287
+    316(ResType):             TypeStruct 24(fvec2) 266(ivec2)
+             321:             TypeVector 132(bool) 2
+             359:    6(float) Constant 1073741824
+             361:    143(int) Constant 1
+             362:  266(ivec2) ConstantComposite 361 216
+             397:   24(fvec2) ConstantComposite 224 359
+             411:             TypeVector 143(int) 3
+             432:    143(int) Constant 5
+             433:  411(ivec3) ConstantComposite 164 287 432
+    464(ResType):             TypeStruct 36(fvec3) 411(ivec3)
+             469:             TypeVector 132(bool) 3
+             508:  411(ivec3) ConstantComposite 361 216 287
+             543:    6(float) Constant 1077936128
+             544:   36(fvec3) ConstantComposite 224 359 543
+             558:             TypeVector 143(int) 4
+             579:  558(ivec4) ConstantComposite 164 287 432 216
+             589:      8(int) Constant 1
+             595:      8(int) Constant 2
+             598:      8(int) Constant 3
+    620(ResType):             TypeStruct 48(fvec4) 558(ivec4)
+             625:             TypeVector 132(bool) 4
+             664:    143(int) Constant 4
+             665:  558(ivec4) ConstantComposite 361 216 287 664
+             700:    6(float) Constant 1082130432
+             701:   48(fvec4) ConstantComposite 224 359 543 700
+    753(ResType):             TypeStruct 60 266(ivec2)
+             817:   24(fvec2) ConstantComposite 359 359
+             818:          60 ConstantComposite 817 817
+    873(ResType):             TypeStruct 68 411(ivec3)
+             937:   36(fvec3) ConstantComposite 543 543 543
+             938:          68 ConstantComposite 937 937 937
+    996(ResType):             TypeStruct 76 558(ivec4)
+            1060:   48(fvec4) ConstantComposite 700 700 700 700
+            1061:          76 ConstantComposite 1060 1060 1060 1060
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 16(VertexShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
         11(inF0):      7(ptr) FunctionParameter
@@ -3050,98 +3054,98 @@ Shader version: 450
              161:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 160
              162:    6(float) Load 11(inF0)
              163:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 162
-             165:      8(int) BitCount 164
+             165:    143(int) BitCount 164
              166:    6(float) Load 11(inF0)
              167:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 166
              168:    6(float) Load 11(inF0)
              169:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 168
              170:    6(float) Load 11(inF0)
              171:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 170
-             173:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             174:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             175:    6(float) Load 11(inF0)
-             176:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 175
-             177:    6(float) Load 11(inF0)
-             178:    6(float) Load 12(inF1)
-             179:    6(float) FMod 177 178
-             180:    6(float) Load 11(inF0)
-             181:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 180
-             182:    6(float) Load 11(inF0)
-             184:183(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 182
-             185:    143(int) CompositeExtract 184 1
-                              Store 12(inF1) 185
-             186:    6(float) CompositeExtract 184 0
-             187:    6(float) Load 11(inF0)
-             188:   132(bool) IsInf 187
-             189:    6(float) Load 11(inF0)
-             190:   132(bool) IsNan 189
-             191:    6(float) Load 11(inF0)
-             192:    6(float) Load 12(inF1)
-             193:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 191 192
-             194:    6(float) Load 11(inF0)
-             195:    6(float) Load 12(inF1)
-             196:    6(float) Load 13(inF2)
-             197:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 196
-             198:    6(float) Load 11(inF0)
-             199:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 198
-             200:    6(float) Load 11(inF0)
-             201:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 200
-             203:    6(float) FMul 201 202
-             204:    6(float) Load 11(inF0)
-             205:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 204
-             206:    6(float) Load 11(inF0)
-             207:    6(float) Load 12(inF1)
-             208:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 206 207
-             209:    6(float) Load 11(inF0)
-             210:    6(float) Load 12(inF1)
-             211:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 209 210
-             212:    6(float) Load 11(inF0)
-             213:    6(float) Load 12(inF1)
-             214:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 212 213
-             215:    6(float) Load 11(inF0)
-             216:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 215
-             218:      8(int) BitReverse 217
-             219:    6(float) Load 11(inF0)
-             220:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 219
-             221:    6(float) Load 11(inF0)
-             222:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 221
-             223:    6(float) Load 11(inF0)
-             226:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 223 224 225
-             227:    6(float) Load 11(inF0)
-             228:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 227
-             229:    6(float) Load 11(inF0)
-             230:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 229
-             231:    6(float) Load 11(inF0)
-             232:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 231
-                              Store 12(inF1) 232
-             233:    6(float) Load 11(inF0)
-             234:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 233
-                              Store 13(inF2) 234
-             235:    6(float) Load 11(inF0)
-             236:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 235
-             237:    6(float) Load 11(inF0)
-             238:    6(float) Load 12(inF1)
-             239:    6(float) Load 13(inF2)
-             240:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 237 238 239
-             241:    6(float) Load 11(inF0)
-             242:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 241
-             243:    6(float) Load 11(inF0)
-             244:    6(float) Load 12(inF1)
-             245:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 243 244
-             246:    6(float) Load 11(inF0)
-             247:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 246
-             248:    6(float) Load 11(inF0)
-             249:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 248
-             250:    6(float) Load 11(inF0)
-             251:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 250
-                              ReturnValue 224
+             172:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             173:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             174:    6(float) Load 11(inF0)
+             175:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 174
+             176:    6(float) Load 11(inF0)
+             177:    6(float) Load 12(inF1)
+             178:    6(float) FMod 176 177
+             179:    6(float) Load 11(inF0)
+             180:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 179
+             181:    6(float) Load 11(inF0)
+             183:182(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 181
+             184:    143(int) CompositeExtract 183 1
+                              Store 12(inF1) 184
+             185:    6(float) CompositeExtract 183 0
+             186:    6(float) Load 11(inF0)
+             187:   132(bool) IsInf 186
+             188:    6(float) Load 11(inF0)
+             189:   132(bool) IsNan 188
+             190:    6(float) Load 11(inF0)
+             191:    6(float) Load 12(inF1)
+             192:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 190 191
+             193:    6(float) Load 11(inF0)
+             194:    6(float) Load 12(inF1)
+             195:    6(float) Load 13(inF2)
+             196:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 193 194 195
+             197:    6(float) Load 11(inF0)
+             198:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 197
+             199:    6(float) Load 11(inF0)
+             200:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 199
+             202:    6(float) FMul 200 201
+             203:    6(float) Load 11(inF0)
+             204:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 203
+             205:    6(float) Load 11(inF0)
+             206:    6(float) Load 12(inF1)
+             207:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 205 206
+             208:    6(float) Load 11(inF0)
+             209:    6(float) Load 12(inF1)
+             210:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 208 209
+             211:    6(float) Load 11(inF0)
+             212:    6(float) Load 12(inF1)
+             213:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 211 212
+             214:    6(float) Load 11(inF0)
+             215:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 214
+             217:    143(int) BitReverse 216
+             218:    6(float) Load 11(inF0)
+             219:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 218
+             220:    6(float) Load 11(inF0)
+             221:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 220
+             222:    6(float) Load 11(inF0)
+             225:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 222 223 224
+             226:    6(float) Load 11(inF0)
+             227:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 226
+             228:    6(float) Load 11(inF0)
+             229:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 228
+             230:    6(float) Load 11(inF0)
+             231:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 230
+                              Store 12(inF1) 231
+             232:    6(float) Load 11(inF0)
+             233:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 232
+                              Store 13(inF2) 233
+             234:    6(float) Load 11(inF0)
+             235:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 234
+             236:    6(float) Load 11(inF0)
+             237:    6(float) Load 12(inF1)
+             238:    6(float) Load 13(inF2)
+             239:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 236 237 238
+             240:    6(float) Load 11(inF0)
+             241:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 240
+             242:    6(float) Load 11(inF0)
+             243:    6(float) Load 12(inF1)
+             244:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 242 243
+             245:    6(float) Load 11(inF0)
+             246:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 245
+             247:    6(float) Load 11(inF0)
+             248:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 247
+             249:    6(float) Load 11(inF0)
+             250:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 249
+                              ReturnValue 223
                               FunctionEnd
 22(VertexShaderFunction1(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 224
+                              ReturnValue 223
                               FunctionEnd
 34(VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
         29(inF0):     25(ptr) FunctionParameter
@@ -3150,144 +3154,144 @@ Shader version: 450
         32(inU0):     27(ptr) FunctionParameter
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
-             256:   24(fvec2) Load 29(inF0)
-             257:   132(bool) All 256
-             258:   24(fvec2) Load 29(inF0)
-             259:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 258
-             260:   24(fvec2) Load 29(inF0)
-             261:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 260
-             262:   24(fvec2) Load 29(inF0)
-             263:   132(bool) Any 262
-             264:   24(fvec2) Load 29(inF0)
-             265:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 264
-             266:   24(fvec2) Load 29(inF0)
-             268:  267(ivec2) Bitcast 266
-             269:   24(fvec2) Load 29(inF0)
-             270:   26(ivec2) Bitcast 269
-             271:   26(ivec2) Load 32(inU0)
-             272:   24(fvec2) Bitcast 271
-             273:   24(fvec2) Load 29(inF0)
-             274:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 273
-             275:   24(fvec2) Load 29(inF0)
-             276:   24(fvec2) Load 30(inF1)
-             277:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 275 276
-             278:   24(fvec2) Load 29(inF0)
-             279:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 278
-             280:   24(fvec2) Load 29(inF0)
-             281:   24(fvec2) Load 30(inF1)
-             282:   24(fvec2) Load 31(inF2)
-             283:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 280 281 282
-             284:   24(fvec2) Load 29(inF0)
-             285:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 284
-             286:   24(fvec2) Load 29(inF0)
-             287:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 286
-             290:   26(ivec2) BitCount 289
-             291:   24(fvec2) Load 29(inF0)
-             292:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 291
-             293:   24(fvec2) Load 29(inF0)
-             294:   24(fvec2) Load 30(inF1)
-             295:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 293 294
-             296:   24(fvec2) Load 29(inF0)
-             297:   24(fvec2) Load 30(inF1)
-             298:    6(float) Dot 296 297
-             299:   24(fvec2) Load 29(inF0)
-             300:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 299
-             301:   24(fvec2) Load 29(inF0)
-             302:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 301
-             303:   24(fvec2) Load 29(inF0)
-             304:   24(fvec2) Load 30(inF1)
-             305:   24(fvec2) Load 31(inF2)
-             306:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 303 304 305
-             307:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             308:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             309:   24(fvec2) Load 29(inF0)
-             310:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 309
-             311:   24(fvec2) Load 29(inF0)
-             312:   24(fvec2) Load 30(inF1)
-             313:   24(fvec2) FMod 311 312
-             314:   24(fvec2) Load 29(inF0)
-             315:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 314
-             316:   24(fvec2) Load 29(inF0)
-             318:317(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 316
-             319:  267(ivec2) CompositeExtract 318 1
-                              Store 30(inF1) 319
-             320:   24(fvec2) CompositeExtract 318 0
-             321:   24(fvec2) Load 29(inF0)
-             323:  322(bvec2) IsInf 321
-             324:   24(fvec2) Load 29(inF0)
-             325:  322(bvec2) IsNan 324
-             326:   24(fvec2) Load 29(inF0)
-             327:   24(fvec2) Load 30(inF1)
-             328:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 326 327
-             329:   24(fvec2) Load 29(inF0)
-             330:   24(fvec2) Load 30(inF1)
-             331:   24(fvec2) Load 31(inF2)
-             332:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331
-             333:   24(fvec2) Load 29(inF0)
-             334:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 333
-             335:   24(fvec2) Load 29(inF0)
-             336:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 335
-             337:   24(fvec2) Load 29(inF0)
-             338:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 337
-             339:   24(fvec2) VectorTimesScalar 338 202
-             340:   24(fvec2) Load 29(inF0)
-             341:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 340
-             342:   24(fvec2) Load 29(inF0)
-             343:   24(fvec2) Load 30(inF1)
-             344:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 342 343
-             345:   24(fvec2) Load 29(inF0)
-             346:   24(fvec2) Load 30(inF1)
-             347:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 345 346
-             348:   24(fvec2) Load 29(inF0)
-             349:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 348
-             350:   24(fvec2) Load 29(inF0)
-             351:   24(fvec2) Load 30(inF1)
-             352:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 350 351
-             353:   24(fvec2) Load 29(inF0)
-             354:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 353
-             355:   24(fvec2) Load 29(inF0)
-             356:   24(fvec2) Load 30(inF1)
-             357:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 355 356
-             358:   24(fvec2) Load 29(inF0)
-             359:   24(fvec2) Load 30(inF1)
-             361:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 358 359 360
-             364:   26(ivec2) BitReverse 363
-             365:   24(fvec2) Load 29(inF0)
-             366:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 365
-             367:   24(fvec2) Load 29(inF0)
-             368:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 367
-             369:   24(fvec2) Load 29(inF0)
+             255:   24(fvec2) Load 29(inF0)
+             256:   132(bool) All 255
+             257:   24(fvec2) Load 29(inF0)
+             258:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 257
+             259:   24(fvec2) Load 29(inF0)
+             260:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 259
+             261:   24(fvec2) Load 29(inF0)
+             262:   132(bool) Any 261
+             263:   24(fvec2) Load 29(inF0)
+             264:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 263
+             265:   24(fvec2) Load 29(inF0)
+             267:  266(ivec2) Bitcast 265
+             268:   24(fvec2) Load 29(inF0)
+             269:   26(ivec2) Bitcast 268
+             270:   26(ivec2) Load 32(inU0)
+             271:   24(fvec2) Bitcast 270
+             272:   24(fvec2) Load 29(inF0)
+             273:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 272
+             274:   24(fvec2) Load 29(inF0)
+             275:   24(fvec2) Load 30(inF1)
+             276:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 274 275
+             277:   24(fvec2) Load 29(inF0)
+             278:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 277
+             279:   24(fvec2) Load 29(inF0)
+             280:   24(fvec2) Load 30(inF1)
+             281:   24(fvec2) Load 31(inF2)
+             282:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 279 280 281
+             283:   24(fvec2) Load 29(inF0)
+             284:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 283
+             285:   24(fvec2) Load 29(inF0)
+             286:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 285
+             289:  266(ivec2) BitCount 288
+             290:   24(fvec2) Load 29(inF0)
+             291:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 290
+             292:   24(fvec2) Load 29(inF0)
+             293:   24(fvec2) Load 30(inF1)
+             294:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 292 293
+             295:   24(fvec2) Load 29(inF0)
+             296:   24(fvec2) Load 30(inF1)
+             297:    6(float) Dot 295 296
+             298:   24(fvec2) Load 29(inF0)
+             299:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 298
+             300:   24(fvec2) Load 29(inF0)
+             301:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 300
+             302:   24(fvec2) Load 29(inF0)
+             303:   24(fvec2) Load 30(inF1)
+             304:   24(fvec2) Load 31(inF2)
+             305:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 302 303 304
+             306:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             307:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             308:   24(fvec2) Load 29(inF0)
+             309:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 308
+             310:   24(fvec2) Load 29(inF0)
+             311:   24(fvec2) Load 30(inF1)
+             312:   24(fvec2) FMod 310 311
+             313:   24(fvec2) Load 29(inF0)
+             314:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 313
+             315:   24(fvec2) Load 29(inF0)
+             317:316(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 315
+             318:  266(ivec2) CompositeExtract 317 1
+                              Store 30(inF1) 318
+             319:   24(fvec2) CompositeExtract 317 0
+             320:   24(fvec2) Load 29(inF0)
+             322:  321(bvec2) IsInf 320
+             323:   24(fvec2) Load 29(inF0)
+             324:  321(bvec2) IsNan 323
+             325:   24(fvec2) Load 29(inF0)
+             326:   24(fvec2) Load 30(inF1)
+             327:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 325 326
+             328:   24(fvec2) Load 29(inF0)
+             329:   24(fvec2) Load 30(inF1)
+             330:   24(fvec2) Load 31(inF2)
+             331:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 328 329 330
+             332:   24(fvec2) Load 29(inF0)
+             333:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 332
+             334:   24(fvec2) Load 29(inF0)
+             335:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 334
+             336:   24(fvec2) Load 29(inF0)
+             337:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 336
+             338:   24(fvec2) VectorTimesScalar 337 201
+             339:   24(fvec2) Load 29(inF0)
+             340:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 339
+             341:   24(fvec2) Load 29(inF0)
+             342:   24(fvec2) Load 30(inF1)
+             343:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 341 342
+             344:   24(fvec2) Load 29(inF0)
+             345:   24(fvec2) Load 30(inF1)
+             346:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 344 345
+             347:   24(fvec2) Load 29(inF0)
+             348:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 347
+             349:   24(fvec2) Load 29(inF0)
+             350:   24(fvec2) Load 30(inF1)
+             351:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 349 350
+             352:   24(fvec2) Load 29(inF0)
+             353:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 352
+             354:   24(fvec2) Load 29(inF0)
+             355:   24(fvec2) Load 30(inF1)
+             356:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 354 355
+             357:   24(fvec2) Load 29(inF0)
+             358:   24(fvec2) Load 30(inF1)
+             360:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 357 358 359
+             363:  266(ivec2) BitReverse 362
+             364:   24(fvec2) Load 29(inF0)
+             365:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 364
+             366:   24(fvec2) Load 29(inF0)
+             367:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 366
+             368:   24(fvec2) Load 29(inF0)
+             369:   24(fvec2) CompositeConstruct 223 223
              370:   24(fvec2) CompositeConstruct 224 224
-             371:   24(fvec2) CompositeConstruct 225 225
-             372:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371
-             373:   24(fvec2) Load 29(inF0)
-             374:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 373
-             375:   24(fvec2) Load 29(inF0)
-             376:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 375
-             377:   24(fvec2) Load 29(inF0)
-             378:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 377
-                              Store 30(inF1) 378
-             379:   24(fvec2) Load 29(inF0)
-             380:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 379
-                              Store 31(inF2) 380
-             381:   24(fvec2) Load 29(inF0)
-             382:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 381
-             383:   24(fvec2) Load 29(inF0)
-             384:   24(fvec2) Load 30(inF1)
-             385:   24(fvec2) Load 31(inF2)
-             386:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 383 384 385
-             387:   24(fvec2) Load 29(inF0)
-             388:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 387
-             389:   24(fvec2) Load 29(inF0)
-             390:   24(fvec2) Load 30(inF1)
-             391:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 389 390
-             392:   24(fvec2) Load 29(inF0)
-             393:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 392
-             394:   24(fvec2) Load 29(inF0)
-             395:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 394
-             396:   24(fvec2) Load 29(inF0)
-             397:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 396
-                              ReturnValue 398
+             371:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 368 369 370
+             372:   24(fvec2) Load 29(inF0)
+             373:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 372
+             374:   24(fvec2) Load 29(inF0)
+             375:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 374
+             376:   24(fvec2) Load 29(inF0)
+             377:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 376
+                              Store 30(inF1) 377
+             378:   24(fvec2) Load 29(inF0)
+             379:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 378
+                              Store 31(inF2) 379
+             380:   24(fvec2) Load 29(inF0)
+             381:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 380
+             382:   24(fvec2) Load 29(inF0)
+             383:   24(fvec2) Load 30(inF1)
+             384:   24(fvec2) Load 31(inF2)
+             385:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 382 383 384
+             386:   24(fvec2) Load 29(inF0)
+             387:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 386
+             388:   24(fvec2) Load 29(inF0)
+             389:   24(fvec2) Load 30(inF1)
+             390:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 388 389
+             391:   24(fvec2) Load 29(inF0)
+             392:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 391
+             393:   24(fvec2) Load 29(inF0)
+             394:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 393
+             395:   24(fvec2) Load 29(inF0)
+             396:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 395
+                              ReturnValue 397
                               FunctionEnd
 46(VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -3296,147 +3300,147 @@ Shader version: 450
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-             401:   36(fvec3) Load 41(inF0)
-             402:   132(bool) All 401
-             403:   36(fvec3) Load 41(inF0)
-             404:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 403
-             405:   36(fvec3) Load 41(inF0)
-             406:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 405
-             407:   36(fvec3) Load 41(inF0)
-             408:   132(bool) Any 407
-             409:   36(fvec3) Load 41(inF0)
-             410:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 409
-             411:   36(fvec3) Load 41(inF0)
-             413:  412(ivec3) Bitcast 411
-             414:   36(fvec3) Load 41(inF0)
-             415:   38(ivec3) Bitcast 414
-             416:   38(ivec3) Load 44(inU0)
-             417:   36(fvec3) Bitcast 416
-             418:   36(fvec3) Load 41(inF0)
-             419:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 418
-             420:   36(fvec3) Load 41(inF0)
-             421:   36(fvec3) Load 42(inF1)
-             422:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 420 421
-             423:   36(fvec3) Load 41(inF0)
-             424:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 423
-             425:   36(fvec3) Load 41(inF0)
-             426:   36(fvec3) Load 42(inF1)
-             427:   36(fvec3) Load 43(inF2)
-             428:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 425 426 427
-             429:   36(fvec3) Load 41(inF0)
-             430:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 429
-             431:   36(fvec3) Load 41(inF0)
-             432:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 431
-             435:   38(ivec3) BitCount 434
-             436:   36(fvec3) Load 41(inF0)
-             437:   36(fvec3) Load 42(inF1)
-             438:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 436 437
-             439:   36(fvec3) Load 41(inF0)
-             440:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 439
-             441:   36(fvec3) Load 41(inF0)
-             442:   36(fvec3) Load 42(inF1)
-             443:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 441 442
-             444:   36(fvec3) Load 41(inF0)
-             445:   36(fvec3) Load 42(inF1)
-             446:    6(float) Dot 444 445
-             447:   36(fvec3) Load 41(inF0)
-             448:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 447
-             449:   36(fvec3) Load 41(inF0)
-             450:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 449
-             451:   36(fvec3) Load 41(inF0)
-             452:   36(fvec3) Load 42(inF1)
-             453:   36(fvec3) Load 43(inF2)
-             454:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 451 452 453
-             455:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             456:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             457:   36(fvec3) Load 41(inF0)
-             458:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 457
-             459:   36(fvec3) Load 41(inF0)
-             460:   36(fvec3) Load 42(inF1)
-             461:   36(fvec3) FMod 459 460
-             462:   36(fvec3) Load 41(inF0)
-             463:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 462
-             464:   36(fvec3) Load 41(inF0)
-             466:465(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 464
-             467:  412(ivec3) CompositeExtract 466 1
-                              Store 42(inF1) 467
-             468:   36(fvec3) CompositeExtract 466 0
-             469:   36(fvec3) Load 41(inF0)
-             471:  470(bvec3) IsInf 469
-             472:   36(fvec3) Load 41(inF0)
-             473:  470(bvec3) IsNan 472
-             474:   36(fvec3) Load 41(inF0)
-             475:   36(fvec3) Load 42(inF1)
-             476:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 474 475
-             477:   36(fvec3) Load 41(inF0)
-             478:   36(fvec3) Load 42(inF1)
-             479:   36(fvec3) Load 43(inF2)
-             480:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 477 478 479
-             481:   36(fvec3) Load 41(inF0)
-             482:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 481
-             483:   36(fvec3) Load 41(inF0)
-             484:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 483
-             485:   36(fvec3) Load 41(inF0)
-             486:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 485
-             487:   36(fvec3) VectorTimesScalar 486 202
-             488:   36(fvec3) Load 41(inF0)
-             489:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 488
-             490:   36(fvec3) Load 41(inF0)
-             491:   36(fvec3) Load 42(inF1)
-             492:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 490 491
-             493:   36(fvec3) Load 41(inF0)
-             494:   36(fvec3) Load 42(inF1)
-             495:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 493 494
-             496:   36(fvec3) Load 41(inF0)
-             497:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 496
-             498:   36(fvec3) Load 41(inF0)
-             499:   36(fvec3) Load 42(inF1)
-             500:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 498 499
-             501:   36(fvec3) Load 41(inF0)
-             502:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 501
-             503:   36(fvec3) Load 41(inF0)
-             504:   36(fvec3) Load 42(inF1)
-             505:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 503 504
-             506:   36(fvec3) Load 41(inF0)
-             507:   36(fvec3) Load 42(inF1)
-             508:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 506 507 360
-             510:   38(ivec3) BitReverse 509
-             511:   36(fvec3) Load 41(inF0)
-             512:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 511
-             513:   36(fvec3) Load 41(inF0)
-             514:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 513
-             515:   36(fvec3) Load 41(inF0)
+             400:   36(fvec3) Load 41(inF0)
+             401:   132(bool) All 400
+             402:   36(fvec3) Load 41(inF0)
+             403:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 402
+             404:   36(fvec3) Load 41(inF0)
+             405:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 404
+             406:   36(fvec3) Load 41(inF0)
+             407:   132(bool) Any 406
+             408:   36(fvec3) Load 41(inF0)
+             409:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 408
+             410:   36(fvec3) Load 41(inF0)
+             412:  411(ivec3) Bitcast 410
+             413:   36(fvec3) Load 41(inF0)
+             414:   38(ivec3) Bitcast 413
+             415:   38(ivec3) Load 44(inU0)
+             416:   36(fvec3) Bitcast 415
+             417:   36(fvec3) Load 41(inF0)
+             418:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 417
+             419:   36(fvec3) Load 41(inF0)
+             420:   36(fvec3) Load 42(inF1)
+             421:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 419 420
+             422:   36(fvec3) Load 41(inF0)
+             423:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 422
+             424:   36(fvec3) Load 41(inF0)
+             425:   36(fvec3) Load 42(inF1)
+             426:   36(fvec3) Load 43(inF2)
+             427:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 424 425 426
+             428:   36(fvec3) Load 41(inF0)
+             429:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 428
+             430:   36(fvec3) Load 41(inF0)
+             431:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 430
+             434:  411(ivec3) BitCount 433
+             435:   36(fvec3) Load 41(inF0)
+             436:   36(fvec3) Load 42(inF1)
+             437:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 435 436
+             438:   36(fvec3) Load 41(inF0)
+             439:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 438
+             440:   36(fvec3) Load 41(inF0)
+             441:   36(fvec3) Load 42(inF1)
+             442:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 440 441
+             443:   36(fvec3) Load 41(inF0)
+             444:   36(fvec3) Load 42(inF1)
+             445:    6(float) Dot 443 444
+             446:   36(fvec3) Load 41(inF0)
+             447:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 446
+             448:   36(fvec3) Load 41(inF0)
+             449:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 448
+             450:   36(fvec3) Load 41(inF0)
+             451:   36(fvec3) Load 42(inF1)
+             452:   36(fvec3) Load 43(inF2)
+             453:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 450 451 452
+             454:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             455:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
+             456:   36(fvec3) Load 41(inF0)
+             457:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 456
+             458:   36(fvec3) Load 41(inF0)
+             459:   36(fvec3) Load 42(inF1)
+             460:   36(fvec3) FMod 458 459
+             461:   36(fvec3) Load 41(inF0)
+             462:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 461
+             463:   36(fvec3) Load 41(inF0)
+             465:464(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 463
+             466:  411(ivec3) CompositeExtract 465 1
+                              Store 42(inF1) 466
+             467:   36(fvec3) CompositeExtract 465 0
+             468:   36(fvec3) Load 41(inF0)
+             470:  469(bvec3) IsInf 468
+             471:   36(fvec3) Load 41(inF0)
+             472:  469(bvec3) IsNan 471
+             473:   36(fvec3) Load 41(inF0)
+             474:   36(fvec3) Load 42(inF1)
+             475:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 473 474
+             476:   36(fvec3) Load 41(inF0)
+             477:   36(fvec3) Load 42(inF1)
+             478:   36(fvec3) Load 43(inF2)
+             479:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 476 477 478
+             480:   36(fvec3) Load 41(inF0)
+             481:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 480
+             482:   36(fvec3) Load 41(inF0)
+             483:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 482
+             484:   36(fvec3) Load 41(inF0)
+             485:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 484
+             486:   36(fvec3) VectorTimesScalar 485 201
+             487:   36(fvec3) Load 41(inF0)
+             488:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 487
+             489:   36(fvec3) Load 41(inF0)
+             490:   36(fvec3) Load 42(inF1)
+             491:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 489 490
+             492:   36(fvec3) Load 41(inF0)
+             493:   36(fvec3) Load 42(inF1)
+             494:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 492 493
+             495:   36(fvec3) Load 41(inF0)
+             496:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 495
+             497:   36(fvec3) Load 41(inF0)
+             498:   36(fvec3) Load 42(inF1)
+             499:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 497 498
+             500:   36(fvec3) Load 41(inF0)
+             501:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 500
+             502:   36(fvec3) Load 41(inF0)
+             503:   36(fvec3) Load 42(inF1)
+             504:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 502 503
+             505:   36(fvec3) Load 41(inF0)
+             506:   36(fvec3) Load 42(inF1)
+             507:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 505 506 359
+             509:  411(ivec3) BitReverse 508
+             510:   36(fvec3) Load 41(inF0)
+             511:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 510
+             512:   36(fvec3) Load 41(inF0)
+             513:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 512
+             514:   36(fvec3) Load 41(inF0)
+             515:   36(fvec3) CompositeConstruct 223 223 223
              516:   36(fvec3) CompositeConstruct 224 224 224
-             517:   36(fvec3) CompositeConstruct 225 225 225
-             518:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 515 516 517
-             519:   36(fvec3) Load 41(inF0)
-             520:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 519
-             521:   36(fvec3) Load 41(inF0)
-             522:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 521
-             523:   36(fvec3) Load 41(inF0)
-             524:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 523
-                              Store 42(inF1) 524
-             525:   36(fvec3) Load 41(inF0)
-             526:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 525
-                              Store 43(inF2) 526
-             527:   36(fvec3) Load 41(inF0)
-             528:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 527
-             529:   36(fvec3) Load 41(inF0)
-             530:   36(fvec3) Load 42(inF1)
-             531:   36(fvec3) Load 43(inF2)
-             532:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 529 530 531
-             533:   36(fvec3) Load 41(inF0)
-             534:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 533
-             535:   36(fvec3) Load 41(inF0)
-             536:   36(fvec3) Load 42(inF1)
-             537:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 535 536
-             538:   36(fvec3) Load 41(inF0)
-             539:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 538
-             540:   36(fvec3) Load 41(inF0)
-             541:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 540
-             542:   36(fvec3) Load 41(inF0)
-             543:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 542
-                              ReturnValue 545
+             517:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 514 515 516
+             518:   36(fvec3) Load 41(inF0)
+             519:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 518
+             520:   36(fvec3) Load 41(inF0)
+             521:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 520
+             522:   36(fvec3) Load 41(inF0)
+             523:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 522
+                              Store 42(inF1) 523
+             524:   36(fvec3) Load 41(inF0)
+             525:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 524
+                              Store 43(inF2) 525
+             526:   36(fvec3) Load 41(inF0)
+             527:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 526
+             528:   36(fvec3) Load 41(inF0)
+             529:   36(fvec3) Load 42(inF1)
+             530:   36(fvec3) Load 43(inF2)
+             531:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 528 529 530
+             532:   36(fvec3) Load 41(inF0)
+             533:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 532
+             534:   36(fvec3) Load 41(inF0)
+             535:   36(fvec3) Load 42(inF1)
+             536:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 534 535
+             537:   36(fvec3) Load 41(inF0)
+             538:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 537
+             539:   36(fvec3) Load 41(inF0)
+             540:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 539
+             541:   36(fvec3) Load 41(inF0)
+             542:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 541
+                              ReturnValue 544
                               FunctionEnd
 58(VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -3445,529 +3449,529 @@ Shader version: 450
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-             548:   48(fvec4) Load 53(inF0)
-             549:   132(bool) All 548
-             550:   48(fvec4) Load 53(inF0)
-             551:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 550
-             552:   48(fvec4) Load 53(inF0)
-             553:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 552
-             554:   48(fvec4) Load 53(inF0)
-             555:   132(bool) Any 554
-             556:   48(fvec4) Load 53(inF0)
-             557:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 556
-             558:   48(fvec4) Load 53(inF0)
-             560:  559(ivec4) Bitcast 558
-             561:   48(fvec4) Load 53(inF0)
-             562:   50(ivec4) Bitcast 561
-             563:   50(ivec4) Load 56(inU0)
-             564:   48(fvec4) Bitcast 563
-             565:   48(fvec4) Load 53(inF0)
-             566:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 565
-             567:   48(fvec4) Load 53(inF0)
-             568:   48(fvec4) Load 54(inF1)
-             569:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 567 568
-             570:   48(fvec4) Load 53(inF0)
-             571:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 570
-             572:   48(fvec4) Load 53(inF0)
-             573:   48(fvec4) Load 54(inF1)
-             574:   48(fvec4) Load 55(inF2)
-             575:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 572 573 574
-             576:   48(fvec4) Load 53(inF0)
-             577:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 576
-             578:   48(fvec4) Load 53(inF0)
-             579:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 578
-             581:   50(ivec4) BitCount 580
-             582:   48(fvec4) Load 53(inF0)
-             583:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 582
-             584:   48(fvec4) Load 53(inF0)
-             585:   48(fvec4) Load 54(inF1)
-             586:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 584 585
-             587:   48(fvec4) Load 53(inF0)
-             588:   48(fvec4) Load 54(inF1)
-             589:    6(float) Dot 587 588
-             590:      7(ptr) AccessChain 53(inF0) 362
+             547:   48(fvec4) Load 53(inF0)
+             548:   132(bool) All 547
+             549:   48(fvec4) Load 53(inF0)
+             550:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 549
+             551:   48(fvec4) Load 53(inF0)
+             552:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 551
+             553:   48(fvec4) Load 53(inF0)
+             554:   132(bool) Any 553
+             555:   48(fvec4) Load 53(inF0)
+             556:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 555
+             557:   48(fvec4) Load 53(inF0)
+             559:  558(ivec4) Bitcast 557
+             560:   48(fvec4) Load 53(inF0)
+             561:   50(ivec4) Bitcast 560
+             562:   50(ivec4) Load 56(inU0)
+             563:   48(fvec4) Bitcast 562
+             564:   48(fvec4) Load 53(inF0)
+             565:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 564
+             566:   48(fvec4) Load 53(inF0)
+             567:   48(fvec4) Load 54(inF1)
+             568:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 566 567
+             569:   48(fvec4) Load 53(inF0)
+             570:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 569
+             571:   48(fvec4) Load 53(inF0)
+             572:   48(fvec4) Load 54(inF1)
+             573:   48(fvec4) Load 55(inF2)
+             574:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 571 572 573
+             575:   48(fvec4) Load 53(inF0)
+             576:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 575
+             577:   48(fvec4) Load 53(inF0)
+             578:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 577
+             580:  558(ivec4) BitCount 579
+             581:   48(fvec4) Load 53(inF0)
+             582:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 581
+             583:   48(fvec4) Load 53(inF0)
+             584:   48(fvec4) Load 54(inF1)
+             585:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 583 584
+             586:   48(fvec4) Load 53(inF0)
+             587:   48(fvec4) Load 54(inF1)
+             588:    6(float) Dot 586 587
+             590:      7(ptr) AccessChain 53(inF0) 589
              591:    6(float) Load 590
-             592:      7(ptr) AccessChain 54(inF1) 362
+             592:      7(ptr) AccessChain 54(inF1) 589
              593:    6(float) Load 592
              594:    6(float) FMul 591 593
-             595:      7(ptr) AccessChain 53(inF0) 217
-             596:    6(float) Load 595
-             597:      7(ptr) AccessChain 54(inF1) 288
-             598:    6(float) Load 597
-             599:   48(fvec4) CompositeConstruct 225 594 596 598
-             600:   48(fvec4) Load 53(inF0)
-             601:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 600
+             596:      7(ptr) AccessChain 53(inF0) 595
+             597:    6(float) Load 596
+             599:      7(ptr) AccessChain 54(inF1) 598
+             600:    6(float) Load 599
+             601:   48(fvec4) CompositeConstruct 224 594 597 600
              602:   48(fvec4) Load 53(inF0)
-             603:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 602
+             603:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 602
              604:   48(fvec4) Load 53(inF0)
-             605:   48(fvec4) Load 54(inF1)
-             606:   48(fvec4) Load 55(inF2)
-             607:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 604 605 606
-             608:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             609:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             610:   48(fvec4) Load 53(inF0)
-             611:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 610
+             605:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 604
+             606:   48(fvec4) Load 53(inF0)
+             607:   48(fvec4) Load 54(inF1)
+             608:   48(fvec4) Load 55(inF2)
+             609:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 606 607 608
+             610:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             611:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              612:   48(fvec4) Load 53(inF0)
-             613:   48(fvec4) Load 54(inF1)
-             614:   48(fvec4) FMod 612 613
-             615:   48(fvec4) Load 53(inF0)
-             616:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 615
+             613:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 612
+             614:   48(fvec4) Load 53(inF0)
+             615:   48(fvec4) Load 54(inF1)
+             616:   48(fvec4) FMod 614 615
              617:   48(fvec4) Load 53(inF0)
-             619:618(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 617
-             620:  559(ivec4) CompositeExtract 619 1
-                              Store 54(inF1) 620
-             621:   48(fvec4) CompositeExtract 619 0
-             622:   48(fvec4) Load 53(inF0)
-             624:  623(bvec4) IsInf 622
-             625:   48(fvec4) Load 53(inF0)
-             626:  623(bvec4) IsNan 625
+             618:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 617
+             619:   48(fvec4) Load 53(inF0)
+             621:620(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 619
+             622:  558(ivec4) CompositeExtract 621 1
+                              Store 54(inF1) 622
+             623:   48(fvec4) CompositeExtract 621 0
+             624:   48(fvec4) Load 53(inF0)
+             626:  625(bvec4) IsInf 624
              627:   48(fvec4) Load 53(inF0)
-             628:   48(fvec4) Load 54(inF1)
-             629:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 627 628
-             630:   48(fvec4) Load 53(inF0)
-             631:   48(fvec4) Load 54(inF1)
-             632:   48(fvec4) Load 55(inF2)
-             633:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 630 631 632
-             634:   48(fvec4) Load 53(inF0)
-             635:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 634
+             628:  625(bvec4) IsNan 627
+             629:   48(fvec4) Load 53(inF0)
+             630:   48(fvec4) Load 54(inF1)
+             631:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 629 630
+             632:   48(fvec4) Load 53(inF0)
+             633:   48(fvec4) Load 54(inF1)
+             634:   48(fvec4) Load 55(inF2)
+             635:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 632 633 634
              636:   48(fvec4) Load 53(inF0)
-             637:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 636
+             637:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 636
              638:   48(fvec4) Load 53(inF0)
-             639:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 638
-             640:   48(fvec4) VectorTimesScalar 639 202
-             641:   48(fvec4) Load 53(inF0)
-             642:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 641
+             639:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 638
+             640:   48(fvec4) Load 53(inF0)
+             641:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 640
+             642:   48(fvec4) VectorTimesScalar 641 201
              643:   48(fvec4) Load 53(inF0)
-             644:   48(fvec4) Load 54(inF1)
-             645:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 643 644
-             646:   48(fvec4) Load 53(inF0)
-             647:   48(fvec4) Load 54(inF1)
-             648:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 646 647
-             649:   48(fvec4) Load 53(inF0)
-             650:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 649
+             644:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 643
+             645:   48(fvec4) Load 53(inF0)
+             646:   48(fvec4) Load 54(inF1)
+             647:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 645 646
+             648:   48(fvec4) Load 53(inF0)
+             649:   48(fvec4) Load 54(inF1)
+             650:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 648 649
              651:   48(fvec4) Load 53(inF0)
-             652:   48(fvec4) Load 54(inF1)
-             653:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 651 652
-             654:   48(fvec4) Load 53(inF0)
-             655:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 654
+             652:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 651
+             653:   48(fvec4) Load 53(inF0)
+             654:   48(fvec4) Load 54(inF1)
+             655:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 653 654
              656:   48(fvec4) Load 53(inF0)
-             657:   48(fvec4) Load 54(inF1)
-             658:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 656 657
-             659:   48(fvec4) Load 53(inF0)
-             660:   48(fvec4) Load 54(inF1)
-             661:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 659 660 360
-             664:   50(ivec4) BitReverse 663
-             665:   48(fvec4) Load 53(inF0)
-             666:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 665
+             657:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 656
+             658:   48(fvec4) Load 53(inF0)
+             659:   48(fvec4) Load 54(inF1)
+             660:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 658 659
+             661:   48(fvec4) Load 53(inF0)
+             662:   48(fvec4) Load 54(inF1)
+             663:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 661 662 359
+             666:  558(ivec4) BitReverse 665
              667:   48(fvec4) Load 53(inF0)
-             668:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 667
+             668:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 667
              669:   48(fvec4) Load 53(inF0)
-             670:   48(fvec4) CompositeConstruct 224 224 224 224
-             671:   48(fvec4) CompositeConstruct 225 225 225 225
-             672:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 669 670 671
-             673:   48(fvec4) Load 53(inF0)
-             674:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 673
+             670:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 669
+             671:   48(fvec4) Load 53(inF0)
+             672:   48(fvec4) CompositeConstruct 223 223 223 223
+             673:   48(fvec4) CompositeConstruct 224 224 224 224
+             674:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 671 672 673
              675:   48(fvec4) Load 53(inF0)
-             676:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 675
+             676:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 675
              677:   48(fvec4) Load 53(inF0)
              678:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 677
-                              Store 54(inF1) 678
              679:   48(fvec4) Load 53(inF0)
-             680:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 679
-                              Store 55(inF2) 680
+             680:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 679
+                              Store 54(inF1) 680
              681:   48(fvec4) Load 53(inF0)
-             682:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 681
+             682:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 681
+                              Store 55(inF2) 682
              683:   48(fvec4) Load 53(inF0)
-             684:   48(fvec4) Load 54(inF1)
-             685:   48(fvec4) Load 55(inF2)
-             686:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 683 684 685
-             687:   48(fvec4) Load 53(inF0)
-             688:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 687
+             684:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 683
+             685:   48(fvec4) Load 53(inF0)
+             686:   48(fvec4) Load 54(inF1)
+             687:   48(fvec4) Load 55(inF2)
+             688:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 685 686 687
              689:   48(fvec4) Load 53(inF0)
-             690:   48(fvec4) Load 54(inF1)
-             691:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 689 690
-             692:   48(fvec4) Load 53(inF0)
-             693:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 692
+             690:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 689
+             691:   48(fvec4) Load 53(inF0)
+             692:   48(fvec4) Load 54(inF1)
+             693:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 691 692
              694:   48(fvec4) Load 53(inF0)
-             695:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 694
+             695:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 694
              696:   48(fvec4) Load 53(inF0)
-             697:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 696
-                              ReturnValue 699
+             697:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 696
+             698:   48(fvec4) Load 53(inF0)
+             699:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 698
+                              ReturnValue 701
                               FunctionEnd
 66(VertexShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
         63(inF0):     61(ptr) FunctionParameter
         64(inF1):     61(ptr) FunctionParameter
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
-             702:          60 Load 63(inF0)
-             703:   132(bool) All 702
              704:          60 Load 63(inF0)
-             705:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 704
+             705:   132(bool) All 704
              706:          60 Load 63(inF0)
-             707:          60 ExtInst 1(GLSL.std.450) 17(Acos) 706
+             707:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 706
              708:          60 Load 63(inF0)
-             709:   132(bool) Any 708
+             709:          60 ExtInst 1(GLSL.std.450) 17(Acos) 708
              710:          60 Load 63(inF0)
-             711:          60 ExtInst 1(GLSL.std.450) 16(Asin) 710
+             711:   132(bool) Any 710
              712:          60 Load 63(inF0)
-             713:          60 ExtInst 1(GLSL.std.450) 18(Atan) 712
+             713:          60 ExtInst 1(GLSL.std.450) 16(Asin) 712
              714:          60 Load 63(inF0)
-             715:          60 Load 64(inF1)
-             716:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 714 715
-             717:          60 Load 63(inF0)
-             718:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 717
+             715:          60 ExtInst 1(GLSL.std.450) 18(Atan) 714
+             716:          60 Load 63(inF0)
+             717:          60 Load 64(inF1)
+             718:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 716 717
              719:          60 Load 63(inF0)
-             720:          60 Load 64(inF1)
-             721:          60 Load 65(inF2)
-             722:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 719 720 721
-             723:          60 Load 63(inF0)
-             724:          60 ExtInst 1(GLSL.std.450) 14(Cos) 723
+             720:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 719
+             721:          60 Load 63(inF0)
+             722:          60 Load 64(inF1)
+             723:          60 Load 65(inF2)
+             724:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 721 722 723
              725:          60 Load 63(inF0)
-             726:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 725
+             726:          60 ExtInst 1(GLSL.std.450) 14(Cos) 725
              727:          60 Load 63(inF0)
-             728:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 727
+             728:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 727
              729:          60 Load 63(inF0)
-             730:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 729
+             730:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 729
              731:          60 Load 63(inF0)
-             732:          60 ExtInst 1(GLSL.std.450) 27(Exp) 731
+             732:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 731
              733:          60 Load 63(inF0)
-             734:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 733
-             735:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             736:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             737:          60 Load 63(inF0)
-             738:          60 ExtInst 1(GLSL.std.450) 8(Floor) 737
+             734:          60 ExtInst 1(GLSL.std.450) 27(Exp) 733
+             735:          60 Load 63(inF0)
+             736:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 735
+             737:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             738:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              739:          60 Load 63(inF0)
-             740:          60 Load 64(inF1)
-             741:   24(fvec2) CompositeExtract 739 0
-             742:   24(fvec2) CompositeExtract 740 0
-             743:   24(fvec2) FMod 741 742
-             744:   24(fvec2) CompositeExtract 739 1
-             745:   24(fvec2) CompositeExtract 740 1
-             746:   24(fvec2) FMod 744 745
-             747:          60 CompositeConstruct 743 746
-             748:          60 Load 63(inF0)
-             749:          60 ExtInst 1(GLSL.std.450) 10(Fract) 748
+             740:          60 ExtInst 1(GLSL.std.450) 8(Floor) 739
+             741:          60 Load 63(inF0)
+             742:          60 Load 64(inF1)
+             743:   24(fvec2) CompositeExtract 741 0
+             744:   24(fvec2) CompositeExtract 742 0
+             745:   24(fvec2) FMod 743 744
+             746:   24(fvec2) CompositeExtract 741 1
+             747:   24(fvec2) CompositeExtract 742 1
+             748:   24(fvec2) FMod 746 747
+             749:          60 CompositeConstruct 745 748
              750:          60 Load 63(inF0)
-             752:751(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 750
-             753:  267(ivec2) CompositeExtract 752 1
-                              Store 64(inF1) 753
-             754:          60 CompositeExtract 752 0
-             755:          60 Load 63(inF0)
-             756:          60 Load 64(inF1)
-             757:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 755 756
-             758:          60 Load 63(inF0)
-             759:          60 Load 64(inF1)
-             760:          60 Load 65(inF2)
-             761:          60 ExtInst 1(GLSL.std.450) 46(FMix) 758 759 760
-             762:          60 Load 63(inF0)
-             763:          60 ExtInst 1(GLSL.std.450) 28(Log) 762
+             751:          60 ExtInst 1(GLSL.std.450) 10(Fract) 750
+             752:          60 Load 63(inF0)
+             754:753(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 752
+             755:  266(ivec2) CompositeExtract 754 1
+                              Store 64(inF1) 755
+             756:          60 CompositeExtract 754 0
+             757:          60 Load 63(inF0)
+             758:          60 Load 64(inF1)
+             759:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 757 758
+             760:          60 Load 63(inF0)
+             761:          60 Load 64(inF1)
+             762:          60 Load 65(inF2)
+             763:          60 ExtInst 1(GLSL.std.450) 46(FMix) 760 761 762
              764:          60 Load 63(inF0)
-             765:          60 ExtInst 1(GLSL.std.450) 30(Log2) 764
-             766:          60 MatrixTimesScalar 765 202
-             767:          60 Load 63(inF0)
-             768:          60 ExtInst 1(GLSL.std.450) 30(Log2) 767
+             765:          60 ExtInst 1(GLSL.std.450) 28(Log) 764
+             766:          60 Load 63(inF0)
+             767:          60 ExtInst 1(GLSL.std.450) 30(Log2) 766
+             768:          60 MatrixTimesScalar 767 201
              769:          60 Load 63(inF0)
-             770:          60 Load 64(inF1)
-             771:          60 ExtInst 1(GLSL.std.450) 40(FMax) 769 770
-             772:          60 Load 63(inF0)
-             773:          60 Load 64(inF1)
-             774:          60 ExtInst 1(GLSL.std.450) 37(FMin) 772 773
-             775:          60 Load 63(inF0)
-             776:          60 Load 64(inF1)
-             777:          60 ExtInst 1(GLSL.std.450) 26(Pow) 775 776
-             778:          60 Load 63(inF0)
-             779:          60 ExtInst 1(GLSL.std.450) 11(Radians) 778
+             770:          60 ExtInst 1(GLSL.std.450) 30(Log2) 769
+             771:          60 Load 63(inF0)
+             772:          60 Load 64(inF1)
+             773:          60 ExtInst 1(GLSL.std.450) 40(FMax) 771 772
+             774:          60 Load 63(inF0)
+             775:          60 Load 64(inF1)
+             776:          60 ExtInst 1(GLSL.std.450) 37(FMin) 774 775
+             777:          60 Load 63(inF0)
+             778:          60 Load 64(inF1)
+             779:          60 ExtInst 1(GLSL.std.450) 26(Pow) 777 778
              780:          60 Load 63(inF0)
-             781:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 780
+             781:          60 ExtInst 1(GLSL.std.450) 11(Radians) 780
              782:          60 Load 63(inF0)
-             783:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 782
+             783:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 782
              784:          60 Load 63(inF0)
-             785:   24(fvec2) CompositeConstruct 224 224
-             786:   24(fvec2) CompositeConstruct 225 225
-             787:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 784 785 786
-             788:          60 Load 63(inF0)
-             789:          60 ExtInst 1(GLSL.std.450) 6(FSign) 788
+             785:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 784
+             786:          60 Load 63(inF0)
+             787:   24(fvec2) CompositeConstruct 223 223
+             788:   24(fvec2) CompositeConstruct 224 224
+             789:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 786 787 788
              790:          60 Load 63(inF0)
-             791:          60 ExtInst 1(GLSL.std.450) 13(Sin) 790
+             791:          60 ExtInst 1(GLSL.std.450) 6(FSign) 790
              792:          60 Load 63(inF0)
              793:          60 ExtInst 1(GLSL.std.450) 13(Sin) 792
-                              Store 64(inF1) 793
              794:          60 Load 63(inF0)
-             795:          60 ExtInst 1(GLSL.std.450) 14(Cos) 794
-                              Store 65(inF2) 795
+             795:          60 ExtInst 1(GLSL.std.450) 13(Sin) 794
+                              Store 64(inF1) 795
              796:          60 Load 63(inF0)
-             797:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 796
+             797:          60 ExtInst 1(GLSL.std.450) 14(Cos) 796
+                              Store 65(inF2) 797
              798:          60 Load 63(inF0)
-             799:          60 Load 64(inF1)
-             800:          60 Load 65(inF2)
-             801:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 798 799 800
-             802:          60 Load 63(inF0)
-             803:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 802
+             799:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 798
+             800:          60 Load 63(inF0)
+             801:          60 Load 64(inF1)
+             802:          60 Load 65(inF2)
+             803:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 800 801 802
              804:          60 Load 63(inF0)
-             805:          60 Load 64(inF1)
-             806:          60 ExtInst 1(GLSL.std.450) 48(Step) 804 805
-             807:          60 Load 63(inF0)
-             808:          60 ExtInst 1(GLSL.std.450) 15(Tan) 807
+             805:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 804
+             806:          60 Load 63(inF0)
+             807:          60 Load 64(inF1)
+             808:          60 ExtInst 1(GLSL.std.450) 48(Step) 806 807
              809:          60 Load 63(inF0)
-             810:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 809
+             810:          60 ExtInst 1(GLSL.std.450) 15(Tan) 809
              811:          60 Load 63(inF0)
-             812:          60 Transpose 811
+             812:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 811
              813:          60 Load 63(inF0)
-             814:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 813
-                              ReturnValue 816
+             814:          60 Transpose 813
+             815:          60 Load 63(inF0)
+             816:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 815
+                              ReturnValue 818
                               FunctionEnd
 74(VertexShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
         71(inF0):     69(ptr) FunctionParameter
         72(inF1):     69(ptr) FunctionParameter
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
-             819:          68 Load 71(inF0)
-             820:   132(bool) All 819
              821:          68 Load 71(inF0)
-             822:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 821
+             822:   132(bool) All 821
              823:          68 Load 71(inF0)
-             824:          68 ExtInst 1(GLSL.std.450) 17(Acos) 823
+             824:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 823
              825:          68 Load 71(inF0)
-             826:   132(bool) Any 825
+             826:          68 ExtInst 1(GLSL.std.450) 17(Acos) 825
              827:          68 Load 71(inF0)
-             828:          68 ExtInst 1(GLSL.std.450) 16(Asin) 827
+             828:   132(bool) Any 827
              829:          68 Load 71(inF0)
-             830:          68 ExtInst 1(GLSL.std.450) 18(Atan) 829
+             830:          68 ExtInst 1(GLSL.std.450) 16(Asin) 829
              831:          68 Load 71(inF0)
-             832:          68 Load 72(inF1)
-             833:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 831 832
-             834:          68 Load 71(inF0)
-             835:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 834
+             832:          68 ExtInst 1(GLSL.std.450) 18(Atan) 831
+             833:          68 Load 71(inF0)
+             834:          68 Load 72(inF1)
+             835:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 833 834
              836:          68 Load 71(inF0)
-             837:          68 Load 72(inF1)
-             838:          68 Load 73(inF2)
-             839:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 836 837 838
-             840:          68 Load 71(inF0)
-             841:          68 ExtInst 1(GLSL.std.450) 14(Cos) 840
+             837:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 836
+             838:          68 Load 71(inF0)
+             839:          68 Load 72(inF1)
+             840:          68 Load 73(inF2)
+             841:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 838 839 840
              842:          68 Load 71(inF0)
-             843:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 842
+             843:          68 ExtInst 1(GLSL.std.450) 14(Cos) 842
              844:          68 Load 71(inF0)
-             845:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 844
+             845:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 844
              846:          68 Load 71(inF0)
-             847:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 846
+             847:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 846
              848:          68 Load 71(inF0)
-             849:          68 ExtInst 1(GLSL.std.450) 27(Exp) 848
+             849:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 848
              850:          68 Load 71(inF0)
-             851:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 850
-             852:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             853:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             854:          68 Load 71(inF0)
-             855:          68 ExtInst 1(GLSL.std.450) 8(Floor) 854
+             851:          68 ExtInst 1(GLSL.std.450) 27(Exp) 850
+             852:          68 Load 71(inF0)
+             853:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 852
+             854:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             855:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              856:          68 Load 71(inF0)
-             857:          68 Load 72(inF1)
-             858:   36(fvec3) CompositeExtract 856 0
-             859:   36(fvec3) CompositeExtract 857 0
-             860:   36(fvec3) FMod 858 859
-             861:   36(fvec3) CompositeExtract 856 1
-             862:   36(fvec3) CompositeExtract 857 1
-             863:   36(fvec3) FMod 861 862
-             864:   36(fvec3) CompositeExtract 856 2
-             865:   36(fvec3) CompositeExtract 857 2
-             866:   36(fvec3) FMod 864 865
-             867:          68 CompositeConstruct 860 863 866
-             868:          68 Load 71(inF0)
-             869:          68 ExtInst 1(GLSL.std.450) 10(Fract) 868
+             857:          68 ExtInst 1(GLSL.std.450) 8(Floor) 856
+             858:          68 Load 71(inF0)
+             859:          68 Load 72(inF1)
+             860:   36(fvec3) CompositeExtract 858 0
+             861:   36(fvec3) CompositeExtract 859 0
+             862:   36(fvec3) FMod 860 861
+             863:   36(fvec3) CompositeExtract 858 1
+             864:   36(fvec3) CompositeExtract 859 1
+             865:   36(fvec3) FMod 863 864
+             866:   36(fvec3) CompositeExtract 858 2
+             867:   36(fvec3) CompositeExtract 859 2
+             868:   36(fvec3) FMod 866 867
+             869:          68 CompositeConstruct 862 865 868
              870:          68 Load 71(inF0)
-             872:871(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 870
-             873:  412(ivec3) CompositeExtract 872 1
-                              Store 72(inF1) 873
-             874:          68 CompositeExtract 872 0
-             875:          68 Load 71(inF0)
-             876:          68 Load 72(inF1)
-             877:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 875 876
-             878:          68 Load 71(inF0)
-             879:          68 Load 72(inF1)
-             880:          68 Load 73(inF2)
-             881:          68 ExtInst 1(GLSL.std.450) 46(FMix) 878 879 880
-             882:          68 Load 71(inF0)
-             883:          68 ExtInst 1(GLSL.std.450) 28(Log) 882
+             871:          68 ExtInst 1(GLSL.std.450) 10(Fract) 870
+             872:          68 Load 71(inF0)
+             874:873(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 872
+             875:  411(ivec3) CompositeExtract 874 1
+                              Store 72(inF1) 875
+             876:          68 CompositeExtract 874 0
+             877:          68 Load 71(inF0)
+             878:          68 Load 72(inF1)
+             879:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 877 878
+             880:          68 Load 71(inF0)
+             881:          68 Load 72(inF1)
+             882:          68 Load 73(inF2)
+             883:          68 ExtInst 1(GLSL.std.450) 46(FMix) 880 881 882
              884:          68 Load 71(inF0)
-             885:          68 ExtInst 1(GLSL.std.450) 30(Log2) 884
-             886:          68 MatrixTimesScalar 885 202
-             887:          68 Load 71(inF0)
-             888:          68 ExtInst 1(GLSL.std.450) 30(Log2) 887
+             885:          68 ExtInst 1(GLSL.std.450) 28(Log) 884
+             886:          68 Load 71(inF0)
+             887:          68 ExtInst 1(GLSL.std.450) 30(Log2) 886
+             888:          68 MatrixTimesScalar 887 201
              889:          68 Load 71(inF0)
-             890:          68 Load 72(inF1)
-             891:          68 ExtInst 1(GLSL.std.450) 40(FMax) 889 890
-             892:          68 Load 71(inF0)
-             893:          68 Load 72(inF1)
-             894:          68 ExtInst 1(GLSL.std.450) 37(FMin) 892 893
-             895:          68 Load 71(inF0)
-             896:          68 Load 72(inF1)
-             897:          68 ExtInst 1(GLSL.std.450) 26(Pow) 895 896
-             898:          68 Load 71(inF0)
-             899:          68 ExtInst 1(GLSL.std.450) 11(Radians) 898
+             890:          68 ExtInst 1(GLSL.std.450) 30(Log2) 889
+             891:          68 Load 71(inF0)
+             892:          68 Load 72(inF1)
+             893:          68 ExtInst 1(GLSL.std.450) 40(FMax) 891 892
+             894:          68 Load 71(inF0)
+             895:          68 Load 72(inF1)
+             896:          68 ExtInst 1(GLSL.std.450) 37(FMin) 894 895
+             897:          68 Load 71(inF0)
+             898:          68 Load 72(inF1)
+             899:          68 ExtInst 1(GLSL.std.450) 26(Pow) 897 898
              900:          68 Load 71(inF0)
-             901:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 900
+             901:          68 ExtInst 1(GLSL.std.450) 11(Radians) 900
              902:          68 Load 71(inF0)
-             903:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 902
+             903:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 902
              904:          68 Load 71(inF0)
-             905:   36(fvec3) CompositeConstruct 224 224 224
-             906:   36(fvec3) CompositeConstruct 225 225 225
-             907:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 904 905 906
-             908:          68 Load 71(inF0)
-             909:          68 ExtInst 1(GLSL.std.450) 6(FSign) 908
+             905:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 904
+             906:          68 Load 71(inF0)
+             907:   36(fvec3) CompositeConstruct 223 223 223
+             908:   36(fvec3) CompositeConstruct 224 224 224
+             909:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 906 907 908
              910:          68 Load 71(inF0)
-             911:          68 ExtInst 1(GLSL.std.450) 13(Sin) 910
+             911:          68 ExtInst 1(GLSL.std.450) 6(FSign) 910
              912:          68 Load 71(inF0)
              913:          68 ExtInst 1(GLSL.std.450) 13(Sin) 912
-                              Store 72(inF1) 913
              914:          68 Load 71(inF0)
-             915:          68 ExtInst 1(GLSL.std.450) 14(Cos) 914
-                              Store 73(inF2) 915
+             915:          68 ExtInst 1(GLSL.std.450) 13(Sin) 914
+                              Store 72(inF1) 915
              916:          68 Load 71(inF0)
-             917:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 916
+             917:          68 ExtInst 1(GLSL.std.450) 14(Cos) 916
+                              Store 73(inF2) 917
              918:          68 Load 71(inF0)
-             919:          68 Load 72(inF1)
-             920:          68 Load 73(inF2)
-             921:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 918 919 920
-             922:          68 Load 71(inF0)
-             923:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 922
+             919:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 918
+             920:          68 Load 71(inF0)
+             921:          68 Load 72(inF1)
+             922:          68 Load 73(inF2)
+             923:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 920 921 922
              924:          68 Load 71(inF0)
-             925:          68 Load 72(inF1)
-             926:          68 ExtInst 1(GLSL.std.450) 48(Step) 924 925
-             927:          68 Load 71(inF0)
-             928:          68 ExtInst 1(GLSL.std.450) 15(Tan) 927
+             925:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 924
+             926:          68 Load 71(inF0)
+             927:          68 Load 72(inF1)
+             928:          68 ExtInst 1(GLSL.std.450) 48(Step) 926 927
              929:          68 Load 71(inF0)
-             930:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 929
+             930:          68 ExtInst 1(GLSL.std.450) 15(Tan) 929
              931:          68 Load 71(inF0)
-             932:          68 Transpose 931
+             932:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 931
              933:          68 Load 71(inF0)
-             934:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 933
-                              ReturnValue 936
+             934:          68 Transpose 933
+             935:          68 Load 71(inF0)
+             936:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 935
+                              ReturnValue 938
                               FunctionEnd
 82(VertexShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
         79(inF0):     77(ptr) FunctionParameter
         80(inF1):     77(ptr) FunctionParameter
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
-             939:          76 Load 79(inF0)
-             940:   132(bool) All 939
              941:          76 Load 79(inF0)
-             942:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 941
+             942:   132(bool) All 941
              943:          76 Load 79(inF0)
-             944:          76 ExtInst 1(GLSL.std.450) 17(Acos) 943
+             944:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 943
              945:          76 Load 79(inF0)
-             946:   132(bool) Any 945
+             946:          76 ExtInst 1(GLSL.std.450) 17(Acos) 945
              947:          76 Load 79(inF0)
-             948:          76 ExtInst 1(GLSL.std.450) 16(Asin) 947
+             948:   132(bool) Any 947
              949:          76 Load 79(inF0)
-             950:          76 ExtInst 1(GLSL.std.450) 18(Atan) 949
+             950:          76 ExtInst 1(GLSL.std.450) 16(Asin) 949
              951:          76 Load 79(inF0)
-             952:          76 Load 80(inF1)
-             953:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 951 952
-             954:          76 Load 79(inF0)
-             955:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 954
+             952:          76 ExtInst 1(GLSL.std.450) 18(Atan) 951
+             953:          76 Load 79(inF0)
+             954:          76 Load 80(inF1)
+             955:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 953 954
              956:          76 Load 79(inF0)
-             957:          76 Load 80(inF1)
-             958:          76 Load 81(inF2)
-             959:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 956 957 958
-             960:          76 Load 79(inF0)
-             961:          76 ExtInst 1(GLSL.std.450) 14(Cos) 960
+             957:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 956
+             958:          76 Load 79(inF0)
+             959:          76 Load 80(inF1)
+             960:          76 Load 81(inF2)
+             961:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 958 959 960
              962:          76 Load 79(inF0)
-             963:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 962
+             963:          76 ExtInst 1(GLSL.std.450) 14(Cos) 962
              964:          76 Load 79(inF0)
-             965:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 964
+             965:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 964
              966:          76 Load 79(inF0)
-             967:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 966
+             967:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 966
              968:          76 Load 79(inF0)
-             969:          76 ExtInst 1(GLSL.std.450) 27(Exp) 968
+             969:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 968
              970:          76 Load 79(inF0)
-             971:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 970
-             972:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
-             973:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
-             974:          76 Load 79(inF0)
-             975:          76 ExtInst 1(GLSL.std.450) 8(Floor) 974
+             971:          76 ExtInst 1(GLSL.std.450) 27(Exp) 970
+             972:          76 Load 79(inF0)
+             973:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 972
+             974:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
+             975:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
              976:          76 Load 79(inF0)
-             977:          76 Load 80(inF1)
-             978:   48(fvec4) CompositeExtract 976 0
-             979:   48(fvec4) CompositeExtract 977 0
-             980:   48(fvec4) FMod 978 979
-             981:   48(fvec4) CompositeExtract 976 1
-             982:   48(fvec4) CompositeExtract 977 1
-             983:   48(fvec4) FMod 981 982
-             984:   48(fvec4) CompositeExtract 976 2
-             985:   48(fvec4) CompositeExtract 977 2
-             986:   48(fvec4) FMod 984 985
-             987:   48(fvec4) CompositeExtract 976 3
-             988:   48(fvec4) CompositeExtract 977 3
-             989:   48(fvec4) FMod 987 988
-             990:          76 CompositeConstruct 980 983 986 989
-             991:          76 Load 79(inF0)
-             992:          76 ExtInst 1(GLSL.std.450) 10(Fract) 991
+             977:          76 ExtInst 1(GLSL.std.450) 8(Floor) 976
+             978:          76 Load 79(inF0)
+             979:          76 Load 80(inF1)
+             980:   48(fvec4) CompositeExtract 978 0
+             981:   48(fvec4) CompositeExtract 979 0
+             982:   48(fvec4) FMod 980 981
+             983:   48(fvec4) CompositeExtract 978 1
+             984:   48(fvec4) CompositeExtract 979 1
+             985:   48(fvec4) FMod 983 984
+             986:   48(fvec4) CompositeExtract 978 2
+             987:   48(fvec4) CompositeExtract 979 2
+             988:   48(fvec4) FMod 986 987
+             989:   48(fvec4) CompositeExtract 978 3
+             990:   48(fvec4) CompositeExtract 979 3
+             991:   48(fvec4) FMod 989 990
+             992:          76 CompositeConstruct 982 985 988 991
              993:          76 Load 79(inF0)
-             995:994(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 993
-             996:  559(ivec4) CompositeExtract 995 1
-                              Store 80(inF1) 996
-             997:          76 CompositeExtract 995 0
-             998:          76 Load 79(inF0)
-             999:          76 Load 80(inF1)
-            1000:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 998 999
-            1001:          76 Load 79(inF0)
-            1002:          76 Load 80(inF1)
-            1003:          76 Load 81(inF2)
-            1004:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1001 1002 1003
-            1005:          76 Load 79(inF0)
-            1006:          76 ExtInst 1(GLSL.std.450) 28(Log) 1005
+             994:          76 ExtInst 1(GLSL.std.450) 10(Fract) 993
+             995:          76 Load 79(inF0)
+             997:996(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 995
+             998:  558(ivec4) CompositeExtract 997 1
+                              Store 80(inF1) 998
+             999:          76 CompositeExtract 997 0
+            1000:          76 Load 79(inF0)
+            1001:          76 Load 80(inF1)
+            1002:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1000 1001
+            1003:          76 Load 79(inF0)
+            1004:          76 Load 80(inF1)
+            1005:          76 Load 81(inF2)
+            1006:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1003 1004 1005
             1007:          76 Load 79(inF0)
-            1008:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1007
-            1009:          76 MatrixTimesScalar 1008 202
-            1010:          76 Load 79(inF0)
-            1011:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1010
+            1008:          76 ExtInst 1(GLSL.std.450) 28(Log) 1007
+            1009:          76 Load 79(inF0)
+            1010:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1009
+            1011:          76 MatrixTimesScalar 1010 201
             1012:          76 Load 79(inF0)
-            1013:          76 Load 80(inF1)
-            1014:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1012 1013
-            1015:          76 Load 79(inF0)
-            1016:          76 Load 80(inF1)
-            1017:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1015 1016
-            1018:          76 Load 79(inF0)
-            1019:          76 Load 80(inF1)
-            1020:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1018 1019
-            1021:          76 Load 79(inF0)
-            1022:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1021
+            1013:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1012
+            1014:          76 Load 79(inF0)
+            1015:          76 Load 80(inF1)
+            1016:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1014 1015
+            1017:          76 Load 79(inF0)
+            1018:          76 Load 80(inF1)
+            1019:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1017 1018
+            1020:          76 Load 79(inF0)
+            1021:          76 Load 80(inF1)
+            1022:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1020 1021
             1023:          76 Load 79(inF0)
-            1024:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1023
+            1024:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1023
             1025:          76 Load 79(inF0)
-            1026:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1025
+            1026:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1025
             1027:          76 Load 79(inF0)
-            1028:   48(fvec4) CompositeConstruct 224 224 224 224
-            1029:   48(fvec4) CompositeConstruct 225 225 225 225
-            1030:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1027 1028 1029
-            1031:          76 Load 79(inF0)
-            1032:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1031
+            1028:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1027
+            1029:          76 Load 79(inF0)
+            1030:   48(fvec4) CompositeConstruct 223 223 223 223
+            1031:   48(fvec4) CompositeConstruct 224 224 224 224
+            1032:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1029 1030 1031
             1033:          76 Load 79(inF0)
-            1034:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1033
+            1034:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1033
             1035:          76 Load 79(inF0)
             1036:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1035
-                              Store 80(inF1) 1036
             1037:          76 Load 79(inF0)
-            1038:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1037
-                              Store 81(inF2) 1038
+            1038:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1037
+                              Store 80(inF1) 1038
             1039:          76 Load 79(inF0)
-            1040:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1039
+            1040:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1039
+                              Store 81(inF2) 1040
             1041:          76 Load 79(inF0)
-            1042:          76 Load 80(inF1)
-            1043:          76 Load 81(inF2)
-            1044:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1041 1042 1043
-            1045:          76 Load 79(inF0)
-            1046:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1045
+            1042:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1041
+            1043:          76 Load 79(inF0)
+            1044:          76 Load 80(inF1)
+            1045:          76 Load 81(inF2)
+            1046:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1043 1044 1045
             1047:          76 Load 79(inF0)
-            1048:          76 Load 80(inF1)
-            1049:          76 ExtInst 1(GLSL.std.450) 48(Step) 1047 1048
-            1050:          76 Load 79(inF0)
-            1051:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1050
+            1048:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1047
+            1049:          76 Load 79(inF0)
+            1050:          76 Load 80(inF1)
+            1051:          76 ExtInst 1(GLSL.std.450) 48(Step) 1049 1050
             1052:          76 Load 79(inF0)
-            1053:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1052
+            1053:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1052
             1054:          76 Load 79(inF0)
-            1055:          76 Transpose 1054
+            1055:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1054
             1056:          76 Load 79(inF0)
-            1057:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1056
-                              ReturnValue 1059
+            1057:          76 Transpose 1056
+            1058:          76 Load 79(inF0)
+            1059:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1058
+                              ReturnValue 1061
                               FunctionEnd
 91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
         85(inF0):      7(ptr) FunctionParameter
@@ -3977,51 +3981,51 @@ Shader version: 450
        89(inFM0):     61(ptr) FunctionParameter
        90(inFM1):     61(ptr) FunctionParameter
               92:             Label
-        1062(r0):      7(ptr) Variable Function
-        1066(r1):     25(ptr) Variable Function
-        1070(r2):     25(ptr) Variable Function
-        1074(r3):      7(ptr) Variable Function
-        1078(r4):     25(ptr) Variable Function
-        1082(r5):     25(ptr) Variable Function
-        1086(r6):     61(ptr) Variable Function
-        1090(r7):     61(ptr) Variable Function
-        1094(r8):     61(ptr) Variable Function
-            1063:    6(float) Load 86(inF1)
-            1064:    6(float) Load 85(inF0)
-            1065:    6(float) FMul 1063 1064
-                              Store 1062(r0) 1065
-            1067:    6(float) Load 85(inF0)
-            1068:   24(fvec2) Load 87(inFV0)
-            1069:   24(fvec2) VectorTimesScalar 1068 1067
-                              Store 1066(r1) 1069
-            1071:   24(fvec2) Load 87(inFV0)
-            1072:    6(float) Load 85(inF0)
-            1073:   24(fvec2) VectorTimesScalar 1071 1072
-                              Store 1070(r2) 1073
-            1075:   24(fvec2) Load 87(inFV0)
-            1076:   24(fvec2) Load 88(inFV1)
-            1077:    6(float) Dot 1075 1076
-                              Store 1074(r3) 1077
-            1079:   24(fvec2) Load 87(inFV0)
-            1080:          60 Load 89(inFM0)
-            1081:   24(fvec2) VectorTimesMatrix 1079 1080
-                              Store 1078(r4) 1081
-            1083:          60 Load 89(inFM0)
-            1084:   24(fvec2) Load 87(inFV0)
-            1085:   24(fvec2) MatrixTimesVector 1083 1084
-                              Store 1082(r5) 1085
-            1087:    6(float) Load 85(inF0)
-            1088:          60 Load 89(inFM0)
-            1089:          60 MatrixTimesScalar 1088 1087
-                              Store 1086(r6) 1089
-            1091:          60 Load 89(inFM0)
-            1092:    6(float) Load 85(inF0)
-            1093:          60 MatrixTimesScalar 1091 1092
-                              Store 1090(r7) 1093
-            1095:          60 Load 90(inFM1)
-            1096:          60 Load 89(inFM0)
-            1097:          60 MatrixTimesMatrix 1095 1096
-                              Store 1094(r8) 1097
+        1064(r0):      7(ptr) Variable Function
+        1068(r1):     25(ptr) Variable Function
+        1072(r2):     25(ptr) Variable Function
+        1076(r3):      7(ptr) Variable Function
+        1080(r4):     25(ptr) Variable Function
+        1084(r5):     25(ptr) Variable Function
+        1088(r6):     61(ptr) Variable Function
+        1092(r7):     61(ptr) Variable Function
+        1096(r8):     61(ptr) Variable Function
+            1065:    6(float) Load 86(inF1)
+            1066:    6(float) Load 85(inF0)
+            1067:    6(float) FMul 1065 1066
+                              Store 1064(r0) 1067
+            1069:    6(float) Load 85(inF0)
+            1070:   24(fvec2) Load 87(inFV0)
+            1071:   24(fvec2) VectorTimesScalar 1070 1069
+                              Store 1068(r1) 1071
+            1073:   24(fvec2) Load 87(inFV0)
+            1074:    6(float) Load 85(inF0)
+            1075:   24(fvec2) VectorTimesScalar 1073 1074
+                              Store 1072(r2) 1075
+            1077:   24(fvec2) Load 87(inFV0)
+            1078:   24(fvec2) Load 88(inFV1)
+            1079:    6(float) Dot 1077 1078
+                              Store 1076(r3) 1079
+            1081:   24(fvec2) Load 87(inFV0)
+            1082:          60 Load 89(inFM0)
+            1083:   24(fvec2) VectorTimesMatrix 1081 1082
+                              Store 1080(r4) 1083
+            1085:          60 Load 89(inFM0)
+            1086:   24(fvec2) Load 87(inFV0)
+            1087:   24(fvec2) MatrixTimesVector 1085 1086
+                              Store 1084(r5) 1087
+            1089:    6(float) Load 85(inF0)
+            1090:          60 Load 89(inFM0)
+            1091:          60 MatrixTimesScalar 1090 1089
+                              Store 1088(r6) 1091
+            1093:          60 Load 89(inFM0)
+            1094:    6(float) Load 85(inF0)
+            1095:          60 MatrixTimesScalar 1093 1094
+                              Store 1092(r7) 1095
+            1097:          60 Load 90(inFM1)
+            1098:          60 Load 89(inFM0)
+            1099:          60 MatrixTimesMatrix 1097 1098
+                              Store 1096(r8) 1099
                               Return
                               FunctionEnd
 100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
@@ -4032,51 +4036,51 @@ Shader version: 450
        98(inFM0):     69(ptr) FunctionParameter
        99(inFM1):     69(ptr) FunctionParameter
              101:             Label
-        1098(r0):      7(ptr) Variable Function
-        1102(r1):     37(ptr) Variable Function
-        1106(r2):     37(ptr) Variable Function
-        1110(r3):      7(ptr) Variable Function
-        1114(r4):     37(ptr) Variable Function
-        1118(r5):     37(ptr) Variable Function
-        1122(r6):     69(ptr) Variable Function
-        1126(r7):     69(ptr) Variable Function
-        1130(r8):     69(ptr) Variable Function
-            1099:    6(float) Load 95(inF1)
-            1100:    6(float) Load 94(inF0)
-            1101:    6(float) FMul 1099 1100
-                              Store 1098(r0) 1101
-            1103:    6(float) Load 94(inF0)
-            1104:   36(fvec3) Load 96(inFV0)
-            1105:   36(fvec3) VectorTimesScalar 1104 1103
-                              Store 1102(r1) 1105
-            1107:   36(fvec3) Load 96(inFV0)
-            1108:    6(float) Load 94(inF0)
-            1109:   36(fvec3) VectorTimesScalar 1107 1108
-                              Store 1106(r2) 1109
-            1111:   36(fvec3) Load 96(inFV0)
-            1112:   36(fvec3) Load 97(inFV1)
-            1113:    6(float) Dot 1111 1112
-                              Store 1110(r3) 1113
-            1115:   36(fvec3) Load 96(inFV0)
-            1116:          68 Load 98(inFM0)
-            1117:   36(fvec3) VectorTimesMatrix 1115 1116
-                              Store 1114(r4) 1117
-            1119:          68 Load 98(inFM0)
-            1120:   36(fvec3) Load 96(inFV0)
-            1121:   36(fvec3) MatrixTimesVector 1119 1120
-                              Store 1118(r5) 1121
-            1123:    6(float) Load 94(inF0)
-            1124:          68 Load 98(inFM0)
-            1125:          68 MatrixTimesScalar 1124 1123
-                              Store 1122(r6) 1125
-            1127:          68 Load 98(inFM0)
-            1128:    6(float) Load 94(inF0)
-            1129:          68 MatrixTimesScalar 1127 1128
-                              Store 1126(r7) 1129
-            1131:          68 Load 99(inFM1)
-            1132:          68 Load 98(inFM0)
-            1133:          68 MatrixTimesMatrix 1131 1132
-                              Store 1130(r8) 1133
+        1100(r0):      7(ptr) Variable Function
+        1104(r1):     37(ptr) Variable Function
+        1108(r2):     37(ptr) Variable Function
+        1112(r3):      7(ptr) Variable Function
+        1116(r4):     37(ptr) Variable Function
+        1120(r5):     37(ptr) Variable Function
+        1124(r6):     69(ptr) Variable Function
+        1128(r7):     69(ptr) Variable Function
+        1132(r8):     69(ptr) Variable Function
+            1101:    6(float) Load 95(inF1)
+            1102:    6(float) Load 94(inF0)
+            1103:    6(float) FMul 1101 1102
+                              Store 1100(r0) 1103
+            1105:    6(float) Load 94(inF0)
+            1106:   36(fvec3) Load 96(inFV0)
+            1107:   36(fvec3) VectorTimesScalar 1106 1105
+                              Store 1104(r1) 1107
+            1109:   36(fvec3) Load 96(inFV0)
+            1110:    6(float) Load 94(inF0)
+            1111:   36(fvec3) VectorTimesScalar 1109 1110
+                              Store 1108(r2) 1111
+            1113:   36(fvec3) Load 96(inFV0)
+            1114:   36(fvec3) Load 97(inFV1)
+            1115:    6(float) Dot 1113 1114
+                              Store 1112(r3) 1115
+            1117:   36(fvec3) Load 96(inFV0)
+            1118:          68 Load 98(inFM0)
+            1119:   36(fvec3) VectorTimesMatrix 1117 1118
+                              Store 1116(r4) 1119
+            1121:          68 Load 98(inFM0)
+            1122:   36(fvec3) Load 96(inFV0)
+            1123:   36(fvec3) MatrixTimesVector 1121 1122
+                              Store 1120(r5) 1123
+            1125:    6(float) Load 94(inF0)
+            1126:          68 Load 98(inFM0)
+            1127:          68 MatrixTimesScalar 1126 1125
+                              Store 1124(r6) 1127
+            1129:          68 Load 98(inFM0)
+            1130:    6(float) Load 94(inF0)
+            1131:          68 MatrixTimesScalar 1129 1130
+                              Store 1128(r7) 1131
+            1133:          68 Load 99(inFM1)
+            1134:          68 Load 98(inFM0)
+            1135:          68 MatrixTimesMatrix 1133 1134
+                              Store 1132(r8) 1135
                               Return
                               FunctionEnd
 109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
@@ -4087,51 +4091,51 @@ Shader version: 450
       107(inFM0):     77(ptr) FunctionParameter
       108(inFM1):     77(ptr) FunctionParameter
              110:             Label
-        1134(r0):      7(ptr) Variable Function
-        1138(r1):     49(ptr) Variable Function
-        1142(r2):     49(ptr) Variable Function
-        1146(r3):      7(ptr) Variable Function
-        1150(r4):     49(ptr) Variable Function
-        1154(r5):     49(ptr) Variable Function
-        1158(r6):     77(ptr) Variable Function
-        1162(r7):     77(ptr) Variable Function
-        1166(r8):     77(ptr) Variable Function
-            1135:    6(float) Load 104(inF1)
-            1136:    6(float) Load 103(inF0)
-            1137:    6(float) FMul 1135 1136
-                              Store 1134(r0) 1137
-            1139:    6(float) Load 103(inF0)
-            1140:   48(fvec4) Load 105(inFV0)
-            1141:   48(fvec4) VectorTimesScalar 1140 1139
-                              Store 1138(r1) 1141
-            1143:   48(fvec4) Load 105(inFV0)
-            1144:    6(float) Load 103(inF0)
-            1145:   48(fvec4) VectorTimesScalar 1143 1144
-                              Store 1142(r2) 1145
-            1147:   48(fvec4) Load 105(inFV0)
-            1148:   48(fvec4) Load 106(inFV1)
-            1149:    6(float) Dot 1147 1148
-                              Store 1146(r3) 1149
-            1151:   48(fvec4) Load 105(inFV0)
-            1152:          76 Load 107(inFM0)
-            1153:   48(fvec4) VectorTimesMatrix 1151 1152
-                              Store 1150(r4) 1153
-            1155:          76 Load 107(inFM0)
-            1156:   48(fvec4) Load 105(inFV0)
-            1157:   48(fvec4) MatrixTimesVector 1155 1156
-                              Store 1154(r5) 1157
-            1159:    6(float) Load 103(inF0)
-            1160:          76 Load 107(inFM0)
-            1161:          76 MatrixTimesScalar 1160 1159
-                              Store 1158(r6) 1161
-            1163:          76 Load 107(inFM0)
-            1164:    6(float) Load 103(inF0)
-            1165:          76 MatrixTimesScalar 1163 1164
-                              Store 1162(r7) 1165
-            1167:          76 Load 108(inFM1)
-            1168:          76 Load 107(inFM0)
-            1169:          76 MatrixTimesMatrix 1167 1168
-                              Store 1166(r8) 1169
+        1136(r0):      7(ptr) Variable Function
+        1140(r1):     49(ptr) Variable Function
+        1144(r2):     49(ptr) Variable Function
+        1148(r3):      7(ptr) Variable Function
+        1152(r4):     49(ptr) Variable Function
+        1156(r5):     49(ptr) Variable Function
+        1160(r6):     77(ptr) Variable Function
+        1164(r7):     77(ptr) Variable Function
+        1168(r8):     77(ptr) Variable Function
+            1137:    6(float) Load 104(inF1)
+            1138:    6(float) Load 103(inF0)
+            1139:    6(float) FMul 1137 1138
+                              Store 1136(r0) 1139
+            1141:    6(float) Load 103(inF0)
+            1142:   48(fvec4) Load 105(inFV0)
+            1143:   48(fvec4) VectorTimesScalar 1142 1141
+                              Store 1140(r1) 1143
+            1145:   48(fvec4) Load 105(inFV0)
+            1146:    6(float) Load 103(inF0)
+            1147:   48(fvec4) VectorTimesScalar 1145 1146
+                              Store 1144(r2) 1147
+            1149:   48(fvec4) Load 105(inFV0)
+            1150:   48(fvec4) Load 106(inFV1)
+            1151:    6(float) Dot 1149 1150
+                              Store 1148(r3) 1151
+            1153:   48(fvec4) Load 105(inFV0)
+            1154:          76 Load 107(inFM0)
+            1155:   48(fvec4) VectorTimesMatrix 1153 1154
+                              Store 1152(r4) 1155
+            1157:          76 Load 107(inFM0)
+            1158:   48(fvec4) Load 105(inFV0)
+            1159:   48(fvec4) MatrixTimesVector 1157 1158
+                              Store 1156(r5) 1159
+            1161:    6(float) Load 103(inF0)
+            1162:          76 Load 107(inFM0)
+            1163:          76 MatrixTimesScalar 1162 1161
+                              Store 1160(r6) 1163
+            1165:          76 Load 107(inFM0)
+            1166:    6(float) Load 103(inF0)
+            1167:          76 MatrixTimesScalar 1165 1166
+                              Store 1164(r7) 1167
+            1169:          76 Load 108(inFM1)
+            1170:          76 Load 107(inFM0)
+            1171:          76 MatrixTimesMatrix 1169 1170
+                              Store 1168(r8) 1171
                               Return
                               FunctionEnd
 129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
@@ -4145,90 +4149,90 @@ Shader version: 450
     127(inFM3x4):    116(ptr) FunctionParameter
     128(inFM2x4):    118(ptr) FunctionParameter
              130:             Label
-       1170(r00):      7(ptr) Variable Function
-       1174(r01):     25(ptr) Variable Function
-       1178(r02):     37(ptr) Variable Function
-       1182(r03):     25(ptr) Variable Function
-       1186(r04):     37(ptr) Variable Function
-       1190(r05):      7(ptr) Variable Function
-       1194(r06):      7(ptr) Variable Function
-       1198(r07):     37(ptr) Variable Function
-       1202(r08):     25(ptr) Variable Function
-       1206(r09):     25(ptr) Variable Function
-       1210(r10):     37(ptr) Variable Function
-       1214(r11):    112(ptr) Variable Function
-       1218(r12):    114(ptr) Variable Function
-       1222(r13):     61(ptr) Variable Function
-       1226(r14):    112(ptr) Variable Function
-       1230(r15):    118(ptr) Variable Function
-       1234(r16):    116(ptr) Variable Function
-            1171:    6(float) Load 121(inF1)
-            1172:    6(float) Load 120(inF0)
-            1173:    6(float) FMul 1171 1172
-                              Store 1170(r00) 1173
-            1175:    6(float) Load 120(inF0)
-            1176:   24(fvec2) Load 122(inFV2)
-            1177:   24(fvec2) VectorTimesScalar 1176 1175
-                              Store 1174(r01) 1177
-            1179:    6(float) Load 120(inF0)
-            1180:   36(fvec3) Load 123(inFV3)
-            1181:   36(fvec3) VectorTimesScalar 1180 1179
-                              Store 1178(r02) 1181
-            1183:   24(fvec2) Load 122(inFV2)
-            1184:    6(float) Load 120(inF0)
-            1185:   24(fvec2) VectorTimesScalar 1183 1184
-                              Store 1182(r03) 1185
-            1187:   36(fvec3) Load 123(inFV3)
-            1188:    6(float) Load 120(inF0)
-            1189:   36(fvec3) VectorTimesScalar 1187 1188
-                              Store 1186(r04) 1189
-            1191:   24(fvec2) Load 122(inFV2)
-            1192:   24(fvec2) Load 122(inFV2)
-            1193:    6(float) Dot 1191 1192
-                              Store 1190(r05) 1193
-            1195:   36(fvec3) Load 123(inFV3)
-            1196:   36(fvec3) Load 123(inFV3)
-            1197:    6(float) Dot 1195 1196
-                              Store 1194(r06) 1197
-            1199:         111 Load 124(inFM2x3)
-            1200:   24(fvec2) Load 122(inFV2)
-            1201:   36(fvec3) MatrixTimesVector 1199 1200
-                              Store 1198(r07) 1201
-            1203:         113 Load 125(inFM3x2)
-            1204:   36(fvec3) Load 123(inFV3)
-            1205:   24(fvec2) MatrixTimesVector 1203 1204
-                              Store 1202(r08) 1205
-            1207:   36(fvec3) Load 123(inFV3)
-            1208:         111 Load 124(inFM2x3)
-            1209:   24(fvec2) VectorTimesMatrix 1207 1208
-                              Store 1206(r09) 1209
-            1211:   24(fvec2) Load 122(inFV2)
-            1212:         113 Load 125(inFM3x2)
-            1213:   36(fvec3) VectorTimesMatrix 1211 1212
-                              Store 1210(r10) 1213
-            1215:    6(float) Load 120(inF0)
-            1216:         111 Load 124(inFM2x3)
-            1217:         111 MatrixTimesScalar 1216 1215
-                              Store 1214(r11) 1217
-            1219:    6(float) Load 120(inF0)
-            1220:         113 Load 125(inFM3x2)
-            1221:         113 MatrixTimesScalar 1220 1219
-                              Store 1218(r12) 1221
-            1223:         113 Load 125(inFM3x2)
-            1224:         111 Load 124(inFM2x3)
-            1225:          60 MatrixTimesMatrix 1223 1224
-                              Store 1222(r13) 1225
-            1227:          68 Load 126(inFM3x3)
-            1228:         111 Load 124(inFM2x3)
-            1229:         111 MatrixTimesMatrix 1227 1228
-                              Store 1226(r14) 1229
-            1231:         115 Load 127(inFM3x4)
-            1232:         111 Load 124(inFM2x3)
-            1233:         117 MatrixTimesMatrix 1231 1232
-                              Store 1230(r15) 1233
-            1235:         117 Load 128(inFM2x4)
-            1236:         113 Load 125(inFM3x2)
-            1237:         115 MatrixTimesMatrix 1235 1236
-                              Store 1234(r16) 1237
+       1172(r00):      7(ptr) Variable Function
+       1176(r01):     25(ptr) Variable Function
+       1180(r02):     37(ptr) Variable Function
+       1184(r03):     25(ptr) Variable Function
+       1188(r04):     37(ptr) Variable Function
+       1192(r05):      7(ptr) Variable Function
+       1196(r06):      7(ptr) Variable Function
+       1200(r07):     37(ptr) Variable Function
+       1204(r08):     25(ptr) Variable Function
+       1208(r09):     25(ptr) Variable Function
+       1212(r10):     37(ptr) Variable Function
+       1216(r11):    112(ptr) Variable Function
+       1220(r12):    114(ptr) Variable Function
+       1224(r13):     61(ptr) Variable Function
+       1228(r14):    112(ptr) Variable Function
+       1232(r15):    118(ptr) Variable Function
+       1236(r16):    116(ptr) Variable Function
+            1173:    6(float) Load 121(inF1)
+            1174:    6(float) Load 120(inF0)
+            1175:    6(float) FMul 1173 1174
+                              Store 1172(r00) 1175
+            1177:    6(float) Load 120(inF0)
+            1178:   24(fvec2) Load 122(inFV2)
+            1179:   24(fvec2) VectorTimesScalar 1178 1177
+                              Store 1176(r01) 1179
+            1181:    6(float) Load 120(inF0)
+            1182:   36(fvec3) Load 123(inFV3)
+            1183:   36(fvec3) VectorTimesScalar 1182 1181
+                              Store 1180(r02) 1183
+            1185:   24(fvec2) Load 122(inFV2)
+            1186:    6(float) Load 120(inF0)
+            1187:   24(fvec2) VectorTimesScalar 1185 1186
+                              Store 1184(r03) 1187
+            1189:   36(fvec3) Load 123(inFV3)
+            1190:    6(float) Load 120(inF0)
+            1191:   36(fvec3) VectorTimesScalar 1189 1190
+                              Store 1188(r04) 1191
+            1193:   24(fvec2) Load 122(inFV2)
+            1194:   24(fvec2) Load 122(inFV2)
+            1195:    6(float) Dot 1193 1194
+                              Store 1192(r05) 1195
+            1197:   36(fvec3) Load 123(inFV3)
+            1198:   36(fvec3) Load 123(inFV3)
+            1199:    6(float) Dot 1197 1198
+                              Store 1196(r06) 1199
+            1201:         111 Load 124(inFM2x3)
+            1202:   24(fvec2) Load 122(inFV2)
+            1203:   36(fvec3) MatrixTimesVector 1201 1202
+                              Store 1200(r07) 1203
+            1205:         113 Load 125(inFM3x2)
+            1206:   36(fvec3) Load 123(inFV3)
+            1207:   24(fvec2) MatrixTimesVector 1205 1206
+                              Store 1204(r08) 1207
+            1209:   36(fvec3) Load 123(inFV3)
+            1210:         111 Load 124(inFM2x3)
+            1211:   24(fvec2) VectorTimesMatrix 1209 1210
+                              Store 1208(r09) 1211
+            1213:   24(fvec2) Load 122(inFV2)
+            1214:         113 Load 125(inFM3x2)
+            1215:   36(fvec3) VectorTimesMatrix 1213 1214
+                              Store 1212(r10) 1215
+            1217:    6(float) Load 120(inF0)
+            1218:         111 Load 124(inFM2x3)
+            1219:         111 MatrixTimesScalar 1218 1217
+                              Store 1216(r11) 1219
+            1221:    6(float) Load 120(inF0)
+            1222:         113 Load 125(inFM3x2)
+            1223:         113 MatrixTimesScalar 1222 1221
+                              Store 1220(r12) 1223
+            1225:         113 Load 125(inFM3x2)
+            1226:         111 Load 124(inFM2x3)
+            1227:          60 MatrixTimesMatrix 1225 1226
+                              Store 1224(r13) 1227
+            1229:          68 Load 126(inFM3x3)
+            1230:         111 Load 124(inFM2x3)
+            1231:         111 MatrixTimesMatrix 1229 1230
+                              Store 1228(r14) 1231
+            1233:         115 Load 127(inFM3x4)
+            1234:         111 Load 124(inFM2x3)
+            1235:         117 MatrixTimesMatrix 1233 1234
+                              Store 1232(r15) 1235
+            1237:         117 Load 128(inFM2x4)
+            1238:         113 Load 125(inFM3x2)
+            1239:         115 MatrixTimesMatrix 1237 1238
+                              Store 1236(r16) 1239
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index 44553855ddd87982456242d62abdf4fbe2b38886..0c12435a14d2bb61daa2350af59b3b1decde2132 100755
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -2,7 +2,7 @@ hlsl.layout.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:16  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:16  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:16    Function Parameters: 
 0:16      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -11,33 +11,34 @@ gl_FragCoord origin is upper left
 0:17          add (temp 4-component vector of float)
 0:17            add (temp 4-component vector of float)
 0:17              'input' (in 4-component vector of float)
-0:17              v1: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:17                'anon@0' (layout(set=3 binding=5 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1})
+0:17              v1: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:17                'anon@0' (layout(set=3 binding=5 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1})
 0:17                Constant:
 0:17                  0 (const uint)
-0:17            v5: direct index for structure (layout(column_major std430 offset=0 ) buffer 4-component vector of float)
-0:17              'anon@1' (layout(column_major std430 push_constant ) buffer block{layout(column_major std430 offset=0 ) buffer 4-component vector of float v5})
+0:17            v5: direct index for structure (layout(row_major std430 offset=0 ) buffer 4-component vector of float)
+0:17              'anon@1' (layout(row_major std430 push_constant ) buffer block{layout(row_major std430 offset=0 ) buffer 4-component vector of float v5})
 0:17              Constant:
 0:17                0 (const uint)
-0:17          v1PostLayout: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:17            'anon@2' (layout(set=4 binding=7 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
+0:17          v1PostLayout: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:17            'anon@2' (layout(set=4 binding=7 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
 0:17            Constant:
 0:17              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(set=3 binding=5 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1})
-0:?     'anon@1' (layout(column_major std430 push_constant ) buffer block{layout(column_major std430 offset=0 ) buffer 4-component vector of float v5})
+0:?     'anon@0' (layout(set=3 binding=5 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1})
+0:?     'anon@1' (layout(row_major std430 push_constant ) buffer block{layout(row_major std430 offset=0 ) buffer 4-component vector of float v5})
 0:?     'specConst' (specialization-constant const int)
 0:?       10 (const int)
-0:?     'anon@2' (layout(set=4 binding=7 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
+0:?     'anon@2' (layout(set=4 binding=7 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
 
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:16  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:16  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
 0:16    Function Parameters: 
 0:16      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -46,24 +47,24 @@ gl_FragCoord origin is upper left
 0:17          add (temp 4-component vector of float)
 0:17            add (temp 4-component vector of float)
 0:17              'input' (in 4-component vector of float)
-0:17              v1: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:17                'anon@0' (layout(set=3 binding=5 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1})
+0:17              v1: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:17                'anon@0' (layout(set=3 binding=5 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1})
 0:17                Constant:
 0:17                  0 (const uint)
-0:17            v5: direct index for structure (layout(column_major std430 offset=0 ) buffer 4-component vector of float)
-0:17              'anon@1' (layout(column_major std430 push_constant ) buffer block{layout(column_major std430 offset=0 ) buffer 4-component vector of float v5})
+0:17            v5: direct index for structure (layout(row_major std430 offset=0 ) buffer 4-component vector of float)
+0:17              'anon@1' (layout(row_major std430 push_constant ) buffer block{layout(row_major std430 offset=0 ) buffer 4-component vector of float v5})
 0:17              Constant:
 0:17                0 (const uint)
-0:17          v1PostLayout: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
-0:17            'anon@2' (layout(set=4 binding=7 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
+0:17          v1PostLayout: direct index for structure (layout(row_major std430 offset=16 ) buffer 4-component vector of float)
+0:17            'anon@2' (layout(set=4 binding=7 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
 0:17            Constant:
 0:17              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(set=3 binding=5 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1})
-0:?     'anon@1' (layout(column_major std430 push_constant ) buffer block{layout(column_major std430 offset=0 ) buffer 4-component vector of float v5})
+0:?     'anon@0' (layout(set=3 binding=5 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1})
+0:?     'anon@1' (layout(row_major std430 push_constant ) buffer block{layout(row_major std430 offset=0 ) buffer 4-component vector of float v5})
 0:?     'specConst' (specialization-constant const int)
 0:?       10 (const int)
-0:?     'anon@2' (layout(set=4 binding=7 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
+0:?     'anon@2' (layout(set=4 binding=7 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v1PostLayout})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -77,23 +78,23 @@ gl_FragCoord origin is upper left
                               Name 4  "main"
                               Name 11  "PixelShaderFunction(vf4;"
                               Name 10  "input"
-                              Name 14  ""
-                              MemberName 14 0  "v1"
+                              Name 14  "tbufName"
+                              MemberName 14(tbufName) 0  "v1"
                               Name 16  ""
-                              Name 23  ""
-                              MemberName 23 0  "v5"
+                              Name 23  "tbufName2"
+                              MemberName 23(tbufName2) 0  "v5"
                               Name 25  ""
-                              Name 30  ""
-                              MemberName 30 0  "v1PostLayout"
+                              Name 30  "tbufName2"
+                              MemberName 30(tbufName2) 0  "v1PostLayout"
                               Name 32  ""
-                              MemberDecorate 14 0 Offset 16
-                              Decorate 14 BufferBlock
+                              MemberDecorate 14(tbufName) 0 Offset 16
+                              Decorate 14(tbufName) BufferBlock
                               Decorate 16 DescriptorSet 3
                               Decorate 16 Binding 5
-                              MemberDecorate 23 0 Offset 0
-                              Decorate 23 BufferBlock
-                              MemberDecorate 30 0 Offset 16
-                              Decorate 30 BufferBlock
+                              MemberDecorate 23(tbufName2) 0 Offset 0
+                              Decorate 23(tbufName2) BufferBlock
+                              MemberDecorate 30(tbufName2) 0 Offset 16
+                              Decorate 30(tbufName2) BufferBlock
                               Decorate 32 DescriptorSet 4
                               Decorate 32 Binding 7
                               Decorate 38 SpecId 17
@@ -103,22 +104,23 @@ gl_FragCoord origin is upper left
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              14:             TypeStruct 7(fvec4)
-              15:             TypePointer Uniform 14(struct)
+    14(tbufName):             TypeStruct 7(fvec4)
+              15:             TypePointer Uniform 14(tbufName)
               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 PushConstant 23(struct)
+   23(tbufName2):             TypeStruct 7(fvec4)
+              24:             TypePointer PushConstant 23(tbufName2)
               25:     24(ptr) Variable PushConstant
               26:             TypePointer PushConstant 7(fvec4)
-              30:             TypeStruct 7(fvec4)
-              31:             TypePointer Uniform 30(struct)
+   30(tbufName2):             TypeStruct 7(fvec4)
+              31:             TypePointer Uniform 30(tbufName2)
               32:     31(ptr) Variable Uniform
               38:     17(int) SpecConstant 10
          4(main):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 11(PixelShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 051f2017188fc0f74ca79dce6e9200150c53882f..288a0f3f5e383a6bbeebbe38f97045be7720c645 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -2,75 +2,129 @@ hlsl.load.2dms.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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 (global 4-component vector of float)
+0:32      textureFetch (temp 4-component vector of float)
 0:32        'g_tTex2dmsf4' (uniform texture2DMS)
-0:32        'c2' (uniform 2-component vector of int)
+0:32        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:32          '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:32          Constant:
+0:32            1 (const uint)
 0:32        Constant:
 0:32          3 (const int)
-0:33      textureFetch (global 4-component vector of int)
+0:33      textureFetch (temp 4-component vector of int)
 0:33        'g_tTex2dmsi4' (uniform itexture2DMS)
-0:33        'c2' (uniform 2-component vector of int)
+0:33        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:33          '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:33          Constant:
+0:33            1 (const uint)
 0:33        Constant:
 0:33          3 (const int)
-0:34      textureFetch (global 4-component vector of uint)
+0:34      textureFetch (temp 4-component vector of uint)
 0:34        'g_tTex2dmsu4' (uniform utexture2DMS)
-0:34        'c2' (uniform 2-component vector of int)
+0:34        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:34          '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:34          Constant:
+0:34            1 (const uint)
 0:34        Constant:
 0:34          3 (const int)
-0:37      textureFetchOffset (global 4-component vector of float)
+0:37      textureFetchOffset (temp 4-component vector of float)
 0:37        'g_tTex2dmsf4' (uniform texture2DMS)
-0:37        'c2' (uniform 2-component vector of int)
+0:37        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:37          '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:37          Constant:
+0:37            1 (const uint)
 0:37        Constant:
 0:37          3 (const int)
-0:37        'o2' (uniform 2-component vector of int)
-0:38      textureFetchOffset (global 4-component vector of int)
+0:37        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:37          '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:37          Constant:
+0:37            5 (const uint)
+0:38      textureFetchOffset (temp 4-component vector of int)
 0:38        'g_tTex2dmsi4' (uniform itexture2DMS)
-0:38        'c2' (uniform 2-component vector of int)
+0:38        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:38          '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:38          Constant:
+0:38            1 (const uint)
 0:38        Constant:
 0:38          3 (const int)
-0:38        'o2' (uniform 2-component vector of int)
-0:39      textureFetchOffset (global 4-component vector of uint)
+0:38        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:38          '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:38          Constant:
+0:38            5 (const uint)
+0:39      textureFetchOffset (temp 4-component vector of uint)
 0:39        'g_tTex2dmsu4' (uniform utexture2DMS)
-0:39        'c2' (uniform 2-component vector of int)
+0:39        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:39          '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:39          Constant:
+0:39            1 (const uint)
 0:39        Constant:
 0:39          3 (const int)
-0:39        'o2' (uniform 2-component vector of int)
-0:42      textureFetch (global 4-component vector of float)
+0:39        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:39          '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:39          Constant:
+0:39            5 (const uint)
+0:42      textureFetch (temp 4-component vector of float)
 0:42        'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:42        'c3' (uniform 3-component vector of int)
+0:42        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:42          '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:42          Constant:
+0:42            2 (const uint)
 0:42        Constant:
 0:42          3 (const int)
-0:43      textureFetch (global 4-component vector of int)
+0:43      textureFetch (temp 4-component vector of int)
 0:43        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
-0:43        'c3' (uniform 3-component vector of int)
+0:43        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:43          '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:43          Constant:
+0:43            2 (const uint)
 0:43        Constant:
 0:43          3 (const int)
-0:44      textureFetch (global 4-component vector of uint)
+0:44      textureFetch (temp 4-component vector of uint)
 0:44        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:44        'c3' (uniform 3-component vector of int)
+0:44        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:44          '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:44          Constant:
+0:44            2 (const uint)
 0:44        Constant:
 0:44          3 (const int)
-0:47      textureFetchOffset (global 4-component vector of float)
+0:47      textureFetchOffset (temp 4-component vector of float)
 0:47        'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:47        'c3' (uniform 3-component vector of int)
+0:47        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:47          '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:47          Constant:
+0:47            2 (const uint)
 0:47        Constant:
 0:47          3 (const int)
-0:47        'o2' (uniform 2-component vector of int)
-0:48      textureFetchOffset (global 4-component vector of int)
+0:47        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:47          '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:47          Constant:
+0:47            5 (const uint)
+0:48      textureFetchOffset (temp 4-component vector of int)
 0:48        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
-0:48        'c3' (uniform 3-component vector of int)
+0:48        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:48          '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:48          Constant:
+0:48            2 (const uint)
 0:48        Constant:
 0:48          3 (const int)
-0:48        'o2' (uniform 2-component vector of int)
-0:49      textureFetchOffset (global 4-component vector of uint)
+0:48        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:48          '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:48          Constant:
+0:48            5 (const uint)
+0:49      textureFetchOffset (temp 4-component vector of uint)
 0:49        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:49        'c3' (uniform 3-component vector of int)
+0:49        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:49          '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:49          Constant:
+0:49            2 (const uint)
 0:49        Constant:
 0:49          3 (const int)
-0:49        'o2' (uniform 2-component vector of int)
+0:49        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:49          '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:49          Constant:
+0:49            5 (const uint)
 0:51      move second child to first child (temp 4-component vector of float)
 0:51        Color: direct index for structure (temp 4-component vector of float)
 0:51          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -88,8 +142,8 @@ gl_FragCoord origin is upper left
 0:52            1 (const int)
 0:52        Constant:
 0:52          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -104,6 +158,8 @@ gl_FragCoord origin is upper left
 0:54                1 (const int)
 0:54        Branch: Return
 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)
@@ -111,16 +167,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -129,75 +176,129 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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 (global 4-component vector of float)
+0:32      textureFetch (temp 4-component vector of float)
 0:32        'g_tTex2dmsf4' (uniform texture2DMS)
-0:32        'c2' (uniform 2-component vector of int)
+0:32        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:32          '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:32          Constant:
+0:32            1 (const uint)
 0:32        Constant:
 0:32          3 (const int)
-0:33      textureFetch (global 4-component vector of int)
+0:33      textureFetch (temp 4-component vector of int)
 0:33        'g_tTex2dmsi4' (uniform itexture2DMS)
-0:33        'c2' (uniform 2-component vector of int)
+0:33        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:33          '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:33          Constant:
+0:33            1 (const uint)
 0:33        Constant:
 0:33          3 (const int)
-0:34      textureFetch (global 4-component vector of uint)
+0:34      textureFetch (temp 4-component vector of uint)
 0:34        'g_tTex2dmsu4' (uniform utexture2DMS)
-0:34        'c2' (uniform 2-component vector of int)
+0:34        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:34          '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:34          Constant:
+0:34            1 (const uint)
 0:34        Constant:
 0:34          3 (const int)
-0:37      textureFetchOffset (global 4-component vector of float)
+0:37      textureFetchOffset (temp 4-component vector of float)
 0:37        'g_tTex2dmsf4' (uniform texture2DMS)
-0:37        'c2' (uniform 2-component vector of int)
+0:37        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:37          '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:37          Constant:
+0:37            1 (const uint)
 0:37        Constant:
 0:37          3 (const int)
-0:37        'o2' (uniform 2-component vector of int)
-0:38      textureFetchOffset (global 4-component vector of int)
+0:37        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:37          '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:37          Constant:
+0:37            5 (const uint)
+0:38      textureFetchOffset (temp 4-component vector of int)
 0:38        'g_tTex2dmsi4' (uniform itexture2DMS)
-0:38        'c2' (uniform 2-component vector of int)
+0:38        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:38          '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:38          Constant:
+0:38            1 (const uint)
 0:38        Constant:
 0:38          3 (const int)
-0:38        'o2' (uniform 2-component vector of int)
-0:39      textureFetchOffset (global 4-component vector of uint)
+0:38        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:38          '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:38          Constant:
+0:38            5 (const uint)
+0:39      textureFetchOffset (temp 4-component vector of uint)
 0:39        'g_tTex2dmsu4' (uniform utexture2DMS)
-0:39        'c2' (uniform 2-component vector of int)
+0:39        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:39          '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:39          Constant:
+0:39            1 (const uint)
 0:39        Constant:
 0:39          3 (const int)
-0:39        'o2' (uniform 2-component vector of int)
-0:42      textureFetch (global 4-component vector of float)
+0:39        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:39          '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:39          Constant:
+0:39            5 (const uint)
+0:42      textureFetch (temp 4-component vector of float)
 0:42        'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:42        'c3' (uniform 3-component vector of int)
+0:42        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:42          '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:42          Constant:
+0:42            2 (const uint)
 0:42        Constant:
 0:42          3 (const int)
-0:43      textureFetch (global 4-component vector of int)
+0:43      textureFetch (temp 4-component vector of int)
 0:43        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
-0:43        'c3' (uniform 3-component vector of int)
+0:43        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:43          '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:43          Constant:
+0:43            2 (const uint)
 0:43        Constant:
 0:43          3 (const int)
-0:44      textureFetch (global 4-component vector of uint)
+0:44      textureFetch (temp 4-component vector of uint)
 0:44        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:44        'c3' (uniform 3-component vector of int)
+0:44        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:44          '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:44          Constant:
+0:44            2 (const uint)
 0:44        Constant:
 0:44          3 (const int)
-0:47      textureFetchOffset (global 4-component vector of float)
+0:47      textureFetchOffset (temp 4-component vector of float)
 0:47        'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:47        'c3' (uniform 3-component vector of int)
+0:47        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:47          '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:47          Constant:
+0:47            2 (const uint)
 0:47        Constant:
 0:47          3 (const int)
-0:47        'o2' (uniform 2-component vector of int)
-0:48      textureFetchOffset (global 4-component vector of int)
+0:47        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:47          '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:47          Constant:
+0:47            5 (const uint)
+0:48      textureFetchOffset (temp 4-component vector of int)
 0:48        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
-0:48        'c3' (uniform 3-component vector of int)
+0:48        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:48          '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:48          Constant:
+0:48            2 (const uint)
 0:48        Constant:
 0:48          3 (const int)
-0:48        'o2' (uniform 2-component vector of int)
-0:49      textureFetchOffset (global 4-component vector of uint)
+0:48        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:48          '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:48          Constant:
+0:48            5 (const uint)
+0:49      textureFetchOffset (temp 4-component vector of uint)
 0:49        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:49        'c3' (uniform 3-component vector of int)
+0:49        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:49          '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:49          Constant:
+0:49            2 (const uint)
 0:49        Constant:
 0:49          3 (const int)
-0:49        'o2' (uniform 2-component vector of int)
+0:49        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:49          '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:49          Constant:
+0:49            5 (const uint)
 0:51      move second child to first child (temp 4-component vector of float)
 0:51        Color: direct index for structure (temp 4-component vector of float)
 0:51          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -215,8 +316,8 @@ gl_FragCoord origin is upper left
 0:52            1 (const int)
 0:52        Constant:
 0:52          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -231,6 +332,8 @@ gl_FragCoord origin is upper left
 0:54                1 (const int)
 0:54        Branch: Return
 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)
@@ -238,60 +341,63 @@ gl_FragCoord origin is upper left
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 110
+// Id's are bound by 123
 
                               Capability Shader
                               Capability ImageGatherExtended
                               Capability ImageMSArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 92 96
+                              EntryPoint Fragment 4  "main" 112 116
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "g_tTex2dmsf4"
-                              Name 14  "c2"
-                              Name 21  "g_tTex2dmsi4"
-                              Name 29  "g_tTex2dmsu4"
-                              Name 36  "o2"
-                              Name 49  "g_tTex2dmsf4a"
-                              Name 53  "c3"
-                              Name 58  "g_tTex2dmsi4a"
-                              Name 64  "g_tTex2dmsu4a"
-                              Name 80  "PS_OUTPUT"
-                              MemberName 80(PS_OUTPUT) 0  "Color"
-                              MemberName 80(PS_OUTPUT) 1  "Depth"
-                              Name 82  "psout"
-                              Name 92  "Color"
-                              Name 96  "Depth"
-                              Name 102  "g_sSamp"
-                              Name 104  "c1"
-                              Name 106  "c4"
-                              Name 107  "o1"
-                              Name 108  "o3"
-                              Name 109  "o4"
+                              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
-                              Decorate 21(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 29(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 49(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 58(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 64(g_tTex2dmsu4a) DescriptorSet 0
-                              Decorate 92(Color) Location 0
-                              Decorate 96(Depth) BuiltIn FragDepth
-                              Decorate 102(g_sSamp) DescriptorSet 0
-                              Decorate 102(g_sSamp) 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 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -300,108 +406,121 @@ gl_FragCoord origin is upper left
  9(g_tTex2dmsf4):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
               12:             TypeVector 11(int) 2
-              13:             TypePointer UniformConstant 12(ivec2)
-          14(c2):     13(ptr) Variable UniformConstant
-              16:     11(int) Constant 3
-              17:             TypeVector 6(float) 4
-              19:             TypeImage 11(int) 2D multi-sampled sampled format:Unknown
-              20:             TypePointer UniformConstant 19
-21(g_tTex2dmsi4):     20(ptr) Variable UniformConstant
-              24:             TypeVector 11(int) 4
-              26:             TypeInt 32 0
-              27:             TypeImage 26(int) 2D multi-sampled sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-29(g_tTex2dmsu4):     28(ptr) Variable UniformConstant
-              32:             TypeVector 26(int) 4
-          36(o2):     13(ptr) Variable UniformConstant
-              47:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
-              48:             TypePointer UniformConstant 47
-49(g_tTex2dmsf4a):     48(ptr) Variable UniformConstant
-              51:             TypeVector 11(int) 3
-              52:             TypePointer UniformConstant 51(ivec3)
-          53(c3):     52(ptr) Variable UniformConstant
-              56:             TypeImage 11(int) 2D array multi-sampled sampled format:Unknown
-              57:             TypePointer UniformConstant 56
-58(g_tTex2dmsi4a):     57(ptr) Variable UniformConstant
-              62:             TypeImage 26(int) 2D array multi-sampled sampled format:Unknown
-              63:             TypePointer UniformConstant 62
-64(g_tTex2dmsu4a):     63(ptr) Variable UniformConstant
-   80(PS_OUTPUT):             TypeStruct 17(fvec4) 6(float)
-              81:             TypePointer Function 80(PS_OUTPUT)
-              83:     11(int) Constant 0
-              84:    6(float) Constant 1065353216
-              85:   17(fvec4) ConstantComposite 84 84 84 84
-              86:             TypePointer Function 17(fvec4)
-              88:     11(int) Constant 1
-              89:             TypePointer Function 6(float)
-              91:             TypePointer Output 17(fvec4)
-       92(Color):     91(ptr) Variable Output
-              95:             TypePointer Output 6(float)
-       96(Depth):     95(ptr) Variable Output
-             100:             TypeSampler
-             101:             TypePointer UniformConstant 100
-    102(g_sSamp):    101(ptr) Variable UniformConstant
-             103:             TypePointer UniformConstant 11(int)
-         104(c1):    103(ptr) Variable UniformConstant
-             105:             TypePointer UniformConstant 24(ivec4)
-         106(c4):    105(ptr) Variable UniformConstant
-         107(o1):    103(ptr) Variable UniformConstant
-         108(o3):     52(ptr) Variable UniformConstant
-         109(o4):    105(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
-       82(psout):     81(ptr) Variable Function
+      103(psout):    102(ptr) Variable Function
               10:           7 Load 9(g_tTex2dmsf4)
-              15:   12(ivec2) Load 14(c2)
-              18:   17(fvec4) ImageFetch 10 15 Sample 16
-              22:          19 Load 21(g_tTex2dmsi4)
-              23:   12(ivec2) Load 14(c2)
-              25:   24(ivec4) ImageFetch 22 23 Sample 16
-              30:          27 Load 29(g_tTex2dmsu4)
-              31:   12(ivec2) Load 14(c2)
-              33:   32(ivec4) ImageFetch 30 31 Sample 16
-              34:           7 Load 9(g_tTex2dmsf4)
-              35:   12(ivec2) Load 14(c2)
-              37:   12(ivec2) Load 36(o2)
-              38:   17(fvec4) ImageFetch 34 35 Offset Sample 37 16
-              39:          19 Load 21(g_tTex2dmsi4)
-              40:   12(ivec2) Load 14(c2)
-              41:   12(ivec2) Load 36(o2)
-              42:   24(ivec4) ImageFetch 39 40 Offset Sample 41 16
-              43:          27 Load 29(g_tTex2dmsu4)
-              44:   12(ivec2) Load 14(c2)
-              45:   12(ivec2) Load 36(o2)
-              46:   32(ivec4) ImageFetch 43 44 Offset Sample 45 16
-              50:          47 Load 49(g_tTex2dmsf4a)
-              54:   51(ivec3) Load 53(c3)
-              55:   17(fvec4) ImageFetch 50 54 Sample 16
-              59:          56 Load 58(g_tTex2dmsi4a)
-              60:   51(ivec3) Load 53(c3)
-              61:   24(ivec4) ImageFetch 59 60 Sample 16
-              65:          62 Load 64(g_tTex2dmsu4a)
-              66:   51(ivec3) Load 53(c3)
-              67:   32(ivec4) ImageFetch 65 66 Sample 16
-              68:          47 Load 49(g_tTex2dmsf4a)
-              69:   51(ivec3) Load 53(c3)
-              70:   12(ivec2) Load 36(o2)
-              71:   17(fvec4) ImageFetch 68 69 Offset Sample 70 16
-              72:          56 Load 58(g_tTex2dmsi4a)
-              73:   51(ivec3) Load 53(c3)
-              74:   12(ivec2) Load 36(o2)
-              75:   24(ivec4) ImageFetch 72 73 Offset Sample 74 16
-              76:          62 Load 64(g_tTex2dmsu4a)
-              77:   51(ivec3) Load 53(c3)
-              78:   12(ivec2) Load 36(o2)
-              79:   32(ivec4) ImageFetch 76 77 Offset Sample 78 16
-              87:     86(ptr) AccessChain 82(psout) 83
-                              Store 87 85
-              90:     89(ptr) AccessChain 82(psout) 88
-                              Store 90 84
-              93:     86(ptr) AccessChain 82(psout) 83
-              94:   17(fvec4) Load 93
-                              Store 92(Color) 94
-              97:     89(ptr) AccessChain 82(psout) 88
-              98:    6(float) Load 97
-                              Store 96(Depth) 98
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index 372388376c893234dbca696b4ffa5a9b37bb510c..8c4f7c8d0559a6937421bcb005359f242f1d3f2a 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -2,52 +2,73 @@ hlsl.load.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetch (temp 4-component vector of float)
 0:52        'g_tTex1df4a' (uniform texture1DArray)
 0:52        vector swizzle (temp 2-component vector of int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52            Constant:
 0:52              1 (const int)
 0:52        direct index (temp int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Constant:
 0:52            2 (const int)
-0:53      textureFetch (global 4-component vector of int)
+0:53      textureFetch (temp 4-component vector of int)
 0:53        'g_tTex1di4a' (uniform itexture1DArray)
 0:53        vector swizzle (temp 2-component vector of int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53            Constant:
 0:53              1 (const int)
 0:53        direct index (temp int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Constant:
 0:53            2 (const int)
-0:54      textureFetch (global 4-component vector of uint)
+0:54      textureFetch (temp 4-component vector of uint)
 0:54        'g_tTex1du4a' (uniform utexture1DArray)
 0:54        vector swizzle (temp 2-component vector of int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54            Constant:
 0:54              1 (const int)
 0:54        direct index (temp int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Constant:
 0:54            2 (const int)
-0:57      textureFetch (global 4-component vector of float)
+0:57      textureFetch (temp 4-component vector of float)
 0:57        'g_tTex2df4a' (uniform texture2DArray)
 0:57        vector swizzle (temp 3-component vector of int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
@@ -56,13 +77,19 @@ gl_FragCoord origin is upper left
 0:57            Constant:
 0:57              2 (const int)
 0:57        direct index (temp int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Constant:
 0:57            3 (const int)
-0:58      textureFetch (global 4-component vector of int)
+0:58      textureFetch (temp 4-component vector of int)
 0:58        'g_tTex2di4a' (uniform itexture2DArray)
 0:58        vector swizzle (temp 3-component vector of int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
@@ -71,13 +98,19 @@ gl_FragCoord origin is upper left
 0:58            Constant:
 0:58              2 (const int)
 0:58        direct index (temp int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Constant:
 0:58            3 (const int)
-0:59      textureFetch (global 4-component vector of uint)
+0:59      textureFetch (temp 4-component vector of uint)
 0:59        'g_tTex2du4a' (uniform utexture2DArray)
 0:59        vector swizzle (temp 3-component vector of int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
@@ -86,7 +119,10 @@ gl_FragCoord origin is upper left
 0:59            Constant:
 0:59              2 (const int)
 0:59        direct index (temp int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Constant:
 0:59            3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -106,8 +142,8 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -122,6 +158,8 @@ gl_FragCoord origin is upper left
 0:70                1 (const int)
 0:70        Branch: Return
 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)
@@ -144,16 +182,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -162,52 +191,73 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetch (temp 4-component vector of float)
 0:52        'g_tTex1df4a' (uniform texture1DArray)
 0:52        vector swizzle (temp 2-component vector of int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52            Constant:
 0:52              1 (const int)
 0:52        direct index (temp int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Constant:
 0:52            2 (const int)
-0:53      textureFetch (global 4-component vector of int)
+0:53      textureFetch (temp 4-component vector of int)
 0:53        'g_tTex1di4a' (uniform itexture1DArray)
 0:53        vector swizzle (temp 2-component vector of int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53            Constant:
 0:53              1 (const int)
 0:53        direct index (temp int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Constant:
 0:53            2 (const int)
-0:54      textureFetch (global 4-component vector of uint)
+0:54      textureFetch (temp 4-component vector of uint)
 0:54        'g_tTex1du4a' (uniform utexture1DArray)
 0:54        vector swizzle (temp 2-component vector of int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54            Constant:
 0:54              1 (const int)
 0:54        direct index (temp int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Constant:
 0:54            2 (const int)
-0:57      textureFetch (global 4-component vector of float)
+0:57      textureFetch (temp 4-component vector of float)
 0:57        'g_tTex2df4a' (uniform texture2DArray)
 0:57        vector swizzle (temp 3-component vector of int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
@@ -216,13 +266,19 @@ gl_FragCoord origin is upper left
 0:57            Constant:
 0:57              2 (const int)
 0:57        direct index (temp int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Constant:
 0:57            3 (const int)
-0:58      textureFetch (global 4-component vector of int)
+0:58      textureFetch (temp 4-component vector of int)
 0:58        'g_tTex2di4a' (uniform itexture2DArray)
 0:58        vector swizzle (temp 3-component vector of int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
@@ -231,13 +287,19 @@ gl_FragCoord origin is upper left
 0:58            Constant:
 0:58              2 (const int)
 0:58        direct index (temp int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Constant:
 0:58            3 (const int)
-0:59      textureFetch (global 4-component vector of uint)
+0:59      textureFetch (temp 4-component vector of uint)
 0:59        'g_tTex2du4a' (uniform utexture2DArray)
 0:59        vector swizzle (temp 3-component vector of int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
@@ -246,7 +308,10 @@ gl_FragCoord origin is upper left
 0:59            Constant:
 0:59              2 (const int)
 0:59        direct index (temp int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Constant:
 0:59            3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -266,8 +331,8 @@ gl_FragCoord origin is upper left
 0:68            1 (const int)
 0:68        Constant:
 0:68          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -282,6 +347,8 @@ gl_FragCoord origin is upper left
 0:70                1 (const int)
 0:70        Branch: Return
 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)
@@ -304,91 +371,94 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 150
+// Id's are bound by 152
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 87 91
+                              EntryPoint Fragment 4  "main" 96 100
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "g_tTex1df4a"
-                              Name 14  "c3"
-                              Name 27  "g_tTex1di4a"
-                              Name 37  "g_tTex1du4a"
-                              Name 47  "g_tTex2df4a"
-                              Name 50  "c4"
-                              Name 59  "g_tTex2di4a"
-                              Name 68  "g_tTex2du4a"
-                              Name 75  "PS_OUTPUT"
-                              MemberName 75(PS_OUTPUT) 0  "Color"
-                              MemberName 75(PS_OUTPUT) 1  "Depth"
-                              Name 77  "psout"
-                              Name 87  "Color"
-                              Name 91  "Depth"
-                              Name 97  "g_sSamp"
-                              Name 100  "g_tTex1df4"
-                              Name 103  "g_tTex1di4"
-                              Name 106  "g_tTex1du4"
-                              Name 109  "g_tTex2df4"
-                              Name 112  "g_tTex2di4"
-                              Name 115  "g_tTex2du4"
-                              Name 118  "g_tTex3df4"
-                              Name 121  "g_tTex3di4"
-                              Name 124  "g_tTex3du4"
-                              Name 127  "g_tTexcdf4"
-                              Name 130  "g_tTexcdi4"
-                              Name 133  "g_tTexcdu4"
-                              Name 136  "g_tTexcdf4a"
-                              Name 139  "g_tTexcdi4a"
-                              Name 142  "g_tTexcdu4a"
-                              Name 143  "c1"
-                              Name 145  "c2"
-                              Name 146  "o1"
-                              Name 147  "o2"
-                              Name 148  "o3"
-                              Name 149  "o4"
+                              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
-                              Decorate 27(g_tTex1di4a) DescriptorSet 0
-                              Decorate 37(g_tTex1du4a) DescriptorSet 0
-                              Decorate 47(g_tTex2df4a) DescriptorSet 0
-                              Decorate 59(g_tTex2di4a) DescriptorSet 0
-                              Decorate 68(g_tTex2du4a) DescriptorSet 0
-                              Decorate 87(Color) Location 0
-                              Decorate 91(Depth) BuiltIn FragDepth
-                              Decorate 97(g_sSamp) DescriptorSet 0
-                              Decorate 97(g_sSamp) Binding 0
-                              Decorate 100(g_tTex1df4) DescriptorSet 0
-                              Decorate 100(g_tTex1df4) Binding 0
-                              Decorate 103(g_tTex1di4) DescriptorSet 0
-                              Decorate 106(g_tTex1du4) DescriptorSet 0
-                              Decorate 109(g_tTex2df4) DescriptorSet 0
-                              Decorate 112(g_tTex2di4) DescriptorSet 0
-                              Decorate 115(g_tTex2du4) DescriptorSet 0
-                              Decorate 118(g_tTex3df4) DescriptorSet 0
-                              Decorate 121(g_tTex3di4) DescriptorSet 0
-                              Decorate 124(g_tTex3du4) DescriptorSet 0
-                              Decorate 127(g_tTexcdf4) DescriptorSet 0
-                              Decorate 130(g_tTexcdi4) DescriptorSet 0
-                              Decorate 133(g_tTexcdu4) DescriptorSet 0
-                              Decorate 136(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 139(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 142(g_tTexcdu4a) 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -396,149 +466,151 @@ gl_FragCoord origin is upper left
                8:             TypePointer UniformConstant 7
   9(g_tTex1df4a):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
-              12:             TypeVector 11(int) 3
-              13:             TypePointer UniformConstant 12(ivec3)
-          14(c3):     13(ptr) Variable UniformConstant
-              15:             TypeVector 11(int) 2
-              18:             TypeInt 32 0
-              19:     18(int) Constant 2
-              20:             TypePointer UniformConstant 11(int)
-              23:             TypeVector 6(float) 4
-              25:             TypeImage 11(int) 1D array sampled format:Unknown
-              26:             TypePointer UniformConstant 25
- 27(g_tTex1di4a):     26(ptr) Variable UniformConstant
-              33:             TypeVector 11(int) 4
-              35:             TypeImage 18(int) 1D array sampled format:Unknown
-              36:             TypePointer UniformConstant 35
- 37(g_tTex1du4a):     36(ptr) Variable UniformConstant
-              43:             TypeVector 18(int) 4
-              45:             TypeImage 6(float) 2D array sampled format:Unknown
-              46:             TypePointer UniformConstant 45
- 47(g_tTex2df4a):     46(ptr) Variable UniformConstant
-              49:             TypePointer UniformConstant 33(ivec4)
-          50(c4):     49(ptr) Variable UniformConstant
-              53:     18(int) Constant 3
-              57:             TypeImage 11(int) 2D array sampled format:Unknown
-              58:             TypePointer UniformConstant 57
- 59(g_tTex2di4a):     58(ptr) Variable UniformConstant
-              66:             TypeImage 18(int) 2D array sampled format:Unknown
-              67:             TypePointer UniformConstant 66
- 68(g_tTex2du4a):     67(ptr) Variable UniformConstant
-   75(PS_OUTPUT):             TypeStruct 23(fvec4) 6(float)
-              76:             TypePointer Function 75(PS_OUTPUT)
-              78:     11(int) Constant 0
-              79:    6(float) Constant 1065353216
-              80:   23(fvec4) ConstantComposite 79 79 79 79
-              81:             TypePointer Function 23(fvec4)
-              83:     11(int) Constant 1
-              84:             TypePointer Function 6(float)
-              86:             TypePointer Output 23(fvec4)
-       87(Color):     86(ptr) Variable Output
-              90:             TypePointer Output 6(float)
-       91(Depth):     90(ptr) Variable Output
-              95:             TypeSampler
-              96:             TypePointer UniformConstant 95
-     97(g_sSamp):     96(ptr) Variable UniformConstant
-              98:             TypeImage 6(float) 1D sampled format:Unknown
-              99:             TypePointer UniformConstant 98
- 100(g_tTex1df4):     99(ptr) Variable UniformConstant
-             101:             TypeImage 11(int) 1D sampled format:Unknown
-             102:             TypePointer UniformConstant 101
- 103(g_tTex1di4):    102(ptr) Variable UniformConstant
-             104:             TypeImage 18(int) 1D sampled format:Unknown
+              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_tTex1du4):    105(ptr) Variable UniformConstant
-             107:             TypeImage 6(float) 2D sampled format:Unknown
+    106(g_sSamp):    105(ptr) Variable UniformConstant
+             107:             TypeImage 6(float) 1D sampled format:Unknown
              108:             TypePointer UniformConstant 107
- 109(g_tTex2df4):    108(ptr) Variable UniformConstant
-             110:             TypeImage 11(int) 2D sampled format:Unknown
+ 109(g_tTex1df4):    108(ptr) Variable UniformConstant
+             110:             TypeImage 11(int) 1D sampled format:Unknown
              111:             TypePointer UniformConstant 110
- 112(g_tTex2di4):    111(ptr) Variable UniformConstant
-             113:             TypeImage 18(int) 2D sampled format:Unknown
+ 112(g_tTex1di4):    111(ptr) Variable UniformConstant
+             113:             TypeImage 23(int) 1D sampled format:Unknown
              114:             TypePointer UniformConstant 113
- 115(g_tTex2du4):    114(ptr) Variable UniformConstant
-             116:             TypeImage 6(float) 3D sampled format:Unknown
+ 115(g_tTex1du4):    114(ptr) Variable UniformConstant
+             116:             TypeImage 6(float) 2D sampled format:Unknown
              117:             TypePointer UniformConstant 116
- 118(g_tTex3df4):    117(ptr) Variable UniformConstant
-             119:             TypeImage 11(int) 3D sampled format:Unknown
+ 118(g_tTex2df4):    117(ptr) Variable UniformConstant
+             119:             TypeImage 11(int) 2D sampled format:Unknown
              120:             TypePointer UniformConstant 119
- 121(g_tTex3di4):    120(ptr) Variable UniformConstant
-             122:             TypeImage 18(int) 3D sampled format:Unknown
+ 121(g_tTex2di4):    120(ptr) Variable UniformConstant
+             122:             TypeImage 23(int) 2D sampled format:Unknown
              123:             TypePointer UniformConstant 122
- 124(g_tTex3du4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 6(float) Cube sampled format:Unknown
+ 124(g_tTex2du4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 6(float) 3D sampled format:Unknown
              126:             TypePointer UniformConstant 125
- 127(g_tTexcdf4):    126(ptr) Variable UniformConstant
-             128:             TypeImage 11(int) Cube sampled format:Unknown
+ 127(g_tTex3df4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 11(int) 3D sampled format:Unknown
              129:             TypePointer UniformConstant 128
- 130(g_tTexcdi4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 18(int) Cube sampled format:Unknown
+ 130(g_tTex3di4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 23(int) 3D sampled format:Unknown
              132:             TypePointer UniformConstant 131
- 133(g_tTexcdu4):    132(ptr) Variable UniformConstant
-             134:             TypeImage 6(float) Cube array sampled format:Unknown
+ 133(g_tTex3du4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 6(float) Cube sampled format:Unknown
              135:             TypePointer UniformConstant 134
-136(g_tTexcdf4a):    135(ptr) Variable UniformConstant
-             137:             TypeImage 11(int) Cube array sampled format:Unknown
+ 136(g_tTexcdf4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 11(int) Cube sampled format:Unknown
              138:             TypePointer UniformConstant 137
-139(g_tTexcdi4a):    138(ptr) Variable UniformConstant
-             140:             TypeImage 18(int) Cube array sampled format:Unknown
+ 139(g_tTexcdi4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 23(int) Cube sampled format:Unknown
              141:             TypePointer UniformConstant 140
-142(g_tTexcdu4a):    141(ptr) Variable UniformConstant
-         143(c1):     20(ptr) Variable UniformConstant
-             144:             TypePointer UniformConstant 15(ivec2)
-         145(c2):    144(ptr) Variable UniformConstant
-         146(o1):     20(ptr) Variable UniformConstant
-         147(o2):    144(ptr) Variable UniformConstant
-         148(o3):     13(ptr) Variable UniformConstant
-         149(o4):     49(ptr) Variable UniformConstant
+ 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
          4(main):           2 Function None 3
                5:             Label
-       77(psout):     76(ptr) Variable Function
+       86(psout):     85(ptr) Variable Function
               10:           7 Load 9(g_tTex1df4a)
-              16:   12(ivec3) Load 14(c3)
-              17:   15(ivec2) VectorShuffle 16 16 0 1
-              21:     20(ptr) AccessChain 14(c3) 19
-              22:     11(int) Load 21
-              24:   23(fvec4) ImageFetch 10 17 Lod 22
-              28:          25 Load 27(g_tTex1di4a)
-              29:   12(ivec3) Load 14(c3)
-              30:   15(ivec2) VectorShuffle 29 29 0 1
-              31:     20(ptr) AccessChain 14(c3) 19
-              32:     11(int) Load 31
-              34:   33(ivec4) ImageFetch 28 30 Lod 32
-              38:          35 Load 37(g_tTex1du4a)
-              39:   12(ivec3) Load 14(c3)
-              40:   15(ivec2) VectorShuffle 39 39 0 1
-              41:     20(ptr) AccessChain 14(c3) 19
-              42:     11(int) Load 41
-              44:   43(ivec4) ImageFetch 38 40 Lod 42
-              48:          45 Load 47(g_tTex2df4a)
-              51:   33(ivec4) Load 50(c4)
-              52:   12(ivec3) VectorShuffle 51 51 0 1 2
-              54:     20(ptr) AccessChain 50(c4) 53
-              55:     11(int) Load 54
-              56:   23(fvec4) ImageFetch 48 52 Lod 55
-              60:          57 Load 59(g_tTex2di4a)
-              61:   33(ivec4) Load 50(c4)
-              62:   12(ivec3) VectorShuffle 61 61 0 1 2
-              63:     20(ptr) AccessChain 50(c4) 53
-              64:     11(int) Load 63
-              65:   33(ivec4) ImageFetch 60 62 Lod 64
-              69:          66 Load 68(g_tTex2du4a)
-              70:   33(ivec4) Load 50(c4)
-              71:   12(ivec3) VectorShuffle 70 70 0 1 2
-              72:     20(ptr) AccessChain 50(c4) 53
-              73:     11(int) Load 72
-              74:   43(ivec4) ImageFetch 69 71 Lod 73
-              82:     81(ptr) AccessChain 77(psout) 78
-                              Store 82 80
-              85:     84(ptr) AccessChain 77(psout) 83
-                              Store 85 79
-              88:     81(ptr) AccessChain 77(psout) 78
-              89:   23(fvec4) Load 88
-                              Store 87(Color) 89
-              92:     84(ptr) AccessChain 77(psout) 83
-              93:    6(float) Load 92
-                              Store 91(Depth) 93
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 41d44eee8c24a99abffe8f6c06ec28c360516391..c8e8eb63073ef6e2d238188405390f6ab55ef7e7 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -2,85 +2,124 @@ hlsl.load.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetch (temp 4-component vector of float)
 0:52        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:53      textureFetch (global 4-component vector of int)
+0:53      textureFetch (temp 4-component vector of int)
 0:53        'g_tTex1di4' (uniform itexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:54      textureFetch (global 4-component vector of uint)
+0:54      textureFetch (temp 4-component vector of uint)
 0:54        'g_tTex1du4' (uniform utexture1D)
 0:54        vector swizzle (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54        direct index (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Constant:
 0:54            1 (const int)
-0:57      textureFetch (global 4-component vector of float)
+0:57      textureFetch (temp 4-component vector of float)
 0:57        'g_tTex2df4' (uniform texture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:58      textureFetch (global 4-component vector of int)
+0:58      textureFetch (temp 4-component vector of int)
 0:58        'g_tTex2di4' (uniform itexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:59      textureFetch (global 4-component vector of uint)
+0:59      textureFetch (temp 4-component vector of uint)
 0:59        'g_tTex2du4' (uniform utexture2D)
 0:59        vector swizzle (temp 2-component vector of int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
 0:59            Constant:
 0:59              1 (const int)
 0:59        direct index (temp int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Constant:
 0:59            2 (const int)
-0:62      textureFetch (global 4-component vector of float)
+0:62      textureFetch (temp 4-component vector of float)
 0:62        'g_tTex3df4' (uniform texture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -89,13 +128,19 @@ gl_FragCoord origin is upper left
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:63      textureFetch (global 4-component vector of int)
+0:63      textureFetch (temp 4-component vector of int)
 0:63        'g_tTex3di4' (uniform itexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -104,13 +149,19 @@ gl_FragCoord origin is upper left
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
-0:64      textureFetch (global 4-component vector of uint)
+0:64      textureFetch (temp 4-component vector of uint)
 0:64        'g_tTex3du4' (uniform utexture3D)
 0:64        vector swizzle (temp 3-component vector of int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Sequence
 0:64            Constant:
 0:64              0 (const int)
@@ -119,7 +170,10 @@ gl_FragCoord origin is upper left
 0:64            Constant:
 0:64              2 (const int)
 0:64        direct index (temp int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Constant:
 0:64            3 (const int)
 0:72      move second child to first child (temp 4-component vector of float)
@@ -139,8 +193,8 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -155,6 +209,8 @@ gl_FragCoord origin is upper left
 0:75                1 (const int)
 0:75        Branch: Return
 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)
@@ -177,16 +233,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -195,85 +242,124 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetch (temp 4-component vector of float)
 0:52        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:53      textureFetch (global 4-component vector of int)
+0:53      textureFetch (temp 4-component vector of int)
 0:53        'g_tTex1di4' (uniform itexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:54      textureFetch (global 4-component vector of uint)
+0:54      textureFetch (temp 4-component vector of uint)
 0:54        'g_tTex1du4' (uniform utexture1D)
 0:54        vector swizzle (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54        direct index (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Constant:
 0:54            1 (const int)
-0:57      textureFetch (global 4-component vector of float)
+0:57      textureFetch (temp 4-component vector of float)
 0:57        'g_tTex2df4' (uniform texture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:58      textureFetch (global 4-component vector of int)
+0:58      textureFetch (temp 4-component vector of int)
 0:58        'g_tTex2di4' (uniform itexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:59      textureFetch (global 4-component vector of uint)
+0:59      textureFetch (temp 4-component vector of uint)
 0:59        'g_tTex2du4' (uniform utexture2D)
 0:59        vector swizzle (temp 2-component vector of int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
 0:59            Constant:
 0:59              1 (const int)
 0:59        direct index (temp int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Constant:
 0:59            2 (const int)
-0:62      textureFetch (global 4-component vector of float)
+0:62      textureFetch (temp 4-component vector of float)
 0:62        'g_tTex3df4' (uniform texture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -282,13 +368,19 @@ gl_FragCoord origin is upper left
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:63      textureFetch (global 4-component vector of int)
+0:63      textureFetch (temp 4-component vector of int)
 0:63        'g_tTex3di4' (uniform itexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -297,13 +389,19 @@ gl_FragCoord origin is upper left
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
-0:64      textureFetch (global 4-component vector of uint)
+0:64      textureFetch (temp 4-component vector of uint)
 0:64        'g_tTex3du4' (uniform utexture3D)
 0:64        vector swizzle (temp 3-component vector of int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Sequence
 0:64            Constant:
 0:64              0 (const int)
@@ -312,7 +410,10 @@ gl_FragCoord origin is upper left
 0:64            Constant:
 0:64              2 (const int)
 0:64        direct index (temp int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Constant:
 0:64            3 (const int)
 0:72      move second child to first child (temp 4-component vector of float)
@@ -332,8 +433,8 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -348,6 +449,8 @@ gl_FragCoord origin is upper left
 0:75                1 (const int)
 0:75        Branch: Return
 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)
@@ -370,91 +473,94 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 170
+// Id's are bound by 172
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 118 122
+                              EntryPoint Fragment 4  "main" 125 129
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "g_tTex1df4"
-                              Name 14  "c2"
-                              Name 27  "g_tTex1di4"
-                              Name 37  "g_tTex1du4"
-                              Name 47  "g_tTex2df4"
-                              Name 51  "c3"
-                              Name 60  "g_tTex2di4"
-                              Name 69  "g_tTex2du4"
-                              Name 78  "g_tTex3df4"
-                              Name 81  "c4"
-                              Name 90  "g_tTex3di4"
-                              Name 99  "g_tTex3du4"
-                              Name 106  "PS_OUTPUT"
-                              MemberName 106(PS_OUTPUT) 0  "Color"
-                              MemberName 106(PS_OUTPUT) 1  "Depth"
-                              Name 108  "psout"
-                              Name 118  "Color"
-                              Name 122  "Depth"
-                              Name 128  "g_sSamp"
-                              Name 131  "g_tTexcdf4"
-                              Name 134  "g_tTexcdi4"
-                              Name 137  "g_tTexcdu4"
-                              Name 140  "g_tTex1df4a"
-                              Name 143  "g_tTex1di4a"
-                              Name 146  "g_tTex1du4a"
-                              Name 149  "g_tTex2df4a"
-                              Name 152  "g_tTex2di4a"
-                              Name 155  "g_tTex2du4a"
-                              Name 158  "g_tTexcdf4a"
-                              Name 161  "g_tTexcdi4a"
-                              Name 164  "g_tTexcdu4a"
-                              Name 165  "c1"
-                              Name 166  "o1"
-                              Name 167  "o2"
-                              Name 168  "o3"
-                              Name 169  "o4"
+                              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
-                              Decorate 27(g_tTex1di4) DescriptorSet 0
-                              Decorate 37(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex2df4) DescriptorSet 0
-                              Decorate 60(g_tTex2di4) DescriptorSet 0
-                              Decorate 69(g_tTex2du4) DescriptorSet 0
-                              Decorate 78(g_tTex3df4) DescriptorSet 0
-                              Decorate 90(g_tTex3di4) DescriptorSet 0
-                              Decorate 99(g_tTex3du4) DescriptorSet 0
-                              Decorate 118(Color) Location 0
-                              Decorate 122(Depth) BuiltIn FragDepth
-                              Decorate 128(g_sSamp) DescriptorSet 0
-                              Decorate 128(g_sSamp) Binding 0
-                              Decorate 131(g_tTexcdf4) DescriptorSet 0
-                              Decorate 134(g_tTexcdi4) DescriptorSet 0
-                              Decorate 137(g_tTexcdu4) DescriptorSet 0
-                              Decorate 140(g_tTex1df4a) DescriptorSet 0
-                              Decorate 143(g_tTex1di4a) DescriptorSet 0
-                              Decorate 146(g_tTex1du4a) DescriptorSet 0
-                              Decorate 149(g_tTex2df4a) DescriptorSet 0
-                              Decorate 152(g_tTex2di4a) DescriptorSet 0
-                              Decorate 155(g_tTex2du4a) DescriptorSet 0
-                              Decorate 158(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 161(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 164(g_tTexcdu4a) 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 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -463,168 +569,170 @@ gl_FragCoord origin is upper left
    9(g_tTex1df4):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
               12:             TypeVector 11(int) 2
-              13:             TypePointer UniformConstant 12(ivec2)
-          14(c2):     13(ptr) Variable UniformConstant
-              15:             TypeInt 32 0
-              16:     15(int) Constant 0
-              17:             TypePointer UniformConstant 11(int)
-              20:     15(int) Constant 1
-              23:             TypeVector 6(float) 4
-              25:             TypeImage 11(int) 1D sampled format:Unknown
-              26:             TypePointer UniformConstant 25
-  27(g_tTex1di4):     26(ptr) Variable UniformConstant
-              33:             TypeVector 11(int) 4
-              35:             TypeImage 15(int) 1D sampled format:Unknown
-              36:             TypePointer UniformConstant 35
-  37(g_tTex1du4):     36(ptr) Variable UniformConstant
-              43:             TypeVector 15(int) 4
-              45:             TypeImage 6(float) 2D sampled format:Unknown
-              46:             TypePointer UniformConstant 45
-  47(g_tTex2df4):     46(ptr) Variable UniformConstant
-              49:             TypeVector 11(int) 3
-              50:             TypePointer UniformConstant 49(ivec3)
-          51(c3):     50(ptr) Variable UniformConstant
-              54:     15(int) Constant 2
-              58:             TypeImage 11(int) 2D sampled format:Unknown
-              59:             TypePointer UniformConstant 58
-  60(g_tTex2di4):     59(ptr) Variable UniformConstant
-              67:             TypeImage 15(int) 2D sampled format:Unknown
-              68:             TypePointer UniformConstant 67
-  69(g_tTex2du4):     68(ptr) Variable UniformConstant
-              76:             TypeImage 6(float) 3D sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-  78(g_tTex3df4):     77(ptr) Variable UniformConstant
-              80:             TypePointer UniformConstant 33(ivec4)
-          81(c4):     80(ptr) Variable UniformConstant
-              84:     15(int) Constant 3
-              88:             TypeImage 11(int) 3D sampled format:Unknown
-              89:             TypePointer UniformConstant 88
-  90(g_tTex3di4):     89(ptr) Variable UniformConstant
-              97:             TypeImage 15(int) 3D sampled format:Unknown
-              98:             TypePointer UniformConstant 97
-  99(g_tTex3du4):     98(ptr) Variable UniformConstant
-  106(PS_OUTPUT):             TypeStruct 23(fvec4) 6(float)
-             107:             TypePointer Function 106(PS_OUTPUT)
-             109:     11(int) Constant 0
-             110:    6(float) Constant 1065353216
-             111:   23(fvec4) ConstantComposite 110 110 110 110
-             112:             TypePointer Function 23(fvec4)
-             114:     11(int) Constant 1
-             115:             TypePointer Function 6(float)
-             117:             TypePointer Output 23(fvec4)
-      118(Color):    117(ptr) Variable Output
-             121:             TypePointer Output 6(float)
-      122(Depth):    121(ptr) Variable Output
-             126:             TypeSampler
-             127:             TypePointer UniformConstant 126
-    128(g_sSamp):    127(ptr) Variable UniformConstant
-             129:             TypeImage 6(float) Cube sampled format:Unknown
-             130:             TypePointer UniformConstant 129
- 131(g_tTexcdf4):    130(ptr) Variable UniformConstant
-             132:             TypeImage 11(int) Cube sampled format:Unknown
-             133:             TypePointer UniformConstant 132
- 134(g_tTexcdi4):    133(ptr) Variable UniformConstant
-             135:             TypeImage 15(int) Cube sampled format:Unknown
-             136:             TypePointer UniformConstant 135
- 137(g_tTexcdu4):    136(ptr) Variable UniformConstant
-             138:             TypeImage 6(float) 1D array sampled format:Unknown
-             139:             TypePointer UniformConstant 138
-140(g_tTex1df4a):    139(ptr) Variable UniformConstant
-             141:             TypeImage 11(int) 1D array sampled format:Unknown
-             142:             TypePointer UniformConstant 141
-143(g_tTex1di4a):    142(ptr) Variable UniformConstant
-             144:             TypeImage 15(int) 1D array sampled format:Unknown
-             145:             TypePointer UniformConstant 144
-146(g_tTex1du4a):    145(ptr) Variable UniformConstant
-             147:             TypeImage 6(float) 2D array sampled format:Unknown
-             148:             TypePointer UniformConstant 147
-149(g_tTex2df4a):    148(ptr) Variable UniformConstant
-             150:             TypeImage 11(int) 2D array sampled format:Unknown
-             151:             TypePointer UniformConstant 150
-152(g_tTex2di4a):    151(ptr) Variable UniformConstant
-             153:             TypeImage 15(int) 2D array sampled format:Unknown
-             154:             TypePointer UniformConstant 153
-155(g_tTex2du4a):    154(ptr) Variable UniformConstant
-             156:             TypeImage 6(float) Cube array sampled format:Unknown
-             157:             TypePointer UniformConstant 156
-158(g_tTexcdf4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 11(int) Cube array sampled format:Unknown
-             160:             TypePointer UniformConstant 159
-161(g_tTexcdi4a):    160(ptr) Variable UniformConstant
-             162:             TypeImage 15(int) Cube array sampled format:Unknown
-             163:             TypePointer UniformConstant 162
-164(g_tTexcdu4a):    163(ptr) Variable UniformConstant
-         165(c1):     17(ptr) Variable UniformConstant
-         166(o1):     17(ptr) Variable UniformConstant
-         167(o2):     13(ptr) Variable UniformConstant
-         168(o3):     50(ptr) Variable UniformConstant
-         169(o4):     80(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
-      108(psout):    107(ptr) Variable Function
+      116(psout):    115(ptr) Variable Function
               10:           7 Load 9(g_tTex1df4)
-              18:     17(ptr) AccessChain 14(c2) 16
-              19:     11(int) Load 18
-              21:     17(ptr) AccessChain 14(c2) 20
-              22:     11(int) Load 21
-              24:   23(fvec4) ImageFetch 10 19 Lod 22
-              28:          25 Load 27(g_tTex1di4)
-              29:     17(ptr) AccessChain 14(c2) 16
-              30:     11(int) Load 29
-              31:     17(ptr) AccessChain 14(c2) 20
-              32:     11(int) Load 31
-              34:   33(ivec4) ImageFetch 28 30 Lod 32
-              38:          35 Load 37(g_tTex1du4)
-              39:     17(ptr) AccessChain 14(c2) 16
-              40:     11(int) Load 39
-              41:     17(ptr) AccessChain 14(c2) 20
-              42:     11(int) Load 41
-              44:   43(ivec4) ImageFetch 38 40 Lod 42
-              48:          45 Load 47(g_tTex2df4)
-              52:   49(ivec3) Load 51(c3)
-              53:   12(ivec2) VectorShuffle 52 52 0 1
-              55:     17(ptr) AccessChain 51(c3) 54
-              56:     11(int) Load 55
-              57:   23(fvec4) ImageFetch 48 53 Lod 56
-              61:          58 Load 60(g_tTex2di4)
-              62:   49(ivec3) Load 51(c3)
-              63:   12(ivec2) VectorShuffle 62 62 0 1
-              64:     17(ptr) AccessChain 51(c3) 54
-              65:     11(int) Load 64
-              66:   33(ivec4) ImageFetch 61 63 Lod 65
-              70:          67 Load 69(g_tTex2du4)
-              71:   49(ivec3) Load 51(c3)
-              72:   12(ivec2) VectorShuffle 71 71 0 1
-              73:     17(ptr) AccessChain 51(c3) 54
-              74:     11(int) Load 73
-              75:   43(ivec4) ImageFetch 70 72 Lod 74
-              79:          76 Load 78(g_tTex3df4)
-              82:   33(ivec4) Load 81(c4)
-              83:   49(ivec3) VectorShuffle 82 82 0 1 2
-              85:     17(ptr) AccessChain 81(c4) 84
-              86:     11(int) Load 85
-              87:   23(fvec4) ImageFetch 79 83 Lod 86
-              91:          88 Load 90(g_tTex3di4)
-              92:   33(ivec4) Load 81(c4)
-              93:   49(ivec3) VectorShuffle 92 92 0 1 2
-              94:     17(ptr) AccessChain 81(c4) 84
-              95:     11(int) Load 94
-              96:   33(ivec4) ImageFetch 91 93 Lod 95
-             100:          97 Load 99(g_tTex3du4)
-             101:   33(ivec4) Load 81(c4)
-             102:   49(ivec3) VectorShuffle 101 101 0 1 2
-             103:     17(ptr) AccessChain 81(c4) 84
-             104:     11(int) Load 103
-             105:   43(ivec4) ImageFetch 100 102 Lod 104
-             113:    112(ptr) AccessChain 108(psout) 109
-                              Store 113 111
-             116:    115(ptr) AccessChain 108(psout) 114
-                              Store 116 110
-             119:    112(ptr) AccessChain 108(psout) 109
-             120:   23(fvec4) Load 119
-                              Store 118(Color) 120
-             123:    115(ptr) AccessChain 108(psout) 114
-             124:    6(float) Load 123
-                              Store 122(Depth) 124
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 62e6128d128f75129ac279d0d801e514842f44b2..a86f0aea977f17ac06a3c25b43781fac84e5183c 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -1,85 +1,124 @@
 hlsl.load.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:47  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:47  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:47    Function Parameters: 
 0:?     Sequence
-0:51      textureFetch (global 4-component vector of float)
+0:51      textureFetch (temp 4-component vector of float)
 0:51        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:51        vector swizzle (temp int)
-0:51          'c2' (uniform 2-component vector of int)
+0:51          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51            '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:51            Constant:
+0:51              1 (const uint)
 0:51          Sequence
 0:51            Constant:
 0:51              0 (const int)
 0:51        direct index (temp int)
-0:51          'c2' (uniform 2-component vector of int)
+0:51          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51            '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:51            Constant:
+0:51              1 (const uint)
 0:51          Constant:
 0:51            1 (const int)
-0:52      textureFetch (global 4-component vector of int)
+0:52      textureFetch (temp 4-component vector of int)
 0:52        'g_tTex1di4' (uniform itexture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:53      textureFetch (global 4-component vector of uint)
+0:53      textureFetch (temp 4-component vector of uint)
 0:53        'g_tTex1du4' (uniform utexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:56      textureFetch (global 4-component vector of float)
+0:56      textureFetch (temp 4-component vector of float)
 0:56        'g_tTex2df4' (uniform texture2D)
 0:56        vector swizzle (temp 2-component vector of int)
-0:56          'c3' (uniform 3-component vector of int)
+0:56          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56            '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:56            Constant:
+0:56              2 (const uint)
 0:56          Sequence
 0:56            Constant:
 0:56              0 (const int)
 0:56            Constant:
 0:56              1 (const int)
 0:56        direct index (temp int)
-0:56          'c3' (uniform 3-component vector of int)
+0:56          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56            '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:56            Constant:
+0:56              2 (const uint)
 0:56          Constant:
 0:56            2 (const int)
-0:57      textureFetch (global 4-component vector of int)
+0:57      textureFetch (temp 4-component vector of int)
 0:57        'g_tTex2di4' (uniform itexture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:58      textureFetch (global 4-component vector of uint)
+0:58      textureFetch (temp 4-component vector of uint)
 0:58        'g_tTex2du4' (uniform utexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:61      textureFetch (global 4-component vector of float)
+0:61      textureFetch (temp 4-component vector of float)
 0:61        'g_tTex3df4' (uniform texture3D)
 0:61        vector swizzle (temp 3-component vector of int)
-0:61          'c4' (uniform 4-component vector of int)
+0:61          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:61            '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:61            Constant:
+0:61              3 (const uint)
 0:61          Sequence
 0:61            Constant:
 0:61              0 (const int)
@@ -88,13 +127,19 @@ Shader version: 450
 0:61            Constant:
 0:61              2 (const int)
 0:61        direct index (temp int)
-0:61          'c4' (uniform 4-component vector of int)
+0:61          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:61            '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:61            Constant:
+0:61              3 (const uint)
 0:61          Constant:
 0:61            3 (const int)
-0:62      textureFetch (global 4-component vector of int)
+0:62      textureFetch (temp 4-component vector of int)
 0:62        'g_tTex3di4' (uniform itexture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -103,13 +148,19 @@ Shader version: 450
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:63      textureFetch (global 4-component vector of uint)
+0:63      textureFetch (temp 4-component vector of uint)
 0:63        'g_tTex3du4' (uniform utexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -118,7 +169,10 @@ Shader version: 450
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -131,8 +185,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -141,6 +195,7 @@ Shader version: 450
 0:69                0 (const int)
 0:69        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -163,15 +218,7 @@ Shader version: 450
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-0:?     'Pos' (out 4-component vector of float Position)
+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})
 
 
 Linked vertex stage:
@@ -179,85 +226,124 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:47  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:47  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:47    Function Parameters: 
 0:?     Sequence
-0:51      textureFetch (global 4-component vector of float)
+0:51      textureFetch (temp 4-component vector of float)
 0:51        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:51        vector swizzle (temp int)
-0:51          'c2' (uniform 2-component vector of int)
+0:51          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51            '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:51            Constant:
+0:51              1 (const uint)
 0:51          Sequence
 0:51            Constant:
 0:51              0 (const int)
 0:51        direct index (temp int)
-0:51          'c2' (uniform 2-component vector of int)
+0:51          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51            '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:51            Constant:
+0:51              1 (const uint)
 0:51          Constant:
 0:51            1 (const int)
-0:52      textureFetch (global 4-component vector of int)
+0:52      textureFetch (temp 4-component vector of int)
 0:52        'g_tTex1di4' (uniform itexture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:53      textureFetch (global 4-component vector of uint)
+0:53      textureFetch (temp 4-component vector of uint)
 0:53        'g_tTex1du4' (uniform utexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:56      textureFetch (global 4-component vector of float)
+0:56      textureFetch (temp 4-component vector of float)
 0:56        'g_tTex2df4' (uniform texture2D)
 0:56        vector swizzle (temp 2-component vector of int)
-0:56          'c3' (uniform 3-component vector of int)
+0:56          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56            '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:56            Constant:
+0:56              2 (const uint)
 0:56          Sequence
 0:56            Constant:
 0:56              0 (const int)
 0:56            Constant:
 0:56              1 (const int)
 0:56        direct index (temp int)
-0:56          'c3' (uniform 3-component vector of int)
+0:56          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56            '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:56            Constant:
+0:56              2 (const uint)
 0:56          Constant:
 0:56            2 (const int)
-0:57      textureFetch (global 4-component vector of int)
+0:57      textureFetch (temp 4-component vector of int)
 0:57        'g_tTex2di4' (uniform itexture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:58      textureFetch (global 4-component vector of uint)
+0:58      textureFetch (temp 4-component vector of uint)
 0:58        'g_tTex2du4' (uniform utexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:61      textureFetch (global 4-component vector of float)
+0:61      textureFetch (temp 4-component vector of float)
 0:61        'g_tTex3df4' (uniform texture3D)
 0:61        vector swizzle (temp 3-component vector of int)
-0:61          'c4' (uniform 4-component vector of int)
+0:61          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:61            '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:61            Constant:
+0:61              3 (const uint)
 0:61          Sequence
 0:61            Constant:
 0:61              0 (const int)
@@ -266,13 +352,19 @@ Shader version: 450
 0:61            Constant:
 0:61              2 (const int)
 0:61        direct index (temp int)
-0:61          'c4' (uniform 4-component vector of int)
+0:61          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:61            '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:61            Constant:
+0:61              3 (const uint)
 0:61          Constant:
 0:61            3 (const int)
-0:62      textureFetch (global 4-component vector of int)
+0:62      textureFetch (temp 4-component vector of int)
 0:62        'g_tTex3di4' (uniform itexture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -281,13 +373,19 @@ Shader version: 450
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:63      textureFetch (global 4-component vector of uint)
+0:63      textureFetch (temp 4-component vector of uint)
 0:63        'g_tTex3du4' (uniform utexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -296,7 +394,10 @@ Shader version: 450
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
 0:67      move second child to first child (temp 4-component vector of float)
@@ -309,8 +410,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -319,6 +420,7 @@ Shader version: 450
 0:69                0 (const int)
 0:69        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -341,86 +443,90 @@ Shader version: 450
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-0:?     'Pos' (out 4-component vector of float Position)
+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 163
+// Id's are bound by 166
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 115
+                              EntryPoint Vertex 4  "main" 123
                               Name 4  "main"
                               Name 9  "g_tTex1df4"
-                              Name 14  "c2"
-                              Name 27  "g_tTex1di4"
-                              Name 37  "g_tTex1du4"
-                              Name 47  "g_tTex2df4"
-                              Name 51  "c3"
-                              Name 60  "g_tTex2di4"
-                              Name 69  "g_tTex2du4"
-                              Name 78  "g_tTex3df4"
-                              Name 81  "c4"
-                              Name 90  "g_tTex3di4"
-                              Name 99  "g_tTex3du4"
-                              Name 106  "VS_OUTPUT"
-                              MemberName 106(VS_OUTPUT) 0  "Pos"
-                              Name 108  "vsout"
-                              Name 115  "Pos"
-                              Name 121  "g_sSamp"
-                              Name 124  "g_tTexcdf4"
-                              Name 127  "g_tTexcdi4"
-                              Name 130  "g_tTexcdu4"
-                              Name 133  "g_tTex1df4a"
-                              Name 136  "g_tTex1di4a"
-                              Name 139  "g_tTex1du4a"
-                              Name 142  "g_tTex2df4a"
-                              Name 145  "g_tTex2di4a"
-                              Name 148  "g_tTex2du4a"
-                              Name 151  "g_tTexcdf4a"
-                              Name 154  "g_tTexcdi4a"
-                              Name 157  "g_tTexcdu4a"
-                              Name 158  "c1"
-                              Name 159  "o1"
-                              Name 160  "o2"
-                              Name 161  "o3"
-                              Name 162  "o4"
+                              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"
                               Decorate 9(g_tTex1df4) DescriptorSet 0
                               Decorate 9(g_tTex1df4) Binding 0
-                              Decorate 27(g_tTex1di4) DescriptorSet 0
-                              Decorate 37(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex2df4) DescriptorSet 0
-                              Decorate 60(g_tTex2di4) DescriptorSet 0
-                              Decorate 69(g_tTex2du4) DescriptorSet 0
-                              Decorate 78(g_tTex3df4) DescriptorSet 0
-                              Decorate 90(g_tTex3di4) DescriptorSet 0
-                              Decorate 99(g_tTex3du4) DescriptorSet 0
-                              Decorate 115(Pos) BuiltIn Position
-                              Decorate 121(g_sSamp) DescriptorSet 0
-                              Decorate 121(g_sSamp) Binding 0
-                              Decorate 124(g_tTexcdf4) DescriptorSet 0
-                              Decorate 127(g_tTexcdi4) DescriptorSet 0
-                              Decorate 130(g_tTexcdu4) DescriptorSet 0
-                              Decorate 133(g_tTex1df4a) DescriptorSet 0
-                              Decorate 136(g_tTex1di4a) DescriptorSet 0
-                              Decorate 139(g_tTex1du4a) DescriptorSet 0
-                              Decorate 142(g_tTex2df4a) DescriptorSet 0
-                              Decorate 145(g_tTex2di4a) DescriptorSet 0
-                              Decorate 148(g_tTex2du4a) DescriptorSet 0
-                              Decorate 151(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 154(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 157(g_tTexcdu4a) 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 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -429,159 +535,162 @@ Shader version: 450
    9(g_tTex1df4):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
               12:             TypeVector 11(int) 2
-              13:             TypePointer UniformConstant 12(ivec2)
-          14(c2):     13(ptr) Variable UniformConstant
-              15:             TypeInt 32 0
-              16:     15(int) Constant 0
-              17:             TypePointer UniformConstant 11(int)
-              20:     15(int) Constant 1
-              23:             TypeVector 6(float) 4
-              25:             TypeImage 11(int) 1D sampled format:Unknown
-              26:             TypePointer UniformConstant 25
-  27(g_tTex1di4):     26(ptr) Variable UniformConstant
-              33:             TypeVector 11(int) 4
-              35:             TypeImage 15(int) 1D sampled format:Unknown
-              36:             TypePointer UniformConstant 35
-  37(g_tTex1du4):     36(ptr) Variable UniformConstant
-              43:             TypeVector 15(int) 4
-              45:             TypeImage 6(float) 2D sampled format:Unknown
-              46:             TypePointer UniformConstant 45
-  47(g_tTex2df4):     46(ptr) Variable UniformConstant
-              49:             TypeVector 11(int) 3
-              50:             TypePointer UniformConstant 49(ivec3)
-          51(c3):     50(ptr) Variable UniformConstant
-              54:     15(int) Constant 2
-              58:             TypeImage 11(int) 2D sampled format:Unknown
-              59:             TypePointer UniformConstant 58
-  60(g_tTex2di4):     59(ptr) Variable UniformConstant
-              67:             TypeImage 15(int) 2D sampled format:Unknown
-              68:             TypePointer UniformConstant 67
-  69(g_tTex2du4):     68(ptr) Variable UniformConstant
-              76:             TypeImage 6(float) 3D sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-  78(g_tTex3df4):     77(ptr) Variable UniformConstant
-              80:             TypePointer UniformConstant 33(ivec4)
-          81(c4):     80(ptr) Variable UniformConstant
-              84:     15(int) Constant 3
-              88:             TypeImage 11(int) 3D sampled format:Unknown
-              89:             TypePointer UniformConstant 88
-  90(g_tTex3di4):     89(ptr) Variable UniformConstant
-              97:             TypeImage 15(int) 3D sampled format:Unknown
-              98:             TypePointer UniformConstant 97
-  99(g_tTex3du4):     98(ptr) Variable UniformConstant
-  106(VS_OUTPUT):             TypeStruct 23(fvec4)
-             107:             TypePointer Function 106(VS_OUTPUT)
-             109:     11(int) Constant 0
-             110:    6(float) Constant 0
-             111:   23(fvec4) ConstantComposite 110 110 110 110
-             112:             TypePointer Function 23(fvec4)
-             114:             TypePointer Output 23(fvec4)
-        115(Pos):    114(ptr) Variable Output
-             119:             TypeSampler
-             120:             TypePointer UniformConstant 119
-    121(g_sSamp):    120(ptr) Variable UniformConstant
-             122:             TypeImage 6(float) Cube sampled format:Unknown
-             123:             TypePointer UniformConstant 122
- 124(g_tTexcdf4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 11(int) Cube sampled format:Unknown
-             126:             TypePointer UniformConstant 125
- 127(g_tTexcdi4):    126(ptr) Variable UniformConstant
-             128:             TypeImage 15(int) Cube sampled format:Unknown
-             129:             TypePointer UniformConstant 128
- 130(g_tTexcdu4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 6(float) 1D array sampled format:Unknown
-             132:             TypePointer UniformConstant 131
-133(g_tTex1df4a):    132(ptr) Variable UniformConstant
-             134:             TypeImage 11(int) 1D array sampled format:Unknown
-             135:             TypePointer UniformConstant 134
-136(g_tTex1di4a):    135(ptr) Variable UniformConstant
-             137:             TypeImage 15(int) 1D array sampled format:Unknown
-             138:             TypePointer UniformConstant 137
-139(g_tTex1du4a):    138(ptr) Variable UniformConstant
-             140:             TypeImage 6(float) 2D array sampled format:Unknown
-             141:             TypePointer UniformConstant 140
-142(g_tTex2df4a):    141(ptr) Variable UniformConstant
-             143:             TypeImage 11(int) 2D array sampled format:Unknown
-             144:             TypePointer UniformConstant 143
-145(g_tTex2di4a):    144(ptr) Variable UniformConstant
-             146:             TypeImage 15(int) 2D array sampled format:Unknown
-             147:             TypePointer UniformConstant 146
-148(g_tTex2du4a):    147(ptr) Variable UniformConstant
-             149:             TypeImage 6(float) Cube array sampled format:Unknown
-             150:             TypePointer UniformConstant 149
-151(g_tTexcdf4a):    150(ptr) Variable UniformConstant
-             152:             TypeImage 11(int) Cube array sampled format:Unknown
-             153:             TypePointer UniformConstant 152
-154(g_tTexcdi4a):    153(ptr) Variable UniformConstant
-             155:             TypeImage 15(int) Cube array sampled format:Unknown
-             156:             TypePointer UniformConstant 155
-157(g_tTexcdu4a):    156(ptr) Variable UniformConstant
-         158(c1):     17(ptr) Variable UniformConstant
-         159(o1):     17(ptr) Variable UniformConstant
-         160(o2):     13(ptr) Variable UniformConstant
-         161(o3):     50(ptr) Variable UniformConstant
-         162(o4):     80(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
-      108(vsout):    107(ptr) Variable Function
+      116(vsout):    115(ptr) Variable Function
               10:           7 Load 9(g_tTex1df4)
-              18:     17(ptr) AccessChain 14(c2) 16
-              19:     11(int) Load 18
-              21:     17(ptr) AccessChain 14(c2) 20
-              22:     11(int) Load 21
-              24:   23(fvec4) ImageFetch 10 19 Lod 22
-              28:          25 Load 27(g_tTex1di4)
-              29:     17(ptr) AccessChain 14(c2) 16
-              30:     11(int) Load 29
-              31:     17(ptr) AccessChain 14(c2) 20
-              32:     11(int) Load 31
-              34:   33(ivec4) ImageFetch 28 30 Lod 32
-              38:          35 Load 37(g_tTex1du4)
-              39:     17(ptr) AccessChain 14(c2) 16
-              40:     11(int) Load 39
-              41:     17(ptr) AccessChain 14(c2) 20
-              42:     11(int) Load 41
-              44:   43(ivec4) ImageFetch 38 40 Lod 42
-              48:          45 Load 47(g_tTex2df4)
-              52:   49(ivec3) Load 51(c3)
-              53:   12(ivec2) VectorShuffle 52 52 0 1
-              55:     17(ptr) AccessChain 51(c3) 54
-              56:     11(int) Load 55
-              57:   23(fvec4) ImageFetch 48 53 Lod 56
-              61:          58 Load 60(g_tTex2di4)
-              62:   49(ivec3) Load 51(c3)
-              63:   12(ivec2) VectorShuffle 62 62 0 1
-              64:     17(ptr) AccessChain 51(c3) 54
-              65:     11(int) Load 64
-              66:   33(ivec4) ImageFetch 61 63 Lod 65
-              70:          67 Load 69(g_tTex2du4)
-              71:   49(ivec3) Load 51(c3)
-              72:   12(ivec2) VectorShuffle 71 71 0 1
-              73:     17(ptr) AccessChain 51(c3) 54
-              74:     11(int) Load 73
-              75:   43(ivec4) ImageFetch 70 72 Lod 74
-              79:          76 Load 78(g_tTex3df4)
-              82:   33(ivec4) Load 81(c4)
-              83:   49(ivec3) VectorShuffle 82 82 0 1 2
-              85:     17(ptr) AccessChain 81(c4) 84
-              86:     11(int) Load 85
-              87:   23(fvec4) ImageFetch 79 83 Lod 86
-              91:          88 Load 90(g_tTex3di4)
-              92:   33(ivec4) Load 81(c4)
-              93:   49(ivec3) VectorShuffle 92 92 0 1 2
-              94:     17(ptr) AccessChain 81(c4) 84
-              95:     11(int) Load 94
-              96:   33(ivec4) ImageFetch 91 93 Lod 95
-             100:          97 Load 99(g_tTex3du4)
-             101:   33(ivec4) Load 81(c4)
-             102:   49(ivec3) VectorShuffle 101 101 0 1 2
-             103:     17(ptr) AccessChain 81(c4) 84
-             104:     11(int) Load 103
-             105:   43(ivec4) ImageFetch 100 102 Lod 104
-             113:    112(ptr) AccessChain 108(vsout) 109
-                              Store 113 111
-             116:    112(ptr) AccessChain 108(vsout) 109
-             117:   23(fvec4) Load 116
-                              Store 115(Pos) 117
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 012af868758b99e9a44aa79c42f28014580366f8..c80ddcfe91ed8e27c2d3fbd94453f6616fcfb447 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -2,27 +2,36 @@ hlsl.load.buffer.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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
 0:28        move second child to first child (temp 4-component vector of float)
 0:28          'r00' (temp 4-component vector of float)
-0:28          textureFetch (global 4-component vector of float)
-0:28            'g_tTexbf4' (uniform samplerBuffer)
-0:28            'c1' (uniform int)
+0:28          textureFetch (temp 4-component vector of float)
+0:28            'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
+0:28            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:28              '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:28              Constant:
+0:28                0 (const uint)
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of int)
 0:29          'r01' (temp 4-component vector of int)
-0:29          textureFetch (global 4-component vector of int)
-0:29            'g_tTexbi4' (uniform isamplerBuffer)
-0:29            'c1' (uniform int)
+0:29          textureFetch (temp 4-component vector of int)
+0:29            'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
+0:29            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:29              '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:29              Constant:
+0:29                0 (const uint)
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of uint)
 0:30          'r02' (temp 4-component vector of uint)
-0:30          textureFetch (global 4-component vector of uint)
-0:30            'g_tTexbu4' (uniform usamplerBuffer)
-0:30            'c1' (uniform int)
+0:30          textureFetch (temp 4-component vector of uint)
+0:30            'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
+0:30            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:30              '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:30              Constant:
+0:30                0 (const uint)
 0:34      move second child to first child (temp 4-component vector of float)
 0:34        Color: direct index for structure (temp 4-component vector of float)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -40,8 +49,8 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -56,20 +65,13 @@ gl_FragCoord origin is upper left
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
-0:?     'g_tTexbf4_test' (layout(binding=0 ) uniform samplerBuffer)
-0:?     'g_tTexbf4' (uniform samplerBuffer)
-0:?     'g_tTexbi4' (uniform isamplerBuffer)
-0:?     'g_tTexbu4' (uniform usamplerBuffer)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
 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:?     '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})
 
 
 Linked fragment stage:
@@ -78,27 +80,36 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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
 0:28        move second child to first child (temp 4-component vector of float)
 0:28          'r00' (temp 4-component vector of float)
-0:28          textureFetch (global 4-component vector of float)
-0:28            'g_tTexbf4' (uniform samplerBuffer)
-0:28            'c1' (uniform int)
+0:28          textureFetch (temp 4-component vector of float)
+0:28            'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
+0:28            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:28              '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:28              Constant:
+0:28                0 (const uint)
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of int)
 0:29          'r01' (temp 4-component vector of int)
-0:29          textureFetch (global 4-component vector of int)
-0:29            'g_tTexbi4' (uniform isamplerBuffer)
-0:29            'c1' (uniform int)
+0:29          textureFetch (temp 4-component vector of int)
+0:29            'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
+0:29            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:29              '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:29              Constant:
+0:29                0 (const uint)
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of uint)
 0:30          'r02' (temp 4-component vector of uint)
-0:30          textureFetch (global 4-component vector of uint)
-0:30            'g_tTexbu4' (uniform usamplerBuffer)
-0:30            'c1' (uniform int)
+0:30          textureFetch (temp 4-component vector of uint)
+0:30            'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
+0:30            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:30              '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:30              Constant:
+0:30                0 (const uint)
 0:34      move second child to first child (temp 4-component vector of float)
 0:34        Color: direct index for structure (temp 4-component vector of float)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -116,8 +127,8 @@ gl_FragCoord origin is upper left
 0:35            1 (const int)
 0:35        Constant:
 0:35          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -132,139 +143,139 @@ gl_FragCoord origin is upper left
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
-0:?     'g_tTexbf4_test' (layout(binding=0 ) uniform samplerBuffer)
-0:?     'g_tTexbf4' (uniform samplerBuffer)
-0:?     'g_tTexbi4' (uniform isamplerBuffer)
-0:?     'g_tTexbu4' (uniform usamplerBuffer)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
 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:?     '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 76
+// Id's are bound by 71
 
                               Capability Shader
                               Capability SampledBuffer
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 55 59
+                              EntryPoint Fragment 4  "main" 62 66
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "r00"
                               Name 13  "g_tTexbf4"
-                              Name 17  "c1"
-                              Name 23  "r01"
-                              Name 27  "g_tTexbi4"
-                              Name 35  "r02"
-                              Name 39  "g_tTexbu4"
-                              Name 44  "PS_OUTPUT"
-                              MemberName 44(PS_OUTPUT) 0  "Color"
-                              MemberName 44(PS_OUTPUT) 1  "Depth"
-                              Name 46  "psout"
-                              Name 55  "Color"
-                              Name 59  "Depth"
-                              Name 63  "g_tTexbf4_test"
-                              Name 66  "c2"
-                              Name 69  "c3"
-                              Name 71  "c4"
-                              Name 72  "o1"
-                              Name 73  "o2"
-                              Name 74  "o3"
-                              Name 75  "o4"
+                              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
-                              Decorate 27(g_tTexbi4) DescriptorSet 0
-                              Decorate 39(g_tTexbu4) DescriptorSet 0
-                              Decorate 55(Color) Location 0
-                              Decorate 59(Depth) BuiltIn FragDepth
-                              Decorate 63(g_tTexbf4_test) DescriptorSet 0
-                              Decorate 63(g_tTexbf4_test) Binding 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
                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:Unknown
+              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:             TypePointer UniformConstant 15(int)
-          17(c1):     16(ptr) Variable UniformConstant
-              21:             TypeVector 15(int) 4
-              22:             TypePointer Function 21(ivec4)
-              24:             TypeImage 15(int) Buffer sampled format:Unknown
-              25:             TypeSampledImage 24
-              26:             TypePointer UniformConstant 25
-   27(g_tTexbi4):     26(ptr) Variable UniformConstant
-              32:             TypeInt 32 0
-              33:             TypeVector 32(int) 4
-              34:             TypePointer Function 33(ivec4)
-              36:             TypeImage 32(int) Buffer sampled format:Unknown
-              37:             TypeSampledImage 36
-              38:             TypePointer UniformConstant 37
-   39(g_tTexbu4):     38(ptr) Variable UniformConstant
-   44(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
-              45:             TypePointer Function 44(PS_OUTPUT)
-              47:     15(int) Constant 0
-              48:    6(float) Constant 1065353216
-              49:    7(fvec4) ConstantComposite 48 48 48 48
-              51:     15(int) Constant 1
-              52:             TypePointer Function 6(float)
-              54:             TypePointer Output 7(fvec4)
-       55(Color):     54(ptr) Variable Output
-              58:             TypePointer Output 6(float)
-       59(Depth):     58(ptr) Variable Output
-63(g_tTexbf4_test):     12(ptr) Variable UniformConstant
-              64:             TypeVector 15(int) 2
-              65:             TypePointer UniformConstant 64(ivec2)
-          66(c2):     65(ptr) Variable UniformConstant
-              67:             TypeVector 15(int) 3
-              68:             TypePointer UniformConstant 67(ivec3)
-          69(c3):     68(ptr) Variable UniformConstant
-              70:             TypePointer UniformConstant 21(ivec4)
-          71(c4):     70(ptr) Variable UniformConstant
-          72(o1):     16(ptr) Variable UniformConstant
-          73(o2):     65(ptr) Variable UniformConstant
-          74(o3):     68(ptr) Variable UniformConstant
-          75(o4):     70(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
           9(r00):      8(ptr) Variable Function
-         23(r01):     22(ptr) Variable Function
-         35(r02):     34(ptr) Variable Function
-       46(psout):     45(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)
-              18:     15(int) Load 17(c1)
-              19:          10 Image 14
-              20:    7(fvec4) ImageFetch 19 18
-                              Store 9(r00) 20
-              28:          25 Load 27(g_tTexbi4)
-              29:     15(int) Load 17(c1)
-              30:          24 Image 28
-              31:   21(ivec4) ImageFetch 30 29
-                              Store 23(r01) 31
-              40:          37 Load 39(g_tTexbu4)
-              41:     15(int) Load 17(c1)
-              42:          36 Image 40
-              43:   33(ivec4) ImageFetch 42 41
-                              Store 35(r02) 43
-              50:      8(ptr) AccessChain 46(psout) 47
-                              Store 50 49
-              53:     52(ptr) AccessChain 46(psout) 51
-                              Store 53 48
-              56:      8(ptr) AccessChain 46(psout) 47
-              57:    7(fvec4) Load 56
-                              Store 55(Color) 57
-              60:     52(ptr) AccessChain 46(psout) 51
-              61:    6(float) Load 60
-                              Store 59(Depth) 61
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..c0cd15284396d9f7e33056f49ea9fb8fa4745a38
--- /dev/null
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -0,0 +1,290 @@
+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 Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'r00' (temp float)
+0:28          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:28              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:28              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:28                '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:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp int)
+0:29          'r01' (temp int)
+0:29          Construct int (temp int)
+0:?             textureFetch (temp 4-component vector of int)
+0:29              'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
+0:29              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:29                '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:29                Constant:
+0:29                  0 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp uint)
+0:30          'r02' (temp uint)
+0:30          Construct uint (temp uint)
+0:?             textureFetch (temp 4-component vector of uint)
+0:30              'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
+0:30              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:30                '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:30                Constant:
+0:30                  0 (const uint)
+0:34      move second child to first child (temp 4-component vector of float)
+0:34        Color: direct index for structure (temp 4-component vector of float)
+0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          Constant:
+0:34            0 (const int)
+0:34        Constant:
+0:34          1.000000
+0:34          1.000000
+0:34          1.000000
+0:34          1.000000
+0:35      move second child to first child (temp float)
+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        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:?   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:?     '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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'r00' (temp float)
+0:28          Construct float (temp float)
+0:?             textureFetch (temp 4-component vector of float)
+0:28              'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
+0:28              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:28                '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:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child (temp int)
+0:29          'r01' (temp int)
+0:29          Construct int (temp int)
+0:?             textureFetch (temp 4-component vector of int)
+0:29              'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
+0:29              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:29                '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:29                Constant:
+0:29                  0 (const uint)
+0:30      Sequence
+0:30        move second child to first child (temp uint)
+0:30          'r02' (temp uint)
+0:30          Construct uint (temp uint)
+0:?             textureFetch (temp 4-component vector of uint)
+0:30              'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
+0:30              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:30                '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:30                Constant:
+0:30                  0 (const uint)
+0:34      move second child to first child (temp 4-component vector of float)
+0:34        Color: direct index for structure (temp 4-component vector of float)
+0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:34          Constant:
+0:34            0 (const int)
+0:34        Constant:
+0:34          1.000000
+0:34          1.000000
+0:34          1.000000
+0:34          1.000000
+0:35      move second child to first child (temp float)
+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        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:?   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:?     '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
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 65 69
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 2110e6f4e31da91c5efd5007b9aa296e89bf8d7e..9a14b658e6991a658ba794c7d8352137fe128d6d 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -2,91 +2,148 @@ hlsl.load.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetchOffset (temp 4-component vector of float)
 0:52        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:52        'o1' (uniform int)
-0:53      textureFetchOffset (global 4-component vector of int)
+0:52        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:52          '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:52          Constant:
+0:52            4 (const uint)
+0:53      textureFetchOffset (temp 4-component vector of int)
 0:53        'g_tTex1di4' (uniform itexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:53        'o1' (uniform int)
-0:54      textureFetchOffset (global 4-component vector of uint)
+0:53        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:53          '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:53          Constant:
+0:53            4 (const uint)
+0:54      textureFetchOffset (temp 4-component vector of uint)
 0:54        'g_tTex1du4' (uniform utexture1D)
 0:54        vector swizzle (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54        direct index (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Constant:
 0:54            1 (const int)
-0:54        'o1' (uniform int)
-0:57      textureFetchOffset (global 4-component vector of float)
+0:54        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:54          '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:54          Constant:
+0:54            4 (const uint)
+0:57      textureFetchOffset (temp 4-component vector of float)
 0:57        'g_tTex2df4' (uniform texture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:57        'o2' (uniform 2-component vector of int)
-0:58      textureFetchOffset (global 4-component vector of int)
+0:57        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57          '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:57          Constant:
+0:57            5 (const uint)
+0:58      textureFetchOffset (temp 4-component vector of int)
 0:58        'g_tTex2di4' (uniform itexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:58        'o2' (uniform 2-component vector of int)
-0:59      textureFetchOffset (global 4-component vector of uint)
+0:58        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58          '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:58          Constant:
+0:58            5 (const uint)
+0:59      textureFetchOffset (temp 4-component vector of uint)
 0:59        'g_tTex2du4' (uniform utexture2D)
 0:59        vector swizzle (temp 2-component vector of int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
 0:59            Constant:
 0:59              1 (const int)
 0:59        direct index (temp int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Constant:
 0:59            2 (const int)
-0:59        'o2' (uniform 2-component vector of int)
-0:62      textureFetchOffset (global 4-component vector of float)
+0:59        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:59          '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:59          Constant:
+0:59            5 (const uint)
+0:62      textureFetchOffset (temp 4-component vector of float)
 0:62        'g_tTex3df4' (uniform texture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -95,14 +152,23 @@ gl_FragCoord origin is upper left
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:62        'o3' (uniform 3-component vector of int)
-0:63      textureFetchOffset (global 4-component vector of int)
+0:62        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:62          '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:62          Constant:
+0:62            6 (const uint)
+0:63      textureFetchOffset (temp 4-component vector of int)
 0:63        'g_tTex3di4' (uniform itexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -111,14 +177,23 @@ gl_FragCoord origin is upper left
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
-0:63        'o3' (uniform 3-component vector of int)
-0:64      textureFetchOffset (global 4-component vector of uint)
+0:63        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:63          '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:63          Constant:
+0:63            6 (const uint)
+0:64      textureFetchOffset (temp 4-component vector of uint)
 0:64        'g_tTex3du4' (uniform utexture3D)
 0:64        vector swizzle (temp 3-component vector of int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Sequence
 0:64            Constant:
 0:64              0 (const int)
@@ -127,10 +202,16 @@ gl_FragCoord origin is upper left
 0:64            Constant:
 0:64              2 (const int)
 0:64        direct index (temp int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Constant:
 0:64            3 (const int)
-0:64        'o3' (uniform 3-component vector of int)
+0:64        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:64          '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:64          Constant:
+0:64            6 (const uint)
 0:72      move second child to first child (temp 4-component vector of float)
 0:72        Color: direct index for structure (temp 4-component vector of float)
 0:72          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -148,8 +229,8 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -164,6 +245,8 @@ gl_FragCoord origin is upper left
 0:75                1 (const int)
 0:75        Branch: Return
 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)
@@ -186,16 +269,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -204,91 +278,148 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetchOffset (temp 4-component vector of float)
 0:52        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:52        vector swizzle (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52        direct index (temp int)
-0:52          'c2' (uniform 2-component vector of int)
+0:52          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:52            '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:52            Constant:
+0:52              1 (const uint)
 0:52          Constant:
 0:52            1 (const int)
-0:52        'o1' (uniform int)
-0:53      textureFetchOffset (global 4-component vector of int)
+0:52        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:52          '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:52          Constant:
+0:52            4 (const uint)
+0:53      textureFetchOffset (temp 4-component vector of int)
 0:53        'g_tTex1di4' (uniform itexture1D)
 0:53        vector swizzle (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53        direct index (temp int)
-0:53          'c2' (uniform 2-component vector of int)
+0:53          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:53            '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:53            Constant:
+0:53              1 (const uint)
 0:53          Constant:
 0:53            1 (const int)
-0:53        'o1' (uniform int)
-0:54      textureFetchOffset (global 4-component vector of uint)
+0:53        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:53          '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:53          Constant:
+0:53            4 (const uint)
+0:54      textureFetchOffset (temp 4-component vector of uint)
 0:54        'g_tTex1du4' (uniform utexture1D)
 0:54        vector swizzle (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54        direct index (temp int)
-0:54          'c2' (uniform 2-component vector of int)
+0:54          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:54            '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:54            Constant:
+0:54              1 (const uint)
 0:54          Constant:
 0:54            1 (const int)
-0:54        'o1' (uniform int)
-0:57      textureFetchOffset (global 4-component vector of float)
+0:54        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:54          '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:54          Constant:
+0:54            4 (const uint)
+0:57      textureFetchOffset (temp 4-component vector of float)
 0:57        'g_tTex2df4' (uniform texture2D)
 0:57        vector swizzle (temp 2-component vector of int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
 0:57            Constant:
 0:57              1 (const int)
 0:57        direct index (temp int)
-0:57          'c3' (uniform 3-component vector of int)
+0:57          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:57            '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:57            Constant:
+0:57              2 (const uint)
 0:57          Constant:
 0:57            2 (const int)
-0:57        'o2' (uniform 2-component vector of int)
-0:58      textureFetchOffset (global 4-component vector of int)
+0:57        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57          '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:57          Constant:
+0:57            5 (const uint)
+0:58      textureFetchOffset (temp 4-component vector of int)
 0:58        'g_tTex2di4' (uniform itexture2D)
 0:58        vector swizzle (temp 2-component vector of int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
 0:58            Constant:
 0:58              1 (const int)
 0:58        direct index (temp int)
-0:58          'c3' (uniform 3-component vector of int)
+0:58          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:58            '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:58            Constant:
+0:58              2 (const uint)
 0:58          Constant:
 0:58            2 (const int)
-0:58        'o2' (uniform 2-component vector of int)
-0:59      textureFetchOffset (global 4-component vector of uint)
+0:58        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58          '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:58          Constant:
+0:58            5 (const uint)
+0:59      textureFetchOffset (temp 4-component vector of uint)
 0:59        'g_tTex2du4' (uniform utexture2D)
 0:59        vector swizzle (temp 2-component vector of int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
 0:59            Constant:
 0:59              1 (const int)
 0:59        direct index (temp int)
-0:59          'c3' (uniform 3-component vector of int)
+0:59          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:59            '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:59            Constant:
+0:59              2 (const uint)
 0:59          Constant:
 0:59            2 (const int)
-0:59        'o2' (uniform 2-component vector of int)
-0:62      textureFetchOffset (global 4-component vector of float)
+0:59        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:59          '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:59          Constant:
+0:59            5 (const uint)
+0:62      textureFetchOffset (temp 4-component vector of float)
 0:62        'g_tTex3df4' (uniform texture3D)
 0:62        vector swizzle (temp 3-component vector of int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Sequence
 0:62            Constant:
 0:62              0 (const int)
@@ -297,14 +428,23 @@ gl_FragCoord origin is upper left
 0:62            Constant:
 0:62              2 (const int)
 0:62        direct index (temp int)
-0:62          'c4' (uniform 4-component vector of int)
+0:62          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:62            '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:62            Constant:
+0:62              3 (const uint)
 0:62          Constant:
 0:62            3 (const int)
-0:62        'o3' (uniform 3-component vector of int)
-0:63      textureFetchOffset (global 4-component vector of int)
+0:62        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:62          '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:62          Constant:
+0:62            6 (const uint)
+0:63      textureFetchOffset (temp 4-component vector of int)
 0:63        'g_tTex3di4' (uniform itexture3D)
 0:63        vector swizzle (temp 3-component vector of int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Sequence
 0:63            Constant:
 0:63              0 (const int)
@@ -313,14 +453,23 @@ gl_FragCoord origin is upper left
 0:63            Constant:
 0:63              2 (const int)
 0:63        direct index (temp int)
-0:63          'c4' (uniform 4-component vector of int)
+0:63          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:63            '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:63            Constant:
+0:63              3 (const uint)
 0:63          Constant:
 0:63            3 (const int)
-0:63        'o3' (uniform 3-component vector of int)
-0:64      textureFetchOffset (global 4-component vector of uint)
+0:63        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:63          '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:63          Constant:
+0:63            6 (const uint)
+0:64      textureFetchOffset (temp 4-component vector of uint)
 0:64        'g_tTex3du4' (uniform utexture3D)
 0:64        vector swizzle (temp 3-component vector of int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Sequence
 0:64            Constant:
 0:64              0 (const int)
@@ -329,10 +478,16 @@ gl_FragCoord origin is upper left
 0:64            Constant:
 0:64              2 (const int)
 0:64        direct index (temp int)
-0:64          'c4' (uniform 4-component vector of int)
+0:64          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:64            '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:64            Constant:
+0:64              3 (const uint)
 0:64          Constant:
 0:64            3 (const int)
-0:64        'o3' (uniform 3-component vector of int)
+0:64        o3: direct index for structure (layout(offset=64 ) uniform 3-component vector of int)
+0:64          '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:64          Constant:
+0:64            6 (const uint)
 0:72      move second child to first child (temp 4-component vector of float)
 0:72        Color: direct index for structure (temp 4-component vector of float)
 0:72          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -350,8 +505,8 @@ gl_FragCoord origin is upper left
 0:73            1 (const int)
 0:73        Constant:
 0:73          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -366,6 +521,8 @@ gl_FragCoord origin is upper left
 0:75                1 (const int)
 0:75        Branch: Return
 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)
@@ -388,20 +545,11 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 179
+// Id's are bound by 194
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -409,71 +557,83 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 130 134
+                              EntryPoint Fragment 4  "main" 147 151
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "g_tTex1df4"
-                              Name 14  "c2"
-                              Name 23  "o1"
-                              Name 29  "g_tTex1di4"
-                              Name 40  "g_tTex1du4"
-                              Name 51  "g_tTex2df4"
-                              Name 55  "c3"
-                              Name 61  "o2"
-                              Name 66  "g_tTex2di4"
-                              Name 76  "g_tTex2du4"
-                              Name 86  "g_tTex3df4"
-                              Name 89  "c4"
-                              Name 95  "o3"
-                              Name 100  "g_tTex3di4"
-                              Name 110  "g_tTex3du4"
-                              Name 118  "PS_OUTPUT"
-                              MemberName 118(PS_OUTPUT) 0  "Color"
-                              MemberName 118(PS_OUTPUT) 1  "Depth"
-                              Name 120  "psout"
-                              Name 130  "Color"
-                              Name 134  "Depth"
-                              Name 140  "g_sSamp"
-                              Name 143  "g_tTexcdf4"
-                              Name 146  "g_tTexcdi4"
-                              Name 149  "g_tTexcdu4"
-                              Name 152  "g_tTex1df4a"
-                              Name 155  "g_tTex1di4a"
-                              Name 158  "g_tTex1du4a"
-                              Name 161  "g_tTex2df4a"
-                              Name 164  "g_tTex2di4a"
-                              Name 167  "g_tTex2du4a"
-                              Name 170  "g_tTexcdf4a"
-                              Name 173  "g_tTexcdi4a"
-                              Name 176  "g_tTexcdu4a"
-                              Name 177  "c1"
-                              Name 178  "o4"
+                              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
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 40(g_tTex1du4) DescriptorSet 0
-                              Decorate 51(g_tTex2df4) DescriptorSet 0
-                              Decorate 66(g_tTex2di4) DescriptorSet 0
-                              Decorate 76(g_tTex2du4) DescriptorSet 0
-                              Decorate 86(g_tTex3df4) DescriptorSet 0
-                              Decorate 100(g_tTex3di4) DescriptorSet 0
-                              Decorate 110(g_tTex3du4) DescriptorSet 0
-                              Decorate 130(Color) Location 0
-                              Decorate 134(Depth) BuiltIn FragDepth
-                              Decorate 140(g_sSamp) DescriptorSet 0
-                              Decorate 140(g_sSamp) Binding 0
-                              Decorate 143(g_tTexcdf4) DescriptorSet 0
-                              Decorate 146(g_tTexcdi4) DescriptorSet 0
-                              Decorate 149(g_tTexcdu4) DescriptorSet 0
-                              Decorate 152(g_tTex1df4a) DescriptorSet 0
-                              Decorate 155(g_tTex1di4a) DescriptorSet 0
-                              Decorate 158(g_tTex1du4a) DescriptorSet 0
-                              Decorate 161(g_tTex2df4a) DescriptorSet 0
-                              Decorate 164(g_tTex2di4a) DescriptorSet 0
-                              Decorate 167(g_tTex2du4a) DescriptorSet 0
-                              Decorate 170(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 173(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 176(g_tTexcdu4a) 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 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -482,177 +642,192 @@ gl_FragCoord origin is upper left
    9(g_tTex1df4):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
               12:             TypeVector 11(int) 2
-              13:             TypePointer UniformConstant 12(ivec2)
-          14(c2):     13(ptr) Variable UniformConstant
-              15:             TypeInt 32 0
-              16:     15(int) Constant 0
-              17:             TypePointer UniformConstant 11(int)
-              20:     15(int) Constant 1
-          23(o1):     17(ptr) Variable UniformConstant
-              25:             TypeVector 6(float) 4
-              27:             TypeImage 11(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              36:             TypeVector 11(int) 4
-              38:             TypeImage 15(int) 1D sampled format:Unknown
-              39:             TypePointer UniformConstant 38
-  40(g_tTex1du4):     39(ptr) Variable UniformConstant
-              47:             TypeVector 15(int) 4
-              49:             TypeImage 6(float) 2D sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2df4):     50(ptr) Variable UniformConstant
-              53:             TypeVector 11(int) 3
-              54:             TypePointer UniformConstant 53(ivec3)
-          55(c3):     54(ptr) Variable UniformConstant
-              58:     15(int) Constant 2
-          61(o2):     13(ptr) Variable UniformConstant
-              64:             TypeImage 11(int) 2D sampled format:Unknown
-              65:             TypePointer UniformConstant 64
-  66(g_tTex2di4):     65(ptr) Variable UniformConstant
-              74:             TypeImage 15(int) 2D sampled format:Unknown
-              75:             TypePointer UniformConstant 74
-  76(g_tTex2du4):     75(ptr) Variable UniformConstant
-              84:             TypeImage 6(float) 3D sampled format:Unknown
+              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_tTex3df4):     85(ptr) Variable UniformConstant
-              88:             TypePointer UniformConstant 36(ivec4)
-          89(c4):     88(ptr) Variable UniformConstant
-              92:     15(int) Constant 3
-          95(o3):     54(ptr) Variable UniformConstant
-              98:             TypeImage 11(int) 3D sampled format:Unknown
-              99:             TypePointer UniformConstant 98
- 100(g_tTex3di4):     99(ptr) Variable UniformConstant
-             108:             TypeImage 15(int) 3D sampled format:Unknown
-             109:             TypePointer UniformConstant 108
- 110(g_tTex3du4):    109(ptr) Variable UniformConstant
-  118(PS_OUTPUT):             TypeStruct 25(fvec4) 6(float)
-             119:             TypePointer Function 118(PS_OUTPUT)
-             121:     11(int) Constant 0
-             122:    6(float) Constant 1065353216
-             123:   25(fvec4) ConstantComposite 122 122 122 122
-             124:             TypePointer Function 25(fvec4)
-             126:     11(int) Constant 1
-             127:             TypePointer Function 6(float)
-             129:             TypePointer Output 25(fvec4)
-      130(Color):    129(ptr) Variable Output
-             133:             TypePointer Output 6(float)
-      134(Depth):    133(ptr) Variable Output
-             138:             TypeSampler
-             139:             TypePointer UniformConstant 138
-    140(g_sSamp):    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 11(int) Cube sampled format:Unknown
-             145:             TypePointer UniformConstant 144
- 146(g_tTexcdi4):    145(ptr) Variable UniformConstant
-             147:             TypeImage 15(int) Cube sampled format:Unknown
-             148:             TypePointer UniformConstant 147
- 149(g_tTexcdu4):    148(ptr) Variable UniformConstant
-             150:             TypeImage 6(float) 1D array sampled format:Unknown
-             151:             TypePointer UniformConstant 150
-152(g_tTex1df4a):    151(ptr) Variable UniformConstant
-             153:             TypeImage 11(int) 1D array sampled format:Unknown
-             154:             TypePointer UniformConstant 153
-155(g_tTex1di4a):    154(ptr) Variable UniformConstant
-             156:             TypeImage 15(int) 1D array sampled format:Unknown
-             157:             TypePointer UniformConstant 156
-158(g_tTex1du4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 6(float) 2D array sampled format:Unknown
-             160:             TypePointer UniformConstant 159
-161(g_tTex2df4a):    160(ptr) Variable UniformConstant
-             162:             TypeImage 11(int) 2D array sampled format:Unknown
-             163:             TypePointer UniformConstant 162
-164(g_tTex2di4a):    163(ptr) Variable UniformConstant
-             165:             TypeImage 15(int) 2D array sampled format:Unknown
-             166:             TypePointer UniformConstant 165
-167(g_tTex2du4a):    166(ptr) Variable UniformConstant
-             168:             TypeImage 6(float) Cube array sampled format:Unknown
-             169:             TypePointer UniformConstant 168
-170(g_tTexcdf4a):    169(ptr) Variable UniformConstant
-             171:             TypeImage 11(int) Cube array sampled format:Unknown
-             172:             TypePointer UniformConstant 171
-173(g_tTexcdi4a):    172(ptr) Variable UniformConstant
-             174:             TypeImage 15(int) Cube array sampled format:Unknown
-             175:             TypePointer UniformConstant 174
-176(g_tTexcdu4a):    175(ptr) Variable UniformConstant
-         177(c1):     17(ptr) Variable UniformConstant
-         178(o4):     88(ptr) Variable UniformConstant
+  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
          4(main):           2 Function None 3
                5:             Label
-      120(psout):    119(ptr) Variable Function
+      138(psout):    137(ptr) Variable Function
               10:           7 Load 9(g_tTex1df4)
-              18:     17(ptr) AccessChain 14(c2) 16
-              19:     11(int) Load 18
-              21:     17(ptr) AccessChain 14(c2) 20
-              22:     11(int) Load 21
-              24:     11(int) Load 23(o1)
-              26:   25(fvec4) ImageFetch 10 19 Lod Offset 22 24
-              30:          27 Load 29(g_tTex1di4)
-              31:     17(ptr) AccessChain 14(c2) 16
-              32:     11(int) Load 31
-              33:     17(ptr) AccessChain 14(c2) 20
-              34:     11(int) Load 33
-              35:     11(int) Load 23(o1)
-              37:   36(ivec4) ImageFetch 30 32 Lod Offset 34 35
-              41:          38 Load 40(g_tTex1du4)
-              42:     17(ptr) AccessChain 14(c2) 16
-              43:     11(int) Load 42
-              44:     17(ptr) AccessChain 14(c2) 20
-              45:     11(int) Load 44
-              46:     11(int) Load 23(o1)
-              48:   47(ivec4) ImageFetch 41 43 Lod Offset 45 46
-              52:          49 Load 51(g_tTex2df4)
-              56:   53(ivec3) Load 55(c3)
-              57:   12(ivec2) VectorShuffle 56 56 0 1
-              59:     17(ptr) AccessChain 55(c3) 58
-              60:     11(int) Load 59
-              62:   12(ivec2) Load 61(o2)
-              63:   25(fvec4) ImageFetch 52 57 Lod Offset 60 62
-              67:          64 Load 66(g_tTex2di4)
-              68:   53(ivec3) Load 55(c3)
-              69:   12(ivec2) VectorShuffle 68 68 0 1
-              70:     17(ptr) AccessChain 55(c3) 58
-              71:     11(int) Load 70
-              72:   12(ivec2) Load 61(o2)
-              73:   36(ivec4) ImageFetch 67 69 Lod Offset 71 72
-              77:          74 Load 76(g_tTex2du4)
-              78:   53(ivec3) Load 55(c3)
-              79:   12(ivec2) VectorShuffle 78 78 0 1
-              80:     17(ptr) AccessChain 55(c3) 58
-              81:     11(int) Load 80
-              82:   12(ivec2) Load 61(o2)
-              83:   47(ivec4) ImageFetch 77 79 Lod Offset 81 82
-              87:          84 Load 86(g_tTex3df4)
-              90:   36(ivec4) Load 89(c4)
-              91:   53(ivec3) VectorShuffle 90 90 0 1 2
-              93:     17(ptr) AccessChain 89(c4) 92
-              94:     11(int) Load 93
-              96:   53(ivec3) Load 95(o3)
-              97:   25(fvec4) ImageFetch 87 91 Lod Offset 94 96
-             101:          98 Load 100(g_tTex3di4)
-             102:   36(ivec4) Load 89(c4)
-             103:   53(ivec3) VectorShuffle 102 102 0 1 2
-             104:     17(ptr) AccessChain 89(c4) 92
-             105:     11(int) Load 104
-             106:   53(ivec3) Load 95(o3)
-             107:   36(ivec4) ImageFetch 101 103 Lod Offset 105 106
-             111:         108 Load 110(g_tTex3du4)
-             112:   36(ivec4) Load 89(c4)
-             113:   53(ivec3) VectorShuffle 112 112 0 1 2
-             114:     17(ptr) AccessChain 89(c4) 92
-             115:     11(int) Load 114
-             116:   53(ivec3) Load 95(o3)
-             117:   47(ivec4) ImageFetch 111 113 Lod Offset 115 116
-             125:    124(ptr) AccessChain 120(psout) 121
-                              Store 125 123
-             128:    127(ptr) AccessChain 120(psout) 126
-                              Store 128 122
-             131:    124(ptr) AccessChain 120(psout) 121
-             132:   25(fvec4) Load 131
-                              Store 130(Color) 132
-             135:    127(ptr) AccessChain 120(psout) 126
-             136:    6(float) Load 135
-                              Store 134(Depth) 136
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index d5f667165b0e59ae4df07f5dfd63a3bd3634c582..fb58eff35ad2a4e201a140f01dbac8cd88929fac 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -2,55 +2,85 @@ hlsl.load.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetchOffset (temp 4-component vector of float)
 0:52        'g_tTex1df4a' (uniform texture1DArray)
 0:52        vector swizzle (temp 2-component vector of int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52            Constant:
 0:52              1 (const int)
 0:52        direct index (temp int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Constant:
 0:52            2 (const int)
-0:52        'o1' (uniform int)
-0:53      textureFetchOffset (global 4-component vector of int)
+0:52        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:52          '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:52          Constant:
+0:52            4 (const uint)
+0:53      textureFetchOffset (temp 4-component vector of int)
 0:53        'g_tTex1di4a' (uniform itexture1DArray)
 0:53        vector swizzle (temp 2-component vector of int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53            Constant:
 0:53              1 (const int)
 0:53        direct index (temp int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Constant:
 0:53            2 (const int)
-0:53        'o1' (uniform int)
-0:54      textureFetchOffset (global 4-component vector of uint)
+0:53        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:53          '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:53          Constant:
+0:53            4 (const uint)
+0:54      textureFetchOffset (temp 4-component vector of uint)
 0:54        'g_tTex1du4a' (uniform utexture1DArray)
 0:54        vector swizzle (temp 2-component vector of int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54            Constant:
 0:54              1 (const int)
 0:54        direct index (temp int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Constant:
 0:54            2 (const int)
-0:54        'o1' (uniform int)
-0:57      textureFetchOffset (global 4-component vector of float)
+0:54        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:54          '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:54          Constant:
+0:54            4 (const uint)
+0:57      textureFetchOffset (temp 4-component vector of float)
 0:57        'g_tTex2df4a' (uniform texture2DArray)
 0:57        vector swizzle (temp 3-component vector of int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
@@ -59,14 +89,23 @@ gl_FragCoord origin is upper left
 0:57            Constant:
 0:57              2 (const int)
 0:57        direct index (temp int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Constant:
 0:57            3 (const int)
-0:57        'o2' (uniform 2-component vector of int)
-0:58      textureFetchOffset (global 4-component vector of int)
+0:57        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57          '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:57          Constant:
+0:57            5 (const uint)
+0:58      textureFetchOffset (temp 4-component vector of int)
 0:58        'g_tTex2di4a' (uniform itexture2DArray)
 0:58        vector swizzle (temp 3-component vector of int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
@@ -75,14 +114,23 @@ gl_FragCoord origin is upper left
 0:58            Constant:
 0:58              2 (const int)
 0:58        direct index (temp int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Constant:
 0:58            3 (const int)
-0:58        'o2' (uniform 2-component vector of int)
-0:59      textureFetchOffset (global 4-component vector of uint)
+0:58        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58          '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:58          Constant:
+0:58            5 (const uint)
+0:59      textureFetchOffset (temp 4-component vector of uint)
 0:59        'g_tTex2du4a' (uniform utexture2DArray)
 0:59        vector swizzle (temp 3-component vector of int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
@@ -91,10 +139,16 @@ gl_FragCoord origin is upper left
 0:59            Constant:
 0:59              2 (const int)
 0:59        direct index (temp int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Constant:
 0:59            3 (const int)
-0:59        'o2' (uniform 2-component vector of int)
+0:59        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:59          '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:59          Constant:
+0:59            5 (const uint)
 0:65      move second child to first child (temp 4-component vector of float)
 0:65        Color: direct index for structure (temp 4-component vector of float)
 0:65          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -112,8 +166,8 @@ gl_FragCoord origin is upper left
 0:66            1 (const int)
 0:66        Constant:
 0:66          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -128,6 +182,8 @@ gl_FragCoord origin is upper left
 0:68                1 (const int)
 0:68        Branch: Return
 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)
@@ -150,16 +206,7 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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})
 
 
 Linked fragment stage:
@@ -168,55 +215,85 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:48  Function Definition: main( (global 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 (global 4-component vector of float)
+0:52      textureFetchOffset (temp 4-component vector of float)
 0:52        'g_tTex1df4a' (uniform texture1DArray)
 0:52        vector swizzle (temp 2-component vector of int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Sequence
 0:52            Constant:
 0:52              0 (const int)
 0:52            Constant:
 0:52              1 (const int)
 0:52        direct index (temp int)
-0:52          'c3' (uniform 3-component vector of int)
+0:52          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:52            '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:52            Constant:
+0:52              2 (const uint)
 0:52          Constant:
 0:52            2 (const int)
-0:52        'o1' (uniform int)
-0:53      textureFetchOffset (global 4-component vector of int)
+0:52        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:52          '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:52          Constant:
+0:52            4 (const uint)
+0:53      textureFetchOffset (temp 4-component vector of int)
 0:53        'g_tTex1di4a' (uniform itexture1DArray)
 0:53        vector swizzle (temp 2-component vector of int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Sequence
 0:53            Constant:
 0:53              0 (const int)
 0:53            Constant:
 0:53              1 (const int)
 0:53        direct index (temp int)
-0:53          'c3' (uniform 3-component vector of int)
+0:53          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:53            '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:53            Constant:
+0:53              2 (const uint)
 0:53          Constant:
 0:53            2 (const int)
-0:53        'o1' (uniform int)
-0:54      textureFetchOffset (global 4-component vector of uint)
+0:53        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:53          '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:53          Constant:
+0:53            4 (const uint)
+0:54      textureFetchOffset (temp 4-component vector of uint)
 0:54        'g_tTex1du4a' (uniform utexture1DArray)
 0:54        vector swizzle (temp 2-component vector of int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Sequence
 0:54            Constant:
 0:54              0 (const int)
 0:54            Constant:
 0:54              1 (const int)
 0:54        direct index (temp int)
-0:54          'c3' (uniform 3-component vector of int)
+0:54          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54            '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:54            Constant:
+0:54              2 (const uint)
 0:54          Constant:
 0:54            2 (const int)
-0:54        'o1' (uniform int)
-0:57      textureFetchOffset (global 4-component vector of float)
+0:54        o1: direct index for structure (layout(offset=48 ) uniform int)
+0:54          '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:54          Constant:
+0:54            4 (const uint)
+0:57      textureFetchOffset (temp 4-component vector of float)
 0:57        'g_tTex2df4a' (uniform texture2DArray)
 0:57        vector swizzle (temp 3-component vector of int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Sequence
 0:57            Constant:
 0:57              0 (const int)
@@ -225,14 +302,23 @@ gl_FragCoord origin is upper left
 0:57            Constant:
 0:57              2 (const int)
 0:57        direct index (temp int)
-0:57          'c4' (uniform 4-component vector of int)
+0:57          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:57            '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:57            Constant:
+0:57              3 (const uint)
 0:57          Constant:
 0:57            3 (const int)
-0:57        'o2' (uniform 2-component vector of int)
-0:58      textureFetchOffset (global 4-component vector of int)
+0:57        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:57          '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:57          Constant:
+0:57            5 (const uint)
+0:58      textureFetchOffset (temp 4-component vector of int)
 0:58        'g_tTex2di4a' (uniform itexture2DArray)
 0:58        vector swizzle (temp 3-component vector of int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Sequence
 0:58            Constant:
 0:58              0 (const int)
@@ -241,14 +327,23 @@ gl_FragCoord origin is upper left
 0:58            Constant:
 0:58              2 (const int)
 0:58        direct index (temp int)
-0:58          'c4' (uniform 4-component vector of int)
+0:58          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:58            '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:58            Constant:
+0:58              3 (const uint)
 0:58          Constant:
 0:58            3 (const int)
-0:58        'o2' (uniform 2-component vector of int)
-0:59      textureFetchOffset (global 4-component vector of uint)
+0:58        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:58          '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:58          Constant:
+0:58            5 (const uint)
+0:59      textureFetchOffset (temp 4-component vector of uint)
 0:59        'g_tTex2du4a' (uniform utexture2DArray)
 0:59        vector swizzle (temp 3-component vector of int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Sequence
 0:59            Constant:
 0:59              0 (const int)
@@ -257,10 +352,16 @@ gl_FragCoord origin is upper left
 0:59            Constant:
 0:59              2 (const int)
 0:59        direct index (temp int)
-0:59          'c4' (uniform 4-component vector of int)
+0:59          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:59            '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:59            Constant:
+0:59              3 (const uint)
 0:59          Constant:
 0:59            3 (const int)
-0:59        'o2' (uniform 2-component vector of int)
+0:59        o2: direct index for structure (layout(offset=56 ) uniform 2-component vector of int)
+0:59          '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:59          Constant:
+0:59            5 (const uint)
 0:65      move second child to first child (temp 4-component vector of float)
 0:65        Color: direct index for structure (temp 4-component vector of float)
 0:65          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
@@ -278,8 +379,8 @@ gl_FragCoord origin is upper left
 0:66            1 (const int)
 0:66        Constant:
 0:66          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -294,6 +395,8 @@ gl_FragCoord origin is upper left
 0:68                1 (const int)
 0:68        Branch: Return
 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)
@@ -316,20 +419,11 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'c1' (uniform int)
-0:?     'c2' (uniform 2-component vector of int)
-0:?     'c3' (uniform 3-component vector of int)
-0:?     'c4' (uniform 4-component vector of int)
-0:?     'o1' (uniform int)
-0:?     'o2' (uniform 2-component vector of int)
-0:?     'o3' (uniform 3-component vector of int)
-0:?     'o4' (uniform 4-component vector of int)
-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 156
+// Id's are bound by 167
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -337,71 +431,83 @@ gl_FragCoord origin is upper left
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 96 100
+                              EntryPoint Fragment 4  "main" 111 115
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "g_tTex1df4a"
-                              Name 14  "c3"
-                              Name 23  "o1"
-                              Name 29  "g_tTex1di4a"
-                              Name 40  "g_tTex1du4a"
-                              Name 51  "g_tTex2df4a"
-                              Name 54  "c4"
-                              Name 61  "o2"
-                              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"
-                              Name 152  "c1"
-                              Name 153  "c2"
-                              Name 154  "o3"
-                              Name 155  "o4"
+                              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
-                              Decorate 29(g_tTex1di4a) DescriptorSet 0
-                              Decorate 40(g_tTex1du4a) DescriptorSet 0
-                              Decorate 51(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
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -409,155 +515,166 @@ gl_FragCoord origin is upper left
                8:             TypePointer UniformConstant 7
   9(g_tTex1df4a):      8(ptr) Variable UniformConstant
               11:             TypeInt 32 1
-              12:             TypeVector 11(int) 3
-              13:             TypePointer UniformConstant 12(ivec3)
-          14(c3):     13(ptr) Variable UniformConstant
-              15:             TypeVector 11(int) 2
-              18:             TypeInt 32 0
-              19:     18(int) Constant 2
-              20:             TypePointer UniformConstant 11(int)
-          23(o1):     20(ptr) Variable UniformConstant
-              25:             TypeVector 6(float) 4
-              27:             TypeImage 11(int) 1D array sampled format:Unknown
-              28:             TypePointer UniformConstant 27
- 29(g_tTex1di4a):     28(ptr) Variable UniformConstant
-              36:             TypeVector 11(int) 4
-              38:             TypeImage 18(int) 1D array sampled format:Unknown
-              39:             TypePointer UniformConstant 38
- 40(g_tTex1du4a):     39(ptr) Variable UniformConstant
-              47:             TypeVector 18(int) 4
-              49:             TypeImage 6(float) 2D array sampled format:Unknown
-              50:             TypePointer UniformConstant 49
- 51(g_tTex2df4a):     50(ptr) Variable UniformConstant
-              53:             TypePointer UniformConstant 36(ivec4)
-          54(c4):     53(ptr) Variable UniformConstant
-              57:     18(int) Constant 3
-              60:             TypePointer UniformConstant 15(ivec2)
-          61(o2):     60(ptr) Variable UniformConstant
-              64:             TypeImage 11(int) 2D array sampled format:Unknown
-              65:             TypePointer UniformConstant 64
- 66(g_tTex2di4a):     65(ptr) Variable UniformConstant
-              74:             TypeImage 18(int) 2D array sampled format:Unknown
-              75:             TypePointer UniformConstant 74
- 76(g_tTex2du4a):     75(ptr) Variable UniformConstant
-   84(PS_OUTPUT):             TypeStruct 25(fvec4) 6(float)
-              85:             TypePointer Function 84(PS_OUTPUT)
-              87:     11(int) Constant 0
-              88:    6(float) Constant 1065353216
-              89:   25(fvec4) ConstantComposite 88 88 88 88
-              90:             TypePointer Function 25(fvec4)
-              92:     11(int) Constant 1
-              93:             TypePointer Function 6(float)
-              95:             TypePointer Output 25(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 18(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
+              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_tTex2di4):    120(ptr) Variable UniformConstant
-             122:             TypeImage 18(int) 2D sampled format:Unknown
+    121(g_sSamp):    120(ptr) Variable UniformConstant
+             122:             TypeImage 6(float) 1D sampled format:Unknown
              123:             TypePointer UniformConstant 122
- 124(g_tTex2du4):    123(ptr) Variable UniformConstant
-             125:             TypeImage 6(float) 3D sampled format:Unknown
+ 124(g_tTex1df4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 11(int) 1D sampled format:Unknown
              126:             TypePointer UniformConstant 125
- 127(g_tTex3df4):    126(ptr) Variable UniformConstant
-             128:             TypeImage 11(int) 3D sampled format:Unknown
+ 127(g_tTex1di4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 23(int) 1D sampled format:Unknown
              129:             TypePointer UniformConstant 128
- 130(g_tTex3di4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 18(int) 3D sampled format:Unknown
+ 130(g_tTex1du4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 6(float) 2D sampled format:Unknown
              132:             TypePointer UniformConstant 131
- 133(g_tTex3du4):    132(ptr) Variable UniformConstant
-             134:             TypeImage 6(float) Cube sampled format:Unknown
+ 133(g_tTex2df4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 11(int) 2D sampled format:Unknown
              135:             TypePointer UniformConstant 134
- 136(g_tTexcdf4):    135(ptr) Variable UniformConstant
-             137:             TypeImage 11(int) Cube sampled format:Unknown
+ 136(g_tTex2di4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 23(int) 2D sampled format:Unknown
              138:             TypePointer UniformConstant 137
- 139(g_tTexcdi4):    138(ptr) Variable UniformConstant
-             140:             TypeImage 18(int) Cube sampled format:Unknown
+ 139(g_tTex2du4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 6(float) 3D sampled format:Unknown
              141:             TypePointer UniformConstant 140
- 142(g_tTexcdu4):    141(ptr) Variable UniformConstant
-             143:             TypeImage 6(float) Cube array sampled format:Unknown
+ 142(g_tTex3df4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 11(int) 3D sampled format:Unknown
              144:             TypePointer UniformConstant 143
-145(g_tTexcdf4a):    144(ptr) Variable UniformConstant
-             146:             TypeImage 11(int) Cube array sampled format:Unknown
+ 145(g_tTex3di4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 23(int) 3D sampled format:Unknown
              147:             TypePointer UniformConstant 146
-148(g_tTexcdi4a):    147(ptr) Variable UniformConstant
-             149:             TypeImage 18(int) Cube array sampled format:Unknown
+ 148(g_tTex3du4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 6(float) Cube sampled format:Unknown
              150:             TypePointer UniformConstant 149
-151(g_tTexcdu4a):    150(ptr) Variable UniformConstant
-         152(c1):     20(ptr) Variable UniformConstant
-         153(c2):     60(ptr) Variable UniformConstant
-         154(o3):     13(ptr) Variable UniformConstant
-         155(o4):     53(ptr) Variable UniformConstant
+ 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
          4(main):           2 Function None 3
                5:             Label
-       86(psout):     85(ptr) Variable Function
+      101(psout):    100(ptr) Variable Function
               10:           7 Load 9(g_tTex1df4a)
-              16:   12(ivec3) Load 14(c3)
-              17:   15(ivec2) VectorShuffle 16 16 0 1
-              21:     20(ptr) AccessChain 14(c3) 19
-              22:     11(int) Load 21
-              24:     11(int) Load 23(o1)
-              26:   25(fvec4) ImageFetch 10 17 Lod Offset 22 24
-              30:          27 Load 29(g_tTex1di4a)
-              31:   12(ivec3) Load 14(c3)
-              32:   15(ivec2) VectorShuffle 31 31 0 1
-              33:     20(ptr) AccessChain 14(c3) 19
-              34:     11(int) Load 33
-              35:     11(int) Load 23(o1)
-              37:   36(ivec4) ImageFetch 30 32 Lod Offset 34 35
-              41:          38 Load 40(g_tTex1du4a)
-              42:   12(ivec3) Load 14(c3)
-              43:   15(ivec2) VectorShuffle 42 42 0 1
-              44:     20(ptr) AccessChain 14(c3) 19
-              45:     11(int) Load 44
-              46:     11(int) Load 23(o1)
-              48:   47(ivec4) ImageFetch 41 43 Lod Offset 45 46
-              52:          49 Load 51(g_tTex2df4a)
-              55:   36(ivec4) Load 54(c4)
-              56:   12(ivec3) VectorShuffle 55 55 0 1 2
-              58:     20(ptr) AccessChain 54(c4) 57
-              59:     11(int) Load 58
-              62:   15(ivec2) Load 61(o2)
-              63:   25(fvec4) ImageFetch 52 56 Lod Offset 59 62
-              67:          64 Load 66(g_tTex2di4a)
-              68:   36(ivec4) Load 54(c4)
-              69:   12(ivec3) VectorShuffle 68 68 0 1 2
-              70:     20(ptr) AccessChain 54(c4) 57
-              71:     11(int) Load 70
-              72:   15(ivec2) Load 61(o2)
-              73:   36(ivec4) ImageFetch 67 69 Lod Offset 71 72
-              77:          74 Load 76(g_tTex2du4a)
-              78:   36(ivec4) Load 54(c4)
-              79:   12(ivec3) VectorShuffle 78 78 0 1 2
-              80:     20(ptr) AccessChain 54(c4) 57
-              81:     11(int) Load 80
-              82:   15(ivec2) Load 61(o2)
-              83:   47(ivec4) ImageFetch 77 79 Lod Offset 81 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:   25(fvec4) Load 97
-                              Store 96(Color) 98
-             101:     93(ptr) AccessChain 86(psout) 92
-             102:    6(float) Load 101
-                              Store 100(Depth) 102
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..e9cc3940b4d04780b4c4199a9f96b7da550d9670
--- /dev/null
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -0,0 +1,200 @@
+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 Parameters: 
+0:?     Sequence
+0:25      imageLoad (temp 4-component vector of float)
+0:25        'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:25        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:25          '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:25          Constant:
+0:25            0 (const uint)
+0:26      imageLoad (temp 4-component vector of uint)
+0:26        'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:26        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:26          '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:26          Constant:
+0:26            0 (const uint)
+0:27      imageLoad (temp 4-component vector of int)
+0:27        'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:27        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:27          '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:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        Color: direct index for structure (temp 4-component vector of float)
+0:29          'psout' (temp structure{temp 4-component vector of float Color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+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:?   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:?     '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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:25      imageLoad (temp 4-component vector of float)
+0:25        'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
+0:25        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:25          '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:25          Constant:
+0:25            0 (const uint)
+0:26      imageLoad (temp 4-component vector of uint)
+0:26        'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
+0:26        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:26          '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:26          Constant:
+0:26            0 (const uint)
+0:27      imageLoad (temp 4-component vector of int)
+0:27        'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
+0:27        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:27          '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:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        Color: direct index for structure (temp 4-component vector of float)
+0:29          'psout' (temp structure{temp 4-component vector of float Color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+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:?   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:?     '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
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 48
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..a81ddf57de868380dd2996f68e596090d2e24cca
--- /dev/null
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -0,0 +1,383 @@
+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 Parameters: 
+0:?     Sequence
+0:44      imageLoad (temp 4-component vector of float)
+0:44        'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:44        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:44          '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:44          Constant:
+0:44            1 (const uint)
+0:45      imageLoad (temp 4-component vector of int)
+0:45        'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:45        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:45          '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:45          Constant:
+0:45            1 (const uint)
+0:46      imageLoad (temp 4-component vector of uint)
+0:46        'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:46        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:46          '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:46          Constant:
+0:46            1 (const uint)
+0:49      imageLoad (temp 4-component vector of float)
+0:49        'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:49        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:49          '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:49          Constant:
+0:49            2 (const uint)
+0:50      imageLoad (temp 4-component vector of int)
+0:50        'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:50        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:50          '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:50          Constant:
+0:50            2 (const uint)
+0:51      imageLoad (temp 4-component vector of uint)
+0:51        'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:51        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:51          '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:51          Constant:
+0:51            2 (const uint)
+0:53      move second child to first child (temp 4-component vector of float)
+0:53        Color: direct index for structure (temp 4-component vector of float)
+0:53          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:53          Constant:
+0:53            0 (const int)
+0:53        Constant:
+0:53          1.000000
+0:53          1.000000
+0:53          1.000000
+0:53          1.000000
+0:54      move second child to first child (temp float)
+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        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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:44      imageLoad (temp 4-component vector of float)
+0:44        'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:44        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:44          '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:44          Constant:
+0:44            1 (const uint)
+0:45      imageLoad (temp 4-component vector of int)
+0:45        'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:45        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:45          '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:45          Constant:
+0:45            1 (const uint)
+0:46      imageLoad (temp 4-component vector of uint)
+0:46        'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:46        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:46          '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:46          Constant:
+0:46            1 (const uint)
+0:49      imageLoad (temp 4-component vector of float)
+0:49        'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:49        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:49          '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:49          Constant:
+0:49            2 (const uint)
+0:50      imageLoad (temp 4-component vector of int)
+0:50        'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:50        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:50          '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:50          Constant:
+0:50            2 (const uint)
+0:51      imageLoad (temp 4-component vector of uint)
+0:51        'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+0:51        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:51          '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:51          Constant:
+0:51            2 (const uint)
+0:53      move second child to first child (temp 4-component vector of float)
+0:53        Color: direct index for structure (temp 4-component vector of float)
+0:53          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:53          Constant:
+0:53            0 (const int)
+0:53        Constant:
+0:53          1.000000
+0:53          1.000000
+0:53          1.000000
+0:53          1.000000
+0:54      move second child to first child (temp float)
+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        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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 74 78
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..b5435bac4b0ec318c3e11d7c233a295cbf32642a
--- /dev/null
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -0,0 +1,432 @@
+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 Parameters: 
+0:?     Sequence
+0:44      imageLoad (temp 4-component vector of float)
+0:44        'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:44        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:44          '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:44          Constant:
+0:44            0 (const uint)
+0:45      imageLoad (temp 4-component vector of int)
+0:45        'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:45        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:45          '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:45          Constant:
+0:45            0 (const uint)
+0:46      imageLoad (temp 4-component vector of uint)
+0:46        'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:46        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:46          '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:46          Constant:
+0:46            0 (const uint)
+0:49      imageLoad (temp 4-component vector of float)
+0:49        'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:49        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:49          '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:49          Constant:
+0:49            1 (const uint)
+0:50      imageLoad (temp 4-component vector of int)
+0:50        'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:50        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:50          '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:50          Constant:
+0:50            1 (const uint)
+0:51      imageLoad (temp 4-component vector of uint)
+0:51        'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:51        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51          '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:51          Constant:
+0:51            1 (const uint)
+0:54      imageLoad (temp 4-component vector of float)
+0:54        'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:54        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54          '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:54          Constant:
+0:54            2 (const uint)
+0:55      imageLoad (temp 4-component vector of int)
+0:55        'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:55        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:55          '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:55          Constant:
+0:55            2 (const uint)
+0:56      imageLoad (temp 4-component vector of uint)
+0:56        'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:56        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56          '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:56          Constant:
+0:56            2 (const uint)
+0:58      move second child to first child (temp 4-component vector of float)
+0:58        Color: direct index for structure (temp 4-component vector of float)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:58          Constant:
+0:58            0 (const int)
+0:58        Constant:
+0:58          1.000000
+0:58          1.000000
+0:58          1.000000
+0:58          1.000000
+0:59      move second child to first child (temp float)
+0:59        Depth: direct index for structure (temp float)
+0:59          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:59          Constant:
+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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:44      imageLoad (temp 4-component vector of float)
+0:44        'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:44        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:44          '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:44          Constant:
+0:44            0 (const uint)
+0:45      imageLoad (temp 4-component vector of int)
+0:45        'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:45        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:45          '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:45          Constant:
+0:45            0 (const uint)
+0:46      imageLoad (temp 4-component vector of uint)
+0:46        'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:46        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:46          '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:46          Constant:
+0:46            0 (const uint)
+0:49      imageLoad (temp 4-component vector of float)
+0:49        'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:49        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:49          '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:49          Constant:
+0:49            1 (const uint)
+0:50      imageLoad (temp 4-component vector of int)
+0:50        'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:50        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:50          '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:50          Constant:
+0:50            1 (const uint)
+0:51      imageLoad (temp 4-component vector of uint)
+0:51        'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:51        c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:51          '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:51          Constant:
+0:51            1 (const uint)
+0:54      imageLoad (temp 4-component vector of float)
+0:54        'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:54        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:54          '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:54          Constant:
+0:54            2 (const uint)
+0:55      imageLoad (temp 4-component vector of int)
+0:55        'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:55        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:55          '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:55          Constant:
+0:55            2 (const uint)
+0:56      imageLoad (temp 4-component vector of uint)
+0:56        'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:56        c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:56          '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:56          Constant:
+0:56            2 (const uint)
+0:58      move second child to first child (temp 4-component vector of float)
+0:58        Color: direct index for structure (temp 4-component vector of float)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:58          Constant:
+0:58            0 (const int)
+0:58        Constant:
+0:58          1.000000
+0:58          1.000000
+0:58          1.000000
+0:58          1.000000
+0:59      move second child to first child (temp float)
+0:59        Depth: direct index for structure (temp float)
+0:59          'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:59          Constant:
+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:?   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)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 96 100
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..d9ae7d5b70325a96238d19dba844b34f18d6429d
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -0,0 +1,220 @@
+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 Parameters: 
+0:?     Sequence
+0:13      Test condition and select (temp void)
+0:13        Condition
+0:13        logical-and (temp bool)
+0:13          Convert int to bool (temp bool)
+0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13              '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})
+0:13              Constant:
+0:13                0 (const uint)
+0:13          Convert int to bool (temp bool)
+0:13            Convert float to int (temp int)
+0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:13                '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})
+0:13                Constant:
+0:13                  2 (const uint)
+0:13        true case is null
+0:14      Test condition and select (temp void)
+0:14        Condition
+0:14        logical-or (temp bool)
+0:14          Convert int to bool (temp bool)
+0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:14              '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})
+0:14              Constant:
+0:14                0 (const uint)
+0:14          Convert int to bool (temp bool)
+0:14            Convert float to int (temp int)
+0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:14                '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})
+0:14                Constant:
+0:14                  2 (const uint)
+0:14        true case is null
+0:17      move second child to first child (temp 4-component vector of float)
+0:17        Color: direct index for structure (temp 4-component vector of float)
+0:17          'psout' (temp structure{temp 4-component vector of float Color})
+0:17          Constant:
+0:17            0 (const int)
+0:17        Constant:
+0:17          1.000000
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:13      Test condition and select (temp void)
+0:13        Condition
+0:13        logical-and (temp bool)
+0:13          Convert int to bool (temp bool)
+0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13              '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})
+0:13              Constant:
+0:13                0 (const uint)
+0:13          Convert int to bool (temp bool)
+0:13            Convert float to int (temp int)
+0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:13                '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})
+0:13                Constant:
+0:13                  2 (const uint)
+0:13        true case is null
+0:14      Test condition and select (temp void)
+0:14        Condition
+0:14        logical-or (temp bool)
+0:14          Convert int to bool (temp bool)
+0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:14              '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})
+0:14              Constant:
+0:14                0 (const uint)
+0:14          Convert int to bool (temp bool)
+0:14            Convert float to int (temp int)
+0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:14                '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})
+0:14                Constant:
+0:14                  2 (const uint)
+0:14        true case is null
+0:17      move second child to first child (temp 4-component vector of float)
+0:17        Color: direct index for structure (temp 4-component vector of float)
+0:17          'psout' (temp structure{temp 4-component vector of float Color})
+0:17          Constant:
+0:17            0 (const int)
+0:17        Constant:
+0:17          1.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 53
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..32b5a3859757278dcc6aad74713dc4314c5cef87
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -0,0 +1,412 @@
+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 Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r00' (temp 4-component vector of bool)
+0:11          Negate conditional (temp 4-component vector of bool)
+0:11            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:11              '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})
+0:11              Constant:
+0:11                0 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of bool)
+0:12          'r01' (temp 4-component vector of bool)
+0:12          logical-and (temp 4-component vector of bool)
+0:12            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:12              '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})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:12              '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})
+0:12              Constant:
+0:12                1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r02' (temp 4-component vector of bool)
+0:13          logical-or (temp 4-component vector of bool)
+0:13            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:13              '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})
+0:13              Constant:
+0:13                0 (const uint)
+0:13            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:13              '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})
+0:13              Constant:
+0:13                1 (const uint)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r10' (temp 4-component vector of bool)
+0:15          logical-and (temp 4-component vector of bool)
+0:15            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:15                '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})
+0:15                Constant:
+0:15                  2 (const uint)
+0:15            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              '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})
+0:15              Constant:
+0:15                1 (const uint)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r11' (temp 4-component vector of bool)
+0:16          logical-or (temp 4-component vector of bool)
+0:16            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:16                '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})
+0:16                Constant:
+0:16                  2 (const uint)
+0:16            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              '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})
+0:16              Constant:
+0:16                1 (const uint)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          logical-and (temp 4-component vector of bool)
+0:18            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              '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})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:18                '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})
+0:18                Constant:
+0:18                  3 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          logical-or (temp 4-component vector of bool)
+0:19            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              '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})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:19                '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})
+0:19                Constant:
+0:19                  3 (const uint)
+0:22      move second child to first child (temp 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})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Convert bool to float (temp 4-component vector of float)
+0:22          logical-or (temp 4-component vector of bool)
+0:22            logical-or (temp 4-component vector of bool)
+0:22              logical-or (temp 4-component vector of bool)
+0:22                logical-or (temp 4-component vector of bool)
+0:22                  logical-or (temp 4-component vector of bool)
+0:22                    logical-or (temp 4-component vector of bool)
+0:22                      'r00' (temp 4-component vector of bool)
+0:22                      'r01' (temp 4-component vector of bool)
+0:22                    'r02' (temp 4-component vector of bool)
+0:22                  'r10' (temp 4-component vector of bool)
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r00' (temp 4-component vector of bool)
+0:11          Negate conditional (temp 4-component vector of bool)
+0:11            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:11              '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})
+0:11              Constant:
+0:11                0 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of bool)
+0:12          'r01' (temp 4-component vector of bool)
+0:12          logical-and (temp 4-component vector of bool)
+0:12            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:12              '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})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:12              '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})
+0:12              Constant:
+0:12                1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r02' (temp 4-component vector of bool)
+0:13          logical-or (temp 4-component vector of bool)
+0:13            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:13              '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})
+0:13              Constant:
+0:13                0 (const uint)
+0:13            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:13              '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})
+0:13              Constant:
+0:13                1 (const uint)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r10' (temp 4-component vector of bool)
+0:15          logical-and (temp 4-component vector of bool)
+0:15            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:15                '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})
+0:15                Constant:
+0:15                  2 (const uint)
+0:15            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              '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})
+0:15              Constant:
+0:15                1 (const uint)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r11' (temp 4-component vector of bool)
+0:16          logical-or (temp 4-component vector of bool)
+0:16            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:16                '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})
+0:16                Constant:
+0:16                  2 (const uint)
+0:16            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              '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})
+0:16              Constant:
+0:16                1 (const uint)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          logical-and (temp 4-component vector of bool)
+0:18            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              '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})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:18                '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})
+0:18                Constant:
+0:18                  3 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          logical-or (temp 4-component vector of bool)
+0:19            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              '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})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:19                '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})
+0:19                Constant:
+0:19                  3 (const uint)
+0:22      move second child to first child (temp 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})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Convert bool to float (temp 4-component vector of float)
+0:22          logical-or (temp 4-component vector of bool)
+0:22            logical-or (temp 4-component vector of bool)
+0:22              logical-or (temp 4-component vector of bool)
+0:22                logical-or (temp 4-component vector of bool)
+0:22                  logical-or (temp 4-component vector of bool)
+0:22                    logical-or (temp 4-component vector of bool)
+0:22                      'r00' (temp 4-component vector of bool)
+0:22                      'r01' (temp 4-component vector of bool)
+0:22                    'r02' (temp 4-component vector of bool)
+0:22                  'r10' (temp 4-component vector of bool)
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 111
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..1aaa69a24eb65f828b023ed397214c1e388bb9fc
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -0,0 +1,292 @@
+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 Parameters: 
+0:?     Sequence
+0:13      Negate conditional (temp bool)
+0:13        Convert int to bool (temp bool)
+0:13          ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13            '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})
+0:13            Constant:
+0:13              0 (const uint)
+0:14      Negate conditional (temp 4-component vector of bool)
+0:14        Convert int to bool (temp 4-component vector of bool)
+0:14          ival4: direct index for structure (layout(offset=16 ) uniform 4-component vector of int)
+0:14            '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})
+0:14            Constant:
+0:14              1 (const uint)
+0:16      Negate conditional (temp bool)
+0:16        Convert float to bool (temp bool)
+0:16          fval: direct index for structure (layout(offset=32 ) uniform float)
+0:16            '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})
+0:16            Constant:
+0:16              2 (const uint)
+0:17      Negate conditional (temp 4-component vector of bool)
+0:17        Convert float to bool (temp 4-component vector of bool)
+0:17          fval4: direct index for structure (layout(offset=48 ) uniform 4-component vector of float)
+0:17            '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})
+0:17            Constant:
+0:17              3 (const uint)
+0:19      Test condition and select (temp void)
+0:19        Condition
+0:19        ival: direct index for structure (layout(offset=0 ) uniform int)
+0:19          '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})
+0:19          Constant:
+0:19            0 (const uint)
+0:19        true case is null
+0:20      Test condition and select (temp void)
+0:20        Condition
+0:20        fval: direct index for structure (layout(offset=32 ) uniform float)
+0:20          '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})
+0:20          Constant:
+0:20            2 (const uint)
+0:20        true case is null
+0:21      Test condition and select (temp void)
+0:21        Condition
+0:21        Negate conditional (temp bool)
+0:21          Convert int to bool (temp bool)
+0:21            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:21              '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})
+0:21              Constant:
+0:21                0 (const uint)
+0:21        true case is null
+0:22      Test condition and select (temp void)
+0:22        Condition
+0:22        Negate conditional (temp bool)
+0:22          Convert float to bool (temp bool)
+0:22            fval: direct index for structure (layout(offset=32 ) uniform float)
+0:22              '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})
+0:22              Constant:
+0:22                2 (const uint)
+0:22        true case is null
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          1.000000
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:13      Negate conditional (temp bool)
+0:13        Convert int to bool (temp bool)
+0:13          ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13            '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})
+0:13            Constant:
+0:13              0 (const uint)
+0:14      Negate conditional (temp 4-component vector of bool)
+0:14        Convert int to bool (temp 4-component vector of bool)
+0:14          ival4: direct index for structure (layout(offset=16 ) uniform 4-component vector of int)
+0:14            '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})
+0:14            Constant:
+0:14              1 (const uint)
+0:16      Negate conditional (temp bool)
+0:16        Convert float to bool (temp bool)
+0:16          fval: direct index for structure (layout(offset=32 ) uniform float)
+0:16            '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})
+0:16            Constant:
+0:16              2 (const uint)
+0:17      Negate conditional (temp 4-component vector of bool)
+0:17        Convert float to bool (temp 4-component vector of bool)
+0:17          fval4: direct index for structure (layout(offset=48 ) uniform 4-component vector of float)
+0:17            '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})
+0:17            Constant:
+0:17              3 (const uint)
+0:19      Test condition and select (temp void)
+0:19        Condition
+0:19        ival: direct index for structure (layout(offset=0 ) uniform int)
+0:19          '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})
+0:19          Constant:
+0:19            0 (const uint)
+0:19        true case is null
+0:20      Test condition and select (temp void)
+0:20        Condition
+0:20        fval: direct index for structure (layout(offset=32 ) uniform float)
+0:20          '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})
+0:20          Constant:
+0:20            2 (const uint)
+0:20        true case is null
+0:21      Test condition and select (temp void)
+0:21        Condition
+0:21        Negate conditional (temp bool)
+0:21          Convert int to bool (temp bool)
+0:21            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:21              '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})
+0:21              Constant:
+0:21                0 (const uint)
+0:21        true case is null
+0:22      Test condition and select (temp void)
+0:22        Condition
+0:22        Negate conditional (temp bool)
+0:22          Convert float to bool (temp bool)
+0:22            fval: direct index for structure (layout(offset=32 ) uniform float)
+0:22              '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})
+0:22              Constant:
+0:22                2 (const uint)
+0:22        true case is null
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          1.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 73
+                              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
+               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
+         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
+                              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
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..f9dd65f9e7bf16d48cb9584ff1c16f5d80c1a765
--- /dev/null
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -0,0 +1,261 @@
+hlsl.matNx1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestMatNx1( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 1X1 matrix of float)
+0:13          'r00' (temp 1X1 matrix of float)
+0:13          transpose (temp 1X1 matrix of float)
+0:13            'f1x1' (temp 1X1 matrix of float)
+0:14      Sequence
+0:14        move second child to first child (temp 1X2 matrix of float)
+0:14          'r01' (temp 1X2 matrix of float)
+0:14          transpose (temp 1X2 matrix of float)
+0:14            'f2x1' (temp 2X1 matrix of float)
+0:15      Sequence
+0:15        move second child to first child (temp 1X3 matrix of float)
+0:15          'r02' (temp 1X3 matrix of float)
+0:15          transpose (temp 1X3 matrix of float)
+0:15            'f3x1' (temp 3X1 matrix of float)
+0:16      Sequence
+0:16        move second child to first child (temp 1X4 matrix of float)
+0:16          'r03' (temp 1X4 matrix of float)
+0:16          transpose (temp 1X4 matrix of float)
+0:16            'f4x1' (temp 4X1 matrix of float)
+0:18      Sequence
+0:18        move second child to first child (temp 1X1 matrix of float)
+0:18          'r10' (temp 1X1 matrix of float)
+0:18          transpose (temp 1X1 matrix of float)
+0:18            'f1x1' (temp 1X1 matrix of float)
+0:19      Sequence
+0:19        move second child to first child (temp 2X1 matrix of float)
+0:19          'r11' (temp 2X1 matrix of float)
+0:19          transpose (temp 2X1 matrix of float)
+0:19            'f1x2' (temp 1X2 matrix of float)
+0:20      Sequence
+0:20        move second child to first child (temp 3X1 matrix of float)
+0:20          'r12' (temp 3X1 matrix of float)
+0:20          transpose (temp 3X1 matrix of float)
+0:20            'f1x3' (temp 1X3 matrix of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4X1 matrix of float)
+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 Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        color: direct index for structure (temp 4-component vector of float)
+0:29          'ps_output' (temp structure{temp 4-component vector of float color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+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:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestMatNx1( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 1X1 matrix of float)
+0:13          'r00' (temp 1X1 matrix of float)
+0:13          transpose (temp 1X1 matrix of float)
+0:13            'f1x1' (temp 1X1 matrix of float)
+0:14      Sequence
+0:14        move second child to first child (temp 1X2 matrix of float)
+0:14          'r01' (temp 1X2 matrix of float)
+0:14          transpose (temp 1X2 matrix of float)
+0:14            'f2x1' (temp 2X1 matrix of float)
+0:15      Sequence
+0:15        move second child to first child (temp 1X3 matrix of float)
+0:15          'r02' (temp 1X3 matrix of float)
+0:15          transpose (temp 1X3 matrix of float)
+0:15            'f3x1' (temp 3X1 matrix of float)
+0:16      Sequence
+0:16        move second child to first child (temp 1X4 matrix of float)
+0:16          'r03' (temp 1X4 matrix of float)
+0:16          transpose (temp 1X4 matrix of float)
+0:16            'f4x1' (temp 4X1 matrix of float)
+0:18      Sequence
+0:18        move second child to first child (temp 1X1 matrix of float)
+0:18          'r10' (temp 1X1 matrix of float)
+0:18          transpose (temp 1X1 matrix of float)
+0:18            'f1x1' (temp 1X1 matrix of float)
+0:19      Sequence
+0:19        move second child to first child (temp 2X1 matrix of float)
+0:19          'r11' (temp 2X1 matrix of float)
+0:19          transpose (temp 2X1 matrix of float)
+0:19            'f1x2' (temp 1X2 matrix of float)
+0:20      Sequence
+0:20        move second child to first child (temp 3X1 matrix of float)
+0:20          'r12' (temp 3X1 matrix of float)
+0:20          transpose (temp 3X1 matrix of float)
+0:20            'f1x3' (temp 1X3 matrix of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4X1 matrix of float)
+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 Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        color: direct index for structure (temp 4-component vector of float)
+0:29          'ps_output' (temp structure{temp 4-component vector of float color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 68
+                              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
+               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
+         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
+                              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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..e24c878441aa64b3537e48fdeb90b71eae0c95f9
--- /dev/null
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -0,0 +1,419 @@
+hlsl.matType.bool.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestBoolMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of bool)
+0:25          'r00' (temp 1X1 matrix of bool)
+0:25          transpose (temp 1X1 matrix of bool)
+0:25            'b1x1' (temp 1X1 matrix of bool)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of bool)
+0:26          'r01' (temp 1X2 matrix of bool)
+0:26          transpose (temp 1X2 matrix of bool)
+0:26            'b2x1' (temp 2X1 matrix of bool)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of bool)
+0:27          'r02' (temp 1X3 matrix of bool)
+0:27          transpose (temp 1X3 matrix of bool)
+0:27            'b3x1' (temp 3X1 matrix of bool)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of bool)
+0:28          'r03' (temp 1X4 matrix of bool)
+0:28          transpose (temp 1X4 matrix of bool)
+0:28            'b4x1' (temp 4X1 matrix of bool)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of bool)
+0:30          'r10' (temp 2X1 matrix of bool)
+0:30          transpose (temp 2X1 matrix of bool)
+0:30            'b1x2' (temp 1X2 matrix of bool)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of bool)
+0:31          'r11' (temp 2X2 matrix of bool)
+0:31          transpose (temp 2X2 matrix of bool)
+0:31            'b2x2' (temp 2X2 matrix of bool)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of bool)
+0:32          'r12' (temp 2X3 matrix of bool)
+0:32          transpose (temp 2X3 matrix of bool)
+0:32            'b3x2' (temp 3X2 matrix of bool)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of bool)
+0:33          'r13' (temp 2X4 matrix of bool)
+0:33          transpose (temp 2X4 matrix of bool)
+0:33            'b4x2' (temp 4X2 matrix of bool)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of bool)
+0:35          'r20' (temp 3X1 matrix of bool)
+0:35          transpose (temp 3X1 matrix of bool)
+0:35            'b1x3' (temp 1X3 matrix of bool)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of bool)
+0:36          'r21' (temp 3X2 matrix of bool)
+0:36          transpose (temp 3X2 matrix of bool)
+0:36            'b2x3' (temp 2X3 matrix of bool)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of bool)
+0:37          'r22' (temp 3X3 matrix of bool)
+0:37          transpose (temp 3X3 matrix of bool)
+0:37            'b3x3' (temp 3X3 matrix of bool)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of bool)
+0:38          'r23' (temp 3X4 matrix of bool)
+0:38          transpose (temp 3X4 matrix of bool)
+0:38            'b4x3' (temp 4X3 matrix of bool)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of bool)
+0:40          'r30' (temp 4X1 matrix of bool)
+0:40          transpose (temp 4X1 matrix of bool)
+0:40            'b1x4' (temp 1X4 matrix of bool)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of bool)
+0:41          'r31' (temp 4X2 matrix of bool)
+0:41          transpose (temp 4X2 matrix of bool)
+0:41            'b2x4' (temp 2X4 matrix of bool)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of bool)
+0:42          'r32' (temp 4X3 matrix of bool)
+0:42          transpose (temp 4X3 matrix of bool)
+0:42            'b3x4' (temp 3X4 matrix of bool)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of bool)
+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 Parameters: 
+0:?     Sequence
+0:51      move second child to first child (temp 4-component vector of float)
+0:51        color: direct index for structure (temp 4-component vector of float)
+0:51          'ps_output' (temp structure{temp 4-component vector of float color})
+0:51          Constant:
+0:51            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestBoolMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of bool)
+0:25          'r00' (temp 1X1 matrix of bool)
+0:25          transpose (temp 1X1 matrix of bool)
+0:25            'b1x1' (temp 1X1 matrix of bool)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of bool)
+0:26          'r01' (temp 1X2 matrix of bool)
+0:26          transpose (temp 1X2 matrix of bool)
+0:26            'b2x1' (temp 2X1 matrix of bool)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of bool)
+0:27          'r02' (temp 1X3 matrix of bool)
+0:27          transpose (temp 1X3 matrix of bool)
+0:27            'b3x1' (temp 3X1 matrix of bool)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of bool)
+0:28          'r03' (temp 1X4 matrix of bool)
+0:28          transpose (temp 1X4 matrix of bool)
+0:28            'b4x1' (temp 4X1 matrix of bool)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of bool)
+0:30          'r10' (temp 2X1 matrix of bool)
+0:30          transpose (temp 2X1 matrix of bool)
+0:30            'b1x2' (temp 1X2 matrix of bool)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of bool)
+0:31          'r11' (temp 2X2 matrix of bool)
+0:31          transpose (temp 2X2 matrix of bool)
+0:31            'b2x2' (temp 2X2 matrix of bool)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of bool)
+0:32          'r12' (temp 2X3 matrix of bool)
+0:32          transpose (temp 2X3 matrix of bool)
+0:32            'b3x2' (temp 3X2 matrix of bool)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of bool)
+0:33          'r13' (temp 2X4 matrix of bool)
+0:33          transpose (temp 2X4 matrix of bool)
+0:33            'b4x2' (temp 4X2 matrix of bool)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of bool)
+0:35          'r20' (temp 3X1 matrix of bool)
+0:35          transpose (temp 3X1 matrix of bool)
+0:35            'b1x3' (temp 1X3 matrix of bool)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of bool)
+0:36          'r21' (temp 3X2 matrix of bool)
+0:36          transpose (temp 3X2 matrix of bool)
+0:36            'b2x3' (temp 2X3 matrix of bool)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of bool)
+0:37          'r22' (temp 3X3 matrix of bool)
+0:37          transpose (temp 3X3 matrix of bool)
+0:37            'b3x3' (temp 3X3 matrix of bool)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of bool)
+0:38          'r23' (temp 3X4 matrix of bool)
+0:38          transpose (temp 3X4 matrix of bool)
+0:38            'b4x3' (temp 4X3 matrix of bool)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of bool)
+0:40          'r30' (temp 4X1 matrix of bool)
+0:40          transpose (temp 4X1 matrix of bool)
+0:40            'b1x4' (temp 1X4 matrix of bool)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of bool)
+0:41          'r31' (temp 4X2 matrix of bool)
+0:41          transpose (temp 4X2 matrix of bool)
+0:41            'b2x4' (temp 2X4 matrix of bool)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of bool)
+0:42          'r32' (temp 4X3 matrix of bool)
+0:42          transpose (temp 4X3 matrix of bool)
+0:42            'b3x4' (temp 3X4 matrix of bool)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of bool)
+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 Parameters: 
+0:?     Sequence
+0:51      move second child to first child (temp 4-component vector of float)
+0:51        color: direct index for structure (temp 4-component vector of float)
+0:51          'ps_output' (temp structure{temp 4-component vector of float color})
+0:51          Constant:
+0:51            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 121
+                              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
+               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
+              27:             TypePointer Function 26
+              29:             TypeMatrix 9(bvec) 3
+              30:             TypePointer Function 29
+              34:             TypeVector 8(bool) 4
+              35:             TypeMatrix 34(bvec4) 1
+              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
+              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
+              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
+         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
+                              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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 2d63460ba072e32d07b04b0a6c910a50e76878a4..038ca738ae2e7e2e2bb51d054e0f44838fda5a5f 100755
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -2,12 +2,7 @@ hlsl.matType.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Sequence
-0:1    move second child to first child (temp 1-component vector of float)
-0:1      'f1' (global 1-component vector of float)
-0:1      Constant:
-0:1        1.000000
-0:9  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
+0:9  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inFloat1' (in 1-component vector of float)
 0:9      'inScalar' (in float)
@@ -15,26 +10,17 @@ gl_FragCoord origin is upper left
 0:10      Branch: Return with expression
 0:10        'inFloat1' (in 1-component vector of float)
 0:?   Linker Objects
-0:?     'f1' (global 1-component vector of float)
-0:?     'fmat11' (global 1X1 matrix of float)
-0:?     'fmat41' (global 4X1 matrix of float)
-0:?     'fmat12' (global 1X2 matrix of float)
-0:?     'dmat23' (global 2X3 matrix of double)
-0:?     'int44' (global 4X4 matrix of int)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
 
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Sequence
-0:1    move second child to first child (temp 1-component vector of float)
-0:1      'f1' (global 1-component vector of float)
-0:1      Constant:
-0:1        1.000000
-0:9  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
+0:9  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inFloat1' (in 1-component vector of float)
 0:9      'inScalar' (in float)
@@ -42,16 +28,11 @@ gl_FragCoord origin is upper left
 0:10      Branch: Return with expression
 0:10        'inFloat1' (in 1-component vector of float)
 0:?   Linker Objects
-0:?     'f1' (global 1-component vector of float)
-0:?     'fmat11' (global 1X1 matrix of float)
-0:?     'fmat41' (global 4X1 matrix of float)
-0:?     'fmat12' (global 1X2 matrix of float)
-0:?     'dmat23' (global 2X3 matrix of double)
-0:?     'int44' (global 4X4 matrix of int)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 40
+// Id's are bound by 30
 
                               Capability Shader
                               Capability Float64
@@ -63,49 +44,59 @@ gl_FragCoord origin is upper left
                               Name 11  "ShaderFunction(vf1;f1;"
                               Name 9  "inFloat1"
                               Name 10  "inScalar"
-                              Name 14  "f1"
-                              Name 22  "fmat11"
-                              Name 25  "fmat41"
-                              Name 29  "fmat12"
-                              Name 34  "dmat23"
-                              Name 39  "int44"
+                              Name 27  "$Global"
+                              MemberName 27($Global) 0  "f1"
+                              MemberName 27($Global) 1  "fmat11"
+                              MemberName 27($Global) 2  "fmat41"
+                              MemberName 27($Global) 3  "fmat12"
+                              MemberName 27($Global) 4  "dmat23"
+                              MemberName 27($Global) 5  "int44"
+                              Name 29  ""
+                              MemberDecorate 27($Global) 0 Offset 0
+                              MemberDecorate 27($Global) 1 RowMajor
+                              MemberDecorate 27($Global) 1 Offset 16
+                              MemberDecorate 27($Global) 1 MatrixStride 16
+                              MemberDecorate 27($Global) 2 RowMajor
+                              MemberDecorate 27($Global) 2 Offset 32
+                              MemberDecorate 27($Global) 2 MatrixStride 16
+                              MemberDecorate 27($Global) 3 RowMajor
+                              MemberDecorate 27($Global) 3 Offset 48
+                              MemberDecorate 27($Global) 3 MatrixStride 16
+                              MemberDecorate 27($Global) 4 RowMajor
+                              MemberDecorate 27($Global) 4 Offset 80
+                              MemberDecorate 27($Global) 4 MatrixStride 16
+                              MemberDecorate 27($Global) 5 RowMajor
+                              MemberDecorate 27($Global) 5 Offset 128
+                              MemberDecorate 27($Global) 5 MatrixStride 16
+                              Decorate 27($Global) Block
+                              Decorate 29 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
                8:             TypeFunction 6(float) 7(ptr) 7(ptr)
-              13:             TypePointer Private 6(float)
-          14(f1):     13(ptr) Variable Private
-              15:    6(float) Constant 1065353216
-              19:             TypeVector 6(float) 1
-              20:             TypeMatrix 19(fvec) 1
-              21:             TypePointer Private 20
-      22(fmat11):     21(ptr) Variable Private
-              23:             TypeMatrix 19(fvec) 4
-              24:             TypePointer Private 23
-      25(fmat41):     24(ptr) Variable Private
-              26:             TypeVector 6(float) 2
-              27:             TypeMatrix 26(fvec2) 1
-              28:             TypePointer Private 27
-      29(fmat12):     28(ptr) Variable Private
-              30:             TypeFloat 64
-              31:             TypeVector 30(float) 3
-              32:             TypeMatrix 31(fvec3) 2
-              33:             TypePointer Private 32
-      34(dmat23):     33(ptr) Variable Private
-              35:             TypeInt 32 1
-              36:             TypeVector 35(int) 4
-              37:             TypeMatrix 36(ivec4) 4
-              38:             TypePointer Private 37
-       39(int44):     38(ptr) Variable Private
+              16:             TypeVector 6(float) 1
+              17:             TypeMatrix 16(fvec) 1
+              18:             TypeMatrix 16(fvec) 4
+              19:             TypeVector 6(float) 2
+              20:             TypeMatrix 19(fvec2) 1
+              21:             TypeFloat 64
+              22:             TypeVector 21(float) 3
+              23:             TypeMatrix 22(fvec3) 2
+              24:             TypeInt 32 1
+              25:             TypeVector 24(int) 4
+              26:             TypeMatrix 25(ivec4) 4
+     27($Global):             TypeStruct 6(float) 17 18 20 23 26
+              28:             TypePointer Uniform 27($Global)
+              29:     28(ptr) Variable Uniform
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-                              Store 14(f1) 15
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
     10(inScalar):      7(ptr) FunctionParameter
               12:             Label
-              16:    6(float) Load 9(inFloat1)
-                              ReturnValue 16
+              13:    6(float) Load 9(inFloat1)
+                              ReturnValue 13
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..d7ffb0f780535c0216f4ac26fbb073fb4a46dc6f
--- /dev/null
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -0,0 +1,738 @@
+hlsl.matType.int.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestIntMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of int)
+0:25          'r00' (temp 1X1 matrix of int)
+0:25          transpose (temp 1X1 matrix of int)
+0:25            'i1x1' (temp 1X1 matrix of int)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of int)
+0:26          'r01' (temp 1X2 matrix of int)
+0:26          transpose (temp 1X2 matrix of int)
+0:26            'i2x1' (temp 2X1 matrix of int)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of int)
+0:27          'r02' (temp 1X3 matrix of int)
+0:27          transpose (temp 1X3 matrix of int)
+0:27            'i3x1' (temp 3X1 matrix of int)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of int)
+0:28          'r03' (temp 1X4 matrix of int)
+0:28          transpose (temp 1X4 matrix of int)
+0:28            'i4x1' (temp 4X1 matrix of int)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of int)
+0:30          'r10' (temp 2X1 matrix of int)
+0:30          transpose (temp 2X1 matrix of int)
+0:30            'i1x2' (temp 1X2 matrix of int)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of int)
+0:31          'r11' (temp 2X2 matrix of int)
+0:31          transpose (temp 2X2 matrix of int)
+0:31            'i2x2' (temp 2X2 matrix of int)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of int)
+0:32          'r12' (temp 2X3 matrix of int)
+0:32          transpose (temp 2X3 matrix of int)
+0:32            'i3x2' (temp 3X2 matrix of int)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of int)
+0:33          'r13' (temp 2X4 matrix of int)
+0:33          transpose (temp 2X4 matrix of int)
+0:33            'i4x2' (temp 4X2 matrix of int)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of int)
+0:35          'r20' (temp 3X1 matrix of int)
+0:35          transpose (temp 3X1 matrix of int)
+0:35            'i1x3' (temp 1X3 matrix of int)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of int)
+0:36          'r21' (temp 3X2 matrix of int)
+0:36          transpose (temp 3X2 matrix of int)
+0:36            'i2x3' (temp 2X3 matrix of int)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of int)
+0:37          'r22' (temp 3X3 matrix of int)
+0:37          transpose (temp 3X3 matrix of int)
+0:37            'i3x3' (temp 3X3 matrix of int)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of int)
+0:38          'r23' (temp 3X4 matrix of int)
+0:38          transpose (temp 3X4 matrix of int)
+0:38            'i4x3' (temp 4X3 matrix of int)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of int)
+0:40          'r30' (temp 4X1 matrix of int)
+0:40          transpose (temp 4X1 matrix of int)
+0:40            'i1x4' (temp 1X4 matrix of int)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of int)
+0:41          'r31' (temp 4X2 matrix of int)
+0:41          transpose (temp 4X2 matrix of int)
+0:41            'i2x4' (temp 2X4 matrix of int)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of int)
+0:42          'r32' (temp 4X3 matrix of int)
+0:42          transpose (temp 4X3 matrix of int)
+0:42            'i3x4' (temp 3X4 matrix of int)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of int)
+0:43          'r33' (temp 4X4 matrix of int)
+0:43          transpose (temp 4X4 matrix of int)
+0:43            'i4x4' (temp 4X4 matrix of int)
+0:47  Function Definition: TestUintMatTypes( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child (temp 1X1 matrix of uint)
+0:69          'r00' (temp 1X1 matrix of uint)
+0:69          transpose (temp 1X1 matrix of uint)
+0:69            'u1x1' (temp 1X1 matrix of uint)
+0:70      Sequence
+0:70        move second child to first child (temp 1X2 matrix of uint)
+0:70          'r01' (temp 1X2 matrix of uint)
+0:70          transpose (temp 1X2 matrix of uint)
+0:70            'u2x1' (temp 2X1 matrix of uint)
+0:71      Sequence
+0:71        move second child to first child (temp 1X3 matrix of uint)
+0:71          'r02' (temp 1X3 matrix of uint)
+0:71          transpose (temp 1X3 matrix of uint)
+0:71            'u3x1' (temp 3X1 matrix of uint)
+0:72      Sequence
+0:72        move second child to first child (temp 1X4 matrix of uint)
+0:72          'r03' (temp 1X4 matrix of uint)
+0:72          transpose (temp 1X4 matrix of uint)
+0:72            'u4x1' (temp 4X1 matrix of uint)
+0:74      Sequence
+0:74        move second child to first child (temp 2X1 matrix of uint)
+0:74          'r10' (temp 2X1 matrix of uint)
+0:74          transpose (temp 2X1 matrix of uint)
+0:74            'u1x2' (temp 1X2 matrix of uint)
+0:75      Sequence
+0:75        move second child to first child (temp 2X2 matrix of uint)
+0:75          'r11' (temp 2X2 matrix of uint)
+0:75          transpose (temp 2X2 matrix of uint)
+0:75            'u2x2' (temp 2X2 matrix of uint)
+0:76      Sequence
+0:76        move second child to first child (temp 2X3 matrix of uint)
+0:76          'r12' (temp 2X3 matrix of uint)
+0:76          transpose (temp 2X3 matrix of uint)
+0:76            'u3x2' (temp 3X2 matrix of uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2X4 matrix of uint)
+0:77          'r13' (temp 2X4 matrix of uint)
+0:77          transpose (temp 2X4 matrix of uint)
+0:77            'u4x2' (temp 4X2 matrix of uint)
+0:79      Sequence
+0:79        move second child to first child (temp 3X1 matrix of uint)
+0:79          'r20' (temp 3X1 matrix of uint)
+0:79          transpose (temp 3X1 matrix of uint)
+0:79            'u1x3' (temp 1X3 matrix of uint)
+0:80      Sequence
+0:80        move second child to first child (temp 3X2 matrix of uint)
+0:80          'r21' (temp 3X2 matrix of uint)
+0:80          transpose (temp 3X2 matrix of uint)
+0:80            'u2x3' (temp 2X3 matrix of uint)
+0:81      Sequence
+0:81        move second child to first child (temp 3X3 matrix of uint)
+0:81          'r22' (temp 3X3 matrix of uint)
+0:81          transpose (temp 3X3 matrix of uint)
+0:81            'u3x3' (temp 3X3 matrix of uint)
+0:82      Sequence
+0:82        move second child to first child (temp 3X4 matrix of uint)
+0:82          'r23' (temp 3X4 matrix of uint)
+0:82          transpose (temp 3X4 matrix of uint)
+0:82            'u4x3' (temp 4X3 matrix of uint)
+0:84      Sequence
+0:84        move second child to first child (temp 4X1 matrix of uint)
+0:84          'r30' (temp 4X1 matrix of uint)
+0:84          transpose (temp 4X1 matrix of uint)
+0:84            'u1x4' (temp 1X4 matrix of uint)
+0:85      Sequence
+0:85        move second child to first child (temp 4X2 matrix of uint)
+0:85          'r31' (temp 4X2 matrix of uint)
+0:85          transpose (temp 4X2 matrix of uint)
+0:85            'u2x4' (temp 2X4 matrix of uint)
+0:86      Sequence
+0:86        move second child to first child (temp 4X3 matrix of uint)
+0:86          'r32' (temp 4X3 matrix of uint)
+0:86          transpose (temp 4X3 matrix of uint)
+0:86            'u3x4' (temp 3X4 matrix of uint)
+0:87      Sequence
+0:87        move second child to first child (temp 4X4 matrix of uint)
+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 Parameters: 
+0:?     Sequence
+0:95      move second child to first child (temp 4-component vector of float)
+0:95        color: direct index for structure (temp 4-component vector of float)
+0:95          'ps_output' (temp structure{temp 4-component vector of float color})
+0:95          Constant:
+0:95            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestIntMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of int)
+0:25          'r00' (temp 1X1 matrix of int)
+0:25          transpose (temp 1X1 matrix of int)
+0:25            'i1x1' (temp 1X1 matrix of int)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of int)
+0:26          'r01' (temp 1X2 matrix of int)
+0:26          transpose (temp 1X2 matrix of int)
+0:26            'i2x1' (temp 2X1 matrix of int)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of int)
+0:27          'r02' (temp 1X3 matrix of int)
+0:27          transpose (temp 1X3 matrix of int)
+0:27            'i3x1' (temp 3X1 matrix of int)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of int)
+0:28          'r03' (temp 1X4 matrix of int)
+0:28          transpose (temp 1X4 matrix of int)
+0:28            'i4x1' (temp 4X1 matrix of int)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of int)
+0:30          'r10' (temp 2X1 matrix of int)
+0:30          transpose (temp 2X1 matrix of int)
+0:30            'i1x2' (temp 1X2 matrix of int)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of int)
+0:31          'r11' (temp 2X2 matrix of int)
+0:31          transpose (temp 2X2 matrix of int)
+0:31            'i2x2' (temp 2X2 matrix of int)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of int)
+0:32          'r12' (temp 2X3 matrix of int)
+0:32          transpose (temp 2X3 matrix of int)
+0:32            'i3x2' (temp 3X2 matrix of int)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of int)
+0:33          'r13' (temp 2X4 matrix of int)
+0:33          transpose (temp 2X4 matrix of int)
+0:33            'i4x2' (temp 4X2 matrix of int)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of int)
+0:35          'r20' (temp 3X1 matrix of int)
+0:35          transpose (temp 3X1 matrix of int)
+0:35            'i1x3' (temp 1X3 matrix of int)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of int)
+0:36          'r21' (temp 3X2 matrix of int)
+0:36          transpose (temp 3X2 matrix of int)
+0:36            'i2x3' (temp 2X3 matrix of int)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of int)
+0:37          'r22' (temp 3X3 matrix of int)
+0:37          transpose (temp 3X3 matrix of int)
+0:37            'i3x3' (temp 3X3 matrix of int)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of int)
+0:38          'r23' (temp 3X4 matrix of int)
+0:38          transpose (temp 3X4 matrix of int)
+0:38            'i4x3' (temp 4X3 matrix of int)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of int)
+0:40          'r30' (temp 4X1 matrix of int)
+0:40          transpose (temp 4X1 matrix of int)
+0:40            'i1x4' (temp 1X4 matrix of int)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of int)
+0:41          'r31' (temp 4X2 matrix of int)
+0:41          transpose (temp 4X2 matrix of int)
+0:41            'i2x4' (temp 2X4 matrix of int)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of int)
+0:42          'r32' (temp 4X3 matrix of int)
+0:42          transpose (temp 4X3 matrix of int)
+0:42            'i3x4' (temp 3X4 matrix of int)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of int)
+0:43          'r33' (temp 4X4 matrix of int)
+0:43          transpose (temp 4X4 matrix of int)
+0:43            'i4x4' (temp 4X4 matrix of int)
+0:47  Function Definition: TestUintMatTypes( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child (temp 1X1 matrix of uint)
+0:69          'r00' (temp 1X1 matrix of uint)
+0:69          transpose (temp 1X1 matrix of uint)
+0:69            'u1x1' (temp 1X1 matrix of uint)
+0:70      Sequence
+0:70        move second child to first child (temp 1X2 matrix of uint)
+0:70          'r01' (temp 1X2 matrix of uint)
+0:70          transpose (temp 1X2 matrix of uint)
+0:70            'u2x1' (temp 2X1 matrix of uint)
+0:71      Sequence
+0:71        move second child to first child (temp 1X3 matrix of uint)
+0:71          'r02' (temp 1X3 matrix of uint)
+0:71          transpose (temp 1X3 matrix of uint)
+0:71            'u3x1' (temp 3X1 matrix of uint)
+0:72      Sequence
+0:72        move second child to first child (temp 1X4 matrix of uint)
+0:72          'r03' (temp 1X4 matrix of uint)
+0:72          transpose (temp 1X4 matrix of uint)
+0:72            'u4x1' (temp 4X1 matrix of uint)
+0:74      Sequence
+0:74        move second child to first child (temp 2X1 matrix of uint)
+0:74          'r10' (temp 2X1 matrix of uint)
+0:74          transpose (temp 2X1 matrix of uint)
+0:74            'u1x2' (temp 1X2 matrix of uint)
+0:75      Sequence
+0:75        move second child to first child (temp 2X2 matrix of uint)
+0:75          'r11' (temp 2X2 matrix of uint)
+0:75          transpose (temp 2X2 matrix of uint)
+0:75            'u2x2' (temp 2X2 matrix of uint)
+0:76      Sequence
+0:76        move second child to first child (temp 2X3 matrix of uint)
+0:76          'r12' (temp 2X3 matrix of uint)
+0:76          transpose (temp 2X3 matrix of uint)
+0:76            'u3x2' (temp 3X2 matrix of uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2X4 matrix of uint)
+0:77          'r13' (temp 2X4 matrix of uint)
+0:77          transpose (temp 2X4 matrix of uint)
+0:77            'u4x2' (temp 4X2 matrix of uint)
+0:79      Sequence
+0:79        move second child to first child (temp 3X1 matrix of uint)
+0:79          'r20' (temp 3X1 matrix of uint)
+0:79          transpose (temp 3X1 matrix of uint)
+0:79            'u1x3' (temp 1X3 matrix of uint)
+0:80      Sequence
+0:80        move second child to first child (temp 3X2 matrix of uint)
+0:80          'r21' (temp 3X2 matrix of uint)
+0:80          transpose (temp 3X2 matrix of uint)
+0:80            'u2x3' (temp 2X3 matrix of uint)
+0:81      Sequence
+0:81        move second child to first child (temp 3X3 matrix of uint)
+0:81          'r22' (temp 3X3 matrix of uint)
+0:81          transpose (temp 3X3 matrix of uint)
+0:81            'u3x3' (temp 3X3 matrix of uint)
+0:82      Sequence
+0:82        move second child to first child (temp 3X4 matrix of uint)
+0:82          'r23' (temp 3X4 matrix of uint)
+0:82          transpose (temp 3X4 matrix of uint)
+0:82            'u4x3' (temp 4X3 matrix of uint)
+0:84      Sequence
+0:84        move second child to first child (temp 4X1 matrix of uint)
+0:84          'r30' (temp 4X1 matrix of uint)
+0:84          transpose (temp 4X1 matrix of uint)
+0:84            'u1x4' (temp 1X4 matrix of uint)
+0:85      Sequence
+0:85        move second child to first child (temp 4X2 matrix of uint)
+0:85          'r31' (temp 4X2 matrix of uint)
+0:85          transpose (temp 4X2 matrix of uint)
+0:85            'u2x4' (temp 2X4 matrix of uint)
+0:86      Sequence
+0:86        move second child to first child (temp 4X3 matrix of uint)
+0:86          'r32' (temp 4X3 matrix of uint)
+0:86          transpose (temp 4X3 matrix of uint)
+0:86            'u3x4' (temp 3X4 matrix of uint)
+0:87      Sequence
+0:87        move second child to first child (temp 4X4 matrix of uint)
+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 Parameters: 
+0:?     Sequence
+0:95      move second child to first child (temp 4-component vector of float)
+0:95        color: direct index for structure (temp 4-component vector of float)
+0:95          'ps_output' (temp structure{temp 4-component vector of float color})
+0:95          Constant:
+0:95            0 (const int)
+0:?         Constant:
+0:?           0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 223
+                              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
+               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
+              29:             TypePointer Function 28
+              31:             TypeMatrix 11(ivec) 3
+              32:             TypePointer Function 31
+              36:             TypeVector 10(int) 4
+              37:             TypeMatrix 36(ivec4) 1
+              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
+              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
+              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
+             130:             TypePointer Function 129
+             132:             TypeMatrix 112(ivec) 3
+             133:             TypePointer Function 132
+             137:             TypeVector 111(int) 4
+             138:             TypeMatrix 137(ivec4) 1
+             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
+             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
+             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
+         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
+                              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
+                              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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index 7acaa7170400fcd62a32b3512e73534cbf449614..420ba9f55d87b4a88100389b711b335e2f2d66d7 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/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( (global 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
@@ -94,13 +94,22 @@ gl_FragCoord origin is upper left
 0:43              23.000000
 0:43              24.000000
 0:43              25.000000
-0:43            'idx' (uniform int)
+0:43            idx: direct index for structure (layout(offset=0 ) uniform int)
+0:43              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:43              Constant:
+0:43                0 (const uint)
 0:44      Sequence
 0:44        move second child to first child (temp 2-component vector of float)
 0:44          'r0c' (temp 2-component vector of float)
-0:44          indirect index (temp 2-component vector of float)
-0:44            'um' (uniform 3X2 matrix of float)
-0:44            'idx' (uniform int)
+0:44          indirect index (layout(offset=16 ) temp 2-component vector of float)
+0:44            um: direct index for structure (layout(offset=16 ) uniform 3X2 matrix of float)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:44              Constant:
+0:44                1 (const uint)
+0:44            idx: direct index for structure (layout(offset=0 ) uniform int)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:44              Constant:
+0:44                0 (const uint)
 0:47      move second child to first child (temp 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})
@@ -108,8 +117,8 @@ 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:?       Sequence
-0:?         Sequence
+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)
@@ -118,9 +127,8 @@ gl_FragCoord origin is upper left
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
-0:?     'idx' (uniform int)
-0:?     'um' (uniform 3X2 matrix of float)
 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})
 
 
 Linked fragment stage:
@@ -129,7 +137,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main( (global 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
@@ -221,13 +229,22 @@ gl_FragCoord origin is upper left
 0:43              23.000000
 0:43              24.000000
 0:43              25.000000
-0:43            'idx' (uniform int)
+0:43            idx: direct index for structure (layout(offset=0 ) uniform int)
+0:43              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:43              Constant:
+0:43                0 (const uint)
 0:44      Sequence
 0:44        move second child to first child (temp 2-component vector of float)
 0:44          'r0c' (temp 2-component vector of float)
-0:44          indirect index (temp 2-component vector of float)
-0:44            'um' (uniform 3X2 matrix of float)
-0:44            'idx' (uniform int)
+0:44          indirect index (layout(offset=16 ) temp 2-component vector of float)
+0:44            um: direct index for structure (layout(offset=16 ) uniform 3X2 matrix of float)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:44              Constant:
+0:44                1 (const uint)
+0:44            idx: direct index for structure (layout(offset=0 ) uniform int)
+0:44              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:44              Constant:
+0:44                0 (const uint)
 0:47      move second child to first child (temp 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})
@@ -235,8 +252,8 @@ 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:?       Sequence
-0:?         Sequence
+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)
@@ -245,18 +262,17 @@ gl_FragCoord origin is upper left
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
-0:?     'idx' (uniform int)
-0:?     'um' (uniform 3X2 matrix of float)
 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 75
+// Id's are bound by 78
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 71
+                              EntryPoint Fragment 4  "main" 74
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "e1_00"
@@ -275,15 +291,23 @@ gl_FragCoord origin is upper left
                               Name 36  "r1a"
                               Name 38  "r2a"
                               Name 40  "r0b"
-                              Name 48  "idx"
-                              Name 51  "indexable"
-                              Name 54  "r0c"
-                              Name 56  "um"
-                              Name 62  "PS_OUTPUT"
-                              MemberName 62(PS_OUTPUT) 0  "Color"
-                              Name 64  "psout"
-                              Name 71  "Color"
-                              Decorate 71(Color) Location 0
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -311,19 +335,20 @@ gl_FragCoord origin is upper left
               44:   32(fvec2) ConstantComposite 29 31
               45:          41 ConstantComposite 42 43 44
               46:             TypeInt 32 1
-              47:             TypePointer UniformConstant 46(int)
-         48(idx):     47(ptr) Variable UniformConstant
-              50:             TypePointer Function 41
-              55:             TypePointer UniformConstant 41
-          56(um):     55(ptr) Variable UniformConstant
-              58:             TypePointer UniformConstant 32(fvec2)
-              61:             TypeVector 6(float) 4
-   62(PS_OUTPUT):             TypeStruct 61(fvec4)
-              63:             TypePointer Function 62(PS_OUTPUT)
-              65:     46(int) Constant 0
-              68:             TypePointer Function 61(fvec4)
-              70:             TypePointer Output 61(fvec4)
-       71(Color):     70(ptr) Variable Output
+     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
          4(main):           2 Function None 3
                5:             Label
         8(e1_00):      7(ptr) Variable Function
@@ -342,9 +367,9 @@ gl_FragCoord origin is upper left
          36(r1a):     33(ptr) Variable Function
          38(r2a):     33(ptr) Variable Function
          40(r0b):     33(ptr) Variable Function
-   51(indexable):     50(ptr) Variable Function
-         54(r0c):     33(ptr) Variable Function
-       64(psout):     63(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
@@ -360,21 +385,23 @@ gl_FragCoord origin is upper left
                               Store 34(r0a) 35
                               Store 36(r1a) 37
                               Store 38(r2a) 39
-              49:     46(int) Load 48(idx)
-                              Store 51(indexable) 45
-              52:     33(ptr) AccessChain 51(indexable) 49
-              53:   32(fvec2) Load 52
-                              Store 40(r0b) 53
-              57:     46(int) Load 48(idx)
-              59:     58(ptr) AccessChain 56(um) 57
-              60:   32(fvec2) Load 59
-                              Store 54(r0c) 60
-              66:    6(float) Load 26(e2_11)
-              67:   61(fvec4) CompositeConstruct 66 66 66 66
-              69:     68(ptr) AccessChain 64(psout) 65
-                              Store 69 67
-              72:     68(ptr) AccessChain 64(psout) 65
-              73:   61(fvec4) Load 72
-                              Store 71(Color) 73
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index d396be8bf3865f8a97a06321a1281ee14d1ab767..8995af35dc570648fa7fa6bf59eb35bb40e590d1 100755
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -2,7 +2,7 @@ hlsl.max.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;vf4; (global 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)
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
 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 (global 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
@@ -26,7 +26,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;vf4; (global 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)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 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 (global 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
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..84c7a8c894a008be3ad5e25a4e0cd66fdf332f20
--- /dev/null
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -0,0 +1,224 @@
+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 Parameters: 
+0:?     Sequence
+0:40      add (temp mediump 2-component vector of float)
+0:40        'mf16_2' (temp mediump 2-component vector of float)
+0:40        'mf16' (temp mediump float)
+0:41      add (temp mediump 2-component vector of float)
+0:41        'mf10_2' (temp mediump 2-component vector of float)
+0:41        'mf10' (temp mediump float)
+0:42      add (temp mediump 2-component vector of int)
+0:42        'mi16_2' (temp mediump 2-component vector of int)
+0:42        'mi16' (temp mediump int)
+0:43      add (temp mediump 2-component vector of int)
+0:43        'mi12_2' (temp mediump 2-component vector of int)
+0:43        'mi12' (temp mediump int)
+0:44      add (temp mediump 2-component vector of uint)
+0:44        'mu16_2' (temp mediump 2-component vector of uint)
+0:44        'mu16' (temp mediump uint)
+0:47      move second child to first child (temp 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})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:40      add (temp mediump 2-component vector of float)
+0:40        'mf16_2' (temp mediump 2-component vector of float)
+0:40        'mf16' (temp mediump float)
+0:41      add (temp mediump 2-component vector of float)
+0:41        'mf10_2' (temp mediump 2-component vector of float)
+0:41        'mf10' (temp mediump float)
+0:42      add (temp mediump 2-component vector of int)
+0:42        'mi16_2' (temp mediump 2-component vector of int)
+0:42        'mi16' (temp mediump int)
+0:43      add (temp mediump 2-component vector of int)
+0:43        'mi12_2' (temp mediump 2-component vector of int)
+0:43        'mi12' (temp mediump int)
+0:44      add (temp mediump 2-component vector of uint)
+0:44        'mu16_2' (temp mediump 2-component vector of uint)
+0:44        'mu16' (temp mediump uint)
+0:47      move second child to first child (temp 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})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 58
+                              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
+                              Decorate 15 RelaxedPrecision
+                              Decorate 16(mf10_2) RelaxedPrecision
+                              Decorate 17 RelaxedPrecision
+                              Decorate 18(mf10) RelaxedPrecision
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20 RelaxedPrecision
+                              Decorate 21 RelaxedPrecision
+                              Decorate 25(mi16_2) RelaxedPrecision
+                              Decorate 26 RelaxedPrecision
+                              Decorate 28(mi16) RelaxedPrecision
+                              Decorate 29 RelaxedPrecision
+                              Decorate 30 RelaxedPrecision
+                              Decorate 31 RelaxedPrecision
+                              Decorate 32(mi12_2) RelaxedPrecision
+                              Decorate 33 RelaxedPrecision
+                              Decorate 34(mi12) RelaxedPrecision
+                              Decorate 35 RelaxedPrecision
+                              Decorate 36 RelaxedPrecision
+                              Decorate 37 RelaxedPrecision
+                              Decorate 41(mu16_2) RelaxedPrecision
+                              Decorate 42 RelaxedPrecision
+                              Decorate 44(mu16) RelaxedPrecision
+                              Decorate 45 RelaxedPrecision
+                              Decorate 46 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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index 35ecaf507432c78e3ad785b8f37f6154e91d6030..f0d05abd8f1318ee44b091ab102f39923ce89048 100755
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -1,29 +1,29 @@
 hlsl.multiEntry.vert
 Shader version: 450
 0:? Sequence
-0:4  Function Definition: FakeEntrypoint(u1; (global 4-component vector of float)
+0:4  Function Definition: FakeEntrypoint(u1; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'Index' (in uint)
 0:?     Sequence
 0:5      Branch: Return with expression
-0:5        textureFetch (global 4-component vector of float)
-0:5          'Position' (uniform samplerBuffer)
+0:5        textureFetch (temp 4-component vector of float)
+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; (global 4-component vector of float Position)
+0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
 0:9    Function Parameters: 
 0:9      'Index' (in uint VertexIndex)
 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; (global 4-component vector of float)
+0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
 0:10            'Index' (in uint VertexIndex)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'Position' (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:
@@ -31,29 +31,29 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:4  Function Definition: FakeEntrypoint(u1; (global 4-component vector of float)
+0:4  Function Definition: FakeEntrypoint(u1; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'Index' (in uint)
 0:?     Sequence
 0:5      Branch: Return with expression
-0:5        textureFetch (global 4-component vector of float)
-0:5          'Position' (uniform samplerBuffer)
+0:5        textureFetch (temp 4-component vector of float)
+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; (global 4-component vector of float Position)
+0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
 0:9    Function Parameters: 
 0:9      'Index' (in uint VertexIndex)
 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; (global 4-component vector of float)
+0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
 0:10            'Index' (in uint VertexIndex)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'Position' (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
@@ -81,7 +81,7 @@ Shader version: 450
                8:             TypeFloat 32
                9:             TypeVector 8(float) 4
               10:             TypeFunction 9(fvec4) 7(ptr)
-              14:             TypeImage 8(float) Buffer sampled format:Unknown
+              14:             TypeImage 8(float) Buffer sampled format:Rgba32f
               15:             TypeSampledImage 14
               16:             TypePointer UniformConstant 15
     17(Position):     16(ptr) Variable UniformConstant
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
new file mode 100755
index 0000000000000000000000000000000000000000..80d7f1661b127896ab92ffbaa10dda6e2a4d21dd
--- /dev/null
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -0,0 +1,113 @@
+hlsl.multiReturn.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: foo( (temp structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Branch: Return with expression
+0:13        s: direct index for structure (layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+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 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:?   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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: foo( (temp structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Branch: Return with expression
+0:13        s: direct index for structure (layout(row_major std140 ) uniform structure{temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
+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 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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "S"
+                              MemberName 9(S) 0  "f"
+                              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
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+               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
+         4(main):           2 Function None 3
+               5:             Label
+              38:        9(S) FunctionCall 11(foo()
+                              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
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index 168065bb54630bef429bb5c321c562ddfdc9a712..e8d3630ed2cf2a84a05bf03d43130f829327487a 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/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( (global 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,8 +58,8 @@ 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:?       Sequence
-0:?         Sequence
+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)
@@ -77,7 +77,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: main( (global 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,8 +133,8 @@ 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:?       Sequence
-0:?         Sequence
+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)
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
new file mode 100644
index 0000000000000000000000000000000000000000..76e95c8f86bc5e91a3fc67b581e820c336da18f8
--- /dev/null
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -0,0 +1,60 @@
+hlsl.numthreads.comp
+Shader version: 450
+local_size = (4, 4, 2)
+0:? Sequence
+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 Parameters: 
+0:9      'tid' (in 3-component vector of uint LocalInvocationID)
+0:?   Linker Objects
+0:?     'tid' (in 3-component vector of uint LocalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 450
+local_size = (4, 4, 2)
+0:? Sequence
+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 Parameters: 
+0:9      'tid' (in 3-component vector of uint LocalInvocationID)
+0:?   Linker Objects
+0:?     'tid' (in 3-component vector of uint LocalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main_aux1" 14
+                              ExecutionMode 4 LocalSize 4 4 2
+                              Name 4  "main_aux1"
+                              Name 11  "main(vu3;"
+                              Name 10  "tid"
+                              Name 14  "tid"
+                              Decorate 14(tid) BuiltIn LocalInvocationId
+               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
+    4(main_aux1):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+   11(main(vu3;):           2 Function None 9
+         10(tid):      8(ptr) FunctionParameter
+              12:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index 0e0f4707fbbdcd089dac9f4eea1bee0dd6a01112..4eed1a3fc5fbcedba6184f832df6ca026ca90b4a 100755
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -2,349 +2,349 @@ hlsl.overload.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo1(d1;b1; (global void)
+0:2  Function Definition: foo1(d1;b1; (temp void)
 0:2    Function Parameters: 
 0:2      'a' (in double)
 0:2      'b' (in bool)
-0:3  Function Definition: foo1(d1;u1; (global void)
+0:3  Function Definition: foo1(d1;u1; (temp void)
 0:3    Function Parameters: 
 0:3      'a' (in double)
 0:3      'b' (in uint)
-0:4  Function Definition: foo1(d1;i1; (global void)
+0:4  Function Definition: foo1(d1;i1; (temp void)
 0:4    Function Parameters: 
 0:4      'a' (in double)
 0:4      'b' (in int)
-0:5  Function Definition: foo1(d1;f1; (global void)
+0:5  Function Definition: foo1(d1;f1; (temp void)
 0:5    Function Parameters: 
 0:5      'a' (in double)
 0:5      'b' (in float)
-0:6  Function Definition: foo1(d1;d1; (global void)
+0:6  Function Definition: foo1(d1;d1; (temp void)
 0:6    Function Parameters: 
 0:6      'a' (in double)
 0:6      'b' (in double)
-0:9  Function Definition: foo2(i1;b1; (global void)
+0:9  Function Definition: foo2(i1;b1; (temp void)
 0:9    Function Parameters: 
 0:9      'a' (in int)
 0:9      'b' (in bool)
-0:10  Function Definition: foo2(i1;u1; (global void)
+0:10  Function Definition: foo2(i1;u1; (temp void)
 0:10    Function Parameters: 
 0:10      'a' (in int)
 0:10      'b' (in uint)
-0:11  Function Definition: foo2(i1;i1; (global void)
+0:11  Function Definition: foo2(i1;i1; (temp void)
 0:11    Function Parameters: 
 0:11      'a' (in int)
 0:11      'b' (in int)
-0:12  Function Definition: foo2(i1;f1; (global void)
+0:12  Function Definition: foo2(i1;f1; (temp void)
 0:12    Function Parameters: 
 0:12      'a' (in int)
 0:12      'b' (in float)
-0:13  Function Definition: foo2(i1;d1; (global void)
+0:13  Function Definition: foo2(i1;d1; (temp void)
 0:13    Function Parameters: 
 0:13      'a' (in int)
 0:13      'b' (in double)
-0:16  Function Definition: foo3(b1; (global void)
+0:16  Function Definition: foo3(b1; (temp void)
 0:16    Function Parameters: 
 0:16      'b' (in bool)
-0:17  Function Definition: foo4(u1; (global void)
+0:17  Function Definition: foo4(u1; (temp void)
 0:17    Function Parameters: 
 0:17      'b' (in uint)
-0:18  Function Definition: foo5(i1; (global void)
+0:18  Function Definition: foo5(i1; (temp void)
 0:18    Function Parameters: 
 0:18      'b' (in int)
-0:19  Function Definition: foo6(f1; (global void)
+0:19  Function Definition: foo6(f1; (temp void)
 0:19    Function Parameters: 
 0:19      'b' (in float)
-0:20  Function Definition: foo7(d1; (global void)
+0:20  Function Definition: foo7(d1; (temp void)
 0:20    Function Parameters: 
 0:20      'b' (in double)
-0:23  Function Definition: foo8(f1; (global void)
+0:23  Function Definition: foo8(f1; (temp void)
 0:23    Function Parameters: 
 0:23      '' (in float)
-0:24  Function Definition: foo8(d1; (global void)
+0:24  Function Definition: foo8(d1; (temp void)
 0:24    Function Parameters: 
 0:24      '' (in double)
-0:25  Function Definition: foo9(i1; (global void)
+0:25  Function Definition: foo9(i1; (temp void)
 0:25    Function Parameters: 
 0:25      '' (in int)
-0:26  Function Definition: foo9(u1; (global void)
+0:26  Function Definition: foo9(u1; (temp void)
 0:26    Function Parameters: 
 0:26      '' (in uint)
-0:27  Function Definition: foo10(b1; (global void)
+0:27  Function Definition: foo10(b1; (temp void)
 0:27    Function Parameters: 
 0:27      '' (in bool)
-0:28  Function Definition: foo10(i1; (global void)
+0:28  Function Definition: foo10(i1; (temp void)
 0:28    Function Parameters: 
 0:28      '' (in int)
-0:31  Function Definition: foo11(vf3; (global void)
+0:31  Function Definition: foo11(vf3; (temp void)
 0:31    Function Parameters: 
 0:31      '' (in 3-component vector of float)
-0:32  Function Definition: foo11(d1; (global void)
+0:32  Function Definition: foo11(d1; (temp void)
 0:32    Function Parameters: 
 0:32      '' (in double)
-0:33  Function Definition: foo11(vi3; (global void)
+0:33  Function Definition: foo11(vi3; (temp void)
 0:33    Function Parameters: 
 0:33      '' (in 3-component vector of int)
-0:34  Function Definition: foo11(u1; (global void)
+0:34  Function Definition: foo11(u1; (temp void)
 0:34    Function Parameters: 
 0:34      '' (in uint)
-0:35  Function Definition: foo12(vf1; (global void)
+0:35  Function Definition: foo12(vf1; (temp void)
 0:35    Function Parameters: 
 0:35      '' (in 1-component vector of float)
-0:36  Function Definition: foo12(vd3; (global void)
+0:36  Function Definition: foo12(vd3; (temp void)
 0:36    Function Parameters: 
 0:36      '' (in 3-component vector of double)
-0:37  Function Definition: foo16(u1; (global void)
+0:37  Function Definition: foo16(u1; (temp void)
 0:37    Function Parameters: 
 0:37      '' (in uint)
-0:38  Function Definition: foo16(vu2; (global void)
+0:38  Function Definition: foo16(vu2; (temp void)
 0:38    Function Parameters: 
 0:38      '' (in 2-component vector of uint)
-0:41  Function Definition: foo13(vf3; (global void)
+0:41  Function Definition: foo13(vf3; (temp void)
 0:41    Function Parameters: 
 0:41      '' (in 3-component vector of float)
-0:42  Function Definition: foo14(vi1; (global void)
+0:42  Function Definition: foo14(vi1; (temp void)
 0:42    Function Parameters: 
 0:42      '' (in 1-component vector of int)
-0:43  Function Definition: foo15(vb1; (global void)
+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; (global 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:?     Sequence
-0:53      Function Call: foo1(d1;b1; (global void)
+0:53      Function Call: foo1(d1;b1; (temp void)
 0:53        'd' (temp double)
 0:53        'b' (temp bool)
-0:54      Function Call: foo1(d1;d1; (global void)
+0:54      Function Call: foo1(d1;d1; (temp void)
 0:54        'd' (temp double)
 0:54        'd' (temp double)
-0:55      Function Call: foo1(d1;u1; (global void)
+0:55      Function Call: foo1(d1;u1; (temp void)
 0:55        'd' (temp double)
 0:55        'u' (temp uint)
-0:56      Function Call: foo1(d1;i1; (global void)
+0:56      Function Call: foo1(d1;i1; (temp void)
 0:56        'd' (temp double)
 0:56        'i' (temp int)
-0:57      Function Call: foo1(d1;f1; (global void)
+0:57      Function Call: foo1(d1;f1; (temp void)
 0:57        'd' (temp double)
 0:57        'f' (temp float)
-0:59      Function Call: foo1(d1;b1; (global void)
+0:59      Function Call: foo1(d1;b1; (temp void)
 0:59        Convert float to double (temp double)
 0:59          'f' (temp float)
 0:59        'b' (temp bool)
-0:60      Function Call: foo1(d1;d1; (global void)
+0:60      Function Call: foo1(d1;d1; (temp void)
 0:60        Convert float to double (temp double)
 0:60          'f' (temp float)
 0:60        'd' (temp double)
-0:61      Function Call: foo1(d1;u1; (global void)
+0:61      Function Call: foo1(d1;u1; (temp void)
 0:61        Convert float to double (temp double)
 0:61          'f' (temp float)
 0:61        'u' (temp uint)
-0:62      Function Call: foo1(d1;i1; (global void)
+0:62      Function Call: foo1(d1;i1; (temp void)
 0:62        Convert float to double (temp double)
 0:62          'f' (temp float)
 0:62        'i' (temp int)
-0:63      Function Call: foo1(d1;f1; (global void)
+0:63      Function Call: foo1(d1;f1; (temp void)
 0:63        Convert float to double (temp double)
 0:63          'f' (temp float)
 0:63        'f' (temp float)
-0:65      Function Call: foo1(d1;b1; (global void)
+0:65      Function Call: foo1(d1;b1; (temp void)
 0:65        Convert uint to double (temp double)
 0:65          'u' (temp uint)
 0:65        'b' (temp bool)
-0:66      Function Call: foo1(d1;d1; (global void)
+0:66      Function Call: foo1(d1;d1; (temp void)
 0:66        Convert uint to double (temp double)
 0:66          'u' (temp uint)
 0:66        'd' (temp double)
-0:67      Function Call: foo1(d1;u1; (global void)
+0:67      Function Call: foo1(d1;u1; (temp void)
 0:67        Convert uint to double (temp double)
 0:67          'u' (temp uint)
 0:67        'u' (temp uint)
-0:68      Function Call: foo1(d1;i1; (global void)
+0:68      Function Call: foo1(d1;i1; (temp void)
 0:68        Convert uint to double (temp double)
 0:68          'u' (temp uint)
 0:68        'i' (temp int)
-0:69      Function Call: foo1(d1;f1; (global void)
+0:69      Function Call: foo1(d1;f1; (temp void)
 0:69        Convert uint to double (temp double)
 0:69          'u' (temp uint)
 0:69        'f' (temp float)
-0:71      Function Call: foo1(d1;b1; (global void)
+0:71      Function Call: foo1(d1;b1; (temp void)
 0:71        Convert int to double (temp double)
 0:71          'i' (temp int)
 0:71        'b' (temp bool)
-0:72      Function Call: foo1(d1;d1; (global void)
+0:72      Function Call: foo1(d1;d1; (temp void)
 0:72        Convert int to double (temp double)
 0:72          'i' (temp int)
 0:72        'd' (temp double)
-0:73      Function Call: foo1(d1;u1; (global void)
+0:73      Function Call: foo1(d1;u1; (temp void)
 0:73        Convert int to double (temp double)
 0:73          'i' (temp int)
 0:73        'u' (temp uint)
-0:74      Function Call: foo1(d1;i1; (global void)
+0:74      Function Call: foo1(d1;i1; (temp void)
 0:74        Convert int to double (temp double)
 0:74          'i' (temp int)
 0:74        'i' (temp int)
-0:75      Function Call: foo1(d1;f1; (global void)
+0:75      Function Call: foo1(d1;f1; (temp void)
 0:75        Convert int to double (temp double)
 0:75          'i' (temp int)
 0:75        'f' (temp float)
-0:77      Function Call: foo2(i1;b1; (global void)
+0:77      Function Call: foo2(i1;b1; (temp void)
 0:77        Convert uint to int (temp int)
 0:77          'u' (temp uint)
 0:77        'b' (temp bool)
-0:78      Function Call: foo2(i1;d1; (global void)
+0:78      Function Call: foo2(i1;d1; (temp void)
 0:78        Convert uint to int (temp int)
 0:78          'u' (temp uint)
 0:78        'd' (temp double)
-0:79      Function Call: foo2(i1;u1; (global void)
+0:79      Function Call: foo2(i1;u1; (temp void)
 0:79        Convert uint to int (temp int)
 0:79          'u' (temp uint)
 0:79        'u' (temp uint)
-0:80      Function Call: foo2(i1;i1; (global void)
+0:80      Function Call: foo2(i1;i1; (temp void)
 0:80        Convert uint to int (temp int)
 0:80          'u' (temp uint)
 0:80        'i' (temp int)
-0:81      Function Call: foo2(i1;f1; (global void)
+0:81      Function Call: foo2(i1;f1; (temp void)
 0:81        Convert uint to int (temp int)
 0:81          'u' (temp uint)
 0:81        'f' (temp float)
-0:83      Function Call: foo2(i1;b1; (global void)
+0:83      Function Call: foo2(i1;b1; (temp void)
 0:83        'i' (temp int)
 0:83        'b' (temp bool)
-0:84      Function Call: foo2(i1;d1; (global void)
+0:84      Function Call: foo2(i1;d1; (temp void)
 0:84        'i' (temp int)
 0:84        'd' (temp double)
-0:85      Function Call: foo2(i1;u1; (global void)
+0:85      Function Call: foo2(i1;u1; (temp void)
 0:85        'i' (temp int)
 0:85        'u' (temp uint)
-0:86      Function Call: foo2(i1;i1; (global void)
+0:86      Function Call: foo2(i1;i1; (temp void)
 0:86        'i' (temp int)
 0:86        'i' (temp int)
-0:87      Function Call: foo2(i1;f1; (global void)
+0:87      Function Call: foo2(i1;f1; (temp void)
 0:87        'i' (temp int)
 0:87        'f' (temp float)
-0:89      Function Call: foo3(b1; (global void)
+0:89      Function Call: foo3(b1; (temp void)
 0:89        'b' (temp bool)
-0:90      Function Call: foo3(b1; (global void)
+0:90      Function Call: foo3(b1; (temp void)
 0:90        Convert double to bool (temp bool)
 0:90          'd' (temp double)
-0:91      Function Call: foo3(b1; (global void)
+0:91      Function Call: foo3(b1; (temp void)
 0:91        Convert uint to bool (temp bool)
 0:91          'u' (temp uint)
-0:92      Function Call: foo3(b1; (global void)
+0:92      Function Call: foo3(b1; (temp void)
 0:92        Convert int to bool (temp bool)
 0:92          'i' (temp int)
-0:93      Function Call: foo3(b1; (global void)
+0:93      Function Call: foo3(b1; (temp void)
 0:93        Convert float to bool (temp bool)
 0:93          'f' (temp float)
-0:95      Function Call: foo4(u1; (global void)
+0:95      Function Call: foo4(u1; (temp void)
 0:95        Convert bool to uint (temp uint)
 0:95          'b' (temp bool)
-0:96      Function Call: foo4(u1; (global void)
+0:96      Function Call: foo4(u1; (temp void)
 0:96        Convert double to uint (temp uint)
 0:96          'd' (temp double)
-0:97      Function Call: foo4(u1; (global void)
+0:97      Function Call: foo4(u1; (temp void)
 0:97        'u' (temp uint)
-0:98      Function Call: foo4(u1; (global void)
+0:98      Function Call: foo4(u1; (temp void)
 0:98        Convert int to uint (temp uint)
 0:98          'i' (temp int)
-0:99      Function Call: foo4(u1; (global void)
+0:99      Function Call: foo4(u1; (temp void)
 0:99        Convert float to uint (temp uint)
 0:99          'f' (temp float)
-0:101      Function Call: foo5(i1; (global void)
+0:101      Function Call: foo5(i1; (temp void)
 0:101        Convert bool to int (temp int)
 0:101          'b' (temp bool)
-0:102      Function Call: foo5(i1; (global void)
+0:102      Function Call: foo5(i1; (temp void)
 0:102        Convert double to int (temp int)
 0:102          'd' (temp double)
-0:103      Function Call: foo5(i1; (global void)
+0:103      Function Call: foo5(i1; (temp void)
 0:103        Convert uint to int (temp int)
 0:103          'u' (temp uint)
-0:104      Function Call: foo5(i1; (global void)
+0:104      Function Call: foo5(i1; (temp void)
 0:104        'i' (temp int)
-0:105      Function Call: foo5(i1; (global void)
+0:105      Function Call: foo5(i1; (temp void)
 0:105        Convert float to int (temp int)
 0:105          'f' (temp float)
-0:107      Function Call: foo6(f1; (global void)
+0:107      Function Call: foo6(f1; (temp void)
 0:107        Convert bool to float (temp float)
 0:107          'b' (temp bool)
-0:108      Function Call: foo6(f1; (global void)
+0:108      Function Call: foo6(f1; (temp void)
 0:108        Convert double to float (temp float)
 0:108          'd' (temp double)
-0:109      Function Call: foo6(f1; (global void)
+0:109      Function Call: foo6(f1; (temp void)
 0:109        Convert uint to float (temp float)
 0:109          'u' (temp uint)
-0:110      Function Call: foo6(f1; (global void)
+0:110      Function Call: foo6(f1; (temp void)
 0:110        Convert int to float (temp float)
 0:110          'i' (temp int)
-0:111      Function Call: foo6(f1; (global void)
+0:111      Function Call: foo6(f1; (temp void)
 0:111        'f' (temp float)
-0:113      Function Call: foo7(d1; (global void)
+0:113      Function Call: foo7(d1; (temp void)
 0:113        Convert bool to double (temp double)
 0:113          'b' (temp bool)
-0:114      Function Call: foo7(d1; (global void)
+0:114      Function Call: foo7(d1; (temp void)
 0:114        'd' (temp double)
-0:115      Function Call: foo7(d1; (global void)
+0:115      Function Call: foo7(d1; (temp void)
 0:115        Convert uint to double (temp double)
 0:115          'u' (temp uint)
-0:116      Function Call: foo7(d1; (global void)
+0:116      Function Call: foo7(d1; (temp void)
 0:116        Convert int to double (temp double)
 0:116          'i' (temp int)
-0:117      Function Call: foo7(d1; (global void)
+0:117      Function Call: foo7(d1; (temp void)
 0:117        Convert float to double (temp double)
 0:117          'f' (temp float)
-0:119      Function Call: foo8(f1; (global void)
+0:119      Function Call: foo8(f1; (temp void)
 0:119        Convert bool to float (temp float)
 0:119          'b' (temp bool)
-0:120      Function Call: foo8(f1; (global void)
+0:120      Function Call: foo8(f1; (temp void)
 0:120        Convert uint to float (temp float)
 0:120          'u' (temp uint)
-0:121      Function Call: foo8(f1; (global void)
+0:121      Function Call: foo8(f1; (temp void)
 0:121        Convert int to float (temp float)
 0:121          'i' (temp int)
-0:123      Function Call: foo9(i1; (global void)
+0:123      Function Call: foo9(i1; (temp void)
 0:123        Convert bool to int (temp int)
 0:123          'b' (temp bool)
-0:124      Function Call: foo9(u1; (global void)
+0:124      Function Call: foo9(u1; (temp void)
 0:124        Convert float to uint (temp uint)
 0:124          'f' (temp float)
-0:125      Function Call: foo9(u1; (global void)
+0:125      Function Call: foo9(u1; (temp void)
 0:125        Convert double to uint (temp uint)
 0:125          'd' (temp double)
-0:127      Function Call: foo10(i1; (global void)
+0:127      Function Call: foo10(i1; (temp void)
 0:127        Convert uint to int (temp int)
 0:127          'u' (temp uint)
-0:128      Function Call: foo10(i1; (global void)
+0:128      Function Call: foo10(i1; (temp void)
 0:128        Convert float to int (temp int)
 0:128          'f' (temp float)
-0:129      Function Call: foo10(i1; (global void)
+0:129      Function Call: foo10(i1; (temp void)
 0:129        Convert double to int (temp int)
 0:129          'd' (temp double)
-0:131      Function Call: foo11(u1; (global void)
+0:131      Function Call: foo11(u1; (temp void)
 0:131        Convert bool to uint (temp uint)
 0:131          'b' (temp bool)
-0:132      Function Call: foo11(d1; (global void)
+0:132      Function Call: foo11(d1; (temp void)
 0:132        Convert float to double (temp double)
 0:132          'f' (temp float)
-0:133      Function Call: foo12(vd3; (global void)
+0:133      Function Call: foo12(vd3; (temp void)
 0:133        Convert float to double (temp 3-component vector of double)
 0:133          Construct vec3 (temp 3-component vector of float)
 0:133            'f' (temp float)
-0:134      Function Call: foo16(vu2; (global void)
+0:134      Function Call: foo16(vu2; (temp void)
 0:?         Convert int to uint (temp 2-component vector of uint)
 0:?           Construct ivec2 (temp 2-component vector of int)
 0:134            'i' (temp int)
 0:134            'i' (temp int)
-0:136      Function Call: foo13(vf3; (global void)
+0:136      Function Call: foo13(vf3; (temp void)
 0:136        Construct vec3 (in 3-component vector of float)
 0:136          'f' (temp float)
-0:137      Function Call: foo14(vi1; (global void)
+0:137      Function Call: foo14(vi1; (temp void)
 0:137        Construct int (in 1-component vector of int)
 0:137          Construct ivec4 (temp 4-component vector of int)
 0:137            'i' (temp int)
-0:138      Function Call: foo15(vb1; (global void)
+0:138      Function Call: foo15(vb1; (temp void)
 0:138        Construct bool (in 1-component vector of bool)
 0:138          'b' (temp bool)
-0:139      Function Call: foo15(vb1; (global void)
+0:139      Function Call: foo15(vb1; (temp void)
 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)
@@ -364,349 +364,349 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo1(d1;b1; (global void)
+0:2  Function Definition: foo1(d1;b1; (temp void)
 0:2    Function Parameters: 
 0:2      'a' (in double)
 0:2      'b' (in bool)
-0:3  Function Definition: foo1(d1;u1; (global void)
+0:3  Function Definition: foo1(d1;u1; (temp void)
 0:3    Function Parameters: 
 0:3      'a' (in double)
 0:3      'b' (in uint)
-0:4  Function Definition: foo1(d1;i1; (global void)
+0:4  Function Definition: foo1(d1;i1; (temp void)
 0:4    Function Parameters: 
 0:4      'a' (in double)
 0:4      'b' (in int)
-0:5  Function Definition: foo1(d1;f1; (global void)
+0:5  Function Definition: foo1(d1;f1; (temp void)
 0:5    Function Parameters: 
 0:5      'a' (in double)
 0:5      'b' (in float)
-0:6  Function Definition: foo1(d1;d1; (global void)
+0:6  Function Definition: foo1(d1;d1; (temp void)
 0:6    Function Parameters: 
 0:6      'a' (in double)
 0:6      'b' (in double)
-0:9  Function Definition: foo2(i1;b1; (global void)
+0:9  Function Definition: foo2(i1;b1; (temp void)
 0:9    Function Parameters: 
 0:9      'a' (in int)
 0:9      'b' (in bool)
-0:10  Function Definition: foo2(i1;u1; (global void)
+0:10  Function Definition: foo2(i1;u1; (temp void)
 0:10    Function Parameters: 
 0:10      'a' (in int)
 0:10      'b' (in uint)
-0:11  Function Definition: foo2(i1;i1; (global void)
+0:11  Function Definition: foo2(i1;i1; (temp void)
 0:11    Function Parameters: 
 0:11      'a' (in int)
 0:11      'b' (in int)
-0:12  Function Definition: foo2(i1;f1; (global void)
+0:12  Function Definition: foo2(i1;f1; (temp void)
 0:12    Function Parameters: 
 0:12      'a' (in int)
 0:12      'b' (in float)
-0:13  Function Definition: foo2(i1;d1; (global void)
+0:13  Function Definition: foo2(i1;d1; (temp void)
 0:13    Function Parameters: 
 0:13      'a' (in int)
 0:13      'b' (in double)
-0:16  Function Definition: foo3(b1; (global void)
+0:16  Function Definition: foo3(b1; (temp void)
 0:16    Function Parameters: 
 0:16      'b' (in bool)
-0:17  Function Definition: foo4(u1; (global void)
+0:17  Function Definition: foo4(u1; (temp void)
 0:17    Function Parameters: 
 0:17      'b' (in uint)
-0:18  Function Definition: foo5(i1; (global void)
+0:18  Function Definition: foo5(i1; (temp void)
 0:18    Function Parameters: 
 0:18      'b' (in int)
-0:19  Function Definition: foo6(f1; (global void)
+0:19  Function Definition: foo6(f1; (temp void)
 0:19    Function Parameters: 
 0:19      'b' (in float)
-0:20  Function Definition: foo7(d1; (global void)
+0:20  Function Definition: foo7(d1; (temp void)
 0:20    Function Parameters: 
 0:20      'b' (in double)
-0:23  Function Definition: foo8(f1; (global void)
+0:23  Function Definition: foo8(f1; (temp void)
 0:23    Function Parameters: 
 0:23      '' (in float)
-0:24  Function Definition: foo8(d1; (global void)
+0:24  Function Definition: foo8(d1; (temp void)
 0:24    Function Parameters: 
 0:24      '' (in double)
-0:25  Function Definition: foo9(i1; (global void)
+0:25  Function Definition: foo9(i1; (temp void)
 0:25    Function Parameters: 
 0:25      '' (in int)
-0:26  Function Definition: foo9(u1; (global void)
+0:26  Function Definition: foo9(u1; (temp void)
 0:26    Function Parameters: 
 0:26      '' (in uint)
-0:27  Function Definition: foo10(b1; (global void)
+0:27  Function Definition: foo10(b1; (temp void)
 0:27    Function Parameters: 
 0:27      '' (in bool)
-0:28  Function Definition: foo10(i1; (global void)
+0:28  Function Definition: foo10(i1; (temp void)
 0:28    Function Parameters: 
 0:28      '' (in int)
-0:31  Function Definition: foo11(vf3; (global void)
+0:31  Function Definition: foo11(vf3; (temp void)
 0:31    Function Parameters: 
 0:31      '' (in 3-component vector of float)
-0:32  Function Definition: foo11(d1; (global void)
+0:32  Function Definition: foo11(d1; (temp void)
 0:32    Function Parameters: 
 0:32      '' (in double)
-0:33  Function Definition: foo11(vi3; (global void)
+0:33  Function Definition: foo11(vi3; (temp void)
 0:33    Function Parameters: 
 0:33      '' (in 3-component vector of int)
-0:34  Function Definition: foo11(u1; (global void)
+0:34  Function Definition: foo11(u1; (temp void)
 0:34    Function Parameters: 
 0:34      '' (in uint)
-0:35  Function Definition: foo12(vf1; (global void)
+0:35  Function Definition: foo12(vf1; (temp void)
 0:35    Function Parameters: 
 0:35      '' (in 1-component vector of float)
-0:36  Function Definition: foo12(vd3; (global void)
+0:36  Function Definition: foo12(vd3; (temp void)
 0:36    Function Parameters: 
 0:36      '' (in 3-component vector of double)
-0:37  Function Definition: foo16(u1; (global void)
+0:37  Function Definition: foo16(u1; (temp void)
 0:37    Function Parameters: 
 0:37      '' (in uint)
-0:38  Function Definition: foo16(vu2; (global void)
+0:38  Function Definition: foo16(vu2; (temp void)
 0:38    Function Parameters: 
 0:38      '' (in 2-component vector of uint)
-0:41  Function Definition: foo13(vf3; (global void)
+0:41  Function Definition: foo13(vf3; (temp void)
 0:41    Function Parameters: 
 0:41      '' (in 3-component vector of float)
-0:42  Function Definition: foo14(vi1; (global void)
+0:42  Function Definition: foo14(vi1; (temp void)
 0:42    Function Parameters: 
 0:42      '' (in 1-component vector of int)
-0:43  Function Definition: foo15(vb1; (global void)
+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; (global 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:?     Sequence
-0:53      Function Call: foo1(d1;b1; (global void)
+0:53      Function Call: foo1(d1;b1; (temp void)
 0:53        'd' (temp double)
 0:53        'b' (temp bool)
-0:54      Function Call: foo1(d1;d1; (global void)
+0:54      Function Call: foo1(d1;d1; (temp void)
 0:54        'd' (temp double)
 0:54        'd' (temp double)
-0:55      Function Call: foo1(d1;u1; (global void)
+0:55      Function Call: foo1(d1;u1; (temp void)
 0:55        'd' (temp double)
 0:55        'u' (temp uint)
-0:56      Function Call: foo1(d1;i1; (global void)
+0:56      Function Call: foo1(d1;i1; (temp void)
 0:56        'd' (temp double)
 0:56        'i' (temp int)
-0:57      Function Call: foo1(d1;f1; (global void)
+0:57      Function Call: foo1(d1;f1; (temp void)
 0:57        'd' (temp double)
 0:57        'f' (temp float)
-0:59      Function Call: foo1(d1;b1; (global void)
+0:59      Function Call: foo1(d1;b1; (temp void)
 0:59        Convert float to double (temp double)
 0:59          'f' (temp float)
 0:59        'b' (temp bool)
-0:60      Function Call: foo1(d1;d1; (global void)
+0:60      Function Call: foo1(d1;d1; (temp void)
 0:60        Convert float to double (temp double)
 0:60          'f' (temp float)
 0:60        'd' (temp double)
-0:61      Function Call: foo1(d1;u1; (global void)
+0:61      Function Call: foo1(d1;u1; (temp void)
 0:61        Convert float to double (temp double)
 0:61          'f' (temp float)
 0:61        'u' (temp uint)
-0:62      Function Call: foo1(d1;i1; (global void)
+0:62      Function Call: foo1(d1;i1; (temp void)
 0:62        Convert float to double (temp double)
 0:62          'f' (temp float)
 0:62        'i' (temp int)
-0:63      Function Call: foo1(d1;f1; (global void)
+0:63      Function Call: foo1(d1;f1; (temp void)
 0:63        Convert float to double (temp double)
 0:63          'f' (temp float)
 0:63        'f' (temp float)
-0:65      Function Call: foo1(d1;b1; (global void)
+0:65      Function Call: foo1(d1;b1; (temp void)
 0:65        Convert uint to double (temp double)
 0:65          'u' (temp uint)
 0:65        'b' (temp bool)
-0:66      Function Call: foo1(d1;d1; (global void)
+0:66      Function Call: foo1(d1;d1; (temp void)
 0:66        Convert uint to double (temp double)
 0:66          'u' (temp uint)
 0:66        'd' (temp double)
-0:67      Function Call: foo1(d1;u1; (global void)
+0:67      Function Call: foo1(d1;u1; (temp void)
 0:67        Convert uint to double (temp double)
 0:67          'u' (temp uint)
 0:67        'u' (temp uint)
-0:68      Function Call: foo1(d1;i1; (global void)
+0:68      Function Call: foo1(d1;i1; (temp void)
 0:68        Convert uint to double (temp double)
 0:68          'u' (temp uint)
 0:68        'i' (temp int)
-0:69      Function Call: foo1(d1;f1; (global void)
+0:69      Function Call: foo1(d1;f1; (temp void)
 0:69        Convert uint to double (temp double)
 0:69          'u' (temp uint)
 0:69        'f' (temp float)
-0:71      Function Call: foo1(d1;b1; (global void)
+0:71      Function Call: foo1(d1;b1; (temp void)
 0:71        Convert int to double (temp double)
 0:71          'i' (temp int)
 0:71        'b' (temp bool)
-0:72      Function Call: foo1(d1;d1; (global void)
+0:72      Function Call: foo1(d1;d1; (temp void)
 0:72        Convert int to double (temp double)
 0:72          'i' (temp int)
 0:72        'd' (temp double)
-0:73      Function Call: foo1(d1;u1; (global void)
+0:73      Function Call: foo1(d1;u1; (temp void)
 0:73        Convert int to double (temp double)
 0:73          'i' (temp int)
 0:73        'u' (temp uint)
-0:74      Function Call: foo1(d1;i1; (global void)
+0:74      Function Call: foo1(d1;i1; (temp void)
 0:74        Convert int to double (temp double)
 0:74          'i' (temp int)
 0:74        'i' (temp int)
-0:75      Function Call: foo1(d1;f1; (global void)
+0:75      Function Call: foo1(d1;f1; (temp void)
 0:75        Convert int to double (temp double)
 0:75          'i' (temp int)
 0:75        'f' (temp float)
-0:77      Function Call: foo2(i1;b1; (global void)
+0:77      Function Call: foo2(i1;b1; (temp void)
 0:77        Convert uint to int (temp int)
 0:77          'u' (temp uint)
 0:77        'b' (temp bool)
-0:78      Function Call: foo2(i1;d1; (global void)
+0:78      Function Call: foo2(i1;d1; (temp void)
 0:78        Convert uint to int (temp int)
 0:78          'u' (temp uint)
 0:78        'd' (temp double)
-0:79      Function Call: foo2(i1;u1; (global void)
+0:79      Function Call: foo2(i1;u1; (temp void)
 0:79        Convert uint to int (temp int)
 0:79          'u' (temp uint)
 0:79        'u' (temp uint)
-0:80      Function Call: foo2(i1;i1; (global void)
+0:80      Function Call: foo2(i1;i1; (temp void)
 0:80        Convert uint to int (temp int)
 0:80          'u' (temp uint)
 0:80        'i' (temp int)
-0:81      Function Call: foo2(i1;f1; (global void)
+0:81      Function Call: foo2(i1;f1; (temp void)
 0:81        Convert uint to int (temp int)
 0:81          'u' (temp uint)
 0:81        'f' (temp float)
-0:83      Function Call: foo2(i1;b1; (global void)
+0:83      Function Call: foo2(i1;b1; (temp void)
 0:83        'i' (temp int)
 0:83        'b' (temp bool)
-0:84      Function Call: foo2(i1;d1; (global void)
+0:84      Function Call: foo2(i1;d1; (temp void)
 0:84        'i' (temp int)
 0:84        'd' (temp double)
-0:85      Function Call: foo2(i1;u1; (global void)
+0:85      Function Call: foo2(i1;u1; (temp void)
 0:85        'i' (temp int)
 0:85        'u' (temp uint)
-0:86      Function Call: foo2(i1;i1; (global void)
+0:86      Function Call: foo2(i1;i1; (temp void)
 0:86        'i' (temp int)
 0:86        'i' (temp int)
-0:87      Function Call: foo2(i1;f1; (global void)
+0:87      Function Call: foo2(i1;f1; (temp void)
 0:87        'i' (temp int)
 0:87        'f' (temp float)
-0:89      Function Call: foo3(b1; (global void)
+0:89      Function Call: foo3(b1; (temp void)
 0:89        'b' (temp bool)
-0:90      Function Call: foo3(b1; (global void)
+0:90      Function Call: foo3(b1; (temp void)
 0:90        Convert double to bool (temp bool)
 0:90          'd' (temp double)
-0:91      Function Call: foo3(b1; (global void)
+0:91      Function Call: foo3(b1; (temp void)
 0:91        Convert uint to bool (temp bool)
 0:91          'u' (temp uint)
-0:92      Function Call: foo3(b1; (global void)
+0:92      Function Call: foo3(b1; (temp void)
 0:92        Convert int to bool (temp bool)
 0:92          'i' (temp int)
-0:93      Function Call: foo3(b1; (global void)
+0:93      Function Call: foo3(b1; (temp void)
 0:93        Convert float to bool (temp bool)
 0:93          'f' (temp float)
-0:95      Function Call: foo4(u1; (global void)
+0:95      Function Call: foo4(u1; (temp void)
 0:95        Convert bool to uint (temp uint)
 0:95          'b' (temp bool)
-0:96      Function Call: foo4(u1; (global void)
+0:96      Function Call: foo4(u1; (temp void)
 0:96        Convert double to uint (temp uint)
 0:96          'd' (temp double)
-0:97      Function Call: foo4(u1; (global void)
+0:97      Function Call: foo4(u1; (temp void)
 0:97        'u' (temp uint)
-0:98      Function Call: foo4(u1; (global void)
+0:98      Function Call: foo4(u1; (temp void)
 0:98        Convert int to uint (temp uint)
 0:98          'i' (temp int)
-0:99      Function Call: foo4(u1; (global void)
+0:99      Function Call: foo4(u1; (temp void)
 0:99        Convert float to uint (temp uint)
 0:99          'f' (temp float)
-0:101      Function Call: foo5(i1; (global void)
+0:101      Function Call: foo5(i1; (temp void)
 0:101        Convert bool to int (temp int)
 0:101          'b' (temp bool)
-0:102      Function Call: foo5(i1; (global void)
+0:102      Function Call: foo5(i1; (temp void)
 0:102        Convert double to int (temp int)
 0:102          'd' (temp double)
-0:103      Function Call: foo5(i1; (global void)
+0:103      Function Call: foo5(i1; (temp void)
 0:103        Convert uint to int (temp int)
 0:103          'u' (temp uint)
-0:104      Function Call: foo5(i1; (global void)
+0:104      Function Call: foo5(i1; (temp void)
 0:104        'i' (temp int)
-0:105      Function Call: foo5(i1; (global void)
+0:105      Function Call: foo5(i1; (temp void)
 0:105        Convert float to int (temp int)
 0:105          'f' (temp float)
-0:107      Function Call: foo6(f1; (global void)
+0:107      Function Call: foo6(f1; (temp void)
 0:107        Convert bool to float (temp float)
 0:107          'b' (temp bool)
-0:108      Function Call: foo6(f1; (global void)
+0:108      Function Call: foo6(f1; (temp void)
 0:108        Convert double to float (temp float)
 0:108          'd' (temp double)
-0:109      Function Call: foo6(f1; (global void)
+0:109      Function Call: foo6(f1; (temp void)
 0:109        Convert uint to float (temp float)
 0:109          'u' (temp uint)
-0:110      Function Call: foo6(f1; (global void)
+0:110      Function Call: foo6(f1; (temp void)
 0:110        Convert int to float (temp float)
 0:110          'i' (temp int)
-0:111      Function Call: foo6(f1; (global void)
+0:111      Function Call: foo6(f1; (temp void)
 0:111        'f' (temp float)
-0:113      Function Call: foo7(d1; (global void)
+0:113      Function Call: foo7(d1; (temp void)
 0:113        Convert bool to double (temp double)
 0:113          'b' (temp bool)
-0:114      Function Call: foo7(d1; (global void)
+0:114      Function Call: foo7(d1; (temp void)
 0:114        'd' (temp double)
-0:115      Function Call: foo7(d1; (global void)
+0:115      Function Call: foo7(d1; (temp void)
 0:115        Convert uint to double (temp double)
 0:115          'u' (temp uint)
-0:116      Function Call: foo7(d1; (global void)
+0:116      Function Call: foo7(d1; (temp void)
 0:116        Convert int to double (temp double)
 0:116          'i' (temp int)
-0:117      Function Call: foo7(d1; (global void)
+0:117      Function Call: foo7(d1; (temp void)
 0:117        Convert float to double (temp double)
 0:117          'f' (temp float)
-0:119      Function Call: foo8(f1; (global void)
+0:119      Function Call: foo8(f1; (temp void)
 0:119        Convert bool to float (temp float)
 0:119          'b' (temp bool)
-0:120      Function Call: foo8(f1; (global void)
+0:120      Function Call: foo8(f1; (temp void)
 0:120        Convert uint to float (temp float)
 0:120          'u' (temp uint)
-0:121      Function Call: foo8(f1; (global void)
+0:121      Function Call: foo8(f1; (temp void)
 0:121        Convert int to float (temp float)
 0:121          'i' (temp int)
-0:123      Function Call: foo9(i1; (global void)
+0:123      Function Call: foo9(i1; (temp void)
 0:123        Convert bool to int (temp int)
 0:123          'b' (temp bool)
-0:124      Function Call: foo9(u1; (global void)
+0:124      Function Call: foo9(u1; (temp void)
 0:124        Convert float to uint (temp uint)
 0:124          'f' (temp float)
-0:125      Function Call: foo9(u1; (global void)
+0:125      Function Call: foo9(u1; (temp void)
 0:125        Convert double to uint (temp uint)
 0:125          'd' (temp double)
-0:127      Function Call: foo10(i1; (global void)
+0:127      Function Call: foo10(i1; (temp void)
 0:127        Convert uint to int (temp int)
 0:127          'u' (temp uint)
-0:128      Function Call: foo10(i1; (global void)
+0:128      Function Call: foo10(i1; (temp void)
 0:128        Convert float to int (temp int)
 0:128          'f' (temp float)
-0:129      Function Call: foo10(i1; (global void)
+0:129      Function Call: foo10(i1; (temp void)
 0:129        Convert double to int (temp int)
 0:129          'd' (temp double)
-0:131      Function Call: foo11(u1; (global void)
+0:131      Function Call: foo11(u1; (temp void)
 0:131        Convert bool to uint (temp uint)
 0:131          'b' (temp bool)
-0:132      Function Call: foo11(d1; (global void)
+0:132      Function Call: foo11(d1; (temp void)
 0:132        Convert float to double (temp double)
 0:132          'f' (temp float)
-0:133      Function Call: foo12(vd3; (global void)
+0:133      Function Call: foo12(vd3; (temp void)
 0:133        Convert float to double (temp 3-component vector of double)
 0:133          Construct vec3 (temp 3-component vector of float)
 0:133            'f' (temp float)
-0:134      Function Call: foo16(vu2; (global void)
+0:134      Function Call: foo16(vu2; (temp void)
 0:?         Convert int to uint (temp 2-component vector of uint)
 0:?           Construct ivec2 (temp 2-component vector of int)
 0:134            'i' (temp int)
 0:134            'i' (temp int)
-0:136      Function Call: foo13(vf3; (global void)
+0:136      Function Call: foo13(vf3; (temp void)
 0:136        Construct vec3 (in 3-component vector of float)
 0:136          'f' (temp float)
-0:137      Function Call: foo14(vi1; (global void)
+0:137      Function Call: foo14(vi1; (temp void)
 0:137        Construct int (in 1-component vector of int)
 0:137          Construct ivec4 (temp 4-component vector of int)
 0:137            'i' (temp int)
-0:138      Function Call: foo15(vb1; (global void)
+0:138      Function Call: foo15(vb1; (temp void)
 0:138        Construct bool (in 1-component vector of bool)
 0:138          'b' (temp bool)
-0:139      Function Call: foo15(vb1; (global void)
+0:139      Function Call: foo15(vb1; (temp void)
 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)
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
new file mode 100755
index 0000000000000000000000000000000000000000..5bf838a4a56179a65e6323a1185bd650f68eaa92
--- /dev/null
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -0,0 +1,418 @@
+hlsl.partialInit.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Sequence
+0:8    move second child to first child (temp 4-component vector of float)
+0:8      'gv' (global 4-component vector of float)
+0:8      Constant:
+0:8        0.000000
+0:8        0.000000
+0:8        1.000000
+0:8        0.000000
+0:9  Sequence
+0:9    move second child to first child (temp 3-element array of float)
+0:9      'gfa' (global 3-element array of float)
+0:9      Constant:
+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 Parameters: 
+0:18      'input' (layout(location=0 ) 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})
+0:19          'o2' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          Constant:
+0:19            3 (const int)
+0:19            0.000000
+0:19            false (const bool)
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:21      move second child to first child (temp 4-component vector of float)
+0:21        v: direct index for structure (temp 4-component vector of float)
+0:21          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:21          Constant:
+0:21            3 (const int)
+0:21        vector-scale (temp 4-component vector of float)
+0:21          'gv' (global 4-component vector of float)
+0:21          direct index (temp float)
+0:21            'gfa' (global 3-element array of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      Sequence
+0:22        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:22          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          Constant:
+0:22            0 (const int)
+0:22            0.000000
+0:22            false (const bool)
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:23      Sequence
+0:23        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:23          'o3' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          Constant:
+0:23            0 (const int)
+0:23            0.000000
+0:23            false (const bool)
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:24      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:24        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        Constant:
+0:24          0 (const int)
+0:24          0.000000
+0:24          false (const bool)
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:25      move second child to first child (temp bool)
+0:25        c: direct index for structure (temp bool)
+0:25          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:25        c: direct index for structure (temp bool)
+0:25          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:26      Sequence
+0:26        move second child to first child (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          'nest' (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0 (const int)
+0:26            0.000000
+0:26            false (const bool)
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            false (const bool)
+0:28      Sequence
+0:28        Sequence
+0:28          move second child to first child (temp int)
+0:?             'a' (layout(location=0 ) out int)
+0:28            a: direct index for structure (temp int)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                0 (const int)
+0:28          move second child to first child (temp float)
+0:?             'b' (layout(location=1 ) out float)
+0:28            b: direct index for structure (temp float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                1 (const int)
+0:28          move second child to first child (temp bool)
+0:?             'c' (layout(location=2 ) out bool)
+0:28            c: direct index for structure (temp bool)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                2 (const int)
+0:28          move second child to first child (temp 4-component vector of float)
+0:?             'v' (layout(location=3 ) out 4-component vector of float)
+0:28            v: direct index for structure (temp 4-component vector of float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                3 (const int)
+0:28        Branch: Return
+0:?   Linker Objects
+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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Sequence
+0:8    move second child to first child (temp 4-component vector of float)
+0:8      'gv' (global 4-component vector of float)
+0:8      Constant:
+0:8        0.000000
+0:8        0.000000
+0:8        1.000000
+0:8        0.000000
+0:9  Sequence
+0:9    move second child to first child (temp 3-element array of float)
+0:9      'gfa' (global 3-element array of float)
+0:9      Constant:
+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 Parameters: 
+0:18      'input' (layout(location=0 ) 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})
+0:19          'o2' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          Constant:
+0:19            3 (const int)
+0:19            0.000000
+0:19            false (const bool)
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:21      move second child to first child (temp 4-component vector of float)
+0:21        v: direct index for structure (temp 4-component vector of float)
+0:21          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:21          Constant:
+0:21            3 (const int)
+0:21        vector-scale (temp 4-component vector of float)
+0:21          'gv' (global 4-component vector of float)
+0:21          direct index (temp float)
+0:21            'gfa' (global 3-element array of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      Sequence
+0:22        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:22          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          Constant:
+0:22            0 (const int)
+0:22            0.000000
+0:22            false (const bool)
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:23      Sequence
+0:23        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:23          'o3' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          Constant:
+0:23            0 (const int)
+0:23            0.000000
+0:23            false (const bool)
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:24      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:24        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        Constant:
+0:24          0 (const int)
+0:24          0.000000
+0:24          false (const bool)
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:25      move second child to first child (temp bool)
+0:25        c: direct index for structure (temp bool)
+0:25          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:25        c: direct index for structure (temp bool)
+0:25          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:26      Sequence
+0:26        move second child to first child (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          'nest' (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0 (const int)
+0:26            0.000000
+0:26            false (const bool)
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            false (const bool)
+0:28      Sequence
+0:28        Sequence
+0:28          move second child to first child (temp int)
+0:?             'a' (layout(location=0 ) out int)
+0:28            a: direct index for structure (temp int)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                0 (const int)
+0:28          move second child to first child (temp float)
+0:?             'b' (layout(location=1 ) out float)
+0:28            b: direct index for structure (temp float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                1 (const int)
+0:28          move second child to first child (temp bool)
+0:?             'c' (layout(location=2 ) out bool)
+0:28            c: direct index for structure (temp bool)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                2 (const int)
+0:28          move second child to first child (temp 4-component vector of float)
+0:?             'v' (layout(location=3 ) out 4-component vector of float)
+0:28            v: direct index for structure (temp 4-component vector of float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                3 (const int)
+0:28        Branch: Return
+0:?   Linker Objects
+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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 75
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 54 59 65 69 74
+                              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 54  "a"
+                              Name 59  "b"
+                              Name 65  "c"
+                              Name 69  "v"
+                              Name 74  "input"
+                              Decorate 54(a) Location 0
+                              Decorate 59(b) Location 1
+                              Decorate 65(c) Location 2
+                              Decorate 69(v) Location 3
+                              Decorate 74(input) Location 0
+               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:             TypePointer Output 19(int)
+           54(a):     53(ptr) Variable Output
+              55:             TypePointer Function 19(int)
+              58:             TypePointer Output 6(float)
+           59(b):     58(ptr) Variable Output
+              60:     19(int) Constant 1
+              61:             TypePointer Function 6(float)
+              64:             TypePointer Output 20(bool)
+           65(c):     64(ptr) Variable Output
+              68:             TypePointer Output 7(fvec4)
+           69(v):     68(ptr) Variable Output
+              73:             TypePointer Input 7(fvec4)
+       74(input):     73(ptr) Variable Input
+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
+                              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
+              56:     55(ptr) AccessChain 28(o4) 38
+              57:     19(int) Load 56
+                              Store 54(a) 57
+              62:     61(ptr) AccessChain 28(o4) 60
+              63:    6(float) Load 62
+                              Store 59(b) 63
+              66:     41(ptr) AccessChain 28(o4) 30
+              67:    20(bool) Load 66
+                              Store 65(c) 67
+              70:     35(ptr) AccessChain 28(o4) 24
+              71:    7(fvec4) Load 70
+                              Store 69(v) 71
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
index 95a2f25a606581fb745a27c06be3ae655e19f6b6..6bbbee645104cb5eee23621b5a58237fe0b0b88e 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/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( (global 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,8 +31,8 @@ gl_FragCoord origin is upper left
 0:127            1 (const int)
 0:127        Constant:
 0:127          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -57,7 +57,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: main( (global 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,8 +86,8 @@ gl_FragCoord origin is upper left
 0:127            1 (const int)
 0:127        Constant:
 0:127          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index e6338470cbdb0ece7d53aff67e90a9f3b146cdbe..1e18a405b8b211d2d28c29163807dcff1cf7431f 100755
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -2,7 +2,7 @@ hlsl.precedence.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (global 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)
@@ -59,7 +59,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (global 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)
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
index 7021837b79ef18f1ebd1ad8d7dba01fe01e4f03e..64cce2c7365ed83652d3a2a8fe4bb94ac93b7d20 100755
--- a/Test/baseResults/hlsl.precedence2.frag.out
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -2,7 +2,7 @@ hlsl.precedence2.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (global 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)
@@ -42,7 +42,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (global 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)
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index d76dc3f00c27c42d5db6f3457608d976bd41c32d..cd2af74658c1e17cd00bc97286e0c137eb98423d 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -2,11 +2,11 @@ hlsl.precise.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:6  Function Definition: MyFunction(f1;vf3; (global void)
+0:6  Function Definition: MyFunction(f1;vf3; (temp void)
 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( (global 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,8 +19,8 @@ gl_FragCoord origin is upper left
 0:11          1.000000
 0:11          1.000000
 0:11          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -29,8 +29,8 @@ gl_FragCoord origin is upper left
 0:12                0 (const int)
 0:12        Branch: Return
 0:?   Linker Objects
-0:?     'precisefloat' (noContraction global float)
 0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:?     'precisefloat' (noContraction global float)
 
 
 Linked fragment stage:
@@ -39,11 +39,11 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:6  Function Definition: MyFunction(f1;vf3; (global void)
+0:6  Function Definition: MyFunction(f1;vf3; (temp void)
 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( (global 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,8 +56,8 @@ gl_FragCoord origin is upper left
 0:11          1.000000
 0:11          1.000000
 0:11          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -66,8 +66,8 @@ gl_FragCoord origin is upper left
 0:12                0 (const int)
 0:12        Branch: Return
 0:?   Linker Objects
-0:?     'precisefloat' (noContraction global float)
 0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:?     'precisefloat' (noContraction global float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..7fa0cad86bd70f5b11f38466196dc12b39f7ca1c
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -0,0 +1,109 @@
+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 Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp int)
+0:13        'Orig' (temp int)
+0:13        Convert uint to int (temp int)
+0:13          imageAtomicAdd (temp uint)
+0:13            's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+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:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+
+
+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 Parameters: 
+0:?     Sequence
+0:13      move second child to first child (temp int)
+0:13        'Orig' (temp int)
+0:13        Convert uint to int (temp int)
+0:13          imageAtomicAdd (temp uint)
+0:13            's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+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:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     's_uintbuff' (layout(r32ui ) uniform uimageBuffer)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 31
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 27
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..2c7425e18a1c3f96263c1443bbddfd4df37e3535
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -0,0 +1,280 @@
+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 Parameters: 
+0:?     Sequence
+0:15      mod (temp float)
+0:15        Convert int to float (temp float)
+0:15          ival: direct index for structure (layout(offset=32 ) uniform int)
+0:15            '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})
+0:15            Constant:
+0:15              2 (const uint)
+0:15        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:15          '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})
+0:15          Constant:
+0:15            4 (const uint)
+0:16      mod (temp 4-component vector of float)
+0:16        Convert int to float (temp 4-component vector of float)
+0:16          ival4: direct index for structure (layout(offset=48 ) uniform 4-component vector of int)
+0:16            '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})
+0:16            Constant:
+0:16              3 (const uint)
+0:16        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:16          '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})
+0:16          Constant:
+0:16            5 (const uint)
+0:18      mod (temp float)
+0:18        Convert bool to float (temp float)
+0:18          bval: direct index for structure (layout(offset=0 ) uniform bool)
+0:18            '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})
+0:18            Constant:
+0:18              0 (const uint)
+0:18        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:18          '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})
+0:18          Constant:
+0:18            4 (const uint)
+0:19      mod (temp 4-component vector of float)
+0:19        Convert bool to float (temp 4-component vector of float)
+0:19          bval4: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:19            '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})
+0:19            Constant:
+0:19              1 (const uint)
+0:19        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:19          '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})
+0:19          Constant:
+0:19            5 (const uint)
+0:21      Sequence
+0:21        move second child to first child (temp int)
+0:21          'l_int' (temp int)
+0:21          Constant:
+0:21            1 (const int)
+0:22      mod second child into first child (temp int)
+0:22        'l_int' (temp int)
+0:22        Convert float to int (temp int)
+0:22          fval: direct index for structure (layout(offset=64 ) uniform float)
+0:22            '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})
+0:22            Constant:
+0:22              4 (const uint)
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          0.000000
+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:?   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})
+
+
+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 Parameters: 
+0:?     Sequence
+0:15      mod (temp float)
+0:15        Convert int to float (temp float)
+0:15          ival: direct index for structure (layout(offset=32 ) uniform int)
+0:15            '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})
+0:15            Constant:
+0:15              2 (const uint)
+0:15        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:15          '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})
+0:15          Constant:
+0:15            4 (const uint)
+0:16      mod (temp 4-component vector of float)
+0:16        Convert int to float (temp 4-component vector of float)
+0:16          ival4: direct index for structure (layout(offset=48 ) uniform 4-component vector of int)
+0:16            '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})
+0:16            Constant:
+0:16              3 (const uint)
+0:16        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:16          '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})
+0:16          Constant:
+0:16            5 (const uint)
+0:18      mod (temp float)
+0:18        Convert bool to float (temp float)
+0:18          bval: direct index for structure (layout(offset=0 ) uniform bool)
+0:18            '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})
+0:18            Constant:
+0:18              0 (const uint)
+0:18        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:18          '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})
+0:18          Constant:
+0:18            4 (const uint)
+0:19      mod (temp 4-component vector of float)
+0:19        Convert bool to float (temp 4-component vector of float)
+0:19          bval4: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:19            '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})
+0:19            Constant:
+0:19              1 (const uint)
+0:19        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:19          '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})
+0:19          Constant:
+0:19            5 (const uint)
+0:21      Sequence
+0:21        move second child to first child (temp int)
+0:21          'l_int' (temp int)
+0:21          Constant:
+0:21            1 (const int)
+0:22      mod second child into first child (temp int)
+0:22        'l_int' (temp int)
+0:22        Convert float to int (temp int)
+0:22          fval: direct index for structure (layout(offset=64 ) uniform float)
+0:22            '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})
+0:22            Constant:
+0:22              4 (const uint)
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          0.000000
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 74
+                              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
+               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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..9179dbcc529793d56ace69f3559ef1d3fa62efc4
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -0,0 +1,118 @@
+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 Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp float)
+0:7        'f1a' (temp float)
+0:7        Construct float (temp float)
+0:7          'f1b' (temp 1-component vector of float)
+0:8      move second child to first child (temp 1-component vector of float)
+0:8        'f1b' (temp 1-component vector of float)
+0:8        Construct float (temp 1-component vector of float)
+0:8          'f1a' (temp float)
+0:11      step (temp 3-component vector of float)
+0:11        Constant:
+0:11          0.000000
+0:11          0.000000
+0:11          0.000000
+0:11        'f3' (temp 3-component vector of float)
+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:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+
+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 Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp float)
+0:7        'f1a' (temp float)
+0:7        Construct float (temp float)
+0:7          'f1b' (temp 1-component vector of float)
+0:8      move second child to first child (temp 1-component vector of float)
+0:8        'f1b' (temp 1-component vector of float)
+0:8        Construct float (temp 1-component vector of float)
+0:8          'f1a' (temp float)
+0:11      step (temp 3-component vector of float)
+0:11        Constant:
+0:11          0.000000
+0:11          0.000000
+0:11          0.000000
+0:11        'f3' (temp 3-component vector of float)
+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:?   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
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 23
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "f1a"
+                              Name 9  "f1b"
+                              Name 16  "f3"
+                              Name 23  "@entryPointOutput"
+                              Decorate 23(@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
+         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
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index 3f1c788636743ab6a719bc1f4e6352afc28b8ec1..01ced16996e4e8b7ca863528e28f8762e53bb4d0 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -2,472 +2,748 @@ hlsl.promotions.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:19  Function Definition: Fn_F3(vf3; (global void)
+0:19  Function Definition: Fn_F3(vf3; (temp void)
 0:19    Function Parameters: 
 0:19      'x' (in 3-component vector of float)
-0:20  Function Definition: Fn_I3(vi3; (global void)
+0:20  Function Definition: Fn_I3(vi3; (temp void)
 0:20    Function Parameters: 
 0:20      'x' (in 3-component vector of int)
-0:21  Function Definition: Fn_U3(vu3; (global void)
+0:21  Function Definition: Fn_U3(vu3; (temp void)
 0:21    Function Parameters: 
 0:21      'x' (in 3-component vector of uint)
-0:22  Function Definition: Fn_B3(vb3; (global void)
+0:22  Function Definition: Fn_B3(vb3; (temp void)
 0:22    Function Parameters: 
 0:22      'x' (in 3-component vector of bool)
-0:23  Function Definition: Fn_D3(vd3; (global void)
+0:23  Function Definition: Fn_D3(vd3; (temp void)
 0:23    Function Parameters: 
 0:23      'x' (in 3-component vector of double)
-0:26  Function Definition: Fn_R_F3I(vf3; (global 3-component vector of float)
+0:26  Function Definition: Fn_R_F3I(vf3; (temp 3-component vector of float)
 0:26    Function Parameters: 
 0:26      'p' (out 3-component vector of float)
 0:?     Sequence
 0:26      move second child to first child (temp 3-component vector of float)
 0:26        'p' (out 3-component vector of float)
 0:26        Convert int to float (temp 3-component vector of float)
-0:26          'i3' (uniform 3-component vector of int)
+0:26          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:26            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:26            Constant:
+0:26              0 (const uint)
 0:26      Branch: Return with expression
 0:26        Convert int to float (temp 3-component vector of float)
-0:26          'i3' (uniform 3-component vector of int)
-0:27  Function Definition: Fn_R_F3U(vf3; (global 3-component vector of float)
+0:26          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:26            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:26            Constant:
+0:26              0 (const uint)
+0:27  Function Definition: Fn_R_F3U(vf3; (temp 3-component vector of float)
 0:27    Function Parameters: 
 0:27      'p' (out 3-component vector of float)
 0:?     Sequence
 0:27      move second child to first child (temp 3-component vector of float)
 0:27        'p' (out 3-component vector of float)
 0:27        Convert uint to float (temp 3-component vector of float)
-0:27          'u3' (uniform 3-component vector of uint)
+0:27          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:27            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:27            Constant:
+0:27              3 (const uint)
 0:27      Branch: Return with expression
 0:27        Convert uint to float (temp 3-component vector of float)
-0:27          'u3' (uniform 3-component vector of uint)
-0:28  Function Definition: Fn_R_F3B(vf3; (global 3-component vector of float)
+0:27          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:27            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:27            Constant:
+0:27              3 (const uint)
+0:28  Function Definition: Fn_R_F3B(vf3; (temp 3-component vector of float)
 0:28    Function Parameters: 
 0:28      'p' (out 3-component vector of float)
 0:?     Sequence
 0:28      move second child to first child (temp 3-component vector of float)
 0:28        'p' (out 3-component vector of float)
 0:28        Convert bool to float (temp 3-component vector of float)
-0:28          'b3' (uniform 3-component vector of bool)
+0:28          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:28            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:28            Constant:
+0:28              1 (const uint)
 0:28      Branch: Return with expression
 0:28        Convert bool to float (temp 3-component vector of float)
-0:28          'b3' (uniform 3-component vector of bool)
-0:29  Function Definition: Fn_R_F3D(vf3; (global 3-component vector of float)
+0:28          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:28            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:28            Constant:
+0:28              1 (const uint)
+0:29  Function Definition: Fn_R_F3D(vf3; (temp 3-component vector of float)
 0:29    Function Parameters: 
 0:29      'p' (out 3-component vector of float)
 0:?     Sequence
 0:29      move second child to first child (temp 3-component vector of float)
 0:29        'p' (out 3-component vector of float)
 0:29        Convert double to float (temp 3-component vector of float)
-0:29          'd3' (uniform 3-component vector of double)
+0:29          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:29            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:29            Constant:
+0:29              4 (const uint)
 0:29      Branch: Return with expression
 0:29        Convert double to float (temp 3-component vector of float)
-0:29          'd3' (uniform 3-component vector of double)
-0:31  Function Definition: Fn_R_I3U(vi3; (global 3-component vector of int)
+0:29          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:29            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:29            Constant:
+0:29              4 (const uint)
+0:31  Function Definition: Fn_R_I3U(vi3; (temp 3-component vector of int)
 0:31    Function Parameters: 
 0:31      'p' (out 3-component vector of int)
 0:?     Sequence
 0:31      move second child to first child (temp 3-component vector of int)
 0:31        'p' (out 3-component vector of int)
 0:31        Convert uint to int (temp 3-component vector of int)
-0:31          'u3' (uniform 3-component vector of uint)
+0:31          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:31            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:31            Constant:
+0:31              3 (const uint)
 0:31      Branch: Return with expression
 0:31        Convert uint to int (temp 3-component vector of int)
-0:31          'u3' (uniform 3-component vector of uint)
-0:32  Function Definition: Fn_R_I3B(vi3; (global 3-component vector of int)
+0:31          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:31            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:31            Constant:
+0:31              3 (const uint)
+0:32  Function Definition: Fn_R_I3B(vi3; (temp 3-component vector of int)
 0:32    Function Parameters: 
 0:32      'p' (out 3-component vector of int)
 0:?     Sequence
 0:32      move second child to first child (temp 3-component vector of int)
 0:32        'p' (out 3-component vector of int)
 0:32        Convert bool to int (temp 3-component vector of int)
-0:32          'b3' (uniform 3-component vector of bool)
+0:32          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:32            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:32            Constant:
+0:32              1 (const uint)
 0:32      Branch: Return with expression
 0:32        Convert bool to int (temp 3-component vector of int)
-0:32          'b3' (uniform 3-component vector of bool)
-0:33  Function Definition: Fn_R_I3F(vi3; (global 3-component vector of int)
+0:32          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:32            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:32            Constant:
+0:32              1 (const uint)
+0:33  Function Definition: Fn_R_I3F(vi3; (temp 3-component vector of int)
 0:33    Function Parameters: 
 0:33      'p' (out 3-component vector of int)
 0:?     Sequence
 0:33      move second child to first child (temp 3-component vector of int)
 0:33        'p' (out 3-component vector of int)
 0:33        Convert float to int (temp 3-component vector of int)
-0:33          'f3' (uniform 3-component vector of float)
+0:33          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:33            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:33            Constant:
+0:33              2 (const uint)
 0:33      Branch: Return with expression
 0:33        Convert float to int (temp 3-component vector of int)
-0:33          'f3' (uniform 3-component vector of float)
-0:34  Function Definition: Fn_R_I3D(vi3; (global 3-component vector of int)
+0:33          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:33            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:33            Constant:
+0:33              2 (const uint)
+0:34  Function Definition: Fn_R_I3D(vi3; (temp 3-component vector of int)
 0:34    Function Parameters: 
 0:34      'p' (out 3-component vector of int)
 0:?     Sequence
 0:34      move second child to first child (temp 3-component vector of int)
 0:34        'p' (out 3-component vector of int)
 0:34        Convert double to int (temp 3-component vector of int)
-0:34          'd3' (uniform 3-component vector of double)
+0:34          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:34            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:34            Constant:
+0:34              4 (const uint)
 0:34      Branch: Return with expression
 0:34        Convert double to int (temp 3-component vector of int)
-0:34          'd3' (uniform 3-component vector of double)
-0:36  Function Definition: Fn_R_U3I(vu3; (global 3-component vector of uint)
+0:34          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:34            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:34            Constant:
+0:34              4 (const uint)
+0:36  Function Definition: Fn_R_U3I(vu3; (temp 3-component vector of uint)
 0:36    Function Parameters: 
 0:36      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:36      move second child to first child (temp 3-component vector of uint)
 0:36        'p' (out 3-component vector of uint)
 0:36        Convert int to uint (temp 3-component vector of uint)
-0:36          'i3' (uniform 3-component vector of int)
+0:36          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:36            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:36            Constant:
+0:36              0 (const uint)
 0:36      Branch: Return with expression
 0:36        Convert int to uint (temp 3-component vector of uint)
-0:36          'i3' (uniform 3-component vector of int)
-0:37  Function Definition: Fn_R_U3F(vu3; (global 3-component vector of uint)
+0:36          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:36            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:36            Constant:
+0:36              0 (const uint)
+0:37  Function Definition: Fn_R_U3F(vu3; (temp 3-component vector of uint)
 0:37    Function Parameters: 
 0:37      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:37      move second child to first child (temp 3-component vector of uint)
 0:37        'p' (out 3-component vector of uint)
 0:37        Convert float to uint (temp 3-component vector of uint)
-0:37          'f3' (uniform 3-component vector of float)
+0:37          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:37            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:37            Constant:
+0:37              2 (const uint)
 0:37      Branch: Return with expression
 0:37        Convert float to uint (temp 3-component vector of uint)
-0:37          'f3' (uniform 3-component vector of float)
-0:38  Function Definition: Fn_R_U3B(vu3; (global 3-component vector of uint)
+0:37          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:37            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:37            Constant:
+0:37              2 (const uint)
+0:38  Function Definition: Fn_R_U3B(vu3; (temp 3-component vector of uint)
 0:38    Function Parameters: 
 0:38      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:38      move second child to first child (temp 3-component vector of uint)
 0:38        'p' (out 3-component vector of uint)
 0:38        Convert bool to uint (temp 3-component vector of uint)
-0:38          'b3' (uniform 3-component vector of bool)
+0:38          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:38            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:38            Constant:
+0:38              1 (const uint)
 0:38      Branch: Return with expression
 0:38        Convert bool to uint (temp 3-component vector of uint)
-0:38          'b3' (uniform 3-component vector of bool)
-0:39  Function Definition: Fn_R_U3D(vu3; (global 3-component vector of uint)
+0:38          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:38            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:38            Constant:
+0:38              1 (const uint)
+0:39  Function Definition: Fn_R_U3D(vu3; (temp 3-component vector of uint)
 0:39    Function Parameters: 
 0:39      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:39      move second child to first child (temp 3-component vector of uint)
 0:39        'p' (out 3-component vector of uint)
 0:39        Convert double to uint (temp 3-component vector of uint)
-0:39          'd3' (uniform 3-component vector of double)
+0:39          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:39            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:39            Constant:
+0:39              4 (const uint)
 0:39      Branch: Return with expression
 0:39        Convert double to uint (temp 3-component vector of uint)
-0:39          'd3' (uniform 3-component vector of double)
-0:41  Function Definition: Fn_R_B3I(vb3; (global 3-component vector of bool)
+0:39          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:39            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:39            Constant:
+0:39              4 (const uint)
+0:41  Function Definition: Fn_R_B3I(vb3; (temp 3-component vector of bool)
 0:41    Function Parameters: 
 0:41      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:41      move second child to first child (temp 3-component vector of bool)
 0:41        'p' (out 3-component vector of bool)
 0:41        Convert int to bool (temp 3-component vector of bool)
-0:41          'i3' (uniform 3-component vector of int)
+0:41          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:41            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:41            Constant:
+0:41              0 (const uint)
 0:41      Branch: Return with expression
 0:41        Convert int to bool (temp 3-component vector of bool)
-0:41          'i3' (uniform 3-component vector of int)
-0:42  Function Definition: Fn_R_B3U(vb3; (global 3-component vector of bool)
+0:41          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:41            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:41            Constant:
+0:41              0 (const uint)
+0:42  Function Definition: Fn_R_B3U(vb3; (temp 3-component vector of bool)
 0:42    Function Parameters: 
 0:42      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:42      move second child to first child (temp 3-component vector of bool)
 0:42        'p' (out 3-component vector of bool)
 0:42        Convert uint to bool (temp 3-component vector of bool)
-0:42          'u3' (uniform 3-component vector of uint)
+0:42          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:42            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:42            Constant:
+0:42              3 (const uint)
 0:42      Branch: Return with expression
 0:42        Convert uint to bool (temp 3-component vector of bool)
-0:42          'u3' (uniform 3-component vector of uint)
-0:43  Function Definition: Fn_R_B3F(vb3; (global 3-component vector of bool)
+0:42          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:42            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:42            Constant:
+0:42              3 (const uint)
+0:43  Function Definition: Fn_R_B3F(vb3; (temp 3-component vector of bool)
 0:43    Function Parameters: 
 0:43      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:43      move second child to first child (temp 3-component vector of bool)
 0:43        'p' (out 3-component vector of bool)
 0:43        Convert float to bool (temp 3-component vector of bool)
-0:43          'f3' (uniform 3-component vector of float)
+0:43          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:43            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:43            Constant:
+0:43              2 (const uint)
 0:43      Branch: Return with expression
 0:43        Convert float to bool (temp 3-component vector of bool)
-0:43          'f3' (uniform 3-component vector of float)
-0:44  Function Definition: Fn_R_B3D(vb3; (global 3-component vector of bool)
+0:43          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:43            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:43            Constant:
+0:43              2 (const uint)
+0:44  Function Definition: Fn_R_B3D(vb3; (temp 3-component vector of bool)
 0:44    Function Parameters: 
 0:44      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:44      move second child to first child (temp 3-component vector of bool)
 0:44        'p' (out 3-component vector of bool)
 0:44        Convert double to bool (temp 3-component vector of bool)
-0:44          'd3' (uniform 3-component vector of double)
+0:44          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:44            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:44            Constant:
+0:44              4 (const uint)
 0:44      Branch: Return with expression
 0:44        Convert double to bool (temp 3-component vector of bool)
-0:44          'd3' (uniform 3-component vector of double)
-0:46  Function Definition: Fn_R_D3I(vd3; (global 3-component vector of double)
+0:44          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:44            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:44            Constant:
+0:44              4 (const uint)
+0:46  Function Definition: Fn_R_D3I(vd3; (temp 3-component vector of double)
 0:46    Function Parameters: 
 0:46      'p' (out 3-component vector of double)
 0:?     Sequence
 0:46      move second child to first child (temp 3-component vector of double)
 0:46        'p' (out 3-component vector of double)
 0:46        Convert int to double (temp 3-component vector of double)
-0:46          'i3' (uniform 3-component vector of int)
+0:46          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:46            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:46            Constant:
+0:46              0 (const uint)
 0:46      Branch: Return with expression
 0:46        Convert int to double (temp 3-component vector of double)
-0:46          'i3' (uniform 3-component vector of int)
-0:47  Function Definition: Fn_R_D3U(vd3; (global 3-component vector of double)
+0:46          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:46            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:46            Constant:
+0:46              0 (const uint)
+0:47  Function Definition: Fn_R_D3U(vd3; (temp 3-component vector of double)
 0:47    Function Parameters: 
 0:47      'p' (out 3-component vector of double)
 0:?     Sequence
 0:47      move second child to first child (temp 3-component vector of double)
 0:47        'p' (out 3-component vector of double)
 0:47        Convert uint to double (temp 3-component vector of double)
-0:47          'u3' (uniform 3-component vector of uint)
+0:47          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:47            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:47            Constant:
+0:47              3 (const uint)
 0:47      Branch: Return with expression
 0:47        Convert uint to double (temp 3-component vector of double)
-0:47          'u3' (uniform 3-component vector of uint)
-0:48  Function Definition: Fn_R_D3B(vd3; (global 3-component vector of double)
+0:47          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:47            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:47            Constant:
+0:47              3 (const uint)
+0:48  Function Definition: Fn_R_D3B(vd3; (temp 3-component vector of double)
 0:48    Function Parameters: 
 0:48      'p' (out 3-component vector of double)
 0:?     Sequence
 0:48      move second child to first child (temp 3-component vector of double)
 0:48        'p' (out 3-component vector of double)
 0:48        Convert bool to double (temp 3-component vector of double)
-0:48          'b3' (uniform 3-component vector of bool)
+0:48          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:48            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:48            Constant:
+0:48              1 (const uint)
 0:48      Branch: Return with expression
 0:48        Convert bool to double (temp 3-component vector of double)
-0:48          'b3' (uniform 3-component vector of bool)
-0:49  Function Definition: Fn_R_D3F(vd3; (global 3-component vector of double)
+0:48          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:48            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:48            Constant:
+0:48              1 (const uint)
+0:49  Function Definition: Fn_R_D3F(vd3; (temp 3-component vector of double)
 0:49    Function Parameters: 
 0:49      'p' (out 3-component vector of double)
 0:?     Sequence
 0:49      move second child to first child (temp 3-component vector of double)
 0:49        'p' (out 3-component vector of double)
 0:49        Convert float to double (temp 3-component vector of double)
-0:49          'f3' (uniform 3-component vector of float)
+0:49          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:49            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:49            Constant:
+0:49              2 (const uint)
 0:49      Branch: Return with expression
 0:49        Convert float to double (temp 3-component vector of double)
-0:49          'f3' (uniform 3-component vector of float)
-0:52  Function Definition: main( (global structure{temp 4-component vector of float Color})
+0:49          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:49            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:49            Constant:
+0:49              2 (const uint)
+0:52  Function Definition: main( (temp structure{temp 4-component vector of float Color})
 0:52    Function Parameters: 
 0:?     Sequence
 0:54      Sequence
 0:54        move second child to first child (temp 3-component vector of float)
 0:54          'r00' (temp 3-component vector of float)
 0:54          Convert int to float (temp 3-component vector of float)
-0:54            'i3' (uniform 3-component vector of int)
+0:54            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:54              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:54              Constant:
+0:54                0 (const uint)
 0:55      Sequence
 0:55        move second child to first child (temp 3-component vector of float)
 0:55          'r01' (temp 3-component vector of float)
 0:55          Convert bool to float (temp 3-component vector of float)
-0:55            'b3' (uniform 3-component vector of bool)
+0:55            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:55              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:55              Constant:
+0:55                1 (const uint)
 0:56      Sequence
 0:56        move second child to first child (temp 3-component vector of float)
 0:56          'r02' (temp 3-component vector of float)
 0:56          Convert uint to float (temp 3-component vector of float)
-0:56            'u3' (uniform 3-component vector of uint)
+0:56            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:56              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:56              Constant:
+0:56                3 (const uint)
 0:57      Sequence
 0:57        move second child to first child (temp 3-component vector of float)
 0:57          'r03' (temp 3-component vector of float)
 0:57          Convert double to float (temp 3-component vector of float)
-0:57            'd3' (uniform 3-component vector of double)
+0:57            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:57              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:57              Constant:
+0:57                4 (const uint)
 0:59      Sequence
 0:59        move second child to first child (temp 3-component vector of int)
 0:59          'r10' (temp 3-component vector of int)
 0:59          Convert bool to int (temp 3-component vector of int)
-0:59            'b3' (uniform 3-component vector of bool)
+0:59            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:59              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:59              Constant:
+0:59                1 (const uint)
 0:60      Sequence
 0:60        move second child to first child (temp 3-component vector of int)
 0:60          'r11' (temp 3-component vector of int)
 0:60          Convert uint to int (temp 3-component vector of int)
-0:60            'u3' (uniform 3-component vector of uint)
+0:60            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:60              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:60              Constant:
+0:60                3 (const uint)
 0:61      Sequence
 0:61        move second child to first child (temp 3-component vector of int)
 0:61          'r12' (temp 3-component vector of int)
 0:61          Convert float to int (temp 3-component vector of int)
-0:61            'f3' (uniform 3-component vector of float)
+0:61            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:61              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:61              Constant:
+0:61                2 (const uint)
 0:62      Sequence
 0:62        move second child to first child (temp 3-component vector of int)
 0:62          'r13' (temp 3-component vector of int)
 0:62          Convert double to int (temp 3-component vector of int)
-0:62            'd3' (uniform 3-component vector of double)
+0:62            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:62              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:62              Constant:
+0:62                4 (const uint)
 0:64      Sequence
 0:64        move second child to first child (temp 3-component vector of uint)
 0:64          'r20' (temp 3-component vector of uint)
 0:64          Convert bool to uint (temp 3-component vector of uint)
-0:64            'b3' (uniform 3-component vector of bool)
+0:64            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:64              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:64              Constant:
+0:64                1 (const uint)
 0:65      Sequence
 0:65        move second child to first child (temp 3-component vector of uint)
 0:65          'r21' (temp 3-component vector of uint)
 0:65          Convert int to uint (temp 3-component vector of uint)
-0:65            'i3' (uniform 3-component vector of int)
+0:65            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:65              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:65              Constant:
+0:65                0 (const uint)
 0:66      Sequence
 0:66        move second child to first child (temp 3-component vector of uint)
 0:66          'r22' (temp 3-component vector of uint)
 0:66          Convert float to uint (temp 3-component vector of uint)
-0:66            'f3' (uniform 3-component vector of float)
+0:66            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:66              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:66              Constant:
+0:66                2 (const uint)
 0:67      Sequence
 0:67        move second child to first child (temp 3-component vector of uint)
 0:67          'r23' (temp 3-component vector of uint)
 0:67          Convert double to uint (temp 3-component vector of uint)
-0:67            'd3' (uniform 3-component vector of double)
+0:67            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:67              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:67              Constant:
+0:67                4 (const uint)
 0:69      Sequence
 0:69        move second child to first child (temp 3-component vector of bool)
 0:69          'r30' (temp 3-component vector of bool)
 0:69          Convert int to bool (temp 3-component vector of bool)
-0:69            'i3' (uniform 3-component vector of int)
+0:69            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:69              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:69              Constant:
+0:69                0 (const uint)
 0:70      Sequence
 0:70        move second child to first child (temp 3-component vector of bool)
 0:70          'r31' (temp 3-component vector of bool)
 0:70          Convert uint to bool (temp 3-component vector of bool)
-0:70            'u3' (uniform 3-component vector of uint)
+0:70            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:70              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:70              Constant:
+0:70                3 (const uint)
 0:71      Sequence
 0:71        move second child to first child (temp 3-component vector of bool)
 0:71          'r32' (temp 3-component vector of bool)
 0:71          Convert float to bool (temp 3-component vector of bool)
-0:71            'f3' (uniform 3-component vector of float)
+0:71            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:71              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:71              Constant:
+0:71                2 (const uint)
 0:72      Sequence
 0:72        move second child to first child (temp 3-component vector of bool)
 0:72          'r33' (temp 3-component vector of bool)
 0:72          Convert double to bool (temp 3-component vector of bool)
-0:72            'd3' (uniform 3-component vector of double)
+0:72            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:72              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:72              Constant:
+0:72                4 (const uint)
 0:74      Sequence
 0:74        move second child to first child (temp 3-component vector of double)
 0:74          'r40' (temp 3-component vector of double)
 0:74          Convert int to double (temp 3-component vector of double)
-0:74            'i3' (uniform 3-component vector of int)
+0:74            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:74              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:74              Constant:
+0:74                0 (const uint)
 0:75      Sequence
 0:75        move second child to first child (temp 3-component vector of double)
 0:75          'r41' (temp 3-component vector of double)
 0:75          Convert uint to double (temp 3-component vector of double)
-0:75            'u3' (uniform 3-component vector of uint)
+0:75            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:75              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:75              Constant:
+0:75                3 (const uint)
 0:76      Sequence
 0:76        move second child to first child (temp 3-component vector of double)
 0:76          'r42' (temp 3-component vector of double)
 0:76          Convert float to double (temp 3-component vector of double)
-0:76            'f3' (uniform 3-component vector of float)
+0:76            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:76              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:76              Constant:
+0:76                2 (const uint)
 0:77      Sequence
 0:77        move second child to first child (temp 3-component vector of double)
 0:77          'r43' (temp 3-component vector of double)
 0:77          Convert bool to double (temp 3-component vector of double)
-0:77            'b3' (uniform 3-component vector of bool)
+0:77            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:77              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:77              Constant:
+0:77                1 (const uint)
 0:80      multiply second child into first child (temp 3-component vector of float)
 0:80        'r00' (temp 3-component vector of float)
 0:80        Convert int to float (temp 3-component vector of float)
-0:80          'i3' (uniform 3-component vector of int)
+0:80          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:80            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:80            Constant:
+0:80              0 (const uint)
 0:81      multiply second child into first child (temp 3-component vector of float)
 0:81        'r01' (temp 3-component vector of float)
 0:81        Convert bool to float (temp 3-component vector of float)
-0:81          'b3' (uniform 3-component vector of bool)
+0:81          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:81            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:81            Constant:
+0:81              1 (const uint)
 0:82      multiply second child into first child (temp 3-component vector of float)
 0:82        'r02' (temp 3-component vector of float)
 0:82        Convert uint to float (temp 3-component vector of float)
-0:82          'u3' (uniform 3-component vector of uint)
+0:82          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:82            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:82            Constant:
+0:82              3 (const uint)
 0:83      multiply second child into first child (temp 3-component vector of float)
 0:83        'r03' (temp 3-component vector of float)
 0:83        Convert double to float (temp 3-component vector of float)
-0:83          'd3' (uniform 3-component vector of double)
+0:83          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:83            Constant:
+0:83              4 (const uint)
 0:85      multiply second child into first child (temp 3-component vector of int)
 0:85        'r10' (temp 3-component vector of int)
 0:85        Convert bool to int (temp 3-component vector of int)
-0:85          'b3' (uniform 3-component vector of bool)
+0:85          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:85            Constant:
+0:85              1 (const uint)
 0:86      multiply second child into first child (temp 3-component vector of int)
 0:86        'r11' (temp 3-component vector of int)
 0:86        Convert uint to int (temp 3-component vector of int)
-0:86          'u3' (uniform 3-component vector of uint)
+0:86          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:86            Constant:
+0:86              3 (const uint)
 0:87      multiply second child into first child (temp 3-component vector of int)
 0:87        'r12' (temp 3-component vector of int)
 0:87        Convert float to int (temp 3-component vector of int)
-0:87          'f3' (uniform 3-component vector of float)
+0:87          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:87            Constant:
+0:87              2 (const uint)
 0:88      multiply second child into first child (temp 3-component vector of int)
 0:88        'r13' (temp 3-component vector of int)
 0:88        Convert double to int (temp 3-component vector of int)
-0:88          'd3' (uniform 3-component vector of double)
+0:88          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:88            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:88            Constant:
+0:88              4 (const uint)
 0:90      multiply second child into first child (temp 3-component vector of uint)
 0:90        'r20' (temp 3-component vector of uint)
 0:90        Convert bool to uint (temp 3-component vector of uint)
-0:90          'b3' (uniform 3-component vector of bool)
+0:90          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:90            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:90            Constant:
+0:90              1 (const uint)
 0:91      multiply second child into first child (temp 3-component vector of uint)
 0:91        'r21' (temp 3-component vector of uint)
 0:91        Convert int to uint (temp 3-component vector of uint)
-0:91          'i3' (uniform 3-component vector of int)
+0:91          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:91            Constant:
+0:91              0 (const uint)
 0:92      multiply second child into first child (temp 3-component vector of uint)
 0:92        'r22' (temp 3-component vector of uint)
 0:92        Convert float to uint (temp 3-component vector of uint)
-0:92          'f3' (uniform 3-component vector of float)
+0:92          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:92            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:92            Constant:
+0:92              2 (const uint)
 0:93      multiply second child into first child (temp 3-component vector of uint)
 0:93        'r23' (temp 3-component vector of uint)
 0:93        Convert double to uint (temp 3-component vector of uint)
-0:93          'd3' (uniform 3-component vector of double)
+0:93          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:93            Constant:
+0:93              4 (const uint)
 0:97      multiply second child into first child (temp 3-component vector of double)
 0:97        'r40' (temp 3-component vector of double)
 0:97        Convert int to double (temp 3-component vector of double)
-0:97          'i3' (uniform 3-component vector of int)
+0:97          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:97            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:97            Constant:
+0:97              0 (const uint)
 0:98      multiply second child into first child (temp 3-component vector of double)
 0:98        'r41' (temp 3-component vector of double)
 0:98        Convert uint to double (temp 3-component vector of double)
-0:98          'u3' (uniform 3-component vector of uint)
+0:98          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:98            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:98            Constant:
+0:98              3 (const uint)
 0:99      multiply second child into first child (temp 3-component vector of double)
 0:99        'r42' (temp 3-component vector of double)
 0:99        Convert float to double (temp 3-component vector of double)
-0:99          'f3' (uniform 3-component vector of float)
+0:99          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:99            Constant:
+0:99              2 (const uint)
 0:100      multiply second child into first child (temp 3-component vector of double)
 0:100        'r43' (temp 3-component vector of double)
 0:100        Convert bool to double (temp 3-component vector of double)
-0:100          'b3' (uniform 3-component vector of bool)
+0:100          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:100            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:100            Constant:
+0:100              1 (const uint)
 0:103      vector scale second child into first child (temp 3-component vector of float)
 0:103        'r00' (temp 3-component vector of float)
 0:103        Convert int to float (temp float)
-0:103          'is' (uniform int)
+0:103          is: direct index for structure (layout(offset=88 ) uniform int)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:103            Constant:
+0:103              5 (const uint)
 0:104      vector scale second child into first child (temp 3-component vector of float)
 0:104        'r01' (temp 3-component vector of float)
 0:104        Convert bool to float (temp float)
-0:104          'bs' (uniform bool)
+0:104          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:104            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:104            Constant:
+0:104              6 (const uint)
 0:105      vector scale second child into first child (temp 3-component vector of float)
 0:105        'r02' (temp 3-component vector of float)
 0:105        Convert uint to float (temp float)
-0:105          'us' (uniform uint)
+0:105          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:105            Constant:
+0:105              8 (const uint)
 0:106      vector scale second child into first child (temp 3-component vector of float)
 0:106        'r03' (temp 3-component vector of float)
 0:106        Convert double to float (temp float)
-0:106          'ds' (uniform double)
+0:106          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:106            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:106            Constant:
+0:106              9 (const uint)
 0:108      vector scale second child into first child (temp 3-component vector of int)
 0:108        'r10' (temp 3-component vector of int)
 0:108        Convert bool to int (temp int)
-0:108          'bs' (uniform bool)
+0:108          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:108            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:108            Constant:
+0:108              6 (const uint)
 0:109      vector scale second child into first child (temp 3-component vector of int)
 0:109        'r11' (temp 3-component vector of int)
 0:109        Convert uint to int (temp int)
-0:109          'us' (uniform uint)
+0:109          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:109            Constant:
+0:109              8 (const uint)
 0:110      vector scale second child into first child (temp 3-component vector of int)
 0:110        'r12' (temp 3-component vector of int)
 0:110        Convert float to int (temp int)
-0:110          'fs' (uniform float)
+0:110          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:110            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:110            Constant:
+0:110              7 (const uint)
 0:111      vector scale second child into first child (temp 3-component vector of int)
 0:111        'r13' (temp 3-component vector of int)
 0:111        Convert double to int (temp int)
-0:111          'ds' (uniform double)
+0:111          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:111            Constant:
+0:111              9 (const uint)
 0:113      vector scale second child into first child (temp 3-component vector of uint)
 0:113        'r20' (temp 3-component vector of uint)
 0:113        Convert bool to uint (temp uint)
-0:113          'bs' (uniform bool)
+0:113          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:113            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:113            Constant:
+0:113              6 (const uint)
 0:114      vector scale second child into first child (temp 3-component vector of uint)
 0:114        'r21' (temp 3-component vector of uint)
 0:114        Convert int to uint (temp uint)
-0:114          'is' (uniform int)
+0:114          is: direct index for structure (layout(offset=88 ) uniform int)
+0:114            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:114            Constant:
+0:114              5 (const uint)
 0:115      vector scale second child into first child (temp 3-component vector of uint)
 0:115        'r22' (temp 3-component vector of uint)
 0:115        Convert float to uint (temp uint)
-0:115          'fs' (uniform float)
+0:115          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:115            Constant:
+0:115              7 (const uint)
 0:116      vector scale second child into first child (temp 3-component vector of uint)
 0:116        'r23' (temp 3-component vector of uint)
 0:116        Convert double to uint (temp uint)
-0:116          'ds' (uniform double)
+0:116          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:116            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:116            Constant:
+0:116              9 (const uint)
 0:120      vector scale second child into first child (temp 3-component vector of double)
 0:120        'r40' (temp 3-component vector of double)
 0:120        Convert int to double (temp double)
-0:120          'is' (uniform int)
+0:120          is: direct index for structure (layout(offset=88 ) uniform int)
+0:120            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:120            Constant:
+0:120              5 (const uint)
 0:121      vector scale second child into first child (temp 3-component vector of double)
 0:121        'r41' (temp 3-component vector of double)
 0:121        Convert uint to double (temp double)
-0:121          'us' (uniform uint)
+0:121          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:121            Constant:
+0:121              8 (const uint)
 0:122      vector scale second child into first child (temp 3-component vector of double)
 0:122        'r42' (temp 3-component vector of double)
 0:122        Convert float to double (temp double)
-0:122          'fs' (uniform float)
+0:122          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:122            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:122            Constant:
+0:122              7 (const uint)
 0:123      vector scale second child into first child (temp 3-component vector of double)
 0:123        'r43' (temp 3-component vector of double)
 0:123        Convert bool to double (temp double)
-0:123          'bs' (uniform bool)
+0:123          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:123            Constant:
+0:123              6 (const uint)
 0:193      Sequence
 0:193        move second child to first child (temp int)
 0:193          'c1' (temp int)
@@ -496,8 +772,8 @@ gl_FragCoord origin is upper left
 0:199          Constant:
 0:199            0 (const int)
 0:199        'outval' (temp 4-component vector of float)
-0:?       Sequence
-0:?         Sequence
+0:200      Sequence
+0:200        Sequence
 0:200          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:200            Color: direct index for structure (temp 4-component vector of float)
@@ -506,17 +782,8 @@ gl_FragCoord origin is upper left
 0:200                0 (const int)
 0:200        Branch: Return
 0:?   Linker Objects
-0:?     'i3' (uniform 3-component vector of int)
-0:?     'b3' (uniform 3-component vector of bool)
-0:?     'f3' (uniform 3-component vector of float)
-0:?     'u3' (uniform 3-component vector of uint)
-0:?     'd3' (uniform 3-component vector of double)
-0:?     'is' (uniform int)
-0:?     'bs' (uniform bool)
-0:?     'fs' (uniform float)
-0:?     'us' (uniform uint)
-0:?     'ds' (uniform double)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 
 
 Linked fragment stage:
@@ -525,472 +792,748 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:19  Function Definition: Fn_F3(vf3; (global void)
+0:19  Function Definition: Fn_F3(vf3; (temp void)
 0:19    Function Parameters: 
 0:19      'x' (in 3-component vector of float)
-0:20  Function Definition: Fn_I3(vi3; (global void)
+0:20  Function Definition: Fn_I3(vi3; (temp void)
 0:20    Function Parameters: 
 0:20      'x' (in 3-component vector of int)
-0:21  Function Definition: Fn_U3(vu3; (global void)
+0:21  Function Definition: Fn_U3(vu3; (temp void)
 0:21    Function Parameters: 
 0:21      'x' (in 3-component vector of uint)
-0:22  Function Definition: Fn_B3(vb3; (global void)
+0:22  Function Definition: Fn_B3(vb3; (temp void)
 0:22    Function Parameters: 
 0:22      'x' (in 3-component vector of bool)
-0:23  Function Definition: Fn_D3(vd3; (global void)
+0:23  Function Definition: Fn_D3(vd3; (temp void)
 0:23    Function Parameters: 
 0:23      'x' (in 3-component vector of double)
-0:26  Function Definition: Fn_R_F3I(vf3; (global 3-component vector of float)
+0:26  Function Definition: Fn_R_F3I(vf3; (temp 3-component vector of float)
 0:26    Function Parameters: 
 0:26      'p' (out 3-component vector of float)
 0:?     Sequence
 0:26      move second child to first child (temp 3-component vector of float)
 0:26        'p' (out 3-component vector of float)
 0:26        Convert int to float (temp 3-component vector of float)
-0:26          'i3' (uniform 3-component vector of int)
+0:26          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:26            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:26            Constant:
+0:26              0 (const uint)
 0:26      Branch: Return with expression
 0:26        Convert int to float (temp 3-component vector of float)
-0:26          'i3' (uniform 3-component vector of int)
-0:27  Function Definition: Fn_R_F3U(vf3; (global 3-component vector of float)
+0:26          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:26            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:26            Constant:
+0:26              0 (const uint)
+0:27  Function Definition: Fn_R_F3U(vf3; (temp 3-component vector of float)
 0:27    Function Parameters: 
 0:27      'p' (out 3-component vector of float)
 0:?     Sequence
 0:27      move second child to first child (temp 3-component vector of float)
 0:27        'p' (out 3-component vector of float)
 0:27        Convert uint to float (temp 3-component vector of float)
-0:27          'u3' (uniform 3-component vector of uint)
+0:27          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:27            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:27            Constant:
+0:27              3 (const uint)
 0:27      Branch: Return with expression
 0:27        Convert uint to float (temp 3-component vector of float)
-0:27          'u3' (uniform 3-component vector of uint)
-0:28  Function Definition: Fn_R_F3B(vf3; (global 3-component vector of float)
+0:27          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:27            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:27            Constant:
+0:27              3 (const uint)
+0:28  Function Definition: Fn_R_F3B(vf3; (temp 3-component vector of float)
 0:28    Function Parameters: 
 0:28      'p' (out 3-component vector of float)
 0:?     Sequence
 0:28      move second child to first child (temp 3-component vector of float)
 0:28        'p' (out 3-component vector of float)
 0:28        Convert bool to float (temp 3-component vector of float)
-0:28          'b3' (uniform 3-component vector of bool)
+0:28          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:28            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:28            Constant:
+0:28              1 (const uint)
 0:28      Branch: Return with expression
 0:28        Convert bool to float (temp 3-component vector of float)
-0:28          'b3' (uniform 3-component vector of bool)
-0:29  Function Definition: Fn_R_F3D(vf3; (global 3-component vector of float)
+0:28          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:28            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:28            Constant:
+0:28              1 (const uint)
+0:29  Function Definition: Fn_R_F3D(vf3; (temp 3-component vector of float)
 0:29    Function Parameters: 
 0:29      'p' (out 3-component vector of float)
 0:?     Sequence
 0:29      move second child to first child (temp 3-component vector of float)
 0:29        'p' (out 3-component vector of float)
 0:29        Convert double to float (temp 3-component vector of float)
-0:29          'd3' (uniform 3-component vector of double)
+0:29          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:29            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:29            Constant:
+0:29              4 (const uint)
 0:29      Branch: Return with expression
 0:29        Convert double to float (temp 3-component vector of float)
-0:29          'd3' (uniform 3-component vector of double)
-0:31  Function Definition: Fn_R_I3U(vi3; (global 3-component vector of int)
+0:29          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:29            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:29            Constant:
+0:29              4 (const uint)
+0:31  Function Definition: Fn_R_I3U(vi3; (temp 3-component vector of int)
 0:31    Function Parameters: 
 0:31      'p' (out 3-component vector of int)
 0:?     Sequence
 0:31      move second child to first child (temp 3-component vector of int)
 0:31        'p' (out 3-component vector of int)
 0:31        Convert uint to int (temp 3-component vector of int)
-0:31          'u3' (uniform 3-component vector of uint)
+0:31          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:31            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:31            Constant:
+0:31              3 (const uint)
 0:31      Branch: Return with expression
 0:31        Convert uint to int (temp 3-component vector of int)
-0:31          'u3' (uniform 3-component vector of uint)
-0:32  Function Definition: Fn_R_I3B(vi3; (global 3-component vector of int)
+0:31          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:31            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:31            Constant:
+0:31              3 (const uint)
+0:32  Function Definition: Fn_R_I3B(vi3; (temp 3-component vector of int)
 0:32    Function Parameters: 
 0:32      'p' (out 3-component vector of int)
 0:?     Sequence
 0:32      move second child to first child (temp 3-component vector of int)
 0:32        'p' (out 3-component vector of int)
 0:32        Convert bool to int (temp 3-component vector of int)
-0:32          'b3' (uniform 3-component vector of bool)
+0:32          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:32            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:32            Constant:
+0:32              1 (const uint)
 0:32      Branch: Return with expression
 0:32        Convert bool to int (temp 3-component vector of int)
-0:32          'b3' (uniform 3-component vector of bool)
-0:33  Function Definition: Fn_R_I3F(vi3; (global 3-component vector of int)
+0:32          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:32            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:32            Constant:
+0:32              1 (const uint)
+0:33  Function Definition: Fn_R_I3F(vi3; (temp 3-component vector of int)
 0:33    Function Parameters: 
 0:33      'p' (out 3-component vector of int)
 0:?     Sequence
 0:33      move second child to first child (temp 3-component vector of int)
 0:33        'p' (out 3-component vector of int)
 0:33        Convert float to int (temp 3-component vector of int)
-0:33          'f3' (uniform 3-component vector of float)
+0:33          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:33            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:33            Constant:
+0:33              2 (const uint)
 0:33      Branch: Return with expression
 0:33        Convert float to int (temp 3-component vector of int)
-0:33          'f3' (uniform 3-component vector of float)
-0:34  Function Definition: Fn_R_I3D(vi3; (global 3-component vector of int)
+0:33          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:33            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:33            Constant:
+0:33              2 (const uint)
+0:34  Function Definition: Fn_R_I3D(vi3; (temp 3-component vector of int)
 0:34    Function Parameters: 
 0:34      'p' (out 3-component vector of int)
 0:?     Sequence
 0:34      move second child to first child (temp 3-component vector of int)
 0:34        'p' (out 3-component vector of int)
 0:34        Convert double to int (temp 3-component vector of int)
-0:34          'd3' (uniform 3-component vector of double)
+0:34          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:34            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:34            Constant:
+0:34              4 (const uint)
 0:34      Branch: Return with expression
 0:34        Convert double to int (temp 3-component vector of int)
-0:34          'd3' (uniform 3-component vector of double)
-0:36  Function Definition: Fn_R_U3I(vu3; (global 3-component vector of uint)
+0:34          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:34            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:34            Constant:
+0:34              4 (const uint)
+0:36  Function Definition: Fn_R_U3I(vu3; (temp 3-component vector of uint)
 0:36    Function Parameters: 
 0:36      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:36      move second child to first child (temp 3-component vector of uint)
 0:36        'p' (out 3-component vector of uint)
 0:36        Convert int to uint (temp 3-component vector of uint)
-0:36          'i3' (uniform 3-component vector of int)
+0:36          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:36            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:36            Constant:
+0:36              0 (const uint)
 0:36      Branch: Return with expression
 0:36        Convert int to uint (temp 3-component vector of uint)
-0:36          'i3' (uniform 3-component vector of int)
-0:37  Function Definition: Fn_R_U3F(vu3; (global 3-component vector of uint)
+0:36          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:36            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:36            Constant:
+0:36              0 (const uint)
+0:37  Function Definition: Fn_R_U3F(vu3; (temp 3-component vector of uint)
 0:37    Function Parameters: 
 0:37      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:37      move second child to first child (temp 3-component vector of uint)
 0:37        'p' (out 3-component vector of uint)
 0:37        Convert float to uint (temp 3-component vector of uint)
-0:37          'f3' (uniform 3-component vector of float)
+0:37          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:37            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:37            Constant:
+0:37              2 (const uint)
 0:37      Branch: Return with expression
 0:37        Convert float to uint (temp 3-component vector of uint)
-0:37          'f3' (uniform 3-component vector of float)
-0:38  Function Definition: Fn_R_U3B(vu3; (global 3-component vector of uint)
+0:37          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:37            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:37            Constant:
+0:37              2 (const uint)
+0:38  Function Definition: Fn_R_U3B(vu3; (temp 3-component vector of uint)
 0:38    Function Parameters: 
 0:38      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:38      move second child to first child (temp 3-component vector of uint)
 0:38        'p' (out 3-component vector of uint)
 0:38        Convert bool to uint (temp 3-component vector of uint)
-0:38          'b3' (uniform 3-component vector of bool)
+0:38          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:38            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:38            Constant:
+0:38              1 (const uint)
 0:38      Branch: Return with expression
 0:38        Convert bool to uint (temp 3-component vector of uint)
-0:38          'b3' (uniform 3-component vector of bool)
-0:39  Function Definition: Fn_R_U3D(vu3; (global 3-component vector of uint)
+0:38          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:38            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:38            Constant:
+0:38              1 (const uint)
+0:39  Function Definition: Fn_R_U3D(vu3; (temp 3-component vector of uint)
 0:39    Function Parameters: 
 0:39      'p' (out 3-component vector of uint)
 0:?     Sequence
 0:39      move second child to first child (temp 3-component vector of uint)
 0:39        'p' (out 3-component vector of uint)
 0:39        Convert double to uint (temp 3-component vector of uint)
-0:39          'd3' (uniform 3-component vector of double)
+0:39          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:39            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:39            Constant:
+0:39              4 (const uint)
 0:39      Branch: Return with expression
 0:39        Convert double to uint (temp 3-component vector of uint)
-0:39          'd3' (uniform 3-component vector of double)
-0:41  Function Definition: Fn_R_B3I(vb3; (global 3-component vector of bool)
+0:39          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:39            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:39            Constant:
+0:39              4 (const uint)
+0:41  Function Definition: Fn_R_B3I(vb3; (temp 3-component vector of bool)
 0:41    Function Parameters: 
 0:41      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:41      move second child to first child (temp 3-component vector of bool)
 0:41        'p' (out 3-component vector of bool)
 0:41        Convert int to bool (temp 3-component vector of bool)
-0:41          'i3' (uniform 3-component vector of int)
+0:41          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:41            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:41            Constant:
+0:41              0 (const uint)
 0:41      Branch: Return with expression
 0:41        Convert int to bool (temp 3-component vector of bool)
-0:41          'i3' (uniform 3-component vector of int)
-0:42  Function Definition: Fn_R_B3U(vb3; (global 3-component vector of bool)
+0:41          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:41            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:41            Constant:
+0:41              0 (const uint)
+0:42  Function Definition: Fn_R_B3U(vb3; (temp 3-component vector of bool)
 0:42    Function Parameters: 
 0:42      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:42      move second child to first child (temp 3-component vector of bool)
 0:42        'p' (out 3-component vector of bool)
 0:42        Convert uint to bool (temp 3-component vector of bool)
-0:42          'u3' (uniform 3-component vector of uint)
+0:42          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:42            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:42            Constant:
+0:42              3 (const uint)
 0:42      Branch: Return with expression
 0:42        Convert uint to bool (temp 3-component vector of bool)
-0:42          'u3' (uniform 3-component vector of uint)
-0:43  Function Definition: Fn_R_B3F(vb3; (global 3-component vector of bool)
+0:42          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:42            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:42            Constant:
+0:42              3 (const uint)
+0:43  Function Definition: Fn_R_B3F(vb3; (temp 3-component vector of bool)
 0:43    Function Parameters: 
 0:43      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:43      move second child to first child (temp 3-component vector of bool)
 0:43        'p' (out 3-component vector of bool)
 0:43        Convert float to bool (temp 3-component vector of bool)
-0:43          'f3' (uniform 3-component vector of float)
+0:43          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:43            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:43            Constant:
+0:43              2 (const uint)
 0:43      Branch: Return with expression
 0:43        Convert float to bool (temp 3-component vector of bool)
-0:43          'f3' (uniform 3-component vector of float)
-0:44  Function Definition: Fn_R_B3D(vb3; (global 3-component vector of bool)
+0:43          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:43            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:43            Constant:
+0:43              2 (const uint)
+0:44  Function Definition: Fn_R_B3D(vb3; (temp 3-component vector of bool)
 0:44    Function Parameters: 
 0:44      'p' (out 3-component vector of bool)
 0:?     Sequence
 0:44      move second child to first child (temp 3-component vector of bool)
 0:44        'p' (out 3-component vector of bool)
 0:44        Convert double to bool (temp 3-component vector of bool)
-0:44          'd3' (uniform 3-component vector of double)
+0:44          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:44            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:44            Constant:
+0:44              4 (const uint)
 0:44      Branch: Return with expression
 0:44        Convert double to bool (temp 3-component vector of bool)
-0:44          'd3' (uniform 3-component vector of double)
-0:46  Function Definition: Fn_R_D3I(vd3; (global 3-component vector of double)
+0:44          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:44            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:44            Constant:
+0:44              4 (const uint)
+0:46  Function Definition: Fn_R_D3I(vd3; (temp 3-component vector of double)
 0:46    Function Parameters: 
 0:46      'p' (out 3-component vector of double)
 0:?     Sequence
 0:46      move second child to first child (temp 3-component vector of double)
 0:46        'p' (out 3-component vector of double)
 0:46        Convert int to double (temp 3-component vector of double)
-0:46          'i3' (uniform 3-component vector of int)
+0:46          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:46            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:46            Constant:
+0:46              0 (const uint)
 0:46      Branch: Return with expression
 0:46        Convert int to double (temp 3-component vector of double)
-0:46          'i3' (uniform 3-component vector of int)
-0:47  Function Definition: Fn_R_D3U(vd3; (global 3-component vector of double)
+0:46          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:46            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:46            Constant:
+0:46              0 (const uint)
+0:47  Function Definition: Fn_R_D3U(vd3; (temp 3-component vector of double)
 0:47    Function Parameters: 
 0:47      'p' (out 3-component vector of double)
 0:?     Sequence
 0:47      move second child to first child (temp 3-component vector of double)
 0:47        'p' (out 3-component vector of double)
 0:47        Convert uint to double (temp 3-component vector of double)
-0:47          'u3' (uniform 3-component vector of uint)
+0:47          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:47            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:47            Constant:
+0:47              3 (const uint)
 0:47      Branch: Return with expression
 0:47        Convert uint to double (temp 3-component vector of double)
-0:47          'u3' (uniform 3-component vector of uint)
-0:48  Function Definition: Fn_R_D3B(vd3; (global 3-component vector of double)
+0:47          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:47            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:47            Constant:
+0:47              3 (const uint)
+0:48  Function Definition: Fn_R_D3B(vd3; (temp 3-component vector of double)
 0:48    Function Parameters: 
 0:48      'p' (out 3-component vector of double)
 0:?     Sequence
 0:48      move second child to first child (temp 3-component vector of double)
 0:48        'p' (out 3-component vector of double)
 0:48        Convert bool to double (temp 3-component vector of double)
-0:48          'b3' (uniform 3-component vector of bool)
+0:48          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:48            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:48            Constant:
+0:48              1 (const uint)
 0:48      Branch: Return with expression
 0:48        Convert bool to double (temp 3-component vector of double)
-0:48          'b3' (uniform 3-component vector of bool)
-0:49  Function Definition: Fn_R_D3F(vd3; (global 3-component vector of double)
+0:48          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:48            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:48            Constant:
+0:48              1 (const uint)
+0:49  Function Definition: Fn_R_D3F(vd3; (temp 3-component vector of double)
 0:49    Function Parameters: 
 0:49      'p' (out 3-component vector of double)
 0:?     Sequence
 0:49      move second child to first child (temp 3-component vector of double)
 0:49        'p' (out 3-component vector of double)
 0:49        Convert float to double (temp 3-component vector of double)
-0:49          'f3' (uniform 3-component vector of float)
+0:49          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:49            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:49            Constant:
+0:49              2 (const uint)
 0:49      Branch: Return with expression
 0:49        Convert float to double (temp 3-component vector of double)
-0:49          'f3' (uniform 3-component vector of float)
-0:52  Function Definition: main( (global structure{temp 4-component vector of float Color})
+0:49          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:49            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:49            Constant:
+0:49              2 (const uint)
+0:52  Function Definition: main( (temp structure{temp 4-component vector of float Color})
 0:52    Function Parameters: 
 0:?     Sequence
 0:54      Sequence
 0:54        move second child to first child (temp 3-component vector of float)
 0:54          'r00' (temp 3-component vector of float)
 0:54          Convert int to float (temp 3-component vector of float)
-0:54            'i3' (uniform 3-component vector of int)
+0:54            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:54              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:54              Constant:
+0:54                0 (const uint)
 0:55      Sequence
 0:55        move second child to first child (temp 3-component vector of float)
 0:55          'r01' (temp 3-component vector of float)
 0:55          Convert bool to float (temp 3-component vector of float)
-0:55            'b3' (uniform 3-component vector of bool)
+0:55            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:55              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:55              Constant:
+0:55                1 (const uint)
 0:56      Sequence
 0:56        move second child to first child (temp 3-component vector of float)
 0:56          'r02' (temp 3-component vector of float)
 0:56          Convert uint to float (temp 3-component vector of float)
-0:56            'u3' (uniform 3-component vector of uint)
+0:56            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:56              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:56              Constant:
+0:56                3 (const uint)
 0:57      Sequence
 0:57        move second child to first child (temp 3-component vector of float)
 0:57          'r03' (temp 3-component vector of float)
 0:57          Convert double to float (temp 3-component vector of float)
-0:57            'd3' (uniform 3-component vector of double)
+0:57            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:57              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:57              Constant:
+0:57                4 (const uint)
 0:59      Sequence
 0:59        move second child to first child (temp 3-component vector of int)
 0:59          'r10' (temp 3-component vector of int)
 0:59          Convert bool to int (temp 3-component vector of int)
-0:59            'b3' (uniform 3-component vector of bool)
+0:59            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:59              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:59              Constant:
+0:59                1 (const uint)
 0:60      Sequence
 0:60        move second child to first child (temp 3-component vector of int)
 0:60          'r11' (temp 3-component vector of int)
 0:60          Convert uint to int (temp 3-component vector of int)
-0:60            'u3' (uniform 3-component vector of uint)
+0:60            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:60              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:60              Constant:
+0:60                3 (const uint)
 0:61      Sequence
 0:61        move second child to first child (temp 3-component vector of int)
 0:61          'r12' (temp 3-component vector of int)
 0:61          Convert float to int (temp 3-component vector of int)
-0:61            'f3' (uniform 3-component vector of float)
+0:61            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:61              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:61              Constant:
+0:61                2 (const uint)
 0:62      Sequence
 0:62        move second child to first child (temp 3-component vector of int)
 0:62          'r13' (temp 3-component vector of int)
 0:62          Convert double to int (temp 3-component vector of int)
-0:62            'd3' (uniform 3-component vector of double)
+0:62            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:62              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:62              Constant:
+0:62                4 (const uint)
 0:64      Sequence
 0:64        move second child to first child (temp 3-component vector of uint)
 0:64          'r20' (temp 3-component vector of uint)
 0:64          Convert bool to uint (temp 3-component vector of uint)
-0:64            'b3' (uniform 3-component vector of bool)
+0:64            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:64              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:64              Constant:
+0:64                1 (const uint)
 0:65      Sequence
 0:65        move second child to first child (temp 3-component vector of uint)
 0:65          'r21' (temp 3-component vector of uint)
 0:65          Convert int to uint (temp 3-component vector of uint)
-0:65            'i3' (uniform 3-component vector of int)
+0:65            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:65              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:65              Constant:
+0:65                0 (const uint)
 0:66      Sequence
 0:66        move second child to first child (temp 3-component vector of uint)
 0:66          'r22' (temp 3-component vector of uint)
 0:66          Convert float to uint (temp 3-component vector of uint)
-0:66            'f3' (uniform 3-component vector of float)
+0:66            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:66              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:66              Constant:
+0:66                2 (const uint)
 0:67      Sequence
 0:67        move second child to first child (temp 3-component vector of uint)
 0:67          'r23' (temp 3-component vector of uint)
 0:67          Convert double to uint (temp 3-component vector of uint)
-0:67            'd3' (uniform 3-component vector of double)
+0:67            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:67              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:67              Constant:
+0:67                4 (const uint)
 0:69      Sequence
 0:69        move second child to first child (temp 3-component vector of bool)
 0:69          'r30' (temp 3-component vector of bool)
 0:69          Convert int to bool (temp 3-component vector of bool)
-0:69            'i3' (uniform 3-component vector of int)
+0:69            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:69              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:69              Constant:
+0:69                0 (const uint)
 0:70      Sequence
 0:70        move second child to first child (temp 3-component vector of bool)
 0:70          'r31' (temp 3-component vector of bool)
 0:70          Convert uint to bool (temp 3-component vector of bool)
-0:70            'u3' (uniform 3-component vector of uint)
+0:70            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:70              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:70              Constant:
+0:70                3 (const uint)
 0:71      Sequence
 0:71        move second child to first child (temp 3-component vector of bool)
 0:71          'r32' (temp 3-component vector of bool)
 0:71          Convert float to bool (temp 3-component vector of bool)
-0:71            'f3' (uniform 3-component vector of float)
+0:71            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:71              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:71              Constant:
+0:71                2 (const uint)
 0:72      Sequence
 0:72        move second child to first child (temp 3-component vector of bool)
 0:72          'r33' (temp 3-component vector of bool)
 0:72          Convert double to bool (temp 3-component vector of bool)
-0:72            'd3' (uniform 3-component vector of double)
+0:72            d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:72              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:72              Constant:
+0:72                4 (const uint)
 0:74      Sequence
 0:74        move second child to first child (temp 3-component vector of double)
 0:74          'r40' (temp 3-component vector of double)
 0:74          Convert int to double (temp 3-component vector of double)
-0:74            'i3' (uniform 3-component vector of int)
+0:74            i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:74              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:74              Constant:
+0:74                0 (const uint)
 0:75      Sequence
 0:75        move second child to first child (temp 3-component vector of double)
 0:75          'r41' (temp 3-component vector of double)
 0:75          Convert uint to double (temp 3-component vector of double)
-0:75            'u3' (uniform 3-component vector of uint)
+0:75            u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:75              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:75              Constant:
+0:75                3 (const uint)
 0:76      Sequence
 0:76        move second child to first child (temp 3-component vector of double)
 0:76          'r42' (temp 3-component vector of double)
 0:76          Convert float to double (temp 3-component vector of double)
-0:76            'f3' (uniform 3-component vector of float)
+0:76            f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:76              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:76              Constant:
+0:76                2 (const uint)
 0:77      Sequence
 0:77        move second child to first child (temp 3-component vector of double)
 0:77          'r43' (temp 3-component vector of double)
 0:77          Convert bool to double (temp 3-component vector of double)
-0:77            'b3' (uniform 3-component vector of bool)
+0:77            b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:77              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:77              Constant:
+0:77                1 (const uint)
 0:80      multiply second child into first child (temp 3-component vector of float)
 0:80        'r00' (temp 3-component vector of float)
 0:80        Convert int to float (temp 3-component vector of float)
-0:80          'i3' (uniform 3-component vector of int)
+0:80          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:80            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:80            Constant:
+0:80              0 (const uint)
 0:81      multiply second child into first child (temp 3-component vector of float)
 0:81        'r01' (temp 3-component vector of float)
 0:81        Convert bool to float (temp 3-component vector of float)
-0:81          'b3' (uniform 3-component vector of bool)
+0:81          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:81            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:81            Constant:
+0:81              1 (const uint)
 0:82      multiply second child into first child (temp 3-component vector of float)
 0:82        'r02' (temp 3-component vector of float)
 0:82        Convert uint to float (temp 3-component vector of float)
-0:82          'u3' (uniform 3-component vector of uint)
+0:82          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:82            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:82            Constant:
+0:82              3 (const uint)
 0:83      multiply second child into first child (temp 3-component vector of float)
 0:83        'r03' (temp 3-component vector of float)
 0:83        Convert double to float (temp 3-component vector of float)
-0:83          'd3' (uniform 3-component vector of double)
+0:83          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:83            Constant:
+0:83              4 (const uint)
 0:85      multiply second child into first child (temp 3-component vector of int)
 0:85        'r10' (temp 3-component vector of int)
 0:85        Convert bool to int (temp 3-component vector of int)
-0:85          'b3' (uniform 3-component vector of bool)
+0:85          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:85            Constant:
+0:85              1 (const uint)
 0:86      multiply second child into first child (temp 3-component vector of int)
 0:86        'r11' (temp 3-component vector of int)
 0:86        Convert uint to int (temp 3-component vector of int)
-0:86          'u3' (uniform 3-component vector of uint)
+0:86          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:86            Constant:
+0:86              3 (const uint)
 0:87      multiply second child into first child (temp 3-component vector of int)
 0:87        'r12' (temp 3-component vector of int)
 0:87        Convert float to int (temp 3-component vector of int)
-0:87          'f3' (uniform 3-component vector of float)
+0:87          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:87            Constant:
+0:87              2 (const uint)
 0:88      multiply second child into first child (temp 3-component vector of int)
 0:88        'r13' (temp 3-component vector of int)
 0:88        Convert double to int (temp 3-component vector of int)
-0:88          'd3' (uniform 3-component vector of double)
+0:88          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:88            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:88            Constant:
+0:88              4 (const uint)
 0:90      multiply second child into first child (temp 3-component vector of uint)
 0:90        'r20' (temp 3-component vector of uint)
 0:90        Convert bool to uint (temp 3-component vector of uint)
-0:90          'b3' (uniform 3-component vector of bool)
+0:90          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:90            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:90            Constant:
+0:90              1 (const uint)
 0:91      multiply second child into first child (temp 3-component vector of uint)
 0:91        'r21' (temp 3-component vector of uint)
 0:91        Convert int to uint (temp 3-component vector of uint)
-0:91          'i3' (uniform 3-component vector of int)
+0:91          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:91            Constant:
+0:91              0 (const uint)
 0:92      multiply second child into first child (temp 3-component vector of uint)
 0:92        'r22' (temp 3-component vector of uint)
 0:92        Convert float to uint (temp 3-component vector of uint)
-0:92          'f3' (uniform 3-component vector of float)
+0:92          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:92            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:92            Constant:
+0:92              2 (const uint)
 0:93      multiply second child into first child (temp 3-component vector of uint)
 0:93        'r23' (temp 3-component vector of uint)
 0:93        Convert double to uint (temp 3-component vector of uint)
-0:93          'd3' (uniform 3-component vector of double)
+0:93          d3: direct index for structure (layout(offset=64 ) uniform 3-component vector of double)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:93            Constant:
+0:93              4 (const uint)
 0:97      multiply second child into first child (temp 3-component vector of double)
 0:97        'r40' (temp 3-component vector of double)
 0:97        Convert int to double (temp 3-component vector of double)
-0:97          'i3' (uniform 3-component vector of int)
+0:97          i3: direct index for structure (layout(offset=0 ) uniform 3-component vector of int)
+0:97            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:97            Constant:
+0:97              0 (const uint)
 0:98      multiply second child into first child (temp 3-component vector of double)
 0:98        'r41' (temp 3-component vector of double)
 0:98        Convert uint to double (temp 3-component vector of double)
-0:98          'u3' (uniform 3-component vector of uint)
+0:98          u3: direct index for structure (layout(offset=48 ) uniform 3-component vector of uint)
+0:98            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:98            Constant:
+0:98              3 (const uint)
 0:99      multiply second child into first child (temp 3-component vector of double)
 0:99        'r42' (temp 3-component vector of double)
 0:99        Convert float to double (temp 3-component vector of double)
-0:99          'f3' (uniform 3-component vector of float)
+0:99          f3: direct index for structure (layout(offset=32 ) uniform 3-component vector of float)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:99            Constant:
+0:99              2 (const uint)
 0:100      multiply second child into first child (temp 3-component vector of double)
 0:100        'r43' (temp 3-component vector of double)
 0:100        Convert bool to double (temp 3-component vector of double)
-0:100          'b3' (uniform 3-component vector of bool)
+0:100          b3: direct index for structure (layout(offset=16 ) uniform 3-component vector of bool)
+0:100            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:100            Constant:
+0:100              1 (const uint)
 0:103      vector scale second child into first child (temp 3-component vector of float)
 0:103        'r00' (temp 3-component vector of float)
 0:103        Convert int to float (temp float)
-0:103          'is' (uniform int)
+0:103          is: direct index for structure (layout(offset=88 ) uniform int)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:103            Constant:
+0:103              5 (const uint)
 0:104      vector scale second child into first child (temp 3-component vector of float)
 0:104        'r01' (temp 3-component vector of float)
 0:104        Convert bool to float (temp float)
-0:104          'bs' (uniform bool)
+0:104          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:104            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:104            Constant:
+0:104              6 (const uint)
 0:105      vector scale second child into first child (temp 3-component vector of float)
 0:105        'r02' (temp 3-component vector of float)
 0:105        Convert uint to float (temp float)
-0:105          'us' (uniform uint)
+0:105          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:105            Constant:
+0:105              8 (const uint)
 0:106      vector scale second child into first child (temp 3-component vector of float)
 0:106        'r03' (temp 3-component vector of float)
 0:106        Convert double to float (temp float)
-0:106          'ds' (uniform double)
+0:106          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:106            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:106            Constant:
+0:106              9 (const uint)
 0:108      vector scale second child into first child (temp 3-component vector of int)
 0:108        'r10' (temp 3-component vector of int)
 0:108        Convert bool to int (temp int)
-0:108          'bs' (uniform bool)
+0:108          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:108            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:108            Constant:
+0:108              6 (const uint)
 0:109      vector scale second child into first child (temp 3-component vector of int)
 0:109        'r11' (temp 3-component vector of int)
 0:109        Convert uint to int (temp int)
-0:109          'us' (uniform uint)
+0:109          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:109            Constant:
+0:109              8 (const uint)
 0:110      vector scale second child into first child (temp 3-component vector of int)
 0:110        'r12' (temp 3-component vector of int)
 0:110        Convert float to int (temp int)
-0:110          'fs' (uniform float)
+0:110          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:110            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:110            Constant:
+0:110              7 (const uint)
 0:111      vector scale second child into first child (temp 3-component vector of int)
 0:111        'r13' (temp 3-component vector of int)
 0:111        Convert double to int (temp int)
-0:111          'ds' (uniform double)
+0:111          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:111            Constant:
+0:111              9 (const uint)
 0:113      vector scale second child into first child (temp 3-component vector of uint)
 0:113        'r20' (temp 3-component vector of uint)
 0:113        Convert bool to uint (temp uint)
-0:113          'bs' (uniform bool)
+0:113          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:113            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:113            Constant:
+0:113              6 (const uint)
 0:114      vector scale second child into first child (temp 3-component vector of uint)
 0:114        'r21' (temp 3-component vector of uint)
 0:114        Convert int to uint (temp uint)
-0:114          'is' (uniform int)
+0:114          is: direct index for structure (layout(offset=88 ) uniform int)
+0:114            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:114            Constant:
+0:114              5 (const uint)
 0:115      vector scale second child into first child (temp 3-component vector of uint)
 0:115        'r22' (temp 3-component vector of uint)
 0:115        Convert float to uint (temp uint)
-0:115          'fs' (uniform float)
+0:115          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:115            Constant:
+0:115              7 (const uint)
 0:116      vector scale second child into first child (temp 3-component vector of uint)
 0:116        'r23' (temp 3-component vector of uint)
 0:116        Convert double to uint (temp uint)
-0:116          'ds' (uniform double)
+0:116          ds: direct index for structure (layout(offset=104 ) uniform double)
+0:116            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:116            Constant:
+0:116              9 (const uint)
 0:120      vector scale second child into first child (temp 3-component vector of double)
 0:120        'r40' (temp 3-component vector of double)
 0:120        Convert int to double (temp double)
-0:120          'is' (uniform int)
+0:120          is: direct index for structure (layout(offset=88 ) uniform int)
+0:120            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:120            Constant:
+0:120              5 (const uint)
 0:121      vector scale second child into first child (temp 3-component vector of double)
 0:121        'r41' (temp 3-component vector of double)
 0:121        Convert uint to double (temp double)
-0:121          'us' (uniform uint)
+0:121          us: direct index for structure (layout(offset=100 ) uniform uint)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:121            Constant:
+0:121              8 (const uint)
 0:122      vector scale second child into first child (temp 3-component vector of double)
 0:122        'r42' (temp 3-component vector of double)
 0:122        Convert float to double (temp double)
-0:122          'fs' (uniform float)
+0:122          fs: direct index for structure (layout(offset=96 ) uniform float)
+0:122            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:122            Constant:
+0:122              7 (const uint)
 0:123      vector scale second child into first child (temp 3-component vector of double)
 0:123        'r43' (temp 3-component vector of double)
 0:123        Convert bool to double (temp double)
-0:123          'bs' (uniform bool)
+0:123          bs: direct index for structure (layout(offset=92 ) uniform bool)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
+0:123            Constant:
+0:123              6 (const uint)
 0:193      Sequence
 0:193        move second child to first child (temp int)
 0:193          'c1' (temp int)
@@ -1019,8 +1562,8 @@ gl_FragCoord origin is upper left
 0:199          Constant:
 0:199            0 (const int)
 0:199        'outval' (temp 4-component vector of float)
-0:?       Sequence
-0:?         Sequence
+0:200      Sequence
+0:200        Sequence
 0:200          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:200            Color: direct index for structure (temp 4-component vector of float)
@@ -1029,27 +1572,18 @@ gl_FragCoord origin is upper left
 0:200                0 (const int)
 0:200        Branch: Return
 0:?   Linker Objects
-0:?     'i3' (uniform 3-component vector of int)
-0:?     'b3' (uniform 3-component vector of bool)
-0:?     'f3' (uniform 3-component vector of float)
-0:?     'u3' (uniform 3-component vector of uint)
-0:?     'd3' (uniform 3-component vector of double)
-0:?     'is' (uniform int)
-0:?     'bs' (uniform bool)
-0:?     'fs' (uniform float)
-0:?     'us' (uniform uint)
-0:?     'ds' (uniform double)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 481
+// Id's are bound by 591
 
                               Capability Shader
                               Capability Float64
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 477
+                              EntryPoint Fragment 4  "main" 587
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 11  "Fn_F3(vf3;"
@@ -1102,44 +1636,58 @@ gl_FragCoord origin is upper left
                               Name 100  "p"
                               Name 104  "Fn_R_D3F(vd3;"
                               Name 103  "p"
-                              Name 107  "i3"
-                              Name 115  "u3"
-                              Name 123  "b3"
-                              Name 135  "d3"
-                              Name 159  "f3"
-                              Name 252  "r00"
-                              Name 255  "r01"
-                              Name 258  "r02"
-                              Name 261  "r03"
-                              Name 264  "r10"
-                              Name 267  "r11"
-                              Name 270  "r12"
-                              Name 273  "r13"
-                              Name 276  "r20"
-                              Name 279  "r21"
-                              Name 282  "r22"
-                              Name 285  "r23"
-                              Name 288  "r30"
-                              Name 291  "r31"
-                              Name 294  "r32"
-                              Name 297  "r33"
-                              Name 300  "r40"
-                              Name 303  "r41"
-                              Name 306  "r42"
-                              Name 309  "r43"
-                              Name 377  "is"
-                              Name 383  "bs"
-                              Name 389  "us"
-                              Name 395  "ds"
-                              Name 411  "fs"
-                              Name 459  "c1"
-                              Name 461  "c2"
-                              Name 464  "outval"
-                              Name 471  "PS_OUTPUT"
-                              MemberName 471(PS_OUTPUT) 0  "Color"
-                              Name 473  "psout"
-                              Name 477  "Color"
-                              Decorate 477(Color) Location 0
+                              Name 106  "$Global"
+                              MemberName 106($Global) 0  "i3"
+                              MemberName 106($Global) 1  "b3"
+                              MemberName 106($Global) 2  "f3"
+                              MemberName 106($Global) 3  "u3"
+                              MemberName 106($Global) 4  "d3"
+                              MemberName 106($Global) 5  "is"
+                              MemberName 106($Global) 6  "bs"
+                              MemberName 106($Global) 7  "fs"
+                              MemberName 106($Global) 8  "us"
+                              MemberName 106($Global) 9  "ds"
+                              Name 108  ""
+                              Name 300  "r00"
+                              Name 304  "r01"
+                              Name 309  "r02"
+                              Name 313  "r03"
+                              Name 317  "r10"
+                              Name 322  "r11"
+                              Name 326  "r12"
+                              Name 330  "r13"
+                              Name 334  "r20"
+                              Name 339  "r21"
+                              Name 343  "r22"
+                              Name 347  "r23"
+                              Name 351  "r30"
+                              Name 355  "r31"
+                              Name 359  "r32"
+                              Name 363  "r33"
+                              Name 367  "r40"
+                              Name 371  "r41"
+                              Name 375  "r42"
+                              Name 379  "r43"
+                              Name 570  "c1"
+                              Name 571  "c2"
+                              Name 574  "outval"
+                              Name 581  "PS_OUTPUT"
+                              MemberName 581(PS_OUTPUT) 0  "Color"
+                              Name 583  "psout"
+                              Name 587  "Color"
+                              MemberDecorate 106($Global) 0 Offset 0
+                              MemberDecorate 106($Global) 1 Offset 16
+                              MemberDecorate 106($Global) 2 Offset 32
+                              MemberDecorate 106($Global) 3 Offset 48
+                              MemberDecorate 106($Global) 4 Offset 64
+                              MemberDecorate 106($Global) 5 Offset 88
+                              MemberDecorate 106($Global) 6 Offset 92
+                              MemberDecorate 106($Global) 7 Offset 96
+                              MemberDecorate 106($Global) 8 Offset 100
+                              MemberDecorate 106($Global) 9 Offset 104
+                              Decorate 106($Global) Block
+                              Decorate 108 DescriptorSet 0
+                              Decorate 587(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -1167,319 +1715,381 @@ gl_FragCoord origin is upper left
               67:             TypeFunction 21(ivec3) 22(ptr)
               80:             TypeFunction 28(bvec3) 29(ptr)
               93:             TypeFunction 35(fvec3) 36(ptr)
-             106:             TypePointer UniformConstant 14(ivec3)
-         107(i3):    106(ptr) Variable UniformConstant
-             114:             TypePointer UniformConstant 21(ivec3)
-         115(u3):    114(ptr) Variable UniformConstant
-             122:             TypePointer UniformConstant 28(bvec3)
-         123(b3):    122(ptr) Variable UniformConstant
-             125:    6(float) Constant 0
-             126:    6(float) Constant 1065353216
-             127:    7(fvec3) ConstantComposite 125 125 125
-             128:    7(fvec3) ConstantComposite 126 126 126
-             134:             TypePointer UniformConstant 35(fvec3)
-         135(d3):    134(ptr) Variable UniformConstant
-             149:     13(int) Constant 0
-             150:     13(int) Constant 1
-             151:   14(ivec3) ConstantComposite 149 149 149
-             152:   14(ivec3) ConstantComposite 150 150 150
-             158:             TypePointer UniformConstant 7(fvec3)
-         159(f3):    158(ptr) Variable UniformConstant
-             185:     20(int) Constant 0
-             186:     20(int) Constant 1
-             187:   21(ivec3) ConstantComposite 185 185 185
-             188:   21(ivec3) ConstantComposite 186 186 186
-             219:   34(float) Constant 0 0
-             220:   35(fvec3) ConstantComposite 219 219 219
-             239:   34(float) Constant 0 1072693248
-             240:   35(fvec3) ConstantComposite 239 239 239
-             376:             TypePointer UniformConstant 13(int)
-         377(is):    376(ptr) Variable UniformConstant
-             382:             TypePointer UniformConstant 27(bool)
-         383(bs):    382(ptr) Variable UniformConstant
-             388:             TypePointer UniformConstant 20(int)
-         389(us):    388(ptr) Variable UniformConstant
-             394:             TypePointer UniformConstant 34(float)
-         395(ds):    394(ptr) Variable UniformConstant
-             410:             TypePointer UniformConstant 6(float)
-         411(fs):    410(ptr) Variable UniformConstant
-             458:             TypePointer Function 13(int)
-             460:     13(int) Constant 3
-             462:             TypeVector 6(float) 4
-             463:             TypePointer Function 462(fvec4)
-             465:    6(float) Constant 1080452710
-  471(PS_OUTPUT):             TypeStruct 462(fvec4)
-             472:             TypePointer Function 471(PS_OUTPUT)
-             476:             TypePointer Output 462(fvec4)
-      477(Color):    476(ptr) Variable Output
+    106($Global):             TypeStruct 14(ivec3) 21(ivec3) 7(fvec3) 21(ivec3) 35(fvec3) 13(int) 20(int) 6(float) 20(int) 34(float)
+             107:             TypePointer Uniform 106($Global)
+             108:    107(ptr) Variable Uniform
+             109:     13(int) Constant 0
+             110:             TypePointer Uniform 14(ivec3)
+             119:     13(int) Constant 3
+             120:             TypePointer Uniform 21(ivec3)
+             129:     13(int) Constant 1
+             132:     20(int) Constant 0
+             133:   21(ivec3) ConstantComposite 132 132 132
+             135:    6(float) Constant 0
+             136:    6(float) Constant 1065353216
+             137:    7(fvec3) ConstantComposite 135 135 135
+             138:    7(fvec3) ConstantComposite 136 136 136
+             146:     13(int) Constant 4
+             147:             TypePointer Uniform 35(fvec3)
+             167:   14(ivec3) ConstantComposite 109 109 109
+             168:   14(ivec3) ConstantComposite 129 129 129
+             176:     13(int) Constant 2
+             177:             TypePointer Uniform 7(fvec3)
+             213:     20(int) Constant 1
+             214:   21(ivec3) ConstantComposite 213 213 213
+             256:   34(float) Constant 0 0
+             257:   35(fvec3) ConstantComposite 256 256 256
+             283:   34(float) Constant 0 1072693248
+             284:   35(fvec3) ConstantComposite 283 283 283
+             468:     13(int) Constant 5
+             469:             TypePointer Uniform 13(int)
+             475:     13(int) Constant 6
+             476:             TypePointer Uniform 20(int)
+             483:     13(int) Constant 8
+             489:     13(int) Constant 9
+             490:             TypePointer Uniform 34(float)
+             509:     13(int) Constant 7
+             510:             TypePointer Uniform 6(float)
+             569:             TypePointer Function 13(int)
+             572:             TypeVector 6(float) 4
+             573:             TypePointer Function 572(fvec4)
+             575:    6(float) Constant 1080452710
+  581(PS_OUTPUT):             TypeStruct 572(fvec4)
+             582:             TypePointer Function 581(PS_OUTPUT)
+             586:             TypePointer Output 572(fvec4)
+      587(Color):    586(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-        252(r00):      8(ptr) Variable Function
-        255(r01):      8(ptr) Variable Function
-        258(r02):      8(ptr) Variable Function
-        261(r03):      8(ptr) Variable Function
-        264(r10):     15(ptr) Variable Function
-        267(r11):     15(ptr) Variable Function
-        270(r12):     15(ptr) Variable Function
-        273(r13):     15(ptr) Variable Function
-        276(r20):     22(ptr) Variable Function
-        279(r21):     22(ptr) Variable Function
-        282(r22):     22(ptr) Variable Function
-        285(r23):     22(ptr) Variable Function
-        288(r30):     29(ptr) Variable Function
-        291(r31):     29(ptr) Variable Function
-        294(r32):     29(ptr) Variable Function
-        297(r33):     29(ptr) Variable Function
-        300(r40):     36(ptr) Variable Function
-        303(r41):     36(ptr) Variable Function
-        306(r42):     36(ptr) Variable Function
-        309(r43):     36(ptr) Variable Function
-         459(c1):    458(ptr) Variable Function
-         461(c2):    458(ptr) Variable Function
-     464(outval):    463(ptr) Variable Function
-      473(psout):    472(ptr) Variable Function
-             253:   14(ivec3) Load 107(i3)
-             254:    7(fvec3) ConvertSToF 253
-                              Store 252(r00) 254
-             256:   28(bvec3) Load 123(b3)
-             257:    7(fvec3) Select 256 128 127
-                              Store 255(r01) 257
-             259:   21(ivec3) Load 115(u3)
-             260:    7(fvec3) ConvertUToF 259
-                              Store 258(r02) 260
-             262:   35(fvec3) Load 135(d3)
-             263:    7(fvec3) FConvert 262
-                              Store 261(r03) 263
-             265:   28(bvec3) Load 123(b3)
-             266:   14(ivec3) Select 265 152 151
-                              Store 264(r10) 266
-             268:   21(ivec3) Load 115(u3)
-             269:   14(ivec3) Bitcast 268
-                              Store 267(r11) 269
-             271:    7(fvec3) Load 159(f3)
-             272:   14(ivec3) ConvertFToS 271
-                              Store 270(r12) 272
-             274:   35(fvec3) Load 135(d3)
-             275:   14(ivec3) ConvertFToS 274
-                              Store 273(r13) 275
-             277:   28(bvec3) Load 123(b3)
-             278:   21(ivec3) Select 277 188 187
-                              Store 276(r20) 278
-             280:   14(ivec3) Load 107(i3)
-             281:   21(ivec3) Bitcast 280
-                              Store 279(r21) 281
-             283:    7(fvec3) Load 159(f3)
-             284:   21(ivec3) ConvertFToU 283
-                              Store 282(r22) 284
-             286:   35(fvec3) Load 135(d3)
-             287:   21(ivec3) ConvertFToU 286
-                              Store 285(r23) 287
-             289:   14(ivec3) Load 107(i3)
-             290:   28(bvec3) INotEqual 289 187
-                              Store 288(r30) 290
-             292:   21(ivec3) Load 115(u3)
-             293:   28(bvec3) INotEqual 292 187
-                              Store 291(r31) 293
-             295:    7(fvec3) Load 159(f3)
-             296:   28(bvec3) FOrdNotEqual 295 127
-                              Store 294(r32) 296
-             298:   35(fvec3) Load 135(d3)
-             299:   28(bvec3) FOrdNotEqual 298 220
-                              Store 297(r33) 299
-             301:   14(ivec3) Load 107(i3)
-             302:   35(fvec3) ConvertSToF 301
-                              Store 300(r40) 302
-             304:   21(ivec3) Load 115(u3)
-             305:   35(fvec3) ConvertUToF 304
-                              Store 303(r41) 305
-             307:    7(fvec3) Load 159(f3)
-             308:   35(fvec3) FConvert 307
-                              Store 306(r42) 308
-             310:   28(bvec3) Load 123(b3)
-             311:   35(fvec3) Select 310 240 220
-                              Store 309(r43) 311
-             312:   14(ivec3) Load 107(i3)
-             313:    7(fvec3) ConvertSToF 312
-             314:    7(fvec3) Load 252(r00)
-             315:    7(fvec3) FMul 314 313
-                              Store 252(r00) 315
-             316:   28(bvec3) Load 123(b3)
-             317:    7(fvec3) Select 316 128 127
-             318:    7(fvec3) Load 255(r01)
-             319:    7(fvec3) FMul 318 317
-                              Store 255(r01) 319
-             320:   21(ivec3) Load 115(u3)
-             321:    7(fvec3) ConvertUToF 320
-             322:    7(fvec3) Load 258(r02)
-             323:    7(fvec3) FMul 322 321
-                              Store 258(r02) 323
-             324:   35(fvec3) Load 135(d3)
-             325:    7(fvec3) FConvert 324
-             326:    7(fvec3) Load 261(r03)
-             327:    7(fvec3) FMul 326 325
-                              Store 261(r03) 327
-             328:   28(bvec3) Load 123(b3)
-             329:   14(ivec3) Select 328 152 151
-             330:   14(ivec3) Load 264(r10)
-             331:   14(ivec3) IMul 330 329
-                              Store 264(r10) 331
-             332:   21(ivec3) Load 115(u3)
-             333:   14(ivec3) Bitcast 332
-             334:   14(ivec3) Load 267(r11)
-             335:   14(ivec3) IMul 334 333
-                              Store 267(r11) 335
-             336:    7(fvec3) Load 159(f3)
-             337:   14(ivec3) ConvertFToS 336
-             338:   14(ivec3) Load 270(r12)
-             339:   14(ivec3) IMul 338 337
-                              Store 270(r12) 339
-             340:   35(fvec3) Load 135(d3)
-             341:   14(ivec3) ConvertFToS 340
-             342:   14(ivec3) Load 273(r13)
-             343:   14(ivec3) IMul 342 341
-                              Store 273(r13) 343
-             344:   28(bvec3) Load 123(b3)
-             345:   21(ivec3) Select 344 188 187
-             346:   21(ivec3) Load 276(r20)
-             347:   21(ivec3) IMul 346 345
-                              Store 276(r20) 347
-             348:   14(ivec3) Load 107(i3)
-             349:   21(ivec3) Bitcast 348
-             350:   21(ivec3) Load 279(r21)
-             351:   21(ivec3) IMul 350 349
-                              Store 279(r21) 351
-             352:    7(fvec3) Load 159(f3)
-             353:   21(ivec3) ConvertFToU 352
-             354:   21(ivec3) Load 282(r22)
-             355:   21(ivec3) IMul 354 353
-                              Store 282(r22) 355
-             356:   35(fvec3) Load 135(d3)
-             357:   21(ivec3) ConvertFToU 356
-             358:   21(ivec3) Load 285(r23)
-             359:   21(ivec3) IMul 358 357
-                              Store 285(r23) 359
-             360:   14(ivec3) Load 107(i3)
-             361:   35(fvec3) ConvertSToF 360
-             362:   35(fvec3) Load 300(r40)
-             363:   35(fvec3) FMul 362 361
-                              Store 300(r40) 363
-             364:   21(ivec3) Load 115(u3)
-             365:   35(fvec3) ConvertUToF 364
-             366:   35(fvec3) Load 303(r41)
-             367:   35(fvec3) FMul 366 365
-                              Store 303(r41) 367
-             368:    7(fvec3) Load 159(f3)
-             369:   35(fvec3) FConvert 368
-             370:   35(fvec3) Load 306(r42)
-             371:   35(fvec3) FMul 370 369
-                              Store 306(r42) 371
-             372:   28(bvec3) Load 123(b3)
-             373:   35(fvec3) Select 372 240 220
-             374:   35(fvec3) Load 309(r43)
-             375:   35(fvec3) FMul 374 373
-                              Store 309(r43) 375
-             378:     13(int) Load 377(is)
-             379:    6(float) ConvertSToF 378
-             380:    7(fvec3) Load 252(r00)
-             381:    7(fvec3) VectorTimesScalar 380 379
-                              Store 252(r00) 381
-             384:    27(bool) Load 383(bs)
-             385:    6(float) Select 384 126 125
-             386:    7(fvec3) Load 255(r01)
-             387:    7(fvec3) VectorTimesScalar 386 385
-                              Store 255(r01) 387
-             390:     20(int) Load 389(us)
-             391:    6(float) ConvertUToF 390
-             392:    7(fvec3) Load 258(r02)
-             393:    7(fvec3) VectorTimesScalar 392 391
-                              Store 258(r02) 393
-             396:   34(float) Load 395(ds)
-             397:    6(float) FConvert 396
-             398:    7(fvec3) Load 261(r03)
-             399:    7(fvec3) VectorTimesScalar 398 397
-                              Store 261(r03) 399
-             400:    27(bool) Load 383(bs)
-             401:     13(int) Select 400 150 149
-             402:   14(ivec3) Load 264(r10)
-             403:   14(ivec3) CompositeConstruct 401 401 401
-             404:   14(ivec3) IMul 402 403
-                              Store 264(r10) 404
-             405:     20(int) Load 389(us)
-             406:     13(int) Bitcast 405
-             407:   14(ivec3) Load 267(r11)
-             408:   14(ivec3) CompositeConstruct 406 406 406
-             409:   14(ivec3) IMul 407 408
-                              Store 267(r11) 409
-             412:    6(float) Load 411(fs)
-             413:     13(int) ConvertFToS 412
-             414:   14(ivec3) Load 270(r12)
-             415:   14(ivec3) CompositeConstruct 413 413 413
-             416:   14(ivec3) IMul 414 415
-                              Store 270(r12) 416
-             417:   34(float) Load 395(ds)
-             418:     13(int) ConvertFToS 417
-             419:   14(ivec3) Load 273(r13)
-             420:   14(ivec3) CompositeConstruct 418 418 418
-             421:   14(ivec3) IMul 419 420
-                              Store 273(r13) 421
-             422:    27(bool) Load 383(bs)
-             423:     20(int) Select 422 186 185
-             424:   21(ivec3) Load 276(r20)
-             425:   21(ivec3) CompositeConstruct 423 423 423
-             426:   21(ivec3) IMul 424 425
-                              Store 276(r20) 426
-             427:     13(int) Load 377(is)
-             428:     20(int) Bitcast 427
-             429:   21(ivec3) Load 279(r21)
-             430:   21(ivec3) CompositeConstruct 428 428 428
-             431:   21(ivec3) IMul 429 430
-                              Store 279(r21) 431
-             432:    6(float) Load 411(fs)
-             433:     20(int) ConvertFToU 432
-             434:   21(ivec3) Load 282(r22)
-             435:   21(ivec3) CompositeConstruct 433 433 433
-             436:   21(ivec3) IMul 434 435
-                              Store 282(r22) 436
-             437:   34(float) Load 395(ds)
-             438:     20(int) ConvertFToU 437
-             439:   21(ivec3) Load 285(r23)
-             440:   21(ivec3) CompositeConstruct 438 438 438
-             441:   21(ivec3) IMul 439 440
-                              Store 285(r23) 441
-             442:     13(int) Load 377(is)
-             443:   34(float) ConvertSToF 442
-             444:   35(fvec3) Load 300(r40)
-             445:   35(fvec3) VectorTimesScalar 444 443
-                              Store 300(r40) 445
-             446:     20(int) Load 389(us)
-             447:   34(float) ConvertUToF 446
-             448:   35(fvec3) Load 303(r41)
-             449:   35(fvec3) VectorTimesScalar 448 447
-                              Store 303(r41) 449
-             450:    6(float) Load 411(fs)
-             451:   34(float) FConvert 450
-             452:   35(fvec3) Load 306(r42)
-             453:   35(fvec3) VectorTimesScalar 452 451
-                              Store 306(r42) 453
-             454:    27(bool) Load 383(bs)
-             455:   34(float) Select 454 239 219
-             456:   35(fvec3) Load 309(r43)
-             457:   35(fvec3) VectorTimesScalar 456 455
-                              Store 309(r43) 457
-                              Store 459(c1) 460
-                              Store 461(c2) 460
-             466:     13(int) Load 459(c1)
-             467:    6(float) ConvertSToF 466
-             468:     13(int) Load 461(c2)
-             469:    6(float) ConvertSToF 468
-             470:  462(fvec4) CompositeConstruct 465 465 467 469
-                              Store 464(outval) 470
-             474:  462(fvec4) Load 464(outval)
-             475:    463(ptr) AccessChain 473(psout) 149
-                              Store 475 474
-             478:    463(ptr) AccessChain 473(psout) 149
-             479:  462(fvec4) Load 478
-                              Store 477(Color) 479
+        300(r00):      8(ptr) Variable Function
+        304(r01):      8(ptr) Variable Function
+        309(r02):      8(ptr) Variable Function
+        313(r03):      8(ptr) Variable Function
+        317(r10):     15(ptr) Variable Function
+        322(r11):     15(ptr) Variable Function
+        326(r12):     15(ptr) Variable Function
+        330(r13):     15(ptr) Variable Function
+        334(r20):     22(ptr) Variable Function
+        339(r21):     22(ptr) Variable Function
+        343(r22):     22(ptr) Variable Function
+        347(r23):     22(ptr) Variable Function
+        351(r30):     29(ptr) Variable Function
+        355(r31):     29(ptr) Variable Function
+        359(r32):     29(ptr) Variable Function
+        363(r33):     29(ptr) Variable Function
+        367(r40):     36(ptr) Variable Function
+        371(r41):     36(ptr) Variable Function
+        375(r42):     36(ptr) Variable Function
+        379(r43):     36(ptr) Variable Function
+         570(c1):    569(ptr) Variable Function
+         571(c2):    569(ptr) Variable Function
+     574(outval):    573(ptr) Variable Function
+      583(psout):    582(ptr) Variable Function
+             301:    110(ptr) AccessChain 108 109
+             302:   14(ivec3) Load 301
+             303:    7(fvec3) ConvertSToF 302
+                              Store 300(r00) 303
+             305:    120(ptr) AccessChain 108 129
+             306:   21(ivec3) Load 305
+             307:   28(bvec3) INotEqual 306 133
+             308:    7(fvec3) Select 307 138 137
+                              Store 304(r01) 308
+             310:    120(ptr) AccessChain 108 119
+             311:   21(ivec3) Load 310
+             312:    7(fvec3) ConvertUToF 311
+                              Store 309(r02) 312
+             314:    147(ptr) AccessChain 108 146
+             315:   35(fvec3) Load 314
+             316:    7(fvec3) FConvert 315
+                              Store 313(r03) 316
+             318:    120(ptr) AccessChain 108 129
+             319:   21(ivec3) Load 318
+             320:   28(bvec3) INotEqual 319 133
+             321:   14(ivec3) Select 320 168 167
+                              Store 317(r10) 321
+             323:    120(ptr) AccessChain 108 119
+             324:   21(ivec3) Load 323
+             325:   14(ivec3) Bitcast 324
+                              Store 322(r11) 325
+             327:    177(ptr) AccessChain 108 176
+             328:    7(fvec3) Load 327
+             329:   14(ivec3) ConvertFToS 328
+                              Store 326(r12) 329
+             331:    147(ptr) AccessChain 108 146
+             332:   35(fvec3) Load 331
+             333:   14(ivec3) ConvertFToS 332
+                              Store 330(r13) 333
+             335:    120(ptr) AccessChain 108 129
+             336:   21(ivec3) Load 335
+             337:   28(bvec3) INotEqual 336 133
+             338:   21(ivec3) Select 337 214 133
+                              Store 334(r20) 338
+             340:    110(ptr) AccessChain 108 109
+             341:   14(ivec3) Load 340
+             342:   21(ivec3) Bitcast 341
+                              Store 339(r21) 342
+             344:    177(ptr) AccessChain 108 176
+             345:    7(fvec3) Load 344
+             346:   21(ivec3) ConvertFToU 345
+                              Store 343(r22) 346
+             348:    147(ptr) AccessChain 108 146
+             349:   35(fvec3) Load 348
+             350:   21(ivec3) ConvertFToU 349
+                              Store 347(r23) 350
+             352:    110(ptr) AccessChain 108 109
+             353:   14(ivec3) Load 352
+             354:   28(bvec3) INotEqual 353 133
+                              Store 351(r30) 354
+             356:    120(ptr) AccessChain 108 119
+             357:   21(ivec3) Load 356
+             358:   28(bvec3) INotEqual 357 133
+                              Store 355(r31) 358
+             360:    177(ptr) AccessChain 108 176
+             361:    7(fvec3) Load 360
+             362:   28(bvec3) FOrdNotEqual 361 137
+                              Store 359(r32) 362
+             364:    147(ptr) AccessChain 108 146
+             365:   35(fvec3) Load 364
+             366:   28(bvec3) FOrdNotEqual 365 257
+                              Store 363(r33) 366
+             368:    110(ptr) AccessChain 108 109
+             369:   14(ivec3) Load 368
+             370:   35(fvec3) ConvertSToF 369
+                              Store 367(r40) 370
+             372:    120(ptr) AccessChain 108 119
+             373:   21(ivec3) Load 372
+             374:   35(fvec3) ConvertUToF 373
+                              Store 371(r41) 374
+             376:    177(ptr) AccessChain 108 176
+             377:    7(fvec3) Load 376
+             378:   35(fvec3) FConvert 377
+                              Store 375(r42) 378
+             380:    120(ptr) AccessChain 108 129
+             381:   21(ivec3) Load 380
+             382:   28(bvec3) INotEqual 381 133
+             383:   35(fvec3) Select 382 284 257
+                              Store 379(r43) 383
+             384:    110(ptr) AccessChain 108 109
+             385:   14(ivec3) Load 384
+             386:    7(fvec3) ConvertSToF 385
+             387:    7(fvec3) Load 300(r00)
+             388:    7(fvec3) FMul 387 386
+                              Store 300(r00) 388
+             389:    120(ptr) AccessChain 108 129
+             390:   21(ivec3) Load 389
+             391:   28(bvec3) INotEqual 390 133
+             392:    7(fvec3) Select 391 138 137
+             393:    7(fvec3) Load 304(r01)
+             394:    7(fvec3) FMul 393 392
+                              Store 304(r01) 394
+             395:    120(ptr) AccessChain 108 119
+             396:   21(ivec3) Load 395
+             397:    7(fvec3) ConvertUToF 396
+             398:    7(fvec3) Load 309(r02)
+             399:    7(fvec3) FMul 398 397
+                              Store 309(r02) 399
+             400:    147(ptr) AccessChain 108 146
+             401:   35(fvec3) Load 400
+             402:    7(fvec3) FConvert 401
+             403:    7(fvec3) Load 313(r03)
+             404:    7(fvec3) FMul 403 402
+                              Store 313(r03) 404
+             405:    120(ptr) AccessChain 108 129
+             406:   21(ivec3) Load 405
+             407:   28(bvec3) INotEqual 406 133
+             408:   14(ivec3) Select 407 168 167
+             409:   14(ivec3) Load 317(r10)
+             410:   14(ivec3) IMul 409 408
+                              Store 317(r10) 410
+             411:    120(ptr) AccessChain 108 119
+             412:   21(ivec3) Load 411
+             413:   14(ivec3) Bitcast 412
+             414:   14(ivec3) Load 322(r11)
+             415:   14(ivec3) IMul 414 413
+                              Store 322(r11) 415
+             416:    177(ptr) AccessChain 108 176
+             417:    7(fvec3) Load 416
+             418:   14(ivec3) ConvertFToS 417
+             419:   14(ivec3) Load 326(r12)
+             420:   14(ivec3) IMul 419 418
+                              Store 326(r12) 420
+             421:    147(ptr) AccessChain 108 146
+             422:   35(fvec3) Load 421
+             423:   14(ivec3) ConvertFToS 422
+             424:   14(ivec3) Load 330(r13)
+             425:   14(ivec3) IMul 424 423
+                              Store 330(r13) 425
+             426:    120(ptr) AccessChain 108 129
+             427:   21(ivec3) Load 426
+             428:   28(bvec3) INotEqual 427 133
+             429:   21(ivec3) Select 428 214 133
+             430:   21(ivec3) Load 334(r20)
+             431:   21(ivec3) IMul 430 429
+                              Store 334(r20) 431
+             432:    110(ptr) AccessChain 108 109
+             433:   14(ivec3) Load 432
+             434:   21(ivec3) Bitcast 433
+             435:   21(ivec3) Load 339(r21)
+             436:   21(ivec3) IMul 435 434
+                              Store 339(r21) 436
+             437:    177(ptr) AccessChain 108 176
+             438:    7(fvec3) Load 437
+             439:   21(ivec3) ConvertFToU 438
+             440:   21(ivec3) Load 343(r22)
+             441:   21(ivec3) IMul 440 439
+                              Store 343(r22) 441
+             442:    147(ptr) AccessChain 108 146
+             443:   35(fvec3) Load 442
+             444:   21(ivec3) ConvertFToU 443
+             445:   21(ivec3) Load 347(r23)
+             446:   21(ivec3) IMul 445 444
+                              Store 347(r23) 446
+             447:    110(ptr) AccessChain 108 109
+             448:   14(ivec3) Load 447
+             449:   35(fvec3) ConvertSToF 448
+             450:   35(fvec3) Load 367(r40)
+             451:   35(fvec3) FMul 450 449
+                              Store 367(r40) 451
+             452:    120(ptr) AccessChain 108 119
+             453:   21(ivec3) Load 452
+             454:   35(fvec3) ConvertUToF 453
+             455:   35(fvec3) Load 371(r41)
+             456:   35(fvec3) FMul 455 454
+                              Store 371(r41) 456
+             457:    177(ptr) AccessChain 108 176
+             458:    7(fvec3) Load 457
+             459:   35(fvec3) FConvert 458
+             460:   35(fvec3) Load 375(r42)
+             461:   35(fvec3) FMul 460 459
+                              Store 375(r42) 461
+             462:    120(ptr) AccessChain 108 129
+             463:   21(ivec3) Load 462
+             464:   28(bvec3) INotEqual 463 133
+             465:   35(fvec3) Select 464 284 257
+             466:   35(fvec3) Load 379(r43)
+             467:   35(fvec3) FMul 466 465
+                              Store 379(r43) 467
+             470:    469(ptr) AccessChain 108 468
+             471:     13(int) Load 470
+             472:    6(float) ConvertSToF 471
+             473:    7(fvec3) Load 300(r00)
+             474:    7(fvec3) VectorTimesScalar 473 472
+                              Store 300(r00) 474
+             477:    476(ptr) AccessChain 108 475
+             478:     20(int) Load 477
+             479:    27(bool) INotEqual 478 132
+             480:    6(float) Select 479 136 135
+             481:    7(fvec3) Load 304(r01)
+             482:    7(fvec3) VectorTimesScalar 481 480
+                              Store 304(r01) 482
+             484:    476(ptr) AccessChain 108 483
+             485:     20(int) Load 484
+             486:    6(float) ConvertUToF 485
+             487:    7(fvec3) Load 309(r02)
+             488:    7(fvec3) VectorTimesScalar 487 486
+                              Store 309(r02) 488
+             491:    490(ptr) AccessChain 108 489
+             492:   34(float) Load 491
+             493:    6(float) FConvert 492
+             494:    7(fvec3) Load 313(r03)
+             495:    7(fvec3) VectorTimesScalar 494 493
+                              Store 313(r03) 495
+             496:    476(ptr) AccessChain 108 475
+             497:     20(int) Load 496
+             498:    27(bool) INotEqual 497 132
+             499:     13(int) Select 498 129 109
+             500:   14(ivec3) Load 317(r10)
+             501:   14(ivec3) CompositeConstruct 499 499 499
+             502:   14(ivec3) IMul 500 501
+                              Store 317(r10) 502
+             503:    476(ptr) AccessChain 108 483
+             504:     20(int) Load 503
+             505:     13(int) Bitcast 504
+             506:   14(ivec3) Load 322(r11)
+             507:   14(ivec3) CompositeConstruct 505 505 505
+             508:   14(ivec3) IMul 506 507
+                              Store 322(r11) 508
+             511:    510(ptr) AccessChain 108 509
+             512:    6(float) Load 511
+             513:     13(int) ConvertFToS 512
+             514:   14(ivec3) Load 326(r12)
+             515:   14(ivec3) CompositeConstruct 513 513 513
+             516:   14(ivec3) IMul 514 515
+                              Store 326(r12) 516
+             517:    490(ptr) AccessChain 108 489
+             518:   34(float) Load 517
+             519:     13(int) ConvertFToS 518
+             520:   14(ivec3) Load 330(r13)
+             521:   14(ivec3) CompositeConstruct 519 519 519
+             522:   14(ivec3) IMul 520 521
+                              Store 330(r13) 522
+             523:    476(ptr) AccessChain 108 475
+             524:     20(int) Load 523
+             525:    27(bool) INotEqual 524 132
+             526:     20(int) Select 525 213 132
+             527:   21(ivec3) Load 334(r20)
+             528:   21(ivec3) CompositeConstruct 526 526 526
+             529:   21(ivec3) IMul 527 528
+                              Store 334(r20) 529
+             530:    469(ptr) AccessChain 108 468
+             531:     13(int) Load 530
+             532:     20(int) Bitcast 531
+             533:   21(ivec3) Load 339(r21)
+             534:   21(ivec3) CompositeConstruct 532 532 532
+             535:   21(ivec3) IMul 533 534
+                              Store 339(r21) 535
+             536:    510(ptr) AccessChain 108 509
+             537:    6(float) Load 536
+             538:     20(int) ConvertFToU 537
+             539:   21(ivec3) Load 343(r22)
+             540:   21(ivec3) CompositeConstruct 538 538 538
+             541:   21(ivec3) IMul 539 540
+                              Store 343(r22) 541
+             542:    490(ptr) AccessChain 108 489
+             543:   34(float) Load 542
+             544:     20(int) ConvertFToU 543
+             545:   21(ivec3) Load 347(r23)
+             546:   21(ivec3) CompositeConstruct 544 544 544
+             547:   21(ivec3) IMul 545 546
+                              Store 347(r23) 547
+             548:    469(ptr) AccessChain 108 468
+             549:     13(int) Load 548
+             550:   34(float) ConvertSToF 549
+             551:   35(fvec3) Load 367(r40)
+             552:   35(fvec3) VectorTimesScalar 551 550
+                              Store 367(r40) 552
+             553:    476(ptr) AccessChain 108 483
+             554:     20(int) Load 553
+             555:   34(float) ConvertUToF 554
+             556:   35(fvec3) Load 371(r41)
+             557:   35(fvec3) VectorTimesScalar 556 555
+                              Store 371(r41) 557
+             558:    510(ptr) AccessChain 108 509
+             559:    6(float) Load 558
+             560:   34(float) FConvert 559
+             561:   35(fvec3) Load 375(r42)
+             562:   35(fvec3) VectorTimesScalar 561 560
+                              Store 375(r42) 562
+             563:    476(ptr) AccessChain 108 475
+             564:     20(int) Load 563
+             565:    27(bool) INotEqual 564 132
+             566:   34(float) Select 565 283 256
+             567:   35(fvec3) Load 379(r43)
+             568:   35(fvec3) VectorTimesScalar 567 566
+                              Store 379(r43) 568
+                              Store 570(c1) 119
+                              Store 571(c2) 119
+             576:     13(int) Load 570(c1)
+             577:    6(float) ConvertSToF 576
+             578:     13(int) Load 571(c2)
+             579:    6(float) ConvertSToF 578
+             580:  572(fvec4) CompositeConstruct 575 575 577 579
+                              Store 574(outval) 580
+             584:  572(fvec4) Load 574(outval)
+             585:    573(ptr) AccessChain 583(psout) 109
+                              Store 585 584
+             588:    573(ptr) AccessChain 583(psout) 109
+             589:  572(fvec4) Load 588
+                              Store 587(Color) 589
                               Return
                               FunctionEnd
   11(Fn_F3(vf3;):           2 Function None 9
@@ -1510,200 +2120,248 @@ gl_FragCoord origin is upper left
 43(Fn_R_F3I(vf3;):    7(fvec3) Function None 41
            42(p):      8(ptr) FunctionParameter
               44:             Label
-             108:   14(ivec3) Load 107(i3)
-             109:    7(fvec3) ConvertSToF 108
-                              Store 42(p) 109
-             110:   14(ivec3) Load 107(i3)
-             111:    7(fvec3) ConvertSToF 110
-                              ReturnValue 111
+             111:    110(ptr) AccessChain 108 109
+             112:   14(ivec3) Load 111
+             113:    7(fvec3) ConvertSToF 112
+                              Store 42(p) 113
+             114:    110(ptr) AccessChain 108 109
+             115:   14(ivec3) Load 114
+             116:    7(fvec3) ConvertSToF 115
+                              ReturnValue 116
                               FunctionEnd
 46(Fn_R_F3U(vf3;):    7(fvec3) Function None 41
            45(p):      8(ptr) FunctionParameter
               47:             Label
-             116:   21(ivec3) Load 115(u3)
-             117:    7(fvec3) ConvertUToF 116
-                              Store 45(p) 117
-             118:   21(ivec3) Load 115(u3)
-             119:    7(fvec3) ConvertUToF 118
-                              ReturnValue 119
+             121:    120(ptr) AccessChain 108 119
+             122:   21(ivec3) Load 121
+             123:    7(fvec3) ConvertUToF 122
+                              Store 45(p) 123
+             124:    120(ptr) AccessChain 108 119
+             125:   21(ivec3) Load 124
+             126:    7(fvec3) ConvertUToF 125
+                              ReturnValue 126
                               FunctionEnd
 49(Fn_R_F3B(vf3;):    7(fvec3) Function None 41
            48(p):      8(ptr) FunctionParameter
               50:             Label
-             124:   28(bvec3) Load 123(b3)
-             129:    7(fvec3) Select 124 128 127
-                              Store 48(p) 129
-             130:   28(bvec3) Load 123(b3)
-             131:    7(fvec3) Select 130 128 127
-                              ReturnValue 131
+             130:    120(ptr) AccessChain 108 129
+             131:   21(ivec3) Load 130
+             134:   28(bvec3) INotEqual 131 133
+             139:    7(fvec3) Select 134 138 137
+                              Store 48(p) 139
+             140:    120(ptr) AccessChain 108 129
+             141:   21(ivec3) Load 140
+             142:   28(bvec3) INotEqual 141 133
+             143:    7(fvec3) Select 142 138 137
+                              ReturnValue 143
                               FunctionEnd
 52(Fn_R_F3D(vf3;):    7(fvec3) Function None 41
            51(p):      8(ptr) FunctionParameter
               53:             Label
-             136:   35(fvec3) Load 135(d3)
-             137:    7(fvec3) FConvert 136
-                              Store 51(p) 137
-             138:   35(fvec3) Load 135(d3)
-             139:    7(fvec3) FConvert 138
-                              ReturnValue 139
+             148:    147(ptr) AccessChain 108 146
+             149:   35(fvec3) Load 148
+             150:    7(fvec3) FConvert 149
+                              Store 51(p) 150
+             151:    147(ptr) AccessChain 108 146
+             152:   35(fvec3) Load 151
+             153:    7(fvec3) FConvert 152
+                              ReturnValue 153
                               FunctionEnd
 56(Fn_R_I3U(vi3;):   14(ivec3) Function None 54
            55(p):     15(ptr) FunctionParameter
               57:             Label
-             142:   21(ivec3) Load 115(u3)
-             143:   14(ivec3) Bitcast 142
-                              Store 55(p) 143
-             144:   21(ivec3) Load 115(u3)
-             145:   14(ivec3) Bitcast 144
-                              ReturnValue 145
+             156:    120(ptr) AccessChain 108 119
+             157:   21(ivec3) Load 156
+             158:   14(ivec3) Bitcast 157
+                              Store 55(p) 158
+             159:    120(ptr) AccessChain 108 119
+             160:   21(ivec3) Load 159
+             161:   14(ivec3) Bitcast 160
+                              ReturnValue 161
                               FunctionEnd
 59(Fn_R_I3B(vi3;):   14(ivec3) Function None 54
            58(p):     15(ptr) FunctionParameter
               60:             Label
-             148:   28(bvec3) Load 123(b3)
-             153:   14(ivec3) Select 148 152 151
-                              Store 58(p) 153
-             154:   28(bvec3) Load 123(b3)
-             155:   14(ivec3) Select 154 152 151
-                              ReturnValue 155
+             164:    120(ptr) AccessChain 108 129
+             165:   21(ivec3) Load 164
+             166:   28(bvec3) INotEqual 165 133
+             169:   14(ivec3) Select 166 168 167
+                              Store 58(p) 169
+             170:    120(ptr) AccessChain 108 129
+             171:   21(ivec3) Load 170
+             172:   28(bvec3) INotEqual 171 133
+             173:   14(ivec3) Select 172 168 167
+                              ReturnValue 173
                               FunctionEnd
 62(Fn_R_I3F(vi3;):   14(ivec3) Function None 54
            61(p):     15(ptr) FunctionParameter
               63:             Label
-             160:    7(fvec3) Load 159(f3)
-             161:   14(ivec3) ConvertFToS 160
-                              Store 61(p) 161
-             162:    7(fvec3) Load 159(f3)
-             163:   14(ivec3) ConvertFToS 162
-                              ReturnValue 163
+             178:    177(ptr) AccessChain 108 176
+             179:    7(fvec3) Load 178
+             180:   14(ivec3) ConvertFToS 179
+                              Store 61(p) 180
+             181:    177(ptr) AccessChain 108 176
+             182:    7(fvec3) Load 181
+             183:   14(ivec3) ConvertFToS 182
+                              ReturnValue 183
                               FunctionEnd
 65(Fn_R_I3D(vi3;):   14(ivec3) Function None 54
            64(p):     15(ptr) FunctionParameter
               66:             Label
-             166:   35(fvec3) Load 135(d3)
-             167:   14(ivec3) ConvertFToS 166
-                              Store 64(p) 167
-             168:   35(fvec3) Load 135(d3)
-             169:   14(ivec3) ConvertFToS 168
-                              ReturnValue 169
+             186:    147(ptr) AccessChain 108 146
+             187:   35(fvec3) Load 186
+             188:   14(ivec3) ConvertFToS 187
+                              Store 64(p) 188
+             189:    147(ptr) AccessChain 108 146
+             190:   35(fvec3) Load 189
+             191:   14(ivec3) ConvertFToS 190
+                              ReturnValue 191
                               FunctionEnd
 69(Fn_R_U3I(vu3;):   21(ivec3) Function None 67
            68(p):     22(ptr) FunctionParameter
               70:             Label
-             172:   14(ivec3) Load 107(i3)
-             173:   21(ivec3) Bitcast 172
-                              Store 68(p) 173
-             174:   14(ivec3) Load 107(i3)
-             175:   21(ivec3) Bitcast 174
-                              ReturnValue 175
+             194:    110(ptr) AccessChain 108 109
+             195:   14(ivec3) Load 194
+             196:   21(ivec3) Bitcast 195
+                              Store 68(p) 196
+             197:    110(ptr) AccessChain 108 109
+             198:   14(ivec3) Load 197
+             199:   21(ivec3) Bitcast 198
+                              ReturnValue 199
                               FunctionEnd
 72(Fn_R_U3F(vu3;):   21(ivec3) Function None 67
            71(p):     22(ptr) FunctionParameter
               73:             Label
-             178:    7(fvec3) Load 159(f3)
-             179:   21(ivec3) ConvertFToU 178
-                              Store 71(p) 179
-             180:    7(fvec3) Load 159(f3)
-             181:   21(ivec3) ConvertFToU 180
-                              ReturnValue 181
+             202:    177(ptr) AccessChain 108 176
+             203:    7(fvec3) Load 202
+             204:   21(ivec3) ConvertFToU 203
+                              Store 71(p) 204
+             205:    177(ptr) AccessChain 108 176
+             206:    7(fvec3) Load 205
+             207:   21(ivec3) ConvertFToU 206
+                              ReturnValue 207
                               FunctionEnd
 75(Fn_R_U3B(vu3;):   21(ivec3) Function None 67
            74(p):     22(ptr) FunctionParameter
               76:             Label
-             184:   28(bvec3) Load 123(b3)
-             189:   21(ivec3) Select 184 188 187
-                              Store 74(p) 189
-             190:   28(bvec3) Load 123(b3)
-             191:   21(ivec3) Select 190 188 187
-                              ReturnValue 191
+             210:    120(ptr) AccessChain 108 129
+             211:   21(ivec3) Load 210
+             212:   28(bvec3) INotEqual 211 133
+             215:   21(ivec3) Select 212 214 133
+                              Store 74(p) 215
+             216:    120(ptr) AccessChain 108 129
+             217:   21(ivec3) Load 216
+             218:   28(bvec3) INotEqual 217 133
+             219:   21(ivec3) Select 218 214 133
+                              ReturnValue 219
                               FunctionEnd
 78(Fn_R_U3D(vu3;):   21(ivec3) Function None 67
            77(p):     22(ptr) FunctionParameter
               79:             Label
-             194:   35(fvec3) Load 135(d3)
-             195:   21(ivec3) ConvertFToU 194
-                              Store 77(p) 195
-             196:   35(fvec3) Load 135(d3)
-             197:   21(ivec3) ConvertFToU 196
-                              ReturnValue 197
+             222:    147(ptr) AccessChain 108 146
+             223:   35(fvec3) Load 222
+             224:   21(ivec3) ConvertFToU 223
+                              Store 77(p) 224
+             225:    147(ptr) AccessChain 108 146
+             226:   35(fvec3) Load 225
+             227:   21(ivec3) ConvertFToU 226
+                              ReturnValue 227
                               FunctionEnd
 82(Fn_R_B3I(vb3;):   28(bvec3) Function None 80
            81(p):     29(ptr) FunctionParameter
               83:             Label
-             200:   14(ivec3) Load 107(i3)
-             201:   28(bvec3) INotEqual 200 187
-                              Store 81(p) 201
-             202:   14(ivec3) Load 107(i3)
-             203:   28(bvec3) INotEqual 202 187
-                              ReturnValue 203
+             230:    110(ptr) AccessChain 108 109
+             231:   14(ivec3) Load 230
+             232:   28(bvec3) INotEqual 231 133
+                              Store 81(p) 232
+             233:    110(ptr) AccessChain 108 109
+             234:   14(ivec3) Load 233
+             235:   28(bvec3) INotEqual 234 133
+                              ReturnValue 235
                               FunctionEnd
 85(Fn_R_B3U(vb3;):   28(bvec3) Function None 80
            84(p):     29(ptr) FunctionParameter
               86:             Label
-             206:   21(ivec3) Load 115(u3)
-             207:   28(bvec3) INotEqual 206 187
-                              Store 84(p) 207
-             208:   21(ivec3) Load 115(u3)
-             209:   28(bvec3) INotEqual 208 187
-                              ReturnValue 209
+             238:    120(ptr) AccessChain 108 119
+             239:   21(ivec3) Load 238
+             240:   28(bvec3) INotEqual 239 133
+                              Store 84(p) 240
+             241:    120(ptr) AccessChain 108 119
+             242:   21(ivec3) Load 241
+             243:   28(bvec3) INotEqual 242 133
+                              ReturnValue 243
                               FunctionEnd
 88(Fn_R_B3F(vb3;):   28(bvec3) Function None 80
            87(p):     29(ptr) FunctionParameter
               89:             Label
-             212:    7(fvec3) Load 159(f3)
-             213:   28(bvec3) FOrdNotEqual 212 127
-                              Store 87(p) 213
-             214:    7(fvec3) Load 159(f3)
-             215:   28(bvec3) FOrdNotEqual 214 127
-                              ReturnValue 215
+             246:    177(ptr) AccessChain 108 176
+             247:    7(fvec3) Load 246
+             248:   28(bvec3) FOrdNotEqual 247 137
+                              Store 87(p) 248
+             249:    177(ptr) AccessChain 108 176
+             250:    7(fvec3) Load 249
+             251:   28(bvec3) FOrdNotEqual 250 137
+                              ReturnValue 251
                               FunctionEnd
 91(Fn_R_B3D(vb3;):   28(bvec3) Function None 80
            90(p):     29(ptr) FunctionParameter
               92:             Label
-             218:   35(fvec3) Load 135(d3)
-             221:   28(bvec3) FOrdNotEqual 218 220
-                              Store 90(p) 221
-             222:   35(fvec3) Load 135(d3)
-             223:   28(bvec3) FOrdNotEqual 222 220
-                              ReturnValue 223
+             254:    147(ptr) AccessChain 108 146
+             255:   35(fvec3) Load 254
+             258:   28(bvec3) FOrdNotEqual 255 257
+                              Store 90(p) 258
+             259:    147(ptr) AccessChain 108 146
+             260:   35(fvec3) Load 259
+             261:   28(bvec3) FOrdNotEqual 260 257
+                              ReturnValue 261
                               FunctionEnd
 95(Fn_R_D3I(vd3;):   35(fvec3) Function None 93
            94(p):     36(ptr) FunctionParameter
               96:             Label
-             226:   14(ivec3) Load 107(i3)
-             227:   35(fvec3) ConvertSToF 226
-                              Store 94(p) 227
-             228:   14(ivec3) Load 107(i3)
-             229:   35(fvec3) ConvertSToF 228
-                              ReturnValue 229
+             264:    110(ptr) AccessChain 108 109
+             265:   14(ivec3) Load 264
+             266:   35(fvec3) ConvertSToF 265
+                              Store 94(p) 266
+             267:    110(ptr) AccessChain 108 109
+             268:   14(ivec3) Load 267
+             269:   35(fvec3) ConvertSToF 268
+                              ReturnValue 269
                               FunctionEnd
 98(Fn_R_D3U(vd3;):   35(fvec3) Function None 93
            97(p):     36(ptr) FunctionParameter
               99:             Label
-             232:   21(ivec3) Load 115(u3)
-             233:   35(fvec3) ConvertUToF 232
-                              Store 97(p) 233
-             234:   21(ivec3) Load 115(u3)
-             235:   35(fvec3) ConvertUToF 234
-                              ReturnValue 235
+             272:    120(ptr) AccessChain 108 119
+             273:   21(ivec3) Load 272
+             274:   35(fvec3) ConvertUToF 273
+                              Store 97(p) 274
+             275:    120(ptr) AccessChain 108 119
+             276:   21(ivec3) Load 275
+             277:   35(fvec3) ConvertUToF 276
+                              ReturnValue 277
                               FunctionEnd
 101(Fn_R_D3B(vd3;):   35(fvec3) Function None 93
           100(p):     36(ptr) FunctionParameter
              102:             Label
-             238:   28(bvec3) Load 123(b3)
-             241:   35(fvec3) Select 238 240 220
-                              Store 100(p) 241
-             242:   28(bvec3) Load 123(b3)
-             243:   35(fvec3) Select 242 240 220
-                              ReturnValue 243
+             280:    120(ptr) AccessChain 108 129
+             281:   21(ivec3) Load 280
+             282:   28(bvec3) INotEqual 281 133
+             285:   35(fvec3) Select 282 284 257
+                              Store 100(p) 285
+             286:    120(ptr) AccessChain 108 129
+             287:   21(ivec3) Load 286
+             288:   28(bvec3) INotEqual 287 133
+             289:   35(fvec3) Select 288 284 257
+                              ReturnValue 289
                               FunctionEnd
 104(Fn_R_D3F(vd3;):   35(fvec3) Function None 93
           103(p):     36(ptr) FunctionParameter
              105:             Label
-             246:    7(fvec3) Load 159(f3)
-             247:   35(fvec3) FConvert 246
-                              Store 103(p) 247
-             248:    7(fvec3) Load 159(f3)
-             249:   35(fvec3) FConvert 248
-                              ReturnValue 249
+             292:    177(ptr) AccessChain 108 176
+             293:    7(fvec3) Load 292
+             294:   35(fvec3) FConvert 293
+                              Store 103(p) 294
+             295:    177(ptr) AccessChain 108 176
+             296:    7(fvec3) Load 295
+             297:   35(fvec3) FConvert 296
+                              ReturnValue 297
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.reflection.binding.frag.out b/Test/baseResults/hlsl.reflection.binding.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..dd19621c3e8298579603e849717a5827e951a09c
--- /dev/null
+++ b/Test/baseResults/hlsl.reflection.binding.frag.out
@@ -0,0 +1,19 @@
+hlsl.reflection.binding.frag
+Uniform reflection:
+t1: offset -1, type 8b5d, size 1, index -1, binding 15
+s1: offset -1, type 0, size 1, index -1, binding 5
+t1a: offset -1, type 8b5d, size 1, index -1, binding 16
+s1a: offset -1, type 0, size 1, index -1, binding 6
+c1_a: offset 0, type 8b52, size 1, index 0, binding -1
+c1_b: offset 16, type 1404, size 1, index 0, binding -1
+c1_c: offset 20, type 1406, size 1, index 0, binding -1
+c2_a: offset 0, type 8b52, size 1, index 1, binding -1
+c2_b: offset 16, type 1404, size 1, index 1, binding -1
+c2_c: offset 20, type 1406, size 1, index 1, binding -1
+
+Uniform block reflection:
+cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2
+cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3
+
+Vertex attribute reflection:
+
diff --git a/Test/baseResults/hlsl.reflection.binding.vert.out b/Test/baseResults/hlsl.reflection.binding.vert.out
new file mode 100644
index 0000000000000000000000000000000000000000..f1368df935747884a3b455006a80f4c0568aa1d0
--- /dev/null
+++ b/Test/baseResults/hlsl.reflection.binding.vert.out
@@ -0,0 +1,15 @@
+hlsl.reflection.binding.vert
+
+Linked vertex stage:
+
+
+Uniform reflection:
+t1: offset -1, type 8b5d, size 1, index -1, binding 15
+s1: offset -1, type 0, size 1, index -1, binding 5
+t1a: offset -1, type 8b5d, size 1, index -1, binding 16
+s1a: offset -1, type 0, size 1, index -1, binding 6
+
+Uniform block reflection:
+
+Vertex attribute reflection:
+
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index b97de1595f27b4c187a8667d2f85001907ea7ed3..8ecfde6168f5c63d73351c3ebb0c060c47400895 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -1,84 +1,84 @@
 hlsl.reflection.vert
-
-Linked vertex stage:
-
-
 Uniform reflection:
-anonMember3: offset 96, type 8b52, size 1, index 0
-s.a: offset -1, type 1404, size 1, index -1
-scalar: offset 12, type 1404, size 1, index 0
-m23: offset 16, type 8b67, size 1, index 0
-scalarAfterm23: offset 64, type 1404, size 1, index 0
-c_m23: offset 16, type 8b67, size 1, index 0
-c_scalarAfterm23: offset 64, type 1404, size 1, index 0
-scalarBeforeArray: offset 112, type 1404, size 1, index 0
-floatArray: offset 128, type 1406, size 5, index 0
-scalarAfterArray: offset 208, type 1404, size 1, index 0
-memfloat2: offset 48, type 8b50, size 1, index 0
-memf1: offset 56, type 1406, size 1, index 0
-memf2: offset 60, type 8b56, size 1, index 0
-memf3: offset 64, type 1404, size 1, index 0
-memfloat2a: offset 72, type 8b50, size 1, index 0
-m22: offset 80, type 8b5a, size 7, index 0
-dm22: offset -1, type 8b5a, size 4, index -1
-foo.n1.a: offset 0, type 1406, size 1, index 0
-foo.n2.b: offset 16, type 1406, size 1, index 0
-foo.n2.c: offset 20, type 1406, size 1, index 0
-foo.n2.d: offset 24, type 1406, size 1, index 0
-deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1
-deepC[1].iv4: offset -1, type 8b52, size 1, index -1
-deepC[1].d2.i: offset -1, type 1404, size 1, index -1
-deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepC[1].v3: offset -1, type 8b54, size 1, index -1
-deepD[0].iv4: offset -1, type 8b52, size 1, index -1
-deepD[0].d2.i: offset -1, type 1404, size 1, index -1
-deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepD[0].v3: offset -1, type 8b54, size 1, index -1
-deepD[1].iv4: offset -1, type 8b52, size 1, index -1
-deepD[1].d2.i: offset -1, type 1404, size 1, index -1
-deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepD[1].v3: offset -1, type 8b54, size 1, index -1
-foo: offset 0, type 1406, size 1, index 0
-anonMember1: offset 0, type 8b51, size 1, index 0
-uf1: offset -1, type 1406, size 1, index -1
+anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
+s.a: offset 0, type 1404, size 1, index 1, binding -1
+ablock.scalar: offset 12, type 1404, size 1, index 2, binding -1
+m23: offset 16, type 8b67, size 1, index 0, binding -1
+scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1
+c_m23: offset 16, type 8b67, size 1, index 3, binding -1
+c_scalarAfterm23: offset 48, type 1404, size 1, index 3, binding -1
+scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1
+scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
+ablock.memfloat2: offset 48, type 8b50, size 1, index 2, binding -1
+ablock.memf1: offset 56, type 1406, size 1, index 2, binding -1
+ablock.memf2: offset 60, type 8b56, size 1, index 2, binding -1
+ablock.memf3: offset 64, type 1404, size 1, index 2, binding -1
+ablock.memfloat2a: offset 72, type 8b50, size 1, index 2, binding -1
+ablock.m22: offset 80, type 8b5a, size 7, index 2, binding -1
+dm22: offset 32, type 8b5a, size 4, index 1, binding -1
+m22: offset 208, type 8b5a, size 3, index 0, binding -1
+nest.foo.n1.a: offset 0, type 1406, size 1, index 4, binding -1
+nest.foo.n2.b: offset 16, type 1406, size 1, index 4, binding -1
+nest.foo.n2.c: offset 20, type 1406, size 1, index 4, binding -1
+nest.foo.n2.d: offset 24, type 1406, size 1, index 4, binding -1
+deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1
+deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1
+deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1
+deepB.d2.d1[1].va: offset 984, type 8b50, size 2, index 1, binding -1
+deepB.d2.d1[2].va: offset 984, type 8b50, size 2, index 1, binding -1
+deepB.d2.d1[3].va: offset 984, type 8b50, size 2, index 1, binding -1
+deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1
+deepC.d2.i: offset 1568, type 1404, size 1, index 1, binding -1
+deepC.d2.d1[0].va: offset 1568, type 8b50, size 3, index 1, binding -1
+deepC.d2.d1[0].b: offset 1568, type 8b56, size 1, index 1, binding -1
+deepC.d2.d1[1].va: offset 1568, type 8b50, size 3, index 1, binding -1
+deepC.d2.d1[1].b: offset 1568, type 8b56, size 1, index 1, binding -1
+deepC.d2.d1[2].va: offset 1568, type 8b50, size 3, index 1, binding -1
+deepC.d2.d1[2].b: offset 1568, type 8b56, size 1, index 1, binding -1
+deepC.d2.d1[3].va: offset 1568, type 8b50, size 3, index 1, binding -1
+deepC.d2.d1[3].b: offset 1568, type 8b56, size 1, index 1, binding -1
+deepC.v3: offset 1568, type 8b54, size 1, index 1, binding -1
+deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1
+deepD[0].d2.i: offset 2480, type 1404, size 1, index 1, binding -1
+deepD[0].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[0].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[0].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[0].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[0].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[0].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[0].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[0].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[0].v3: offset 2480, type 8b54, size 1, index 1, binding -1
+deepD[1].iv4: offset 2480, type 8b52, size 1, index 1, binding -1
+deepD[1].d2.i: offset 2480, type 1404, size 1, index 1, binding -1
+deepD[1].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[1].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[1].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[1].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[1].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[1].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1
+deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1
+deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1
+arrBl.foo: offset 0, type 1406, size 1, index 5, binding -1
+arrBl2.foo: offset 0, type 1406, size 1, index 6, binding -1
+anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
+uf1: offset 16, type 1406, size 1, index 1, binding -1
 
 Uniform block reflection:
-: offset -1, type ffffffff, size 512, index -1
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1
+$Global: offset -1, type ffffffff, size 3088, index -1, binding -1
+ablock: offset -1, type ffffffff, size 304, index -1, binding -1
+c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1
+nest: offset -1, type ffffffff, size 32, index -1, binding -1
+arrBl: offset -1, type ffffffff, size 4, index -1, binding -1
+arrBl2: offset -1, type ffffffff, size 4, index -1, binding -1
 
 Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0
+attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
+attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1
+attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1
+attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1
+attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1
 
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..123bd4cbee3b6f6ece057c87c7b197ccd39eaee9
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -0,0 +1,5261 @@
+hlsl.rw.atomics.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:50      imageAtomicAdd (temp int)
+0:50        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:50        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            5 (const uint)
+0:50        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            8 (const uint)
+0:51      move second child to first child (temp int)
+0:51        'out_i1' (temp int)
+0:51        imageAtomicAdd (temp int)
+0:51          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:52      imageAtomicAnd (temp int)
+0:52        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:52        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            5 (const uint)
+0:52        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            8 (const uint)
+0:53      move second child to first child (temp int)
+0:53        'out_i1' (temp int)
+0:53        imageAtomicAnd (temp int)
+0:53          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:54      move second child to first child (temp int)
+0:54        'out_i1' (temp int)
+0:54        imageAtomicCompSwap (temp int)
+0:54          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:54          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              5 (const uint)
+0:54          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              8 (const uint)
+0:54          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              9 (const uint)
+0:55      move second child to first child (temp int)
+0:55        'out_i1' (temp int)
+0:55        imageAtomicExchange (temp int)
+0:55          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:56      imageAtomicMax (temp int)
+0:56        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:56        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            5 (const uint)
+0:56        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            8 (const uint)
+0:57      move second child to first child (temp int)
+0:57        'out_i1' (temp int)
+0:57        imageAtomicMax (temp int)
+0:57          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:58      imageAtomicMin (temp int)
+0:58        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:58        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            5 (const uint)
+0:58        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            8 (const uint)
+0:59      move second child to first child (temp int)
+0:59        'out_i1' (temp int)
+0:59        imageAtomicMin (temp int)
+0:59          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:60      imageAtomicOr (temp int)
+0:60        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            5 (const uint)
+0:60        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            8 (const uint)
+0:61      move second child to first child (temp int)
+0:61        'out_i1' (temp int)
+0:61        imageAtomicOr (temp int)
+0:61          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:62      imageAtomicXor (temp int)
+0:62        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:62        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            5 (const uint)
+0:62        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            8 (const uint)
+0:63      move second child to first child (temp int)
+0:63        'out_i1' (temp int)
+0:63        imageAtomicXor (temp int)
+0:63          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:66      imageAtomicAdd (temp uint)
+0:66        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:67      move second child to first child (temp uint)
+0:67        'out_u1' (temp uint)
+0:67        imageAtomicAdd (temp uint)
+0:67          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:68      imageAtomicAnd (temp uint)
+0:68        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:69      move second child to first child (temp uint)
+0:69        'out_u1' (temp uint)
+0:69        imageAtomicAnd (temp uint)
+0:69          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:70      move second child to first child (temp uint)
+0:70        'out_u1' (temp uint)
+0:70        imageAtomicCompSwap (temp uint)
+0:70          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:70          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              0 (const uint)
+0:70          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              3 (const uint)
+0:70          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              4 (const uint)
+0:71      move second child to first child (temp uint)
+0:71        'out_u1' (temp uint)
+0:71        imageAtomicExchange (temp uint)
+0:71          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:72      imageAtomicMax (temp uint)
+0:72        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:73      move second child to first child (temp uint)
+0:73        'out_u1' (temp uint)
+0:73        imageAtomicMax (temp uint)
+0:73          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:74      imageAtomicMin (temp uint)
+0:74        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:75      move second child to first child (temp uint)
+0:75        'out_u1' (temp uint)
+0:75        imageAtomicMin (temp uint)
+0:75          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:76      imageAtomicOr (temp uint)
+0:76        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:77      move second child to first child (temp uint)
+0:77        'out_u1' (temp uint)
+0:77        imageAtomicOr (temp uint)
+0:77          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:78      imageAtomicXor (temp uint)
+0:78        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:79      move second child to first child (temp uint)
+0:79        'out_u1' (temp uint)
+0:79        imageAtomicXor (temp uint)
+0:79          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:82      imageAtomicAdd (temp int)
+0:82        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:82        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            6 (const uint)
+0:82        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            8 (const uint)
+0:83      move second child to first child (temp int)
+0:83        'out_i1' (temp int)
+0:83        imageAtomicAdd (temp int)
+0:83          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:83          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              6 (const uint)
+0:83          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              5 (const uint)
+0:84      imageAtomicAnd (temp int)
+0:84        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:84        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            6 (const uint)
+0:84        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            8 (const uint)
+0:85      move second child to first child (temp int)
+0:85        'out_i1' (temp int)
+0:85        imageAtomicAnd (temp int)
+0:85          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:85          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              6 (const uint)
+0:85          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              5 (const uint)
+0:86      move second child to first child (temp int)
+0:86        'out_i1' (temp int)
+0:86        imageAtomicCompSwap (temp int)
+0:86          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:86          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              6 (const uint)
+0:86          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              8 (const uint)
+0:86          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              9 (const uint)
+0:87      move second child to first child (temp int)
+0:87        'out_i1' (temp int)
+0:87        imageAtomicExchange (temp int)
+0:87          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:87          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              6 (const uint)
+0:87          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              5 (const uint)
+0:88      imageAtomicMax (temp int)
+0:88        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:88        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            6 (const uint)
+0:88        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            8 (const uint)
+0:89      move second child to first child (temp int)
+0:89        'out_i1' (temp int)
+0:89        imageAtomicMax (temp int)
+0:89          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:89          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              6 (const uint)
+0:89          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              5 (const uint)
+0:90      imageAtomicMin (temp int)
+0:90        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:90        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            6 (const uint)
+0:90        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            8 (const uint)
+0:91      move second child to first child (temp int)
+0:91        'out_i1' (temp int)
+0:91        imageAtomicMin (temp int)
+0:91          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:91          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              6 (const uint)
+0:91          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              5 (const uint)
+0:92      imageAtomicOr (temp int)
+0:92        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:92        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            6 (const uint)
+0:92        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            8 (const uint)
+0:93      move second child to first child (temp int)
+0:93        'out_i1' (temp int)
+0:93        imageAtomicOr (temp int)
+0:93          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:93          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              6 (const uint)
+0:93          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              5 (const uint)
+0:94      imageAtomicXor (temp int)
+0:94        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:94        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            6 (const uint)
+0:94        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            8 (const uint)
+0:95      move second child to first child (temp int)
+0:95        'out_i1' (temp int)
+0:95        imageAtomicXor (temp int)
+0:95          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:95          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              6 (const uint)
+0:95          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              5 (const uint)
+0:98      imageAtomicAdd (temp uint)
+0:98        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            1 (const uint)
+0:98        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            0 (const uint)
+0:99      move second child to first child (temp uint)
+0:99        'out_u1' (temp uint)
+0:99        imageAtomicAdd (temp uint)
+0:99          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:99          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              1 (const uint)
+0:99          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              0 (const uint)
+0:100      imageAtomicAnd (temp uint)
+0:100        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:100        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            1 (const uint)
+0:100        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            0 (const uint)
+0:101      move second child to first child (temp uint)
+0:101        'out_u1' (temp uint)
+0:101        imageAtomicAnd (temp uint)
+0:101          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:101          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              1 (const uint)
+0:101          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              0 (const uint)
+0:102      move second child to first child (temp uint)
+0:102        'out_u1' (temp uint)
+0:102        imageAtomicCompSwap (temp uint)
+0:102          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:102          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              1 (const uint)
+0:102          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              3 (const uint)
+0:102          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              4 (const uint)
+0:103      move second child to first child (temp uint)
+0:103        'out_u1' (temp uint)
+0:103        imageAtomicExchange (temp uint)
+0:103          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:103          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              1 (const uint)
+0:103          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              0 (const uint)
+0:104      imageAtomicMax (temp uint)
+0:104        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:104        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            1 (const uint)
+0:104        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            0 (const uint)
+0:105      move second child to first child (temp uint)
+0:105        'out_u1' (temp uint)
+0:105        imageAtomicMax (temp uint)
+0:105          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:105          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              1 (const uint)
+0:105          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              0 (const uint)
+0:106      imageAtomicMin (temp uint)
+0:106        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:106        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            1 (const uint)
+0:106        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            0 (const uint)
+0:107      move second child to first child (temp uint)
+0:107        'out_u1' (temp uint)
+0:107        imageAtomicMin (temp uint)
+0:107          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:107          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              1 (const uint)
+0:107          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      imageAtomicOr (temp uint)
+0:108        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:108        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            1 (const uint)
+0:108        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            0 (const uint)
+0:109      move second child to first child (temp uint)
+0:109        'out_u1' (temp uint)
+0:109        imageAtomicOr (temp uint)
+0:109          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:109          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              1 (const uint)
+0:109          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              0 (const uint)
+0:110      imageAtomicXor (temp uint)
+0:110        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:110        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            1 (const uint)
+0:110        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            0 (const uint)
+0:111      move second child to first child (temp uint)
+0:111        'out_u1' (temp uint)
+0:111        imageAtomicXor (temp uint)
+0:111          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:111          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              1 (const uint)
+0:111          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              0 (const uint)
+0:114      imageAtomicAdd (temp int)
+0:114        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:114        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            7 (const uint)
+0:114        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            8 (const uint)
+0:115      move second child to first child (temp int)
+0:115        'out_i1' (temp int)
+0:115        imageAtomicAdd (temp int)
+0:115          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:115          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              7 (const uint)
+0:115          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              5 (const uint)
+0:116      imageAtomicAnd (temp int)
+0:116        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:116        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            7 (const uint)
+0:116        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            8 (const uint)
+0:117      move second child to first child (temp int)
+0:117        'out_i1' (temp int)
+0:117        imageAtomicAnd (temp int)
+0:117          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:117          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              7 (const uint)
+0:117          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              5 (const uint)
+0:118      move second child to first child (temp int)
+0:118        'out_i1' (temp int)
+0:118        imageAtomicCompSwap (temp int)
+0:118          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:118          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              7 (const uint)
+0:118          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              8 (const uint)
+0:118          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              9 (const uint)
+0:119      move second child to first child (temp int)
+0:119        'out_i1' (temp int)
+0:119        imageAtomicExchange (temp int)
+0:119          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:119          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              7 (const uint)
+0:119          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              5 (const uint)
+0:120      imageAtomicMax (temp int)
+0:120        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:120        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            7 (const uint)
+0:120        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            8 (const uint)
+0:121      move second child to first child (temp int)
+0:121        'out_i1' (temp int)
+0:121        imageAtomicMax (temp int)
+0:121          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:121          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              7 (const uint)
+0:121          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              5 (const uint)
+0:122      imageAtomicMin (temp int)
+0:122        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:122        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            7 (const uint)
+0:122        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            8 (const uint)
+0:123      move second child to first child (temp int)
+0:123        'out_i1' (temp int)
+0:123        imageAtomicMin (temp int)
+0:123          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:123          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              7 (const uint)
+0:123          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              5 (const uint)
+0:124      imageAtomicOr (temp int)
+0:124        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:124        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            7 (const uint)
+0:124        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            8 (const uint)
+0:125      move second child to first child (temp int)
+0:125        'out_i1' (temp int)
+0:125        imageAtomicOr (temp int)
+0:125          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:125          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              7 (const uint)
+0:125          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              5 (const uint)
+0:126      imageAtomicXor (temp int)
+0:126        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:126        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            7 (const uint)
+0:126        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            8 (const uint)
+0:127      move second child to first child (temp int)
+0:127        'out_i1' (temp int)
+0:127        imageAtomicXor (temp int)
+0:127          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:127          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              7 (const uint)
+0:127          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              5 (const uint)
+0:130      imageAtomicAdd (temp uint)
+0:130        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:130        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            2 (const uint)
+0:130        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            0 (const uint)
+0:131      move second child to first child (temp uint)
+0:131        'out_u1' (temp uint)
+0:131        imageAtomicAdd (temp uint)
+0:131          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:131          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              2 (const uint)
+0:131          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              0 (const uint)
+0:132      imageAtomicAnd (temp uint)
+0:132        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:132        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            2 (const uint)
+0:132        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            0 (const uint)
+0:133      move second child to first child (temp uint)
+0:133        'out_u1' (temp uint)
+0:133        imageAtomicAnd (temp uint)
+0:133          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:133          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              2 (const uint)
+0:133          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              0 (const uint)
+0:134      move second child to first child (temp uint)
+0:134        'out_u1' (temp uint)
+0:134        imageAtomicCompSwap (temp uint)
+0:134          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:134          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              2 (const uint)
+0:134          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              3 (const uint)
+0:134          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              4 (const uint)
+0:135      move second child to first child (temp uint)
+0:135        'out_u1' (temp uint)
+0:135        imageAtomicExchange (temp uint)
+0:135          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:135          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              2 (const uint)
+0:135          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              0 (const uint)
+0:136      imageAtomicMax (temp uint)
+0:136        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:136        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            2 (const uint)
+0:136        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            0 (const uint)
+0:137      move second child to first child (temp uint)
+0:137        'out_u1' (temp uint)
+0:137        imageAtomicMax (temp uint)
+0:137          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:137          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              2 (const uint)
+0:137          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              0 (const uint)
+0:138      imageAtomicMin (temp uint)
+0:138        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:138        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            2 (const uint)
+0:138        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            0 (const uint)
+0:139      move second child to first child (temp uint)
+0:139        'out_u1' (temp uint)
+0:139        imageAtomicMin (temp uint)
+0:139          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:139          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              2 (const uint)
+0:139          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              0 (const uint)
+0:140      imageAtomicOr (temp uint)
+0:140        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:140        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            2 (const uint)
+0:140        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            0 (const uint)
+0:141      move second child to first child (temp uint)
+0:141        'out_u1' (temp uint)
+0:141        imageAtomicOr (temp uint)
+0:141          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:141          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              2 (const uint)
+0:141          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              0 (const uint)
+0:142      imageAtomicXor (temp uint)
+0:142        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:142        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            2 (const uint)
+0:142        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            0 (const uint)
+0:143      move second child to first child (temp uint)
+0:143        'out_u1' (temp uint)
+0:143        imageAtomicXor (temp uint)
+0:143          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:143          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              2 (const uint)
+0:143          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              0 (const uint)
+0:146      imageAtomicAdd (temp int)
+0:146        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:146        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            6 (const uint)
+0:146        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            8 (const uint)
+0:147      move second child to first child (temp int)
+0:147        'out_i1' (temp int)
+0:147        imageAtomicAdd (temp int)
+0:147          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:147          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              6 (const uint)
+0:147          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              5 (const uint)
+0:148      imageAtomicAnd (temp int)
+0:148        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:148        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            6 (const uint)
+0:148        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            8 (const uint)
+0:149      move second child to first child (temp int)
+0:149        'out_i1' (temp int)
+0:149        imageAtomicAnd (temp int)
+0:149          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:149          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              6 (const uint)
+0:149          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              5 (const uint)
+0:150      move second child to first child (temp int)
+0:150        'out_i1' (temp int)
+0:150        imageAtomicCompSwap (temp int)
+0:150          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:150          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              6 (const uint)
+0:150          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              8 (const uint)
+0:150          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              9 (const uint)
+0:151      move second child to first child (temp int)
+0:151        'out_i1' (temp int)
+0:151        imageAtomicExchange (temp int)
+0:151          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:151          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              6 (const uint)
+0:151          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              5 (const uint)
+0:152      imageAtomicMax (temp int)
+0:152        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:152        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            6 (const uint)
+0:152        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            8 (const uint)
+0:153      move second child to first child (temp int)
+0:153        'out_i1' (temp int)
+0:153        imageAtomicMax (temp int)
+0:153          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:153          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              6 (const uint)
+0:153          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              5 (const uint)
+0:154      imageAtomicMin (temp int)
+0:154        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:154        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            6 (const uint)
+0:154        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            8 (const uint)
+0:155      move second child to first child (temp int)
+0:155        'out_i1' (temp int)
+0:155        imageAtomicMin (temp int)
+0:155          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:155          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              6 (const uint)
+0:155          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              5 (const uint)
+0:156      imageAtomicOr (temp int)
+0:156        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:156        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            6 (const uint)
+0:156        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            8 (const uint)
+0:157      move second child to first child (temp int)
+0:157        'out_i1' (temp int)
+0:157        imageAtomicOr (temp int)
+0:157          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:157          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              6 (const uint)
+0:157          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              5 (const uint)
+0:158      imageAtomicXor (temp int)
+0:158        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:158        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            6 (const uint)
+0:158        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            8 (const uint)
+0:159      move second child to first child (temp int)
+0:159        'out_i1' (temp int)
+0:159        imageAtomicXor (temp int)
+0:159          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:159          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              6 (const uint)
+0:159          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              5 (const uint)
+0:162      imageAtomicAdd (temp uint)
+0:162        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:162        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            1 (const uint)
+0:162        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            0 (const uint)
+0:163      move second child to first child (temp uint)
+0:163        'out_u1' (temp uint)
+0:163        imageAtomicAdd (temp uint)
+0:163          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:163          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              1 (const uint)
+0:163          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              0 (const uint)
+0:164      imageAtomicAnd (temp uint)
+0:164        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:164        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            1 (const uint)
+0:164        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      move second child to first child (temp uint)
+0:165        'out_u1' (temp uint)
+0:165        imageAtomicAnd (temp uint)
+0:165          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:165          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              1 (const uint)
+0:165          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              0 (const uint)
+0:166      move second child to first child (temp uint)
+0:166        'out_u1' (temp uint)
+0:166        imageAtomicCompSwap (temp uint)
+0:166          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:166          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              1 (const uint)
+0:166          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              3 (const uint)
+0:166          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              4 (const uint)
+0:167      move second child to first child (temp uint)
+0:167        'out_u1' (temp uint)
+0:167        imageAtomicExchange (temp uint)
+0:167          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:167          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              1 (const uint)
+0:167          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              0 (const uint)
+0:168      imageAtomicMax (temp uint)
+0:168        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:168        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            1 (const uint)
+0:168        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            0 (const uint)
+0:169      move second child to first child (temp uint)
+0:169        'out_u1' (temp uint)
+0:169        imageAtomicMax (temp uint)
+0:169          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:169          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              1 (const uint)
+0:169          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              0 (const uint)
+0:170      imageAtomicMin (temp uint)
+0:170        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:170        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            1 (const uint)
+0:170        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            0 (const uint)
+0:171      move second child to first child (temp uint)
+0:171        'out_u1' (temp uint)
+0:171        imageAtomicMin (temp uint)
+0:171          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:171          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              1 (const uint)
+0:171          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              0 (const uint)
+0:172      imageAtomicOr (temp uint)
+0:172        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:172        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            1 (const uint)
+0:172        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            0 (const uint)
+0:173      move second child to first child (temp uint)
+0:173        'out_u1' (temp uint)
+0:173        imageAtomicOr (temp uint)
+0:173          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:173          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              1 (const uint)
+0:173          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              0 (const uint)
+0:174      imageAtomicXor (temp uint)
+0:174        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:174        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            1 (const uint)
+0:174        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      move second child to first child (temp uint)
+0:175        'out_u1' (temp uint)
+0:175        imageAtomicXor (temp uint)
+0:175          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:175          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              1 (const uint)
+0:175          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              0 (const uint)
+0:178      imageAtomicAdd (temp int)
+0:178        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:178        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            6 (const uint)
+0:178        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            8 (const uint)
+0:179      move second child to first child (temp int)
+0:179        'out_i1' (temp int)
+0:179        imageAtomicAdd (temp int)
+0:179          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:179          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              6 (const uint)
+0:179          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              5 (const uint)
+0:180      imageAtomicAnd (temp int)
+0:180        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:180        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            6 (const uint)
+0:180        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            8 (const uint)
+0:181      move second child to first child (temp int)
+0:181        'out_i1' (temp int)
+0:181        imageAtomicAnd (temp int)
+0:181          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:181          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              6 (const uint)
+0:181          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              5 (const uint)
+0:182      move second child to first child (temp int)
+0:182        'out_i1' (temp int)
+0:182        imageAtomicCompSwap (temp int)
+0:182          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:182          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              6 (const uint)
+0:182          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              8 (const uint)
+0:182          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              9 (const uint)
+0:183      move second child to first child (temp int)
+0:183        'out_i1' (temp int)
+0:183        imageAtomicExchange (temp int)
+0:183          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:183          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              6 (const uint)
+0:183          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              5 (const uint)
+0:184      imageAtomicMax (temp int)
+0:184        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:184        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            6 (const uint)
+0:184        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            8 (const uint)
+0:185      move second child to first child (temp int)
+0:185        'out_i1' (temp int)
+0:185        imageAtomicMax (temp int)
+0:185          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:185          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              6 (const uint)
+0:185          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              5 (const uint)
+0:186      imageAtomicMin (temp int)
+0:186        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:186        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            6 (const uint)
+0:186        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            8 (const uint)
+0:187      move second child to first child (temp int)
+0:187        'out_i1' (temp int)
+0:187        imageAtomicMin (temp int)
+0:187          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:187          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              6 (const uint)
+0:187          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              5 (const uint)
+0:188      imageAtomicOr (temp int)
+0:188        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:188        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            6 (const uint)
+0:188        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            8 (const uint)
+0:189      move second child to first child (temp int)
+0:189        'out_i1' (temp int)
+0:189        imageAtomicOr (temp int)
+0:189          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:189          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              6 (const uint)
+0:189          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              5 (const uint)
+0:190      imageAtomicXor (temp int)
+0:190        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:190        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            6 (const uint)
+0:190        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            8 (const uint)
+0:191      move second child to first child (temp int)
+0:191        'out_i1' (temp int)
+0:191        imageAtomicXor (temp int)
+0:191          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:191          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              6 (const uint)
+0:191          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              5 (const uint)
+0:194      imageAtomicAdd (temp uint)
+0:194        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:194        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            1 (const uint)
+0:194        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            0 (const uint)
+0:195      move second child to first child (temp uint)
+0:195        'out_u1' (temp uint)
+0:195        imageAtomicAdd (temp uint)
+0:195          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:195          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              1 (const uint)
+0:195          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              0 (const uint)
+0:196      imageAtomicAnd (temp uint)
+0:196        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:196        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            1 (const uint)
+0:196        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            0 (const uint)
+0:197      move second child to first child (temp uint)
+0:197        'out_u1' (temp uint)
+0:197        imageAtomicAnd (temp uint)
+0:197          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:197          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              1 (const uint)
+0:197          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              0 (const uint)
+0:198      move second child to first child (temp uint)
+0:198        'out_u1' (temp uint)
+0:198        imageAtomicCompSwap (temp uint)
+0:198          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:198          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              1 (const uint)
+0:198          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              3 (const uint)
+0:198          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              4 (const uint)
+0:199      move second child to first child (temp uint)
+0:199        'out_u1' (temp uint)
+0:199        imageAtomicExchange (temp uint)
+0:199          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:199          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              1 (const uint)
+0:199          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              0 (const uint)
+0:200      imageAtomicMax (temp uint)
+0:200        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:200        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            1 (const uint)
+0:200        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            0 (const uint)
+0:201      move second child to first child (temp uint)
+0:201        'out_u1' (temp uint)
+0:201        imageAtomicMax (temp uint)
+0:201          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:201          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              1 (const uint)
+0:201          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              0 (const uint)
+0:202      imageAtomicMin (temp uint)
+0:202        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:202        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            1 (const uint)
+0:202        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            0 (const uint)
+0:203      move second child to first child (temp uint)
+0:203        'out_u1' (temp uint)
+0:203        imageAtomicMin (temp uint)
+0:203          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:203          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              1 (const uint)
+0:203          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              0 (const uint)
+0:204      imageAtomicOr (temp uint)
+0:204        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:204        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            1 (const uint)
+0:204        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            0 (const uint)
+0:205      move second child to first child (temp uint)
+0:205        'out_u1' (temp uint)
+0:205        imageAtomicOr (temp uint)
+0:205          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:205          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              1 (const uint)
+0:205          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              0 (const uint)
+0:206      imageAtomicXor (temp uint)
+0:206        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:206        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            1 (const uint)
+0:206        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            0 (const uint)
+0:207      move second child to first child (temp uint)
+0:207        'out_u1' (temp uint)
+0:207        imageAtomicXor (temp uint)
+0:207          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:207          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              1 (const uint)
+0:207          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              0 (const uint)
+0:210      imageAtomicAdd (temp int)
+0:210        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:210        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            5 (const uint)
+0:210        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            8 (const uint)
+0:211      move second child to first child (temp int)
+0:211        'out_i1' (temp int)
+0:211        imageAtomicAdd (temp int)
+0:211          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:212      imageAtomicAnd (temp int)
+0:212        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:212        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            5 (const uint)
+0:212        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            8 (const uint)
+0:213      move second child to first child (temp int)
+0:213        'out_i1' (temp int)
+0:213        imageAtomicAnd (temp int)
+0:213          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:214      move second child to first child (temp int)
+0:214        'out_i1' (temp int)
+0:214        imageAtomicCompSwap (temp int)
+0:214          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:214          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              5 (const uint)
+0:214          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              8 (const uint)
+0:214          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              9 (const uint)
+0:215      move second child to first child (temp int)
+0:215        'out_i1' (temp int)
+0:215        imageAtomicExchange (temp int)
+0:215          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:216      imageAtomicMax (temp int)
+0:216        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:216        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            5 (const uint)
+0:216        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            8 (const uint)
+0:217      move second child to first child (temp int)
+0:217        'out_i1' (temp int)
+0:217        imageAtomicMax (temp int)
+0:217          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:218      imageAtomicMin (temp int)
+0:218        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:218        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            5 (const uint)
+0:218        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            8 (const uint)
+0:219      move second child to first child (temp int)
+0:219        'out_i1' (temp int)
+0:219        imageAtomicMin (temp int)
+0:219          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:220      imageAtomicOr (temp int)
+0:220        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:220        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            5 (const uint)
+0:220        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            8 (const uint)
+0:221      move second child to first child (temp int)
+0:221        'out_i1' (temp int)
+0:221        imageAtomicOr (temp int)
+0:221          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:222      imageAtomicXor (temp int)
+0:222        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:222        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            5 (const uint)
+0:222        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            8 (const uint)
+0:223      move second child to first child (temp int)
+0:223        'out_i1' (temp int)
+0:223        imageAtomicXor (temp int)
+0:223          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:226      imageAtomicAdd (temp uint)
+0:226        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:227      move second child to first child (temp uint)
+0:227        'out_u1' (temp uint)
+0:227        imageAtomicAdd (temp uint)
+0:227          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:228      imageAtomicAnd (temp uint)
+0:228        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:229      move second child to first child (temp uint)
+0:229        'out_u1' (temp uint)
+0:229        imageAtomicAnd (temp uint)
+0:229          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:230      move second child to first child (temp uint)
+0:230        'out_u1' (temp uint)
+0:230        imageAtomicCompSwap (temp uint)
+0:230          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:230          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              0 (const uint)
+0:230          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              3 (const uint)
+0:230          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              4 (const uint)
+0:231      move second child to first child (temp uint)
+0:231        'out_u1' (temp uint)
+0:231        imageAtomicExchange (temp uint)
+0:231          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:232      imageAtomicMax (temp uint)
+0:232        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:233      move second child to first child (temp uint)
+0:233        'out_u1' (temp uint)
+0:233        imageAtomicMax (temp uint)
+0:233          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:234      imageAtomicMin (temp uint)
+0:234        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:235      move second child to first child (temp uint)
+0:235        'out_u1' (temp uint)
+0:235        imageAtomicMin (temp uint)
+0:235          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:236      imageAtomicOr (temp uint)
+0:236        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:237      move second child to first child (temp uint)
+0:237        'out_u1' (temp uint)
+0:237        imageAtomicOr (temp uint)
+0:237          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:238      imageAtomicXor (temp uint)
+0:238        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:239      move second child to first child (temp uint)
+0:239        'out_u1' (temp uint)
+0:239        imageAtomicXor (temp uint)
+0:239          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:242      move second child to first child (temp 4-component vector of float)
+0:242        Color: direct index for structure (temp 4-component vector of float)
+0:242          'psout' (temp structure{temp 4-component vector of float Color})
+0:242          Constant:
+0:242            0 (const int)
+0:242        Constant:
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:243      Sequence
+0:243        Sequence
+0:243          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:243            Color: direct index for structure (temp 4-component vector of float)
+0:243              'psout' (temp structure{temp 4-component vector of float Color})
+0:243              Constant:
+0:243                0 (const int)
+0:243        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(r32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:50      imageAtomicAdd (temp int)
+0:50        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:50        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            5 (const uint)
+0:50        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            8 (const uint)
+0:51      move second child to first child (temp int)
+0:51        'out_i1' (temp int)
+0:51        imageAtomicAdd (temp int)
+0:51          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:52      imageAtomicAnd (temp int)
+0:52        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:52        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            5 (const uint)
+0:52        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            8 (const uint)
+0:53      move second child to first child (temp int)
+0:53        'out_i1' (temp int)
+0:53        imageAtomicAnd (temp int)
+0:53          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:54      move second child to first child (temp int)
+0:54        'out_i1' (temp int)
+0:54        imageAtomicCompSwap (temp int)
+0:54          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:54          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              5 (const uint)
+0:54          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              8 (const uint)
+0:54          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              9 (const uint)
+0:55      move second child to first child (temp int)
+0:55        'out_i1' (temp int)
+0:55        imageAtomicExchange (temp int)
+0:55          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:56      imageAtomicMax (temp int)
+0:56        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:56        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            5 (const uint)
+0:56        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            8 (const uint)
+0:57      move second child to first child (temp int)
+0:57        'out_i1' (temp int)
+0:57        imageAtomicMax (temp int)
+0:57          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:58      imageAtomicMin (temp int)
+0:58        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:58        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            5 (const uint)
+0:58        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            8 (const uint)
+0:59      move second child to first child (temp int)
+0:59        'out_i1' (temp int)
+0:59        imageAtomicMin (temp int)
+0:59          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:60      imageAtomicOr (temp int)
+0:60        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            5 (const uint)
+0:60        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            8 (const uint)
+0:61      move second child to first child (temp int)
+0:61        'out_i1' (temp int)
+0:61        imageAtomicOr (temp int)
+0:61          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:62      imageAtomicXor (temp int)
+0:62        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:62        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            5 (const uint)
+0:62        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            8 (const uint)
+0:63      move second child to first child (temp int)
+0:63        'out_i1' (temp int)
+0:63        imageAtomicXor (temp int)
+0:63          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:66      imageAtomicAdd (temp uint)
+0:66        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:67      move second child to first child (temp uint)
+0:67        'out_u1' (temp uint)
+0:67        imageAtomicAdd (temp uint)
+0:67          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:68      imageAtomicAnd (temp uint)
+0:68        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:69      move second child to first child (temp uint)
+0:69        'out_u1' (temp uint)
+0:69        imageAtomicAnd (temp uint)
+0:69          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:70      move second child to first child (temp uint)
+0:70        'out_u1' (temp uint)
+0:70        imageAtomicCompSwap (temp uint)
+0:70          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:70          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              0 (const uint)
+0:70          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              3 (const uint)
+0:70          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              4 (const uint)
+0:71      move second child to first child (temp uint)
+0:71        'out_u1' (temp uint)
+0:71        imageAtomicExchange (temp uint)
+0:71          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:72      imageAtomicMax (temp uint)
+0:72        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:73      move second child to first child (temp uint)
+0:73        'out_u1' (temp uint)
+0:73        imageAtomicMax (temp uint)
+0:73          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:74      imageAtomicMin (temp uint)
+0:74        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:75      move second child to first child (temp uint)
+0:75        'out_u1' (temp uint)
+0:75        imageAtomicMin (temp uint)
+0:75          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:76      imageAtomicOr (temp uint)
+0:76        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:77      move second child to first child (temp uint)
+0:77        'out_u1' (temp uint)
+0:77        imageAtomicOr (temp uint)
+0:77          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:78      imageAtomicXor (temp uint)
+0:78        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:79      move second child to first child (temp uint)
+0:79        'out_u1' (temp uint)
+0:79        imageAtomicXor (temp uint)
+0:79          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:82      imageAtomicAdd (temp int)
+0:82        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:82        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            6 (const uint)
+0:82        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            8 (const uint)
+0:83      move second child to first child (temp int)
+0:83        'out_i1' (temp int)
+0:83        imageAtomicAdd (temp int)
+0:83          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:83          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              6 (const uint)
+0:83          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              5 (const uint)
+0:84      imageAtomicAnd (temp int)
+0:84        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:84        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            6 (const uint)
+0:84        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            8 (const uint)
+0:85      move second child to first child (temp int)
+0:85        'out_i1' (temp int)
+0:85        imageAtomicAnd (temp int)
+0:85          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:85          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              6 (const uint)
+0:85          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              5 (const uint)
+0:86      move second child to first child (temp int)
+0:86        'out_i1' (temp int)
+0:86        imageAtomicCompSwap (temp int)
+0:86          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:86          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              6 (const uint)
+0:86          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              8 (const uint)
+0:86          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              9 (const uint)
+0:87      move second child to first child (temp int)
+0:87        'out_i1' (temp int)
+0:87        imageAtomicExchange (temp int)
+0:87          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:87          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              6 (const uint)
+0:87          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              5 (const uint)
+0:88      imageAtomicMax (temp int)
+0:88        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:88        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            6 (const uint)
+0:88        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            8 (const uint)
+0:89      move second child to first child (temp int)
+0:89        'out_i1' (temp int)
+0:89        imageAtomicMax (temp int)
+0:89          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:89          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              6 (const uint)
+0:89          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              5 (const uint)
+0:90      imageAtomicMin (temp int)
+0:90        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:90        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            6 (const uint)
+0:90        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            8 (const uint)
+0:91      move second child to first child (temp int)
+0:91        'out_i1' (temp int)
+0:91        imageAtomicMin (temp int)
+0:91          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:91          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              6 (const uint)
+0:91          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              5 (const uint)
+0:92      imageAtomicOr (temp int)
+0:92        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:92        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            6 (const uint)
+0:92        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            8 (const uint)
+0:93      move second child to first child (temp int)
+0:93        'out_i1' (temp int)
+0:93        imageAtomicOr (temp int)
+0:93          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:93          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              6 (const uint)
+0:93          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              5 (const uint)
+0:94      imageAtomicXor (temp int)
+0:94        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:94        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            6 (const uint)
+0:94        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            8 (const uint)
+0:95      move second child to first child (temp int)
+0:95        'out_i1' (temp int)
+0:95        imageAtomicXor (temp int)
+0:95          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:95          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              6 (const uint)
+0:95          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              5 (const uint)
+0:98      imageAtomicAdd (temp uint)
+0:98        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            1 (const uint)
+0:98        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            0 (const uint)
+0:99      move second child to first child (temp uint)
+0:99        'out_u1' (temp uint)
+0:99        imageAtomicAdd (temp uint)
+0:99          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:99          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              1 (const uint)
+0:99          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              0 (const uint)
+0:100      imageAtomicAnd (temp uint)
+0:100        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:100        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            1 (const uint)
+0:100        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            0 (const uint)
+0:101      move second child to first child (temp uint)
+0:101        'out_u1' (temp uint)
+0:101        imageAtomicAnd (temp uint)
+0:101          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:101          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              1 (const uint)
+0:101          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              0 (const uint)
+0:102      move second child to first child (temp uint)
+0:102        'out_u1' (temp uint)
+0:102        imageAtomicCompSwap (temp uint)
+0:102          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:102          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              1 (const uint)
+0:102          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              3 (const uint)
+0:102          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              4 (const uint)
+0:103      move second child to first child (temp uint)
+0:103        'out_u1' (temp uint)
+0:103        imageAtomicExchange (temp uint)
+0:103          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:103          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              1 (const uint)
+0:103          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              0 (const uint)
+0:104      imageAtomicMax (temp uint)
+0:104        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:104        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            1 (const uint)
+0:104        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            0 (const uint)
+0:105      move second child to first child (temp uint)
+0:105        'out_u1' (temp uint)
+0:105        imageAtomicMax (temp uint)
+0:105          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:105          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              1 (const uint)
+0:105          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              0 (const uint)
+0:106      imageAtomicMin (temp uint)
+0:106        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:106        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            1 (const uint)
+0:106        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            0 (const uint)
+0:107      move second child to first child (temp uint)
+0:107        'out_u1' (temp uint)
+0:107        imageAtomicMin (temp uint)
+0:107          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:107          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              1 (const uint)
+0:107          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      imageAtomicOr (temp uint)
+0:108        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:108        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            1 (const uint)
+0:108        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            0 (const uint)
+0:109      move second child to first child (temp uint)
+0:109        'out_u1' (temp uint)
+0:109        imageAtomicOr (temp uint)
+0:109          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:109          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              1 (const uint)
+0:109          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              0 (const uint)
+0:110      imageAtomicXor (temp uint)
+0:110        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:110        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            1 (const uint)
+0:110        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            0 (const uint)
+0:111      move second child to first child (temp uint)
+0:111        'out_u1' (temp uint)
+0:111        imageAtomicXor (temp uint)
+0:111          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:111          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              1 (const uint)
+0:111          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              0 (const uint)
+0:114      imageAtomicAdd (temp int)
+0:114        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:114        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            7 (const uint)
+0:114        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            8 (const uint)
+0:115      move second child to first child (temp int)
+0:115        'out_i1' (temp int)
+0:115        imageAtomicAdd (temp int)
+0:115          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:115          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              7 (const uint)
+0:115          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              5 (const uint)
+0:116      imageAtomicAnd (temp int)
+0:116        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:116        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            7 (const uint)
+0:116        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            8 (const uint)
+0:117      move second child to first child (temp int)
+0:117        'out_i1' (temp int)
+0:117        imageAtomicAnd (temp int)
+0:117          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:117          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              7 (const uint)
+0:117          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              5 (const uint)
+0:118      move second child to first child (temp int)
+0:118        'out_i1' (temp int)
+0:118        imageAtomicCompSwap (temp int)
+0:118          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:118          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              7 (const uint)
+0:118          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              8 (const uint)
+0:118          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              9 (const uint)
+0:119      move second child to first child (temp int)
+0:119        'out_i1' (temp int)
+0:119        imageAtomicExchange (temp int)
+0:119          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:119          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              7 (const uint)
+0:119          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              5 (const uint)
+0:120      imageAtomicMax (temp int)
+0:120        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:120        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            7 (const uint)
+0:120        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            8 (const uint)
+0:121      move second child to first child (temp int)
+0:121        'out_i1' (temp int)
+0:121        imageAtomicMax (temp int)
+0:121          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:121          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              7 (const uint)
+0:121          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              5 (const uint)
+0:122      imageAtomicMin (temp int)
+0:122        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:122        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            7 (const uint)
+0:122        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            8 (const uint)
+0:123      move second child to first child (temp int)
+0:123        'out_i1' (temp int)
+0:123        imageAtomicMin (temp int)
+0:123          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:123          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              7 (const uint)
+0:123          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              5 (const uint)
+0:124      imageAtomicOr (temp int)
+0:124        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:124        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            7 (const uint)
+0:124        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            8 (const uint)
+0:125      move second child to first child (temp int)
+0:125        'out_i1' (temp int)
+0:125        imageAtomicOr (temp int)
+0:125          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:125          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              7 (const uint)
+0:125          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              5 (const uint)
+0:126      imageAtomicXor (temp int)
+0:126        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:126        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            7 (const uint)
+0:126        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            8 (const uint)
+0:127      move second child to first child (temp int)
+0:127        'out_i1' (temp int)
+0:127        imageAtomicXor (temp int)
+0:127          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:127          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              7 (const uint)
+0:127          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              5 (const uint)
+0:130      imageAtomicAdd (temp uint)
+0:130        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:130        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            2 (const uint)
+0:130        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            0 (const uint)
+0:131      move second child to first child (temp uint)
+0:131        'out_u1' (temp uint)
+0:131        imageAtomicAdd (temp uint)
+0:131          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:131          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              2 (const uint)
+0:131          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              0 (const uint)
+0:132      imageAtomicAnd (temp uint)
+0:132        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:132        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            2 (const uint)
+0:132        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            0 (const uint)
+0:133      move second child to first child (temp uint)
+0:133        'out_u1' (temp uint)
+0:133        imageAtomicAnd (temp uint)
+0:133          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:133          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              2 (const uint)
+0:133          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              0 (const uint)
+0:134      move second child to first child (temp uint)
+0:134        'out_u1' (temp uint)
+0:134        imageAtomicCompSwap (temp uint)
+0:134          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:134          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              2 (const uint)
+0:134          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              3 (const uint)
+0:134          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              4 (const uint)
+0:135      move second child to first child (temp uint)
+0:135        'out_u1' (temp uint)
+0:135        imageAtomicExchange (temp uint)
+0:135          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:135          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              2 (const uint)
+0:135          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              0 (const uint)
+0:136      imageAtomicMax (temp uint)
+0:136        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:136        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            2 (const uint)
+0:136        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            0 (const uint)
+0:137      move second child to first child (temp uint)
+0:137        'out_u1' (temp uint)
+0:137        imageAtomicMax (temp uint)
+0:137          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:137          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              2 (const uint)
+0:137          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              0 (const uint)
+0:138      imageAtomicMin (temp uint)
+0:138        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:138        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            2 (const uint)
+0:138        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            0 (const uint)
+0:139      move second child to first child (temp uint)
+0:139        'out_u1' (temp uint)
+0:139        imageAtomicMin (temp uint)
+0:139          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:139          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              2 (const uint)
+0:139          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              0 (const uint)
+0:140      imageAtomicOr (temp uint)
+0:140        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:140        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            2 (const uint)
+0:140        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            0 (const uint)
+0:141      move second child to first child (temp uint)
+0:141        'out_u1' (temp uint)
+0:141        imageAtomicOr (temp uint)
+0:141          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:141          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              2 (const uint)
+0:141          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              0 (const uint)
+0:142      imageAtomicXor (temp uint)
+0:142        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:142        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            2 (const uint)
+0:142        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            0 (const uint)
+0:143      move second child to first child (temp uint)
+0:143        'out_u1' (temp uint)
+0:143        imageAtomicXor (temp uint)
+0:143          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:143          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              2 (const uint)
+0:143          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              0 (const uint)
+0:146      imageAtomicAdd (temp int)
+0:146        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:146        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            6 (const uint)
+0:146        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            8 (const uint)
+0:147      move second child to first child (temp int)
+0:147        'out_i1' (temp int)
+0:147        imageAtomicAdd (temp int)
+0:147          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:147          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              6 (const uint)
+0:147          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              5 (const uint)
+0:148      imageAtomicAnd (temp int)
+0:148        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:148        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            6 (const uint)
+0:148        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            8 (const uint)
+0:149      move second child to first child (temp int)
+0:149        'out_i1' (temp int)
+0:149        imageAtomicAnd (temp int)
+0:149          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:149          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              6 (const uint)
+0:149          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              5 (const uint)
+0:150      move second child to first child (temp int)
+0:150        'out_i1' (temp int)
+0:150        imageAtomicCompSwap (temp int)
+0:150          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:150          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              6 (const uint)
+0:150          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              8 (const uint)
+0:150          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              9 (const uint)
+0:151      move second child to first child (temp int)
+0:151        'out_i1' (temp int)
+0:151        imageAtomicExchange (temp int)
+0:151          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:151          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              6 (const uint)
+0:151          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              5 (const uint)
+0:152      imageAtomicMax (temp int)
+0:152        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:152        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            6 (const uint)
+0:152        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            8 (const uint)
+0:153      move second child to first child (temp int)
+0:153        'out_i1' (temp int)
+0:153        imageAtomicMax (temp int)
+0:153          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:153          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              6 (const uint)
+0:153          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              5 (const uint)
+0:154      imageAtomicMin (temp int)
+0:154        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:154        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            6 (const uint)
+0:154        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            8 (const uint)
+0:155      move second child to first child (temp int)
+0:155        'out_i1' (temp int)
+0:155        imageAtomicMin (temp int)
+0:155          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:155          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              6 (const uint)
+0:155          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              5 (const uint)
+0:156      imageAtomicOr (temp int)
+0:156        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:156        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            6 (const uint)
+0:156        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            8 (const uint)
+0:157      move second child to first child (temp int)
+0:157        'out_i1' (temp int)
+0:157        imageAtomicOr (temp int)
+0:157          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:157          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              6 (const uint)
+0:157          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              5 (const uint)
+0:158      imageAtomicXor (temp int)
+0:158        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:158        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            6 (const uint)
+0:158        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            8 (const uint)
+0:159      move second child to first child (temp int)
+0:159        'out_i1' (temp int)
+0:159        imageAtomicXor (temp int)
+0:159          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:159          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              6 (const uint)
+0:159          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              5 (const uint)
+0:162      imageAtomicAdd (temp uint)
+0:162        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:162        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            1 (const uint)
+0:162        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            0 (const uint)
+0:163      move second child to first child (temp uint)
+0:163        'out_u1' (temp uint)
+0:163        imageAtomicAdd (temp uint)
+0:163          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:163          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              1 (const uint)
+0:163          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              0 (const uint)
+0:164      imageAtomicAnd (temp uint)
+0:164        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:164        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            1 (const uint)
+0:164        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      move second child to first child (temp uint)
+0:165        'out_u1' (temp uint)
+0:165        imageAtomicAnd (temp uint)
+0:165          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:165          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              1 (const uint)
+0:165          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              0 (const uint)
+0:166      move second child to first child (temp uint)
+0:166        'out_u1' (temp uint)
+0:166        imageAtomicCompSwap (temp uint)
+0:166          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:166          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              1 (const uint)
+0:166          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              3 (const uint)
+0:166          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              4 (const uint)
+0:167      move second child to first child (temp uint)
+0:167        'out_u1' (temp uint)
+0:167        imageAtomicExchange (temp uint)
+0:167          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:167          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              1 (const uint)
+0:167          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              0 (const uint)
+0:168      imageAtomicMax (temp uint)
+0:168        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:168        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            1 (const uint)
+0:168        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            0 (const uint)
+0:169      move second child to first child (temp uint)
+0:169        'out_u1' (temp uint)
+0:169        imageAtomicMax (temp uint)
+0:169          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:169          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              1 (const uint)
+0:169          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              0 (const uint)
+0:170      imageAtomicMin (temp uint)
+0:170        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:170        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            1 (const uint)
+0:170        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            0 (const uint)
+0:171      move second child to first child (temp uint)
+0:171        'out_u1' (temp uint)
+0:171        imageAtomicMin (temp uint)
+0:171          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:171          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              1 (const uint)
+0:171          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              0 (const uint)
+0:172      imageAtomicOr (temp uint)
+0:172        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:172        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            1 (const uint)
+0:172        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            0 (const uint)
+0:173      move second child to first child (temp uint)
+0:173        'out_u1' (temp uint)
+0:173        imageAtomicOr (temp uint)
+0:173          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:173          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              1 (const uint)
+0:173          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              0 (const uint)
+0:174      imageAtomicXor (temp uint)
+0:174        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:174        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            1 (const uint)
+0:174        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      move second child to first child (temp uint)
+0:175        'out_u1' (temp uint)
+0:175        imageAtomicXor (temp uint)
+0:175          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:175          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              1 (const uint)
+0:175          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              0 (const uint)
+0:178      imageAtomicAdd (temp int)
+0:178        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:178        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            6 (const uint)
+0:178        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            8 (const uint)
+0:179      move second child to first child (temp int)
+0:179        'out_i1' (temp int)
+0:179        imageAtomicAdd (temp int)
+0:179          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:179          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              6 (const uint)
+0:179          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              5 (const uint)
+0:180      imageAtomicAnd (temp int)
+0:180        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:180        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            6 (const uint)
+0:180        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            8 (const uint)
+0:181      move second child to first child (temp int)
+0:181        'out_i1' (temp int)
+0:181        imageAtomicAnd (temp int)
+0:181          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:181          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              6 (const uint)
+0:181          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              5 (const uint)
+0:182      move second child to first child (temp int)
+0:182        'out_i1' (temp int)
+0:182        imageAtomicCompSwap (temp int)
+0:182          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:182          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              6 (const uint)
+0:182          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              8 (const uint)
+0:182          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              9 (const uint)
+0:183      move second child to first child (temp int)
+0:183        'out_i1' (temp int)
+0:183        imageAtomicExchange (temp int)
+0:183          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:183          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              6 (const uint)
+0:183          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              5 (const uint)
+0:184      imageAtomicMax (temp int)
+0:184        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:184        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            6 (const uint)
+0:184        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            8 (const uint)
+0:185      move second child to first child (temp int)
+0:185        'out_i1' (temp int)
+0:185        imageAtomicMax (temp int)
+0:185          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:185          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              6 (const uint)
+0:185          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              5 (const uint)
+0:186      imageAtomicMin (temp int)
+0:186        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:186        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            6 (const uint)
+0:186        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            8 (const uint)
+0:187      move second child to first child (temp int)
+0:187        'out_i1' (temp int)
+0:187        imageAtomicMin (temp int)
+0:187          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:187          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              6 (const uint)
+0:187          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              5 (const uint)
+0:188      imageAtomicOr (temp int)
+0:188        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:188        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            6 (const uint)
+0:188        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            8 (const uint)
+0:189      move second child to first child (temp int)
+0:189        'out_i1' (temp int)
+0:189        imageAtomicOr (temp int)
+0:189          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:189          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              6 (const uint)
+0:189          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              5 (const uint)
+0:190      imageAtomicXor (temp int)
+0:190        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:190        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            6 (const uint)
+0:190        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            8 (const uint)
+0:191      move second child to first child (temp int)
+0:191        'out_i1' (temp int)
+0:191        imageAtomicXor (temp int)
+0:191          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:191          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              6 (const uint)
+0:191          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              5 (const uint)
+0:194      imageAtomicAdd (temp uint)
+0:194        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:194        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            1 (const uint)
+0:194        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            0 (const uint)
+0:195      move second child to first child (temp uint)
+0:195        'out_u1' (temp uint)
+0:195        imageAtomicAdd (temp uint)
+0:195          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:195          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              1 (const uint)
+0:195          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              0 (const uint)
+0:196      imageAtomicAnd (temp uint)
+0:196        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:196        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            1 (const uint)
+0:196        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            0 (const uint)
+0:197      move second child to first child (temp uint)
+0:197        'out_u1' (temp uint)
+0:197        imageAtomicAnd (temp uint)
+0:197          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:197          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              1 (const uint)
+0:197          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              0 (const uint)
+0:198      move second child to first child (temp uint)
+0:198        'out_u1' (temp uint)
+0:198        imageAtomicCompSwap (temp uint)
+0:198          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:198          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              1 (const uint)
+0:198          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              3 (const uint)
+0:198          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              4 (const uint)
+0:199      move second child to first child (temp uint)
+0:199        'out_u1' (temp uint)
+0:199        imageAtomicExchange (temp uint)
+0:199          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:199          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              1 (const uint)
+0:199          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              0 (const uint)
+0:200      imageAtomicMax (temp uint)
+0:200        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:200        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            1 (const uint)
+0:200        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            0 (const uint)
+0:201      move second child to first child (temp uint)
+0:201        'out_u1' (temp uint)
+0:201        imageAtomicMax (temp uint)
+0:201          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:201          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              1 (const uint)
+0:201          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              0 (const uint)
+0:202      imageAtomicMin (temp uint)
+0:202        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:202        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            1 (const uint)
+0:202        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            0 (const uint)
+0:203      move second child to first child (temp uint)
+0:203        'out_u1' (temp uint)
+0:203        imageAtomicMin (temp uint)
+0:203          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:203          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              1 (const uint)
+0:203          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              0 (const uint)
+0:204      imageAtomicOr (temp uint)
+0:204        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:204        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            1 (const uint)
+0:204        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            0 (const uint)
+0:205      move second child to first child (temp uint)
+0:205        'out_u1' (temp uint)
+0:205        imageAtomicOr (temp uint)
+0:205          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:205          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              1 (const uint)
+0:205          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              0 (const uint)
+0:206      imageAtomicXor (temp uint)
+0:206        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:206        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            1 (const uint)
+0:206        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            0 (const uint)
+0:207      move second child to first child (temp uint)
+0:207        'out_u1' (temp uint)
+0:207        imageAtomicXor (temp uint)
+0:207          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:207          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              1 (const uint)
+0:207          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              0 (const uint)
+0:210      imageAtomicAdd (temp int)
+0:210        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:210        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            5 (const uint)
+0:210        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            8 (const uint)
+0:211      move second child to first child (temp int)
+0:211        'out_i1' (temp int)
+0:211        imageAtomicAdd (temp int)
+0:211          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:212      imageAtomicAnd (temp int)
+0:212        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:212        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            5 (const uint)
+0:212        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            8 (const uint)
+0:213      move second child to first child (temp int)
+0:213        'out_i1' (temp int)
+0:213        imageAtomicAnd (temp int)
+0:213          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:214      move second child to first child (temp int)
+0:214        'out_i1' (temp int)
+0:214        imageAtomicCompSwap (temp int)
+0:214          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:214          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              5 (const uint)
+0:214          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              8 (const uint)
+0:214          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              9 (const uint)
+0:215      move second child to first child (temp int)
+0:215        'out_i1' (temp int)
+0:215        imageAtomicExchange (temp int)
+0:215          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:216      imageAtomicMax (temp int)
+0:216        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:216        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            5 (const uint)
+0:216        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            8 (const uint)
+0:217      move second child to first child (temp int)
+0:217        'out_i1' (temp int)
+0:217        imageAtomicMax (temp int)
+0:217          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:218      imageAtomicMin (temp int)
+0:218        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:218        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            5 (const uint)
+0:218        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            8 (const uint)
+0:219      move second child to first child (temp int)
+0:219        'out_i1' (temp int)
+0:219        imageAtomicMin (temp int)
+0:219          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:220      imageAtomicOr (temp int)
+0:220        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:220        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            5 (const uint)
+0:220        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            8 (const uint)
+0:221      move second child to first child (temp int)
+0:221        'out_i1' (temp int)
+0:221        imageAtomicOr (temp int)
+0:221          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:222      imageAtomicXor (temp int)
+0:222        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:222        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            5 (const uint)
+0:222        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            8 (const uint)
+0:223      move second child to first child (temp int)
+0:223        'out_i1' (temp int)
+0:223        imageAtomicXor (temp int)
+0:223          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:226      imageAtomicAdd (temp uint)
+0:226        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:227      move second child to first child (temp uint)
+0:227        'out_u1' (temp uint)
+0:227        imageAtomicAdd (temp uint)
+0:227          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:228      imageAtomicAnd (temp uint)
+0:228        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:229      move second child to first child (temp uint)
+0:229        'out_u1' (temp uint)
+0:229        imageAtomicAnd (temp uint)
+0:229          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:230      move second child to first child (temp uint)
+0:230        'out_u1' (temp uint)
+0:230        imageAtomicCompSwap (temp uint)
+0:230          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:230          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              0 (const uint)
+0:230          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              3 (const uint)
+0:230          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              4 (const uint)
+0:231      move second child to first child (temp uint)
+0:231        'out_u1' (temp uint)
+0:231        imageAtomicExchange (temp uint)
+0:231          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:232      imageAtomicMax (temp uint)
+0:232        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:233      move second child to first child (temp uint)
+0:233        'out_u1' (temp uint)
+0:233        imageAtomicMax (temp uint)
+0:233          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:234      imageAtomicMin (temp uint)
+0:234        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:235      move second child to first child (temp uint)
+0:235        'out_u1' (temp uint)
+0:235        imageAtomicMin (temp uint)
+0:235          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:236      imageAtomicOr (temp uint)
+0:236        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:237      move second child to first child (temp uint)
+0:237        'out_u1' (temp uint)
+0:237        imageAtomicOr (temp uint)
+0:237          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:238      imageAtomicXor (temp uint)
+0:238        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:239      move second child to first child (temp uint)
+0:239        'out_u1' (temp uint)
+0:239        imageAtomicXor (temp uint)
+0:239          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:242      move second child to first child (temp 4-component vector of float)
+0:242        Color: direct index for structure (temp 4-component vector of float)
+0:242          'psout' (temp structure{temp 4-component vector of float Color})
+0:242          Constant:
+0:242            0 (const int)
+0:242        Constant:
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:243      Sequence
+0:243        Sequence
+0:243          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:243            Color: direct index for structure (temp 4-component vector of float)
+0:243              'psout' (temp structure{temp 4-component vector of float Color})
+0:243              Constant:
+0:243                0 (const int)
+0:243        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(r32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 1142
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 1111
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "g_tTex1di1"
+                              Name 15  "$Global"
+                              MemberName 15($Global) 0  "u1"
+                              MemberName 15($Global) 1  "u2"
+                              MemberName 15($Global) 2  "u3"
+                              MemberName 15($Global) 3  "u1b"
+                              MemberName 15($Global) 4  "u1c"
+                              MemberName 15($Global) 5  "i1"
+                              MemberName 15($Global) 6  "i2"
+                              MemberName 15($Global) 7  "i3"
+                              MemberName 15($Global) 8  "i1b"
+                              MemberName 15($Global) 9  "i1c"
+                              Name 17  ""
+                              Name 31  "out_i1"
+                              Name 115  "g_tTex1du1"
+                              Name 126  "out_u1"
+                              Name 211  "g_tTex2di1"
+                              Name 302  "g_tTex2du1"
+                              Name 393  "g_tTex3di1"
+                              Name 484  "g_tTex3du1"
+                              Name 575  "g_tTex1di1a"
+                              Name 664  "g_tTex1du1a"
+                              Name 925  "g_tBuffI"
+                              Name 1014  "g_tBuffU"
+                              Name 1103  "PS_OUTPUT"
+                              MemberName 1103(PS_OUTPUT) 0  "Color"
+                              Name 1105  "psout"
+                              Name 1111  "Color"
+                              Name 1117  "g_sSamp"
+                              Name 1120  "g_tTex1df1"
+                              Name 1123  "g_tTex2df1"
+                              Name 1126  "g_tTex3df1"
+                              Name 1129  "g_tTex1df1a"
+                              Name 1132  "g_tTex2df1a"
+                              Name 1135  "g_tTex2di1a"
+                              Name 1138  "g_tTex2du1a"
+                              Name 1141  "g_tBuffF"
+                              Decorate 9(g_tTex1di1) 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 28
+                              MemberDecorate 15($Global) 4 Offset 32
+                              MemberDecorate 15($Global) 5 Offset 36
+                              MemberDecorate 15($Global) 6 Offset 40
+                              MemberDecorate 15($Global) 7 Offset 48
+                              MemberDecorate 15($Global) 8 Offset 60
+                              MemberDecorate 15($Global) 9 Offset 64
+                              Decorate 15($Global) Block
+                              Decorate 17 DescriptorSet 0
+                              Decorate 115(g_tTex1du1) DescriptorSet 0
+                              Decorate 211(g_tTex2di1) DescriptorSet 0
+                              Decorate 302(g_tTex2du1) DescriptorSet 0
+                              Decorate 393(g_tTex3di1) DescriptorSet 0
+                              Decorate 484(g_tTex3du1) DescriptorSet 0
+                              Decorate 575(g_tTex1di1a) DescriptorSet 0
+                              Decorate 664(g_tTex1du1a) DescriptorSet 0
+                              Decorate 925(g_tBuffI) DescriptorSet 0
+                              Decorate 1014(g_tBuffU) DescriptorSet 0
+                              Decorate 1111(Color) Location 0
+                              Decorate 1117(g_sSamp) DescriptorSet 0
+                              Decorate 1120(g_tTex1df1) DescriptorSet 0
+                              Decorate 1123(g_tTex2df1) DescriptorSet 0
+                              Decorate 1126(g_tTex3df1) DescriptorSet 0
+                              Decorate 1129(g_tTex1df1a) DescriptorSet 0
+                              Decorate 1132(g_tTex2df1a) DescriptorSet 0
+                              Decorate 1135(g_tTex2di1a) DescriptorSet 0
+                              Decorate 1138(g_tTex2du1a) DescriptorSet 0
+                              Decorate 1141(g_tBuffF) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeImage 6(int) 1D nonsampled format:R32i
+               8:             TypePointer UniformConstant 7
+   9(g_tTex1di1):      8(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:             TypeVector 10(int) 2
+              12:             TypeVector 10(int) 3
+              13:             TypeVector 6(int) 2
+              14:             TypeVector 6(int) 3
+     15($Global):             TypeStruct 10(int) 11(ivec2) 12(ivec3) 10(int) 10(int) 6(int) 13(ivec2) 14(ivec3) 6(int) 6(int)
+              16:             TypePointer Uniform 15($Global)
+              17:     16(ptr) Variable Uniform
+              18:      6(int) Constant 5
+              19:             TypePointer Uniform 6(int)
+              22:      6(int) Constant 8
+              25:     10(int) Constant 0
+              26:             TypePointer Image 6(int)
+              28:     10(int) Constant 1
+              30:             TypePointer Function 6(int)
+              54:      6(int) Constant 9
+             113:             TypeImage 10(int) 1D nonsampled format:R32ui
+             114:             TypePointer UniformConstant 113
+ 115(g_tTex1du1):    114(ptr) Variable UniformConstant
+             116:      6(int) Constant 0
+             117:             TypePointer Uniform 10(int)
+             122:             TypePointer Image 10(int)
+             125:             TypePointer Function 10(int)
+             147:      6(int) Constant 3
+             150:      6(int) Constant 4
+             209:             TypeImage 6(int) 2D nonsampled format:R32i
+             210:             TypePointer UniformConstant 209
+ 211(g_tTex2di1):    210(ptr) Variable UniformConstant
+             212:      6(int) Constant 6
+             213:             TypePointer Uniform 13(ivec2)
+             300:             TypeImage 10(int) 2D nonsampled format:R32ui
+             301:             TypePointer UniformConstant 300
+ 302(g_tTex2du1):    301(ptr) Variable UniformConstant
+             303:      6(int) Constant 1
+             304:             TypePointer Uniform 11(ivec2)
+             391:             TypeImage 6(int) 3D nonsampled format:R32i
+             392:             TypePointer UniformConstant 391
+ 393(g_tTex3di1):    392(ptr) Variable UniformConstant
+             394:      6(int) Constant 7
+             395:             TypePointer Uniform 14(ivec3)
+             482:             TypeImage 10(int) 3D nonsampled format:R32ui
+             483:             TypePointer UniformConstant 482
+ 484(g_tTex3du1):    483(ptr) Variable UniformConstant
+             485:      6(int) Constant 2
+             486:             TypePointer Uniform 12(ivec3)
+             573:             TypeImage 6(int) 1D array nonsampled format:R32i
+             574:             TypePointer UniformConstant 573
+575(g_tTex1di1a):    574(ptr) Variable UniformConstant
+             662:             TypeImage 10(int) 1D array nonsampled format:R32ui
+             663:             TypePointer UniformConstant 662
+664(g_tTex1du1a):    663(ptr) Variable UniformConstant
+             923:             TypeImage 6(int) Buffer nonsampled format:R32i
+             924:             TypePointer UniformConstant 923
+   925(g_tBuffI):    924(ptr) Variable UniformConstant
+            1012:             TypeImage 10(int) Buffer nonsampled format:R32ui
+            1013:             TypePointer UniformConstant 1012
+  1014(g_tBuffU):   1013(ptr) Variable UniformConstant
+            1101:             TypeFloat 32
+            1102:             TypeVector 1101(float) 4
+ 1103(PS_OUTPUT):             TypeStruct 1102(fvec4)
+            1104:             TypePointer Function 1103(PS_OUTPUT)
+            1106: 1101(float) Constant 1065353216
+            1107: 1102(fvec4) ConstantComposite 1106 1106 1106 1106
+            1108:             TypePointer Function 1102(fvec4)
+            1110:             TypePointer Output 1102(fvec4)
+     1111(Color):   1110(ptr) Variable Output
+            1115:             TypeSampler
+            1116:             TypePointer UniformConstant 1115
+   1117(g_sSamp):   1116(ptr) Variable UniformConstant
+            1118:             TypeImage 1101(float) 1D nonsampled format:R32f
+            1119:             TypePointer UniformConstant 1118
+1120(g_tTex1df1):   1119(ptr) Variable UniformConstant
+            1121:             TypeImage 1101(float) 2D nonsampled format:R32f
+            1122:             TypePointer UniformConstant 1121
+1123(g_tTex2df1):   1122(ptr) Variable UniformConstant
+            1124:             TypeImage 1101(float) 3D nonsampled format:R32f
+            1125:             TypePointer UniformConstant 1124
+1126(g_tTex3df1):   1125(ptr) Variable UniformConstant
+            1127:             TypeImage 1101(float) 1D array nonsampled format:R32f
+            1128:             TypePointer UniformConstant 1127
+1129(g_tTex1df1a):   1128(ptr) Variable UniformConstant
+            1130:             TypeImage 1101(float) 2D array nonsampled format:R32f
+            1131:             TypePointer UniformConstant 1130
+1132(g_tTex2df1a):   1131(ptr) Variable UniformConstant
+            1133:             TypeImage 6(int) 2D array nonsampled format:R32i
+            1134:             TypePointer UniformConstant 1133
+1135(g_tTex2di1a):   1134(ptr) Variable UniformConstant
+            1136:             TypeImage 10(int) 2D array nonsampled format:R32ui
+            1137:             TypePointer UniformConstant 1136
+1138(g_tTex2du1a):   1137(ptr) Variable UniformConstant
+            1139:             TypeImage 1101(float) Buffer nonsampled format:R32f
+            1140:             TypePointer UniformConstant 1139
+  1141(g_tBuffF):   1140(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      31(out_i1):     30(ptr) Variable Function
+     126(out_u1):    125(ptr) Variable Function
+     1105(psout):   1104(ptr) Variable Function
+              20:     19(ptr) AccessChain 17 18
+              21:      6(int) Load 20
+              23:     19(ptr) AccessChain 17 22
+              24:      6(int) Load 23
+              27:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 21 25
+              29:      6(int) AtomicIAdd 27 28 25 24
+              32:     19(ptr) AccessChain 17 18
+              33:      6(int) Load 32
+              34:     19(ptr) AccessChain 17 18
+              35:      6(int) Load 34
+              36:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 33 25
+              37:      6(int) AtomicIAdd 36 28 25 35
+                              Store 31(out_i1) 37
+              38:     19(ptr) AccessChain 17 18
+              39:      6(int) Load 38
+              40:     19(ptr) AccessChain 17 22
+              41:      6(int) Load 40
+              42:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 39 25
+              43:      6(int) AtomicAnd 42 28 25 41
+              44:     19(ptr) AccessChain 17 18
+              45:      6(int) Load 44
+              46:     19(ptr) AccessChain 17 18
+              47:      6(int) Load 46
+              48:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 45 25
+              49:      6(int) AtomicAnd 48 28 25 47
+                              Store 31(out_i1) 49
+              50:     19(ptr) AccessChain 17 18
+              51:      6(int) Load 50
+              52:     19(ptr) AccessChain 17 22
+              53:      6(int) Load 52
+              55:     19(ptr) AccessChain 17 54
+              56:      6(int) Load 55
+              57:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 51 25
+              58:      6(int) AtomicCompareExchange 57 28 25 25 56 53
+                              Store 31(out_i1) 58
+              59:     19(ptr) AccessChain 17 18
+              60:      6(int) Load 59
+              61:     19(ptr) AccessChain 17 18
+              62:      6(int) Load 61
+              63:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 60 25
+              64:      6(int) AtomicExchange 63 28 25 62
+                              Store 31(out_i1) 64
+              65:     19(ptr) AccessChain 17 18
+              66:      6(int) Load 65
+              67:     19(ptr) AccessChain 17 22
+              68:      6(int) Load 67
+              69:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 66 25
+              70:      6(int) AtomicSMax 69 28 25 68
+              71:     19(ptr) AccessChain 17 18
+              72:      6(int) Load 71
+              73:     19(ptr) AccessChain 17 18
+              74:      6(int) Load 73
+              75:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 72 25
+              76:      6(int) AtomicSMax 75 28 25 74
+                              Store 31(out_i1) 76
+              77:     19(ptr) AccessChain 17 18
+              78:      6(int) Load 77
+              79:     19(ptr) AccessChain 17 22
+              80:      6(int) Load 79
+              81:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 78 25
+              82:      6(int) AtomicSMin 81 28 25 80
+              83:     19(ptr) AccessChain 17 18
+              84:      6(int) Load 83
+              85:     19(ptr) AccessChain 17 18
+              86:      6(int) Load 85
+              87:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 84 25
+              88:      6(int) AtomicSMin 87 28 25 86
+                              Store 31(out_i1) 88
+              89:     19(ptr) AccessChain 17 18
+              90:      6(int) Load 89
+              91:     19(ptr) AccessChain 17 22
+              92:      6(int) Load 91
+              93:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 90 25
+              94:      6(int) AtomicOr 93 28 25 92
+              95:     19(ptr) AccessChain 17 18
+              96:      6(int) Load 95
+              97:     19(ptr) AccessChain 17 18
+              98:      6(int) Load 97
+              99:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 96 25
+             100:      6(int) AtomicOr 99 28 25 98
+                              Store 31(out_i1) 100
+             101:     19(ptr) AccessChain 17 18
+             102:      6(int) Load 101
+             103:     19(ptr) AccessChain 17 22
+             104:      6(int) Load 103
+             105:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 102 25
+             106:      6(int) AtomicXor 105 28 25 104
+             107:     19(ptr) AccessChain 17 18
+             108:      6(int) Load 107
+             109:     19(ptr) AccessChain 17 18
+             110:      6(int) Load 109
+             111:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 108 25
+             112:      6(int) AtomicXor 111 28 25 110
+                              Store 31(out_i1) 112
+             118:    117(ptr) AccessChain 17 116
+             119:     10(int) Load 118
+             120:    117(ptr) AccessChain 17 116
+             121:     10(int) Load 120
+             123:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 119 25
+             124:     10(int) AtomicIAdd 123 28 25 121
+             127:    117(ptr) AccessChain 17 116
+             128:     10(int) Load 127
+             129:    117(ptr) AccessChain 17 116
+             130:     10(int) Load 129
+             131:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 128 25
+             132:     10(int) AtomicIAdd 131 28 25 130
+                              Store 126(out_u1) 132
+             133:    117(ptr) AccessChain 17 116
+             134:     10(int) Load 133
+             135:    117(ptr) AccessChain 17 116
+             136:     10(int) Load 135
+             137:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 134 25
+             138:     10(int) AtomicAnd 137 28 25 136
+             139:    117(ptr) AccessChain 17 116
+             140:     10(int) Load 139
+             141:    117(ptr) AccessChain 17 116
+             142:     10(int) Load 141
+             143:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 140 25
+             144:     10(int) AtomicAnd 143 28 25 142
+                              Store 126(out_u1) 144
+             145:    117(ptr) AccessChain 17 116
+             146:     10(int) Load 145
+             148:    117(ptr) AccessChain 17 147
+             149:     10(int) Load 148
+             151:    117(ptr) AccessChain 17 150
+             152:     10(int) Load 151
+             153:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 146 25
+             154:     10(int) AtomicCompareExchange 153 28 25 25 152 149
+                              Store 126(out_u1) 154
+             155:    117(ptr) AccessChain 17 116
+             156:     10(int) Load 155
+             157:    117(ptr) AccessChain 17 116
+             158:     10(int) Load 157
+             159:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 156 25
+             160:     10(int) AtomicExchange 159 28 25 158
+                              Store 126(out_u1) 160
+             161:    117(ptr) AccessChain 17 116
+             162:     10(int) Load 161
+             163:    117(ptr) AccessChain 17 116
+             164:     10(int) Load 163
+             165:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 162 25
+             166:     10(int) AtomicUMax 165 28 25 164
+             167:    117(ptr) AccessChain 17 116
+             168:     10(int) Load 167
+             169:    117(ptr) AccessChain 17 116
+             170:     10(int) Load 169
+             171:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 168 25
+             172:     10(int) AtomicUMax 171 28 25 170
+                              Store 126(out_u1) 172
+             173:    117(ptr) AccessChain 17 116
+             174:     10(int) Load 173
+             175:    117(ptr) AccessChain 17 116
+             176:     10(int) Load 175
+             177:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 174 25
+             178:     10(int) AtomicUMin 177 28 25 176
+             179:    117(ptr) AccessChain 17 116
+             180:     10(int) Load 179
+             181:    117(ptr) AccessChain 17 116
+             182:     10(int) Load 181
+             183:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 180 25
+             184:     10(int) AtomicUMin 183 28 25 182
+                              Store 126(out_u1) 184
+             185:    117(ptr) AccessChain 17 116
+             186:     10(int) Load 185
+             187:    117(ptr) AccessChain 17 116
+             188:     10(int) Load 187
+             189:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 186 25
+             190:     10(int) AtomicOr 189 28 25 188
+             191:    117(ptr) AccessChain 17 116
+             192:     10(int) Load 191
+             193:    117(ptr) AccessChain 17 116
+             194:     10(int) Load 193
+             195:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 192 25
+             196:     10(int) AtomicOr 195 28 25 194
+                              Store 126(out_u1) 196
+             197:    117(ptr) AccessChain 17 116
+             198:     10(int) Load 197
+             199:    117(ptr) AccessChain 17 116
+             200:     10(int) Load 199
+             201:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 198 25
+             202:     10(int) AtomicXor 201 28 25 200
+             203:    117(ptr) AccessChain 17 116
+             204:     10(int) Load 203
+             205:    117(ptr) AccessChain 17 116
+             206:     10(int) Load 205
+             207:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 204 25
+             208:     10(int) AtomicXor 207 28 25 206
+                              Store 126(out_u1) 208
+             214:    213(ptr) AccessChain 17 212
+             215:   13(ivec2) Load 214
+             216:     19(ptr) AccessChain 17 22
+             217:      6(int) Load 216
+             218:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 215 25
+             219:      6(int) AtomicIAdd 218 28 25 217
+             220:    213(ptr) AccessChain 17 212
+             221:   13(ivec2) Load 220
+             222:     19(ptr) AccessChain 17 18
+             223:      6(int) Load 222
+             224:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 221 25
+             225:      6(int) AtomicIAdd 224 28 25 223
+                              Store 31(out_i1) 225
+             226:    213(ptr) AccessChain 17 212
+             227:   13(ivec2) Load 226
+             228:     19(ptr) AccessChain 17 22
+             229:      6(int) Load 228
+             230:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 227 25
+             231:      6(int) AtomicAnd 230 28 25 229
+             232:    213(ptr) AccessChain 17 212
+             233:   13(ivec2) Load 232
+             234:     19(ptr) AccessChain 17 18
+             235:      6(int) Load 234
+             236:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 233 25
+             237:      6(int) AtomicAnd 236 28 25 235
+                              Store 31(out_i1) 237
+             238:    213(ptr) AccessChain 17 212
+             239:   13(ivec2) Load 238
+             240:     19(ptr) AccessChain 17 22
+             241:      6(int) Load 240
+             242:     19(ptr) AccessChain 17 54
+             243:      6(int) Load 242
+             244:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 239 25
+             245:      6(int) AtomicCompareExchange 244 28 25 25 243 241
+                              Store 31(out_i1) 245
+             246:    213(ptr) AccessChain 17 212
+             247:   13(ivec2) Load 246
+             248:     19(ptr) AccessChain 17 18
+             249:      6(int) Load 248
+             250:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 247 25
+             251:      6(int) AtomicExchange 250 28 25 249
+                              Store 31(out_i1) 251
+             252:    213(ptr) AccessChain 17 212
+             253:   13(ivec2) Load 252
+             254:     19(ptr) AccessChain 17 22
+             255:      6(int) Load 254
+             256:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 253 25
+             257:      6(int) AtomicSMax 256 28 25 255
+             258:    213(ptr) AccessChain 17 212
+             259:   13(ivec2) Load 258
+             260:     19(ptr) AccessChain 17 18
+             261:      6(int) Load 260
+             262:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 259 25
+             263:      6(int) AtomicSMax 262 28 25 261
+                              Store 31(out_i1) 263
+             264:    213(ptr) AccessChain 17 212
+             265:   13(ivec2) Load 264
+             266:     19(ptr) AccessChain 17 22
+             267:      6(int) Load 266
+             268:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 265 25
+             269:      6(int) AtomicSMin 268 28 25 267
+             270:    213(ptr) AccessChain 17 212
+             271:   13(ivec2) Load 270
+             272:     19(ptr) AccessChain 17 18
+             273:      6(int) Load 272
+             274:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 271 25
+             275:      6(int) AtomicSMin 274 28 25 273
+                              Store 31(out_i1) 275
+             276:    213(ptr) AccessChain 17 212
+             277:   13(ivec2) Load 276
+             278:     19(ptr) AccessChain 17 22
+             279:      6(int) Load 278
+             280:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 277 25
+             281:      6(int) AtomicOr 280 28 25 279
+             282:    213(ptr) AccessChain 17 212
+             283:   13(ivec2) Load 282
+             284:     19(ptr) AccessChain 17 18
+             285:      6(int) Load 284
+             286:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 283 25
+             287:      6(int) AtomicOr 286 28 25 285
+                              Store 31(out_i1) 287
+             288:    213(ptr) AccessChain 17 212
+             289:   13(ivec2) Load 288
+             290:     19(ptr) AccessChain 17 22
+             291:      6(int) Load 290
+             292:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 289 25
+             293:      6(int) AtomicXor 292 28 25 291
+             294:    213(ptr) AccessChain 17 212
+             295:   13(ivec2) Load 294
+             296:     19(ptr) AccessChain 17 18
+             297:      6(int) Load 296
+             298:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 295 25
+             299:      6(int) AtomicXor 298 28 25 297
+                              Store 31(out_i1) 299
+             305:    304(ptr) AccessChain 17 303
+             306:   11(ivec2) Load 305
+             307:    117(ptr) AccessChain 17 116
+             308:     10(int) Load 307
+             309:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 306 25
+             310:     10(int) AtomicIAdd 309 28 25 308
+             311:    304(ptr) AccessChain 17 303
+             312:   11(ivec2) Load 311
+             313:    117(ptr) AccessChain 17 116
+             314:     10(int) Load 313
+             315:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 312 25
+             316:     10(int) AtomicIAdd 315 28 25 314
+                              Store 126(out_u1) 316
+             317:    304(ptr) AccessChain 17 303
+             318:   11(ivec2) Load 317
+             319:    117(ptr) AccessChain 17 116
+             320:     10(int) Load 319
+             321:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 318 25
+             322:     10(int) AtomicAnd 321 28 25 320
+             323:    304(ptr) AccessChain 17 303
+             324:   11(ivec2) Load 323
+             325:    117(ptr) AccessChain 17 116
+             326:     10(int) Load 325
+             327:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 324 25
+             328:     10(int) AtomicAnd 327 28 25 326
+                              Store 126(out_u1) 328
+             329:    304(ptr) AccessChain 17 303
+             330:   11(ivec2) Load 329
+             331:    117(ptr) AccessChain 17 147
+             332:     10(int) Load 331
+             333:    117(ptr) AccessChain 17 150
+             334:     10(int) Load 333
+             335:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 330 25
+             336:     10(int) AtomicCompareExchange 335 28 25 25 334 332
+                              Store 126(out_u1) 336
+             337:    304(ptr) AccessChain 17 303
+             338:   11(ivec2) Load 337
+             339:    117(ptr) AccessChain 17 116
+             340:     10(int) Load 339
+             341:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 338 25
+             342:     10(int) AtomicExchange 341 28 25 340
+                              Store 126(out_u1) 342
+             343:    304(ptr) AccessChain 17 303
+             344:   11(ivec2) Load 343
+             345:    117(ptr) AccessChain 17 116
+             346:     10(int) Load 345
+             347:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 344 25
+             348:     10(int) AtomicUMax 347 28 25 346
+             349:    304(ptr) AccessChain 17 303
+             350:   11(ivec2) Load 349
+             351:    117(ptr) AccessChain 17 116
+             352:     10(int) Load 351
+             353:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 350 25
+             354:     10(int) AtomicUMax 353 28 25 352
+                              Store 126(out_u1) 354
+             355:    304(ptr) AccessChain 17 303
+             356:   11(ivec2) Load 355
+             357:    117(ptr) AccessChain 17 116
+             358:     10(int) Load 357
+             359:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 356 25
+             360:     10(int) AtomicUMin 359 28 25 358
+             361:    304(ptr) AccessChain 17 303
+             362:   11(ivec2) Load 361
+             363:    117(ptr) AccessChain 17 116
+             364:     10(int) Load 363
+             365:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 362 25
+             366:     10(int) AtomicUMin 365 28 25 364
+                              Store 126(out_u1) 366
+             367:    304(ptr) AccessChain 17 303
+             368:   11(ivec2) Load 367
+             369:    117(ptr) AccessChain 17 116
+             370:     10(int) Load 369
+             371:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 368 25
+             372:     10(int) AtomicOr 371 28 25 370
+             373:    304(ptr) AccessChain 17 303
+             374:   11(ivec2) Load 373
+             375:    117(ptr) AccessChain 17 116
+             376:     10(int) Load 375
+             377:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 374 25
+             378:     10(int) AtomicOr 377 28 25 376
+                              Store 126(out_u1) 378
+             379:    304(ptr) AccessChain 17 303
+             380:   11(ivec2) Load 379
+             381:    117(ptr) AccessChain 17 116
+             382:     10(int) Load 381
+             383:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 380 25
+             384:     10(int) AtomicXor 383 28 25 382
+             385:    304(ptr) AccessChain 17 303
+             386:   11(ivec2) Load 385
+             387:    117(ptr) AccessChain 17 116
+             388:     10(int) Load 387
+             389:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 386 25
+             390:     10(int) AtomicXor 389 28 25 388
+                              Store 126(out_u1) 390
+             396:    395(ptr) AccessChain 17 394
+             397:   14(ivec3) Load 396
+             398:     19(ptr) AccessChain 17 22
+             399:      6(int) Load 398
+             400:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 397 25
+             401:      6(int) AtomicIAdd 400 28 25 399
+             402:    395(ptr) AccessChain 17 394
+             403:   14(ivec3) Load 402
+             404:     19(ptr) AccessChain 17 18
+             405:      6(int) Load 404
+             406:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 403 25
+             407:      6(int) AtomicIAdd 406 28 25 405
+                              Store 31(out_i1) 407
+             408:    395(ptr) AccessChain 17 394
+             409:   14(ivec3) Load 408
+             410:     19(ptr) AccessChain 17 22
+             411:      6(int) Load 410
+             412:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 409 25
+             413:      6(int) AtomicAnd 412 28 25 411
+             414:    395(ptr) AccessChain 17 394
+             415:   14(ivec3) Load 414
+             416:     19(ptr) AccessChain 17 18
+             417:      6(int) Load 416
+             418:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 415 25
+             419:      6(int) AtomicAnd 418 28 25 417
+                              Store 31(out_i1) 419
+             420:    395(ptr) AccessChain 17 394
+             421:   14(ivec3) Load 420
+             422:     19(ptr) AccessChain 17 22
+             423:      6(int) Load 422
+             424:     19(ptr) AccessChain 17 54
+             425:      6(int) Load 424
+             426:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 421 25
+             427:      6(int) AtomicCompareExchange 426 28 25 25 425 423
+                              Store 31(out_i1) 427
+             428:    395(ptr) AccessChain 17 394
+             429:   14(ivec3) Load 428
+             430:     19(ptr) AccessChain 17 18
+             431:      6(int) Load 430
+             432:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 429 25
+             433:      6(int) AtomicExchange 432 28 25 431
+                              Store 31(out_i1) 433
+             434:    395(ptr) AccessChain 17 394
+             435:   14(ivec3) Load 434
+             436:     19(ptr) AccessChain 17 22
+             437:      6(int) Load 436
+             438:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 435 25
+             439:      6(int) AtomicSMax 438 28 25 437
+             440:    395(ptr) AccessChain 17 394
+             441:   14(ivec3) Load 440
+             442:     19(ptr) AccessChain 17 18
+             443:      6(int) Load 442
+             444:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 441 25
+             445:      6(int) AtomicSMax 444 28 25 443
+                              Store 31(out_i1) 445
+             446:    395(ptr) AccessChain 17 394
+             447:   14(ivec3) Load 446
+             448:     19(ptr) AccessChain 17 22
+             449:      6(int) Load 448
+             450:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 447 25
+             451:      6(int) AtomicSMin 450 28 25 449
+             452:    395(ptr) AccessChain 17 394
+             453:   14(ivec3) Load 452
+             454:     19(ptr) AccessChain 17 18
+             455:      6(int) Load 454
+             456:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 453 25
+             457:      6(int) AtomicSMin 456 28 25 455
+                              Store 31(out_i1) 457
+             458:    395(ptr) AccessChain 17 394
+             459:   14(ivec3) Load 458
+             460:     19(ptr) AccessChain 17 22
+             461:      6(int) Load 460
+             462:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 459 25
+             463:      6(int) AtomicOr 462 28 25 461
+             464:    395(ptr) AccessChain 17 394
+             465:   14(ivec3) Load 464
+             466:     19(ptr) AccessChain 17 18
+             467:      6(int) Load 466
+             468:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 465 25
+             469:      6(int) AtomicOr 468 28 25 467
+                              Store 31(out_i1) 469
+             470:    395(ptr) AccessChain 17 394
+             471:   14(ivec3) Load 470
+             472:     19(ptr) AccessChain 17 22
+             473:      6(int) Load 472
+             474:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 471 25
+             475:      6(int) AtomicXor 474 28 25 473
+             476:    395(ptr) AccessChain 17 394
+             477:   14(ivec3) Load 476
+             478:     19(ptr) AccessChain 17 18
+             479:      6(int) Load 478
+             480:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 477 25
+             481:      6(int) AtomicXor 480 28 25 479
+                              Store 31(out_i1) 481
+             487:    486(ptr) AccessChain 17 485
+             488:   12(ivec3) Load 487
+             489:    117(ptr) AccessChain 17 116
+             490:     10(int) Load 489
+             491:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 488 25
+             492:     10(int) AtomicIAdd 491 28 25 490
+             493:    486(ptr) AccessChain 17 485
+             494:   12(ivec3) Load 493
+             495:    117(ptr) AccessChain 17 116
+             496:     10(int) Load 495
+             497:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 494 25
+             498:     10(int) AtomicIAdd 497 28 25 496
+                              Store 126(out_u1) 498
+             499:    486(ptr) AccessChain 17 485
+             500:   12(ivec3) Load 499
+             501:    117(ptr) AccessChain 17 116
+             502:     10(int) Load 501
+             503:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 500 25
+             504:     10(int) AtomicAnd 503 28 25 502
+             505:    486(ptr) AccessChain 17 485
+             506:   12(ivec3) Load 505
+             507:    117(ptr) AccessChain 17 116
+             508:     10(int) Load 507
+             509:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 506 25
+             510:     10(int) AtomicAnd 509 28 25 508
+                              Store 126(out_u1) 510
+             511:    486(ptr) AccessChain 17 485
+             512:   12(ivec3) Load 511
+             513:    117(ptr) AccessChain 17 147
+             514:     10(int) Load 513
+             515:    117(ptr) AccessChain 17 150
+             516:     10(int) Load 515
+             517:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 512 25
+             518:     10(int) AtomicCompareExchange 517 28 25 25 516 514
+                              Store 126(out_u1) 518
+             519:    486(ptr) AccessChain 17 485
+             520:   12(ivec3) Load 519
+             521:    117(ptr) AccessChain 17 116
+             522:     10(int) Load 521
+             523:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 520 25
+             524:     10(int) AtomicExchange 523 28 25 522
+                              Store 126(out_u1) 524
+             525:    486(ptr) AccessChain 17 485
+             526:   12(ivec3) Load 525
+             527:    117(ptr) AccessChain 17 116
+             528:     10(int) Load 527
+             529:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 526 25
+             530:     10(int) AtomicUMax 529 28 25 528
+             531:    486(ptr) AccessChain 17 485
+             532:   12(ivec3) Load 531
+             533:    117(ptr) AccessChain 17 116
+             534:     10(int) Load 533
+             535:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 532 25
+             536:     10(int) AtomicUMax 535 28 25 534
+                              Store 126(out_u1) 536
+             537:    486(ptr) AccessChain 17 485
+             538:   12(ivec3) Load 537
+             539:    117(ptr) AccessChain 17 116
+             540:     10(int) Load 539
+             541:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 538 25
+             542:     10(int) AtomicUMin 541 28 25 540
+             543:    486(ptr) AccessChain 17 485
+             544:   12(ivec3) Load 543
+             545:    117(ptr) AccessChain 17 116
+             546:     10(int) Load 545
+             547:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 544 25
+             548:     10(int) AtomicUMin 547 28 25 546
+                              Store 126(out_u1) 548
+             549:    486(ptr) AccessChain 17 485
+             550:   12(ivec3) Load 549
+             551:    117(ptr) AccessChain 17 116
+             552:     10(int) Load 551
+             553:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 550 25
+             554:     10(int) AtomicOr 553 28 25 552
+             555:    486(ptr) AccessChain 17 485
+             556:   12(ivec3) Load 555
+             557:    117(ptr) AccessChain 17 116
+             558:     10(int) Load 557
+             559:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 556 25
+             560:     10(int) AtomicOr 559 28 25 558
+                              Store 126(out_u1) 560
+             561:    486(ptr) AccessChain 17 485
+             562:   12(ivec3) Load 561
+             563:    117(ptr) AccessChain 17 116
+             564:     10(int) Load 563
+             565:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 562 25
+             566:     10(int) AtomicXor 565 28 25 564
+             567:    486(ptr) AccessChain 17 485
+             568:   12(ivec3) Load 567
+             569:    117(ptr) AccessChain 17 116
+             570:     10(int) Load 569
+             571:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 568 25
+             572:     10(int) AtomicXor 571 28 25 570
+                              Store 126(out_u1) 572
+             576:    213(ptr) AccessChain 17 212
+             577:   13(ivec2) Load 576
+             578:     19(ptr) AccessChain 17 22
+             579:      6(int) Load 578
+             580:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 577 25
+             581:      6(int) AtomicIAdd 580 28 25 579
+             582:    213(ptr) AccessChain 17 212
+             583:   13(ivec2) Load 582
+             584:     19(ptr) AccessChain 17 18
+             585:      6(int) Load 584
+             586:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 583 25
+             587:      6(int) AtomicIAdd 586 28 25 585
+                              Store 31(out_i1) 587
+             588:    213(ptr) AccessChain 17 212
+             589:   13(ivec2) Load 588
+             590:     19(ptr) AccessChain 17 22
+             591:      6(int) Load 590
+             592:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 589 25
+             593:      6(int) AtomicAnd 592 28 25 591
+             594:    213(ptr) AccessChain 17 212
+             595:   13(ivec2) Load 594
+             596:     19(ptr) AccessChain 17 18
+             597:      6(int) Load 596
+             598:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 595 25
+             599:      6(int) AtomicAnd 598 28 25 597
+                              Store 31(out_i1) 599
+             600:    213(ptr) AccessChain 17 212
+             601:   13(ivec2) Load 600
+             602:     19(ptr) AccessChain 17 22
+             603:      6(int) Load 602
+             604:     19(ptr) AccessChain 17 54
+             605:      6(int) Load 604
+             606:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 601 25
+             607:      6(int) AtomicCompareExchange 606 28 25 25 605 603
+                              Store 31(out_i1) 607
+             608:    213(ptr) AccessChain 17 212
+             609:   13(ivec2) Load 608
+             610:     19(ptr) AccessChain 17 18
+             611:      6(int) Load 610
+             612:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 609 25
+             613:      6(int) AtomicExchange 612 28 25 611
+                              Store 31(out_i1) 613
+             614:    213(ptr) AccessChain 17 212
+             615:   13(ivec2) Load 614
+             616:     19(ptr) AccessChain 17 22
+             617:      6(int) Load 616
+             618:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 615 25
+             619:      6(int) AtomicSMax 618 28 25 617
+             620:    213(ptr) AccessChain 17 212
+             621:   13(ivec2) Load 620
+             622:     19(ptr) AccessChain 17 18
+             623:      6(int) Load 622
+             624:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 621 25
+             625:      6(int) AtomicSMax 624 28 25 623
+                              Store 31(out_i1) 625
+             626:    213(ptr) AccessChain 17 212
+             627:   13(ivec2) Load 626
+             628:     19(ptr) AccessChain 17 22
+             629:      6(int) Load 628
+             630:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 627 25
+             631:      6(int) AtomicSMin 630 28 25 629
+             632:    213(ptr) AccessChain 17 212
+             633:   13(ivec2) Load 632
+             634:     19(ptr) AccessChain 17 18
+             635:      6(int) Load 634
+             636:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 633 25
+             637:      6(int) AtomicSMin 636 28 25 635
+                              Store 31(out_i1) 637
+             638:    213(ptr) AccessChain 17 212
+             639:   13(ivec2) Load 638
+             640:     19(ptr) AccessChain 17 22
+             641:      6(int) Load 640
+             642:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 639 25
+             643:      6(int) AtomicOr 642 28 25 641
+             644:    213(ptr) AccessChain 17 212
+             645:   13(ivec2) Load 644
+             646:     19(ptr) AccessChain 17 18
+             647:      6(int) Load 646
+             648:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 645 25
+             649:      6(int) AtomicOr 648 28 25 647
+                              Store 31(out_i1) 649
+             650:    213(ptr) AccessChain 17 212
+             651:   13(ivec2) Load 650
+             652:     19(ptr) AccessChain 17 22
+             653:      6(int) Load 652
+             654:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 651 25
+             655:      6(int) AtomicXor 654 28 25 653
+             656:    213(ptr) AccessChain 17 212
+             657:   13(ivec2) Load 656
+             658:     19(ptr) AccessChain 17 18
+             659:      6(int) Load 658
+             660:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 657 25
+             661:      6(int) AtomicXor 660 28 25 659
+                              Store 31(out_i1) 661
+             665:    304(ptr) AccessChain 17 303
+             666:   11(ivec2) Load 665
+             667:    117(ptr) AccessChain 17 116
+             668:     10(int) Load 667
+             669:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 666 25
+             670:     10(int) AtomicIAdd 669 28 25 668
+             671:    304(ptr) AccessChain 17 303
+             672:   11(ivec2) Load 671
+             673:    117(ptr) AccessChain 17 116
+             674:     10(int) Load 673
+             675:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 672 25
+             676:     10(int) AtomicIAdd 675 28 25 674
+                              Store 126(out_u1) 676
+             677:    304(ptr) AccessChain 17 303
+             678:   11(ivec2) Load 677
+             679:    117(ptr) AccessChain 17 116
+             680:     10(int) Load 679
+             681:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 678 25
+             682:     10(int) AtomicAnd 681 28 25 680
+             683:    304(ptr) AccessChain 17 303
+             684:   11(ivec2) Load 683
+             685:    117(ptr) AccessChain 17 116
+             686:     10(int) Load 685
+             687:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 684 25
+             688:     10(int) AtomicAnd 687 28 25 686
+                              Store 126(out_u1) 688
+             689:    304(ptr) AccessChain 17 303
+             690:   11(ivec2) Load 689
+             691:    117(ptr) AccessChain 17 147
+             692:     10(int) Load 691
+             693:    117(ptr) AccessChain 17 150
+             694:     10(int) Load 693
+             695:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 690 25
+             696:     10(int) AtomicCompareExchange 695 28 25 25 694 692
+                              Store 126(out_u1) 696
+             697:    304(ptr) AccessChain 17 303
+             698:   11(ivec2) Load 697
+             699:    117(ptr) AccessChain 17 116
+             700:     10(int) Load 699
+             701:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 698 25
+             702:     10(int) AtomicExchange 701 28 25 700
+                              Store 126(out_u1) 702
+             703:    304(ptr) AccessChain 17 303
+             704:   11(ivec2) Load 703
+             705:    117(ptr) AccessChain 17 116
+             706:     10(int) Load 705
+             707:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 704 25
+             708:     10(int) AtomicUMax 707 28 25 706
+             709:    304(ptr) AccessChain 17 303
+             710:   11(ivec2) Load 709
+             711:    117(ptr) AccessChain 17 116
+             712:     10(int) Load 711
+             713:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 710 25
+             714:     10(int) AtomicUMax 713 28 25 712
+                              Store 126(out_u1) 714
+             715:    304(ptr) AccessChain 17 303
+             716:   11(ivec2) Load 715
+             717:    117(ptr) AccessChain 17 116
+             718:     10(int) Load 717
+             719:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 716 25
+             720:     10(int) AtomicUMin 719 28 25 718
+             721:    304(ptr) AccessChain 17 303
+             722:   11(ivec2) Load 721
+             723:    117(ptr) AccessChain 17 116
+             724:     10(int) Load 723
+             725:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 722 25
+             726:     10(int) AtomicUMin 725 28 25 724
+                              Store 126(out_u1) 726
+             727:    304(ptr) AccessChain 17 303
+             728:   11(ivec2) Load 727
+             729:    117(ptr) AccessChain 17 116
+             730:     10(int) Load 729
+             731:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 728 25
+             732:     10(int) AtomicOr 731 28 25 730
+             733:    304(ptr) AccessChain 17 303
+             734:   11(ivec2) Load 733
+             735:    117(ptr) AccessChain 17 116
+             736:     10(int) Load 735
+             737:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 734 25
+             738:     10(int) AtomicOr 737 28 25 736
+                              Store 126(out_u1) 738
+             739:    304(ptr) AccessChain 17 303
+             740:   11(ivec2) Load 739
+             741:    117(ptr) AccessChain 17 116
+             742:     10(int) Load 741
+             743:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 740 25
+             744:     10(int) AtomicXor 743 28 25 742
+             745:    304(ptr) AccessChain 17 303
+             746:   11(ivec2) Load 745
+             747:    117(ptr) AccessChain 17 116
+             748:     10(int) Load 747
+             749:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 746 25
+             750:     10(int) AtomicXor 749 28 25 748
+                              Store 126(out_u1) 750
+             751:    213(ptr) AccessChain 17 212
+             752:   13(ivec2) Load 751
+             753:     19(ptr) AccessChain 17 22
+             754:      6(int) Load 753
+             755:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 752 25
+             756:      6(int) AtomicIAdd 755 28 25 754
+             757:    213(ptr) AccessChain 17 212
+             758:   13(ivec2) Load 757
+             759:     19(ptr) AccessChain 17 18
+             760:      6(int) Load 759
+             761:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 758 25
+             762:      6(int) AtomicIAdd 761 28 25 760
+                              Store 31(out_i1) 762
+             763:    213(ptr) AccessChain 17 212
+             764:   13(ivec2) Load 763
+             765:     19(ptr) AccessChain 17 22
+             766:      6(int) Load 765
+             767:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 764 25
+             768:      6(int) AtomicAnd 767 28 25 766
+             769:    213(ptr) AccessChain 17 212
+             770:   13(ivec2) Load 769
+             771:     19(ptr) AccessChain 17 18
+             772:      6(int) Load 771
+             773:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 770 25
+             774:      6(int) AtomicAnd 773 28 25 772
+                              Store 31(out_i1) 774
+             775:    213(ptr) AccessChain 17 212
+             776:   13(ivec2) Load 775
+             777:     19(ptr) AccessChain 17 22
+             778:      6(int) Load 777
+             779:     19(ptr) AccessChain 17 54
+             780:      6(int) Load 779
+             781:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 776 25
+             782:      6(int) AtomicCompareExchange 781 28 25 25 780 778
+                              Store 31(out_i1) 782
+             783:    213(ptr) AccessChain 17 212
+             784:   13(ivec2) Load 783
+             785:     19(ptr) AccessChain 17 18
+             786:      6(int) Load 785
+             787:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 784 25
+             788:      6(int) AtomicExchange 787 28 25 786
+                              Store 31(out_i1) 788
+             789:    213(ptr) AccessChain 17 212
+             790:   13(ivec2) Load 789
+             791:     19(ptr) AccessChain 17 22
+             792:      6(int) Load 791
+             793:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 790 25
+             794:      6(int) AtomicSMax 793 28 25 792
+             795:    213(ptr) AccessChain 17 212
+             796:   13(ivec2) Load 795
+             797:     19(ptr) AccessChain 17 18
+             798:      6(int) Load 797
+             799:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 796 25
+             800:      6(int) AtomicSMax 799 28 25 798
+                              Store 31(out_i1) 800
+             801:    213(ptr) AccessChain 17 212
+             802:   13(ivec2) Load 801
+             803:     19(ptr) AccessChain 17 22
+             804:      6(int) Load 803
+             805:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 802 25
+             806:      6(int) AtomicSMin 805 28 25 804
+             807:    213(ptr) AccessChain 17 212
+             808:   13(ivec2) Load 807
+             809:     19(ptr) AccessChain 17 18
+             810:      6(int) Load 809
+             811:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 808 25
+             812:      6(int) AtomicSMin 811 28 25 810
+                              Store 31(out_i1) 812
+             813:    213(ptr) AccessChain 17 212
+             814:   13(ivec2) Load 813
+             815:     19(ptr) AccessChain 17 22
+             816:      6(int) Load 815
+             817:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 814 25
+             818:      6(int) AtomicOr 817 28 25 816
+             819:    213(ptr) AccessChain 17 212
+             820:   13(ivec2) Load 819
+             821:     19(ptr) AccessChain 17 18
+             822:      6(int) Load 821
+             823:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 820 25
+             824:      6(int) AtomicOr 823 28 25 822
+                              Store 31(out_i1) 824
+             825:    213(ptr) AccessChain 17 212
+             826:   13(ivec2) Load 825
+             827:     19(ptr) AccessChain 17 22
+             828:      6(int) Load 827
+             829:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 826 25
+             830:      6(int) AtomicXor 829 28 25 828
+             831:    213(ptr) AccessChain 17 212
+             832:   13(ivec2) Load 831
+             833:     19(ptr) AccessChain 17 18
+             834:      6(int) Load 833
+             835:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 832 25
+             836:      6(int) AtomicXor 835 28 25 834
+                              Store 31(out_i1) 836
+             837:    304(ptr) AccessChain 17 303
+             838:   11(ivec2) Load 837
+             839:    117(ptr) AccessChain 17 116
+             840:     10(int) Load 839
+             841:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 838 25
+             842:     10(int) AtomicIAdd 841 28 25 840
+             843:    304(ptr) AccessChain 17 303
+             844:   11(ivec2) Load 843
+             845:    117(ptr) AccessChain 17 116
+             846:     10(int) Load 845
+             847:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 844 25
+             848:     10(int) AtomicIAdd 847 28 25 846
+                              Store 126(out_u1) 848
+             849:    304(ptr) AccessChain 17 303
+             850:   11(ivec2) Load 849
+             851:    117(ptr) AccessChain 17 116
+             852:     10(int) Load 851
+             853:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 850 25
+             854:     10(int) AtomicAnd 853 28 25 852
+             855:    304(ptr) AccessChain 17 303
+             856:   11(ivec2) Load 855
+             857:    117(ptr) AccessChain 17 116
+             858:     10(int) Load 857
+             859:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 856 25
+             860:     10(int) AtomicAnd 859 28 25 858
+                              Store 126(out_u1) 860
+             861:    304(ptr) AccessChain 17 303
+             862:   11(ivec2) Load 861
+             863:    117(ptr) AccessChain 17 147
+             864:     10(int) Load 863
+             865:    117(ptr) AccessChain 17 150
+             866:     10(int) Load 865
+             867:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 862 25
+             868:     10(int) AtomicCompareExchange 867 28 25 25 866 864
+                              Store 126(out_u1) 868
+             869:    304(ptr) AccessChain 17 303
+             870:   11(ivec2) Load 869
+             871:    117(ptr) AccessChain 17 116
+             872:     10(int) Load 871
+             873:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 870 25
+             874:     10(int) AtomicExchange 873 28 25 872
+                              Store 126(out_u1) 874
+             875:    304(ptr) AccessChain 17 303
+             876:   11(ivec2) Load 875
+             877:    117(ptr) AccessChain 17 116
+             878:     10(int) Load 877
+             879:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 876 25
+             880:     10(int) AtomicUMax 879 28 25 878
+             881:    304(ptr) AccessChain 17 303
+             882:   11(ivec2) Load 881
+             883:    117(ptr) AccessChain 17 116
+             884:     10(int) Load 883
+             885:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 882 25
+             886:     10(int) AtomicUMax 885 28 25 884
+                              Store 126(out_u1) 886
+             887:    304(ptr) AccessChain 17 303
+             888:   11(ivec2) Load 887
+             889:    117(ptr) AccessChain 17 116
+             890:     10(int) Load 889
+             891:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 888 25
+             892:     10(int) AtomicUMin 891 28 25 890
+             893:    304(ptr) AccessChain 17 303
+             894:   11(ivec2) Load 893
+             895:    117(ptr) AccessChain 17 116
+             896:     10(int) Load 895
+             897:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 894 25
+             898:     10(int) AtomicUMin 897 28 25 896
+                              Store 126(out_u1) 898
+             899:    304(ptr) AccessChain 17 303
+             900:   11(ivec2) Load 899
+             901:    117(ptr) AccessChain 17 116
+             902:     10(int) Load 901
+             903:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 900 25
+             904:     10(int) AtomicOr 903 28 25 902
+             905:    304(ptr) AccessChain 17 303
+             906:   11(ivec2) Load 905
+             907:    117(ptr) AccessChain 17 116
+             908:     10(int) Load 907
+             909:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 906 25
+             910:     10(int) AtomicOr 909 28 25 908
+                              Store 126(out_u1) 910
+             911:    304(ptr) AccessChain 17 303
+             912:   11(ivec2) Load 911
+             913:    117(ptr) AccessChain 17 116
+             914:     10(int) Load 913
+             915:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 912 25
+             916:     10(int) AtomicXor 915 28 25 914
+             917:    304(ptr) AccessChain 17 303
+             918:   11(ivec2) Load 917
+             919:    117(ptr) AccessChain 17 116
+             920:     10(int) Load 919
+             921:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 918 25
+             922:     10(int) AtomicXor 921 28 25 920
+                              Store 126(out_u1) 922
+             926:     19(ptr) AccessChain 17 18
+             927:      6(int) Load 926
+             928:     19(ptr) AccessChain 17 22
+             929:      6(int) Load 928
+             930:     26(ptr) ImageTexelPointer 925(g_tBuffI) 927 25
+             931:      6(int) AtomicIAdd 930 28 25 929
+             932:     19(ptr) AccessChain 17 18
+             933:      6(int) Load 932
+             934:     19(ptr) AccessChain 17 18
+             935:      6(int) Load 934
+             936:     26(ptr) ImageTexelPointer 925(g_tBuffI) 933 25
+             937:      6(int) AtomicIAdd 936 28 25 935
+                              Store 31(out_i1) 937
+             938:     19(ptr) AccessChain 17 18
+             939:      6(int) Load 938
+             940:     19(ptr) AccessChain 17 22
+             941:      6(int) Load 940
+             942:     26(ptr) ImageTexelPointer 925(g_tBuffI) 939 25
+             943:      6(int) AtomicAnd 942 28 25 941
+             944:     19(ptr) AccessChain 17 18
+             945:      6(int) Load 944
+             946:     19(ptr) AccessChain 17 18
+             947:      6(int) Load 946
+             948:     26(ptr) ImageTexelPointer 925(g_tBuffI) 945 25
+             949:      6(int) AtomicAnd 948 28 25 947
+                              Store 31(out_i1) 949
+             950:     19(ptr) AccessChain 17 18
+             951:      6(int) Load 950
+             952:     19(ptr) AccessChain 17 22
+             953:      6(int) Load 952
+             954:     19(ptr) AccessChain 17 54
+             955:      6(int) Load 954
+             956:     26(ptr) ImageTexelPointer 925(g_tBuffI) 951 25
+             957:      6(int) AtomicCompareExchange 956 28 25 25 955 953
+                              Store 31(out_i1) 957
+             958:     19(ptr) AccessChain 17 18
+             959:      6(int) Load 958
+             960:     19(ptr) AccessChain 17 18
+             961:      6(int) Load 960
+             962:     26(ptr) ImageTexelPointer 925(g_tBuffI) 959 25
+             963:      6(int) AtomicExchange 962 28 25 961
+                              Store 31(out_i1) 963
+             964:     19(ptr) AccessChain 17 18
+             965:      6(int) Load 964
+             966:     19(ptr) AccessChain 17 22
+             967:      6(int) Load 966
+             968:     26(ptr) ImageTexelPointer 925(g_tBuffI) 965 25
+             969:      6(int) AtomicSMax 968 28 25 967
+             970:     19(ptr) AccessChain 17 18
+             971:      6(int) Load 970
+             972:     19(ptr) AccessChain 17 18
+             973:      6(int) Load 972
+             974:     26(ptr) ImageTexelPointer 925(g_tBuffI) 971 25
+             975:      6(int) AtomicSMax 974 28 25 973
+                              Store 31(out_i1) 975
+             976:     19(ptr) AccessChain 17 18
+             977:      6(int) Load 976
+             978:     19(ptr) AccessChain 17 22
+             979:      6(int) Load 978
+             980:     26(ptr) ImageTexelPointer 925(g_tBuffI) 977 25
+             981:      6(int) AtomicSMin 980 28 25 979
+             982:     19(ptr) AccessChain 17 18
+             983:      6(int) Load 982
+             984:     19(ptr) AccessChain 17 18
+             985:      6(int) Load 984
+             986:     26(ptr) ImageTexelPointer 925(g_tBuffI) 983 25
+             987:      6(int) AtomicSMin 986 28 25 985
+                              Store 31(out_i1) 987
+             988:     19(ptr) AccessChain 17 18
+             989:      6(int) Load 988
+             990:     19(ptr) AccessChain 17 22
+             991:      6(int) Load 990
+             992:     26(ptr) ImageTexelPointer 925(g_tBuffI) 989 25
+             993:      6(int) AtomicOr 992 28 25 991
+             994:     19(ptr) AccessChain 17 18
+             995:      6(int) Load 994
+             996:     19(ptr) AccessChain 17 18
+             997:      6(int) Load 996
+             998:     26(ptr) ImageTexelPointer 925(g_tBuffI) 995 25
+             999:      6(int) AtomicOr 998 28 25 997
+                              Store 31(out_i1) 999
+            1000:     19(ptr) AccessChain 17 18
+            1001:      6(int) Load 1000
+            1002:     19(ptr) AccessChain 17 22
+            1003:      6(int) Load 1002
+            1004:     26(ptr) ImageTexelPointer 925(g_tBuffI) 1001 25
+            1005:      6(int) AtomicXor 1004 28 25 1003
+            1006:     19(ptr) AccessChain 17 18
+            1007:      6(int) Load 1006
+            1008:     19(ptr) AccessChain 17 18
+            1009:      6(int) Load 1008
+            1010:     26(ptr) ImageTexelPointer 925(g_tBuffI) 1007 25
+            1011:      6(int) AtomicXor 1010 28 25 1009
+                              Store 31(out_i1) 1011
+            1015:    117(ptr) AccessChain 17 116
+            1016:     10(int) Load 1015
+            1017:    117(ptr) AccessChain 17 116
+            1018:     10(int) Load 1017
+            1019:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1016 25
+            1020:     10(int) AtomicIAdd 1019 28 25 1018
+            1021:    117(ptr) AccessChain 17 116
+            1022:     10(int) Load 1021
+            1023:    117(ptr) AccessChain 17 116
+            1024:     10(int) Load 1023
+            1025:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1022 25
+            1026:     10(int) AtomicIAdd 1025 28 25 1024
+                              Store 126(out_u1) 1026
+            1027:    117(ptr) AccessChain 17 116
+            1028:     10(int) Load 1027
+            1029:    117(ptr) AccessChain 17 116
+            1030:     10(int) Load 1029
+            1031:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1028 25
+            1032:     10(int) AtomicAnd 1031 28 25 1030
+            1033:    117(ptr) AccessChain 17 116
+            1034:     10(int) Load 1033
+            1035:    117(ptr) AccessChain 17 116
+            1036:     10(int) Load 1035
+            1037:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1034 25
+            1038:     10(int) AtomicAnd 1037 28 25 1036
+                              Store 126(out_u1) 1038
+            1039:    117(ptr) AccessChain 17 116
+            1040:     10(int) Load 1039
+            1041:    117(ptr) AccessChain 17 147
+            1042:     10(int) Load 1041
+            1043:    117(ptr) AccessChain 17 150
+            1044:     10(int) Load 1043
+            1045:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1040 25
+            1046:     10(int) AtomicCompareExchange 1045 28 25 25 1044 1042
+                              Store 126(out_u1) 1046
+            1047:    117(ptr) AccessChain 17 116
+            1048:     10(int) Load 1047
+            1049:    117(ptr) AccessChain 17 116
+            1050:     10(int) Load 1049
+            1051:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1048 25
+            1052:     10(int) AtomicExchange 1051 28 25 1050
+                              Store 126(out_u1) 1052
+            1053:    117(ptr) AccessChain 17 116
+            1054:     10(int) Load 1053
+            1055:    117(ptr) AccessChain 17 116
+            1056:     10(int) Load 1055
+            1057:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1054 25
+            1058:     10(int) AtomicUMax 1057 28 25 1056
+            1059:    117(ptr) AccessChain 17 116
+            1060:     10(int) Load 1059
+            1061:    117(ptr) AccessChain 17 116
+            1062:     10(int) Load 1061
+            1063:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1060 25
+            1064:     10(int) AtomicUMax 1063 28 25 1062
+                              Store 126(out_u1) 1064
+            1065:    117(ptr) AccessChain 17 116
+            1066:     10(int) Load 1065
+            1067:    117(ptr) AccessChain 17 116
+            1068:     10(int) Load 1067
+            1069:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1066 25
+            1070:     10(int) AtomicUMin 1069 28 25 1068
+            1071:    117(ptr) AccessChain 17 116
+            1072:     10(int) Load 1071
+            1073:    117(ptr) AccessChain 17 116
+            1074:     10(int) Load 1073
+            1075:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1072 25
+            1076:     10(int) AtomicUMin 1075 28 25 1074
+                              Store 126(out_u1) 1076
+            1077:    117(ptr) AccessChain 17 116
+            1078:     10(int) Load 1077
+            1079:    117(ptr) AccessChain 17 116
+            1080:     10(int) Load 1079
+            1081:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1078 25
+            1082:     10(int) AtomicOr 1081 28 25 1080
+            1083:    117(ptr) AccessChain 17 116
+            1084:     10(int) Load 1083
+            1085:    117(ptr) AccessChain 17 116
+            1086:     10(int) Load 1085
+            1087:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1084 25
+            1088:     10(int) AtomicOr 1087 28 25 1086
+                              Store 126(out_u1) 1088
+            1089:    117(ptr) AccessChain 17 116
+            1090:     10(int) Load 1089
+            1091:    117(ptr) AccessChain 17 116
+            1092:     10(int) Load 1091
+            1093:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1090 25
+            1094:     10(int) AtomicXor 1093 28 25 1092
+            1095:    117(ptr) AccessChain 17 116
+            1096:     10(int) Load 1095
+            1097:    117(ptr) AccessChain 17 116
+            1098:     10(int) Load 1097
+            1099:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1096 25
+            1100:     10(int) AtomicXor 1099 28 25 1098
+                              Store 126(out_u1) 1100
+            1109:   1108(ptr) AccessChain 1105(psout) 116
+                              Store 1109 1107
+            1112:   1108(ptr) AccessChain 1105(psout) 116
+            1113: 1102(fvec4) Load 1112
+                              Store 1111(Color) 1113
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..31ed4a9826531a51e60bfb5fad7fa035a5e7f865
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -0,0 +1,2651 @@
+hlsl.rw.bracket.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(vi4; (temp 4-component vector of int)
+0:42    Function Parameters: 
+0:42      'x' (in 4-component vector of int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in 4-component vector of int)
+0:43  Function Definition: Fn1(vu4; (temp 4-component vector of uint)
+0:43    Function Parameters: 
+0:43      'x' (in 4-component vector of uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in 4-component vector of uint)
+0:44  Function Definition: Fn1(vf4; (temp 4-component vector of float)
+0:44    Function Parameters: 
+0:44      'x' (in 4-component vector of float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in 4-component vector of float)
+0:46  Function Definition: Fn2(vi4; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out 4-component vector of int)
+0:?     Sequence
+0:46      move second child to first child (temp 4-component vector of int)
+0:46        'x' (out 4-component vector of int)
+0:46        Constant:
+0:46          0 (const int)
+0:46          0 (const int)
+0:46          0 (const int)
+0:46          0 (const int)
+0:47  Function Definition: Fn2(vu4; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out 4-component vector of uint)
+0:?     Sequence
+0:47      move second child to first child (temp 4-component vector of uint)
+0:47        'x' (out 4-component vector of uint)
+0:47        Constant:
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:48  Function Definition: Fn2(vf4; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out 4-component vector of float)
+0:?     Sequence
+0:48      move second child to first child (temp 4-component vector of float)
+0:48        'x' (out 4-component vector of float)
+0:48        Constant:
+0:48          0.000000
+0:48          0.000000
+0:48          0.000000
+0:48          0.000000
+0:50  Function Definition: SomeValue( (temp 4-component vector of float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp 4-component vector of float)
+0:50          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:50            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:50            Constant:
+0:50              3 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp 4-component vector of float)
+0:57        'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp 4-component vector of float)
+0:59          'r00' (temp 4-component vector of float)
+0:59          imageLoad (temp 4-component vector of float)
+0:59            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp 4-component vector of int)
+0:60          'r01' (temp 4-component vector of int)
+0:60          imageLoad (temp 4-component vector of int)
+0:60            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp 4-component vector of uint)
+0:61          'r02' (temp 4-component vector of uint)
+0:61          imageLoad (temp 4-component vector of uint)
+0:61            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp 4-component vector of float)
+0:64          'r10' (temp 4-component vector of float)
+0:64          imageLoad (temp 4-component vector of float)
+0:64            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp 4-component vector of int)
+0:65          'r11' (temp 4-component vector of int)
+0:65          imageLoad (temp 4-component vector of int)
+0:65            'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp 4-component vector of uint)
+0:66          'r12' (temp 4-component vector of uint)
+0:66          imageLoad (temp 4-component vector of uint)
+0:66            'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp 4-component vector of float)
+0:69          'r20' (temp 4-component vector of float)
+0:69          imageLoad (temp 4-component vector of float)
+0:69            'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp 4-component vector of int)
+0:70          'r21' (temp 4-component vector of int)
+0:70          imageLoad (temp 4-component vector of int)
+0:70            'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp 4-component vector of uint)
+0:71          'r22' (temp 4-component vector of uint)
+0:71          imageLoad (temp 4-component vector of uint)
+0:71            'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp 4-component vector of float)
+0:73          'lf4' (temp 4-component vector of float)
+0:73          uf4: direct index for structure (layout(offset=96 ) uniform 4-component vector of float)
+0:73            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp 4-component vector of float)
+0:77          'storeTemp' (temp 4-component vector of float)
+0:77          Function Call: SomeValue( (temp 4-component vector of float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp 4-component vector of float)
+0:77        'storeTemp' (temp 4-component vector of float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf4' (temp 4-component vector of float)
+0:78        'lf4' (temp 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child (temp 4-component vector of int)
+0:79          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             2 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp 4-component vector of int)
+0:79        'storeTemp' (temp 4-component vector of int)
+0:80      Sequence
+0:80        move second child to first child (temp 4-component vector of uint)
+0:80          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             3 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp 4-component vector of uint)
+0:80        'storeTemp' (temp 4-component vector of uint)
+0:83      Sequence
+0:83        move second child to first child (temp 4-component vector of float)
+0:83          'val1' (temp 4-component vector of float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp 4-component vector of float)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83              imageLoad (temp 4-component vector of float)
+0:83                'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            vector scale second child into first child (temp 4-component vector of float)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83            'storeTemp' (temp 4-component vector of float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp 4-component vector of float)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84          imageLoad (temp 4-component vector of float)
+0:84            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp 4-component vector of float)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84        'storeTemp' (temp 4-component vector of float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp 4-component vector of float)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85          imageLoad (temp 4-component vector of float)
+0:85            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp 4-component vector of float)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85        'storeTemp' (temp 4-component vector of float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp 4-component vector of int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87          imageLoad (temp 4-component vector of int)
+0:87            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp 4-component vector of int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87        'storeTemp' (temp 4-component vector of int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp 4-component vector of int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88          imageLoad (temp 4-component vector of int)
+0:88            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp 4-component vector of int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88        'storeTemp' (temp 4-component vector of int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp 4-component vector of int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89          imageLoad (temp 4-component vector of int)
+0:89            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp 4-component vector of int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89        'storeTemp' (temp 4-component vector of int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp 4-component vector of int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90          imageLoad (temp 4-component vector of int)
+0:90            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp 4-component vector of int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90        'storeTemp' (temp 4-component vector of int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp 4-component vector of int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91          imageLoad (temp 4-component vector of int)
+0:91            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp 4-component vector of int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91        'storeTemp' (temp 4-component vector of int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp 4-component vector of int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92          imageLoad (temp 4-component vector of int)
+0:92            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp 4-component vector of int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92        'storeTemp' (temp 4-component vector of int)
+0:95      Sequence
+0:95        move second child to first child (temp 4-component vector of float)
+0:95          'storeTemp' (temp 4-component vector of float)
+0:95          Function Call: SomeValue( (temp 4-component vector of float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp 4-component vector of float)
+0:95        'storeTemp' (temp 4-component vector of float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf4' (temp 4-component vector of float)
+0:96        'lf4' (temp 4-component vector of float)
+0:97      Sequence
+0:97        move second child to first child (temp 4-component vector of int)
+0:97          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             5 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp 4-component vector of int)
+0:97        'storeTemp' (temp 4-component vector of int)
+0:98      Sequence
+0:98        move second child to first child (temp 4-component vector of uint)
+0:98          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             6 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp 4-component vector of uint)
+0:98        'storeTemp' (temp 4-component vector of uint)
+0:101      Sequence
+0:101        move second child to first child (temp 4-component vector of float)
+0:101          'storeTemp' (temp 4-component vector of float)
+0:101          Function Call: SomeValue( (temp 4-component vector of float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp 4-component vector of float)
+0:101        'storeTemp' (temp 4-component vector of float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf4' (temp 4-component vector of float)
+0:102        'lf4' (temp 4-component vector of float)
+0:103      Sequence
+0:103        move second child to first child (temp 4-component vector of int)
+0:103          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             8 (const int)
+0:?             6 (const int)
+0:?             7 (const int)
+0:?             8 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp 4-component vector of int)
+0:103        'storeTemp' (temp 4-component vector of int)
+0:104      Sequence
+0:104        move second child to first child (temp 4-component vector of uint)
+0:104          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             9 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp 4-component vector of uint)
+0:104        'storeTemp' (temp 4-component vector of uint)
+0:107      Function Call: Fn1(vf4; (temp 4-component vector of float)
+0:107        imageLoad (temp 4-component vector of float)
+0:107          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(vi4; (temp 4-component vector of int)
+0:108        imageLoad (temp 4-component vector of int)
+0:108          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(vu4; (temp 4-component vector of uint)
+0:109        imageLoad (temp 4-component vector of uint)
+0:109          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(vf4; (temp void)
+0:111          'tempArg' (temp 4-component vector of float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp 4-component vector of float)
+0:111          'tempArg' (temp 4-component vector of float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(vi4; (temp void)
+0:112          'tempArg' (temp 4-component vector of int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp 4-component vector of int)
+0:112          'tempArg' (temp 4-component vector of int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(vu4; (temp void)
+0:113          'tempArg' (temp 4-component vector of uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp 4-component vector of uint)
+0:113          'tempArg' (temp 4-component vector of uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp 4-component vector of float)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117          imageLoad (temp 4-component vector of float)
+0:117            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp 4-component vector of float)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117        'storeTemp' (temp 4-component vector of float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp 4-component vector of int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118          imageLoad (temp 4-component vector of int)
+0:118            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp 4-component vector of int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118        'storeTemp' (temp 4-component vector of int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp 4-component vector of uint)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119          imageLoad (temp 4-component vector of uint)
+0:119            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp 4-component vector of uint)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119        'storeTemp' (temp 4-component vector of uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp 4-component vector of float)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121          imageLoad (temp 4-component vector of float)
+0:121            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp 4-component vector of float)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121        'storeTemp' (temp 4-component vector of float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp 4-component vector of int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122          imageLoad (temp 4-component vector of int)
+0:122            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp 4-component vector of int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122        'storeTemp' (temp 4-component vector of int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp 4-component vector of uint)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123          imageLoad (temp 4-component vector of uint)
+0:123            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp 4-component vector of uint)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123        'storeTemp' (temp 4-component vector of uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp 4-component vector of float)
+0:126          'storeTempPre' (temp 4-component vector of float)
+0:126          imageLoad (temp 4-component vector of float)
+0:126            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp 4-component vector of float)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126          'storeTempPre' (temp 4-component vector of float)
+0:126        Post-Increment (temp 4-component vector of float)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126        'storeTempPre' (temp 4-component vector of float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp 4-component vector of uint)
+0:127          'storeTempPre' (temp 4-component vector of uint)
+0:127          imageLoad (temp 4-component vector of uint)
+0:127            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp 4-component vector of uint)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127          'storeTempPre' (temp 4-component vector of uint)
+0:127        Post-Decrement (temp 4-component vector of uint)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127        'storeTempPre' (temp 4-component vector of uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp 4-component vector of int)
+0:128          'storeTempPre' (temp 4-component vector of int)
+0:128          imageLoad (temp 4-component vector of int)
+0:128            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp 4-component vector of int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128          'storeTempPre' (temp 4-component vector of int)
+0:128        Post-Increment (temp 4-component vector of int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128        'storeTempPre' (temp 4-component vector of int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp 4-component vector of float)
+0:130          'storeTempPre' (temp 4-component vector of float)
+0:130          imageLoad (temp 4-component vector of float)
+0:130            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp 4-component vector of float)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130          'storeTempPre' (temp 4-component vector of float)
+0:130        Post-Decrement (temp 4-component vector of float)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130        'storeTempPre' (temp 4-component vector of float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp 4-component vector of int)
+0:131          'storeTempPre' (temp 4-component vector of int)
+0:131          imageLoad (temp 4-component vector of int)
+0:131            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp 4-component vector of int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131          'storeTempPre' (temp 4-component vector of int)
+0:131        Post-Increment (temp 4-component vector of int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131        'storeTempPre' (temp 4-component vector of int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp 4-component vector of uint)
+0:132          'storeTempPre' (temp 4-component vector of uint)
+0:132          imageLoad (temp 4-component vector of uint)
+0:132            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp 4-component vector of uint)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132          'storeTempPre' (temp 4-component vector of uint)
+0:132        Post-Decrement (temp 4-component vector of uint)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132        'storeTempPre' (temp 4-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child (temp 4-component vector of float)
+0:135          'storeTemp' (temp 4-component vector of float)
+0:?           imageLoad (temp 4-component vector of float)
+0:135            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp 4-component vector of float)
+0:135        'storeTemp' (temp 4-component vector of float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(vi4; (temp 4-component vector of int)
+0:42    Function Parameters: 
+0:42      'x' (in 4-component vector of int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in 4-component vector of int)
+0:43  Function Definition: Fn1(vu4; (temp 4-component vector of uint)
+0:43    Function Parameters: 
+0:43      'x' (in 4-component vector of uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in 4-component vector of uint)
+0:44  Function Definition: Fn1(vf4; (temp 4-component vector of float)
+0:44    Function Parameters: 
+0:44      'x' (in 4-component vector of float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in 4-component vector of float)
+0:46  Function Definition: Fn2(vi4; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out 4-component vector of int)
+0:?     Sequence
+0:46      move second child to first child (temp 4-component vector of int)
+0:46        'x' (out 4-component vector of int)
+0:46        Constant:
+0:46          0 (const int)
+0:46          0 (const int)
+0:46          0 (const int)
+0:46          0 (const int)
+0:47  Function Definition: Fn2(vu4; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out 4-component vector of uint)
+0:?     Sequence
+0:47      move second child to first child (temp 4-component vector of uint)
+0:47        'x' (out 4-component vector of uint)
+0:47        Constant:
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:47          0 (const uint)
+0:48  Function Definition: Fn2(vf4; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out 4-component vector of float)
+0:?     Sequence
+0:48      move second child to first child (temp 4-component vector of float)
+0:48        'x' (out 4-component vector of float)
+0:48        Constant:
+0:48          0.000000
+0:48          0.000000
+0:48          0.000000
+0:48          0.000000
+0:50  Function Definition: SomeValue( (temp 4-component vector of float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp 4-component vector of float)
+0:50          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:50            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:50            Constant:
+0:50              3 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp 4-component vector of float)
+0:57        'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp 4-component vector of float)
+0:59          'r00' (temp 4-component vector of float)
+0:59          imageLoad (temp 4-component vector of float)
+0:59            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp 4-component vector of int)
+0:60          'r01' (temp 4-component vector of int)
+0:60          imageLoad (temp 4-component vector of int)
+0:60            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp 4-component vector of uint)
+0:61          'r02' (temp 4-component vector of uint)
+0:61          imageLoad (temp 4-component vector of uint)
+0:61            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp 4-component vector of float)
+0:64          'r10' (temp 4-component vector of float)
+0:64          imageLoad (temp 4-component vector of float)
+0:64            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp 4-component vector of int)
+0:65          'r11' (temp 4-component vector of int)
+0:65          imageLoad (temp 4-component vector of int)
+0:65            'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp 4-component vector of uint)
+0:66          'r12' (temp 4-component vector of uint)
+0:66          imageLoad (temp 4-component vector of uint)
+0:66            'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp 4-component vector of float)
+0:69          'r20' (temp 4-component vector of float)
+0:69          imageLoad (temp 4-component vector of float)
+0:69            'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp 4-component vector of int)
+0:70          'r21' (temp 4-component vector of int)
+0:70          imageLoad (temp 4-component vector of int)
+0:70            'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp 4-component vector of uint)
+0:71          'r22' (temp 4-component vector of uint)
+0:71          imageLoad (temp 4-component vector of uint)
+0:71            'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp 4-component vector of float)
+0:73          'lf4' (temp 4-component vector of float)
+0:73          uf4: direct index for structure (layout(offset=96 ) uniform 4-component vector of float)
+0:73            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp 4-component vector of float)
+0:77          'storeTemp' (temp 4-component vector of float)
+0:77          Function Call: SomeValue( (temp 4-component vector of float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp 4-component vector of float)
+0:77        'storeTemp' (temp 4-component vector of float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf4' (temp 4-component vector of float)
+0:78        'lf4' (temp 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child (temp 4-component vector of int)
+0:79          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             2 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp 4-component vector of int)
+0:79        'storeTemp' (temp 4-component vector of int)
+0:80      Sequence
+0:80        move second child to first child (temp 4-component vector of uint)
+0:80          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             3 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp 4-component vector of uint)
+0:80        'storeTemp' (temp 4-component vector of uint)
+0:83      Sequence
+0:83        move second child to first child (temp 4-component vector of float)
+0:83          'val1' (temp 4-component vector of float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp 4-component vector of float)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83              imageLoad (temp 4-component vector of float)
+0:83                'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            vector scale second child into first child (temp 4-component vector of float)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp 4-component vector of float)
+0:83            'storeTemp' (temp 4-component vector of float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp 4-component vector of float)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84          imageLoad (temp 4-component vector of float)
+0:84            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp 4-component vector of float)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp 4-component vector of float)
+0:84        'storeTemp' (temp 4-component vector of float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp 4-component vector of float)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85          imageLoad (temp 4-component vector of float)
+0:85            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp 4-component vector of float)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp 4-component vector of float)
+0:85        'storeTemp' (temp 4-component vector of float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp 4-component vector of int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87          imageLoad (temp 4-component vector of int)
+0:87            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp 4-component vector of int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp 4-component vector of int)
+0:87        'storeTemp' (temp 4-component vector of int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp 4-component vector of int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88          imageLoad (temp 4-component vector of int)
+0:88            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp 4-component vector of int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp 4-component vector of int)
+0:88        'storeTemp' (temp 4-component vector of int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp 4-component vector of int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89          imageLoad (temp 4-component vector of int)
+0:89            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp 4-component vector of int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp 4-component vector of int)
+0:89        'storeTemp' (temp 4-component vector of int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp 4-component vector of int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90          imageLoad (temp 4-component vector of int)
+0:90            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp 4-component vector of int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp 4-component vector of int)
+0:90        'storeTemp' (temp 4-component vector of int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp 4-component vector of int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91          imageLoad (temp 4-component vector of int)
+0:91            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp 4-component vector of int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp 4-component vector of int)
+0:91        'storeTemp' (temp 4-component vector of int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp 4-component vector of int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92          imageLoad (temp 4-component vector of int)
+0:92            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp 4-component vector of int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp 4-component vector of int)
+0:92        'storeTemp' (temp 4-component vector of int)
+0:95      Sequence
+0:95        move second child to first child (temp 4-component vector of float)
+0:95          'storeTemp' (temp 4-component vector of float)
+0:95          Function Call: SomeValue( (temp 4-component vector of float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp 4-component vector of float)
+0:95        'storeTemp' (temp 4-component vector of float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf4' (temp 4-component vector of float)
+0:96        'lf4' (temp 4-component vector of float)
+0:97      Sequence
+0:97        move second child to first child (temp 4-component vector of int)
+0:97          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             5 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp 4-component vector of int)
+0:97        'storeTemp' (temp 4-component vector of int)
+0:98      Sequence
+0:98        move second child to first child (temp 4-component vector of uint)
+0:98          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             6 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp 4-component vector of uint)
+0:98        'storeTemp' (temp 4-component vector of uint)
+0:101      Sequence
+0:101        move second child to first child (temp 4-component vector of float)
+0:101          'storeTemp' (temp 4-component vector of float)
+0:101          Function Call: SomeValue( (temp 4-component vector of float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp 4-component vector of float)
+0:101        'storeTemp' (temp 4-component vector of float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf4' (temp 4-component vector of float)
+0:102        'lf4' (temp 4-component vector of float)
+0:103      Sequence
+0:103        move second child to first child (temp 4-component vector of int)
+0:103          'storeTemp' (temp 4-component vector of int)
+0:?           Constant:
+0:?             8 (const int)
+0:?             6 (const int)
+0:?             7 (const int)
+0:?             8 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp 4-component vector of int)
+0:103        'storeTemp' (temp 4-component vector of int)
+0:104      Sequence
+0:104        move second child to first child (temp 4-component vector of uint)
+0:104          'storeTemp' (temp 4-component vector of uint)
+0:?           Constant:
+0:?             9 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:?             4 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp 4-component vector of uint)
+0:104        'storeTemp' (temp 4-component vector of uint)
+0:107      Function Call: Fn1(vf4; (temp 4-component vector of float)
+0:107        imageLoad (temp 4-component vector of float)
+0:107          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(vi4; (temp 4-component vector of int)
+0:108        imageLoad (temp 4-component vector of int)
+0:108          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(vu4; (temp 4-component vector of uint)
+0:109        imageLoad (temp 4-component vector of uint)
+0:109          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(vf4; (temp void)
+0:111          'tempArg' (temp 4-component vector of float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp 4-component vector of float)
+0:111          'tempArg' (temp 4-component vector of float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(vi4; (temp void)
+0:112          'tempArg' (temp 4-component vector of int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp 4-component vector of int)
+0:112          'tempArg' (temp 4-component vector of int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(vu4; (temp void)
+0:113          'tempArg' (temp 4-component vector of uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp 4-component vector of uint)
+0:113          'tempArg' (temp 4-component vector of uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp 4-component vector of float)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117          imageLoad (temp 4-component vector of float)
+0:117            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp 4-component vector of float)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp 4-component vector of float)
+0:117        'storeTemp' (temp 4-component vector of float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp 4-component vector of int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118          imageLoad (temp 4-component vector of int)
+0:118            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp 4-component vector of int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp 4-component vector of int)
+0:118        'storeTemp' (temp 4-component vector of int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp 4-component vector of uint)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119          imageLoad (temp 4-component vector of uint)
+0:119            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp 4-component vector of uint)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp 4-component vector of uint)
+0:119        'storeTemp' (temp 4-component vector of uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp 4-component vector of float)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121          imageLoad (temp 4-component vector of float)
+0:121            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp 4-component vector of float)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp 4-component vector of float)
+0:121        'storeTemp' (temp 4-component vector of float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp 4-component vector of int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122          imageLoad (temp 4-component vector of int)
+0:122            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp 4-component vector of int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp 4-component vector of int)
+0:122        'storeTemp' (temp 4-component vector of int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp 4-component vector of uint)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123          imageLoad (temp 4-component vector of uint)
+0:123            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp 4-component vector of uint)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp 4-component vector of uint)
+0:123        'storeTemp' (temp 4-component vector of uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp 4-component vector of float)
+0:126          'storeTempPre' (temp 4-component vector of float)
+0:126          imageLoad (temp 4-component vector of float)
+0:126            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp 4-component vector of float)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126          'storeTempPre' (temp 4-component vector of float)
+0:126        Post-Increment (temp 4-component vector of float)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp 4-component vector of float)
+0:126        'storeTempPre' (temp 4-component vector of float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp 4-component vector of uint)
+0:127          'storeTempPre' (temp 4-component vector of uint)
+0:127          imageLoad (temp 4-component vector of uint)
+0:127            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp 4-component vector of uint)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127          'storeTempPre' (temp 4-component vector of uint)
+0:127        Post-Decrement (temp 4-component vector of uint)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp 4-component vector of uint)
+0:127        'storeTempPre' (temp 4-component vector of uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp 4-component vector of int)
+0:128          'storeTempPre' (temp 4-component vector of int)
+0:128          imageLoad (temp 4-component vector of int)
+0:128            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp 4-component vector of int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128          'storeTempPre' (temp 4-component vector of int)
+0:128        Post-Increment (temp 4-component vector of int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp 4-component vector of int)
+0:128        'storeTempPre' (temp 4-component vector of int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp 4-component vector of float)
+0:130          'storeTempPre' (temp 4-component vector of float)
+0:130          imageLoad (temp 4-component vector of float)
+0:130            'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp 4-component vector of float)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130          'storeTempPre' (temp 4-component vector of float)
+0:130        Post-Decrement (temp 4-component vector of float)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp 4-component vector of float)
+0:130        'storeTempPre' (temp 4-component vector of float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp 4-component vector of int)
+0:131          'storeTempPre' (temp 4-component vector of int)
+0:131          imageLoad (temp 4-component vector of int)
+0:131            'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp 4-component vector of int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131          'storeTempPre' (temp 4-component vector of int)
+0:131        Post-Increment (temp 4-component vector of int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp 4-component vector of int)
+0:131        'storeTempPre' (temp 4-component vector of int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp 4-component vector of uint)
+0:132          'storeTempPre' (temp 4-component vector of uint)
+0:132          imageLoad (temp 4-component vector of uint)
+0:132            'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp 4-component vector of uint)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132          'storeTempPre' (temp 4-component vector of uint)
+0:132        Post-Decrement (temp 4-component vector of uint)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp 4-component vector of uint)
+0:132        'storeTempPre' (temp 4-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child (temp 4-component vector of float)
+0:135          'storeTemp' (temp 4-component vector of float)
+0:?           imageLoad (temp 4-component vector of float)
+0:135            'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp 4-component vector of float)
+0:135        'storeTemp' (temp 4-component vector of float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
+0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
+0:?     'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D)
+0:?     'g_tTex2df4' (layout(rgba32f ) uniform image2D)
+0:?     'g_tTex2di4' (layout(rgba32i ) uniform iimage2D)
+0:?     'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D)
+0:?     'g_tTex3df4' (layout(rgba32f ) uniform image3D)
+0:?     'g_tTex3di4' (layout(rgba32i ) uniform iimage3D)
+0:?     'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D)
+0:?     'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 602
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 577
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 11  "Fn1(vi4;"
+                              Name 10  "x"
+                              Name 18  "Fn1(vu4;"
+                              Name 17  "x"
+                              Name 25  "Fn1(vf4;"
+                              Name 24  "x"
+                              Name 29  "Fn2(vi4;"
+                              Name 28  "x"
+                              Name 33  "Fn2(vu4;"
+                              Name 32  "x"
+                              Name 37  "Fn2(vf4;"
+                              Name 36  "x"
+                              Name 40  "SomeValue("
+                              Name 59  "$Global"
+                              MemberName 59($Global) 0  "c1"
+                              MemberName 59($Global) 1  "c2"
+                              MemberName 59($Global) 2  "c3"
+                              MemberName 59($Global) 3  "c4"
+                              MemberName 59($Global) 4  "o1"
+                              MemberName 59($Global) 5  "o2"
+                              MemberName 59($Global) 6  "o3"
+                              MemberName 59($Global) 7  "o4"
+                              MemberName 59($Global) 8  "uf4"
+                              MemberName 59($Global) 9  "ui4"
+                              MemberName 59($Global) 10  "uu4"
+                              Name 61  ""
+                              Name 71  "g_tTex1df4"
+                              Name 77  "r00"
+                              Name 82  "r01"
+                              Name 85  "g_tTex1di4"
+                              Name 90  "r02"
+                              Name 93  "g_tTex1du4"
+                              Name 98  "r10"
+                              Name 101  "g_tTex2df4"
+                              Name 108  "r11"
+                              Name 111  "g_tTex2di4"
+                              Name 116  "r12"
+                              Name 119  "g_tTex2du4"
+                              Name 124  "r20"
+                              Name 127  "g_tTex3df4"
+                              Name 134  "r21"
+                              Name 137  "g_tTex3di4"
+                              Name 142  "r22"
+                              Name 145  "g_tTex3du4"
+                              Name 150  "lf4"
+                              Name 155  "storeTemp"
+                              Name 165  "storeTemp"
+                              Name 172  "storeTemp"
+                              Name 181  "val1"
+                              Name 183  "coordTemp"
+                              Name 186  "storeTemp"
+                              Name 197  "coordTemp"
+                              Name 200  "storeTemp"
+                              Name 211  "coordTemp"
+                              Name 214  "storeTemp"
+                              Name 225  "coordTemp"
+                              Name 228  "storeTemp"
+                              Name 238  "coordTemp"
+                              Name 241  "storeTemp"
+                              Name 251  "coordTemp"
+                              Name 254  "storeTemp"
+                              Name 265  "coordTemp"
+                              Name 268  "storeTemp"
+                              Name 279  "coordTemp"
+                              Name 282  "storeTemp"
+                              Name 292  "coordTemp"
+                              Name 295  "storeTemp"
+                              Name 305  "storeTemp"
+                              Name 315  "storeTemp"
+                              Name 322  "storeTemp"
+                              Name 329  "storeTemp"
+                              Name 339  "storeTemp"
+                              Name 347  "storeTemp"
+                              Name 358  "param"
+                              Name 364  "param"
+                              Name 370  "param"
+                              Name 372  "tempArg"
+                              Name 373  "param"
+                              Name 380  "tempArg"
+                              Name 381  "param"
+                              Name 388  "tempArg"
+                              Name 389  "param"
+                              Name 396  "coordTemp"
+                              Name 399  "storeTemp"
+                              Name 410  "coordTemp"
+                              Name 413  "storeTemp"
+                              Name 423  "coordTemp"
+                              Name 426  "storeTemp"
+                              Name 436  "coordTemp"
+                              Name 439  "storeTemp"
+                              Name 449  "coordTemp"
+                              Name 452  "storeTemp"
+                              Name 462  "coordTemp"
+                              Name 465  "storeTemp"
+                              Name 475  "coordTemp"
+                              Name 478  "storeTempPre"
+                              Name 482  "storeTempPost"
+                              Name 490  "coordTemp"
+                              Name 493  "storeTempPre"
+                              Name 497  "storeTempPost"
+                              Name 505  "coordTemp"
+                              Name 508  "storeTempPre"
+                              Name 512  "storeTempPost"
+                              Name 520  "coordTemp"
+                              Name 523  "storeTempPre"
+                              Name 527  "storeTempPost"
+                              Name 535  "coordTemp"
+                              Name 538  "storeTempPre"
+                              Name 542  "storeTempPost"
+                              Name 550  "coordTemp"
+                              Name 553  "storeTempPre"
+                              Name 557  "storeTempPost"
+                              Name 565  "storeTemp"
+                              Name 571  "PS_OUTPUT"
+                              MemberName 571(PS_OUTPUT) 0  "Color"
+                              Name 573  "psout"
+                              Name 577  "Color"
+                              Name 583  "g_sSamp"
+                              Name 586  "g_tTex1df4a"
+                              Name 589  "g_tTex1di4a"
+                              Name 592  "g_tTex1du4a"
+                              Name 595  "g_tTex2df4a"
+                              Name 598  "g_tTex2di4a"
+                              Name 601  "g_tTex2du4a"
+                              MemberDecorate 59($Global) 0 Offset 0
+                              MemberDecorate 59($Global) 1 Offset 8
+                              MemberDecorate 59($Global) 2 Offset 16
+                              MemberDecorate 59($Global) 3 Offset 32
+                              MemberDecorate 59($Global) 4 Offset 48
+                              MemberDecorate 59($Global) 5 Offset 56
+                              MemberDecorate 59($Global) 6 Offset 64
+                              MemberDecorate 59($Global) 7 Offset 80
+                              MemberDecorate 59($Global) 8 Offset 96
+                              MemberDecorate 59($Global) 9 Offset 112
+                              MemberDecorate 59($Global) 10 Offset 128
+                              Decorate 59($Global) Block
+                              Decorate 61 DescriptorSet 0
+                              Decorate 71(g_tTex1df4) DescriptorSet 0
+                              Decorate 71(g_tTex1df4) Binding 0
+                              Decorate 85(g_tTex1di4) DescriptorSet 0
+                              Decorate 93(g_tTex1du4) DescriptorSet 0
+                              Decorate 101(g_tTex2df4) DescriptorSet 0
+                              Decorate 111(g_tTex2di4) DescriptorSet 0
+                              Decorate 119(g_tTex2du4) DescriptorSet 0
+                              Decorate 127(g_tTex3df4) DescriptorSet 0
+                              Decorate 137(g_tTex3di4) DescriptorSet 0
+                              Decorate 145(g_tTex3du4) DescriptorSet 0
+                              Decorate 577(Color) Location 0
+                              Decorate 583(g_sSamp) DescriptorSet 0
+                              Decorate 583(g_sSamp) Binding 0
+                              Decorate 586(g_tTex1df4a) DescriptorSet 0
+                              Decorate 589(g_tTex1di4a) DescriptorSet 0
+                              Decorate 592(g_tTex1du4a) DescriptorSet 0
+                              Decorate 595(g_tTex2df4a) DescriptorSet 0
+                              Decorate 598(g_tTex2di4a) DescriptorSet 0
+                              Decorate 601(g_tTex2du4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeVector 6(int) 4
+               8:             TypePointer Function 7(ivec4)
+               9:             TypeFunction 7(ivec4) 8(ptr)
+              13:             TypeInt 32 0
+              14:             TypeVector 13(int) 4
+              15:             TypePointer Function 14(ivec4)
+              16:             TypeFunction 14(ivec4) 15(ptr)
+              20:             TypeFloat 32
+              21:             TypeVector 20(float) 4
+              22:             TypePointer Function 21(fvec4)
+              23:             TypeFunction 21(fvec4) 22(ptr)
+              27:             TypeFunction 2 8(ptr)
+              31:             TypeFunction 2 15(ptr)
+              35:             TypeFunction 2 22(ptr)
+              39:             TypeFunction 21(fvec4)
+              51:      6(int) Constant 0
+              52:    7(ivec4) ConstantComposite 51 51 51 51
+              53:     13(int) Constant 0
+              54:   14(ivec4) ConstantComposite 53 53 53 53
+              55:   20(float) Constant 0
+              56:   21(fvec4) ConstantComposite 55 55 55 55
+              57:             TypeVector 6(int) 2
+              58:             TypeVector 6(int) 3
+     59($Global):             TypeStruct 6(int) 57(ivec2) 58(ivec3) 7(ivec4) 6(int) 57(ivec2) 58(ivec3) 7(ivec4) 21(fvec4) 7(ivec4) 14(ivec4)
+              60:             TypePointer Uniform 59($Global)
+              61:     60(ptr) Variable Uniform
+              62:      6(int) Constant 3
+              63:             TypePointer Uniform 7(ivec4)
+              69:             TypeImage 20(float) 1D nonsampled format:Rgba32f
+              70:             TypePointer UniformConstant 69
+  71(g_tTex1df4):     70(ptr) Variable UniformConstant
+              73:             TypePointer Uniform 6(int)
+              83:             TypeImage 6(int) 1D nonsampled format:Rgba32i
+              84:             TypePointer UniformConstant 83
+  85(g_tTex1di4):     84(ptr) Variable UniformConstant
+              91:             TypeImage 13(int) 1D nonsampled format:Rgba32ui
+              92:             TypePointer UniformConstant 91
+  93(g_tTex1du4):     92(ptr) Variable UniformConstant
+              99:             TypeImage 20(float) 2D nonsampled format:Rgba32f
+             100:             TypePointer UniformConstant 99
+ 101(g_tTex2df4):    100(ptr) Variable UniformConstant
+             103:      6(int) Constant 1
+             104:             TypePointer Uniform 57(ivec2)
+             109:             TypeImage 6(int) 2D nonsampled format:Rgba32i
+             110:             TypePointer UniformConstant 109
+ 111(g_tTex2di4):    110(ptr) Variable UniformConstant
+             117:             TypeImage 13(int) 2D nonsampled format:Rgba32ui
+             118:             TypePointer UniformConstant 117
+ 119(g_tTex2du4):    118(ptr) Variable UniformConstant
+             125:             TypeImage 20(float) 3D nonsampled format:Rgba32f
+             126:             TypePointer UniformConstant 125
+ 127(g_tTex3df4):    126(ptr) Variable UniformConstant
+             129:      6(int) Constant 2
+             130:             TypePointer Uniform 58(ivec3)
+             135:             TypeImage 6(int) 3D nonsampled format:Rgba32i
+             136:             TypePointer UniformConstant 135
+ 137(g_tTex3di4):    136(ptr) Variable UniformConstant
+             143:             TypeImage 13(int) 3D nonsampled format:Rgba32ui
+             144:             TypePointer UniformConstant 143
+ 145(g_tTex3du4):    144(ptr) Variable UniformConstant
+             151:      6(int) Constant 8
+             152:             TypePointer Uniform 21(fvec4)
+             166:      6(int) Constant 4
+             167:    7(ivec4) ConstantComposite 129 129 62 166
+             173:     13(int) Constant 3
+             174:     13(int) Constant 2
+             175:     13(int) Constant 4
+             176:   14(ivec4) ConstantComposite 173 174 173 175
+             182:             TypePointer Function 6(int)
+             190:   20(float) Constant 1073741824
+             204:   20(float) Constant 1077936128
+             218:   20(float) Constant 1082130432
+             258:      6(int) Constant 65535
+             272:      6(int) Constant 61680
+             316:      6(int) Constant 5
+             317:    7(ivec4) ConstantComposite 316 129 62 166
+             323:     13(int) Constant 6
+             324:   14(ivec4) ConstantComposite 323 174 173 175
+             340:      6(int) Constant 6
+             341:      6(int) Constant 7
+             342:    7(ivec4) ConstantComposite 151 340 341 151
+             348:     13(int) Constant 9
+             349:   14(ivec4) ConstantComposite 348 174 173 175
+             404:   20(float) Constant 1065353216
+             567:   57(ivec2) ConstantComposite 129 62
+  571(PS_OUTPUT):             TypeStruct 21(fvec4)
+             572:             TypePointer Function 571(PS_OUTPUT)
+             574:   21(fvec4) ConstantComposite 404 404 404 404
+             576:             TypePointer Output 21(fvec4)
+      577(Color):    576(ptr) Variable Output
+             581:             TypeSampler
+             582:             TypePointer UniformConstant 581
+    583(g_sSamp):    582(ptr) Variable UniformConstant
+             584:             TypeImage 20(float) 1D array nonsampled format:Rgba32f
+             585:             TypePointer UniformConstant 584
+586(g_tTex1df4a):    585(ptr) Variable UniformConstant
+             587:             TypeImage 6(int) 1D array nonsampled format:Rgba32i
+             588:             TypePointer UniformConstant 587
+589(g_tTex1di4a):    588(ptr) Variable UniformConstant
+             590:             TypeImage 13(int) 1D array nonsampled format:Rgba32ui
+             591:             TypePointer UniformConstant 590
+592(g_tTex1du4a):    591(ptr) Variable UniformConstant
+             593:             TypeImage 20(float) 2D array nonsampled format:Rgba32f
+             594:             TypePointer UniformConstant 593
+595(g_tTex2df4a):    594(ptr) Variable UniformConstant
+             596:             TypeImage 6(int) 2D array nonsampled format:Rgba32i
+             597:             TypePointer UniformConstant 596
+598(g_tTex2di4a):    597(ptr) Variable UniformConstant
+             599:             TypeImage 13(int) 2D array nonsampled format:Rgba32ui
+             600:             TypePointer UniformConstant 599
+601(g_tTex2du4a):    600(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+         77(r00):     22(ptr) Variable Function
+         82(r01):      8(ptr) Variable Function
+         90(r02):     15(ptr) Variable Function
+         98(r10):     22(ptr) Variable Function
+        108(r11):      8(ptr) Variable Function
+        116(r12):     15(ptr) Variable Function
+        124(r20):     22(ptr) Variable Function
+        134(r21):      8(ptr) Variable Function
+        142(r22):     15(ptr) Variable Function
+        150(lf4):     22(ptr) Variable Function
+  155(storeTemp):     22(ptr) Variable Function
+  165(storeTemp):      8(ptr) Variable Function
+  172(storeTemp):     15(ptr) Variable Function
+       181(val1):     22(ptr) Variable Function
+  183(coordTemp):    182(ptr) Variable Function
+  186(storeTemp):     22(ptr) Variable Function
+  197(coordTemp):    182(ptr) Variable Function
+  200(storeTemp):     22(ptr) Variable Function
+  211(coordTemp):    182(ptr) Variable Function
+  214(storeTemp):     22(ptr) Variable Function
+  225(coordTemp):    182(ptr) Variable Function
+  228(storeTemp):      8(ptr) Variable Function
+  238(coordTemp):    182(ptr) Variable Function
+  241(storeTemp):      8(ptr) Variable Function
+  251(coordTemp):    182(ptr) Variable Function
+  254(storeTemp):      8(ptr) Variable Function
+  265(coordTemp):    182(ptr) Variable Function
+  268(storeTemp):      8(ptr) Variable Function
+  279(coordTemp):    182(ptr) Variable Function
+  282(storeTemp):      8(ptr) Variable Function
+  292(coordTemp):    182(ptr) Variable Function
+  295(storeTemp):      8(ptr) Variable Function
+  305(storeTemp):     22(ptr) Variable Function
+  315(storeTemp):      8(ptr) Variable Function
+  322(storeTemp):     15(ptr) Variable Function
+  329(storeTemp):     22(ptr) Variable Function
+  339(storeTemp):      8(ptr) Variable Function
+  347(storeTemp):     15(ptr) Variable Function
+      358(param):     22(ptr) Variable Function
+      364(param):      8(ptr) Variable Function
+      370(param):     15(ptr) Variable Function
+    372(tempArg):     22(ptr) Variable Function
+      373(param):     22(ptr) Variable Function
+    380(tempArg):      8(ptr) Variable Function
+      381(param):      8(ptr) Variable Function
+    388(tempArg):     15(ptr) Variable Function
+      389(param):     15(ptr) Variable Function
+  396(coordTemp):    182(ptr) Variable Function
+  399(storeTemp):     22(ptr) Variable Function
+  410(coordTemp):    182(ptr) Variable Function
+  413(storeTemp):      8(ptr) Variable Function
+  423(coordTemp):    182(ptr) Variable Function
+  426(storeTemp):     15(ptr) Variable Function
+  436(coordTemp):    182(ptr) Variable Function
+  439(storeTemp):     22(ptr) Variable Function
+  449(coordTemp):    182(ptr) Variable Function
+  452(storeTemp):      8(ptr) Variable Function
+  462(coordTemp):    182(ptr) Variable Function
+  465(storeTemp):     15(ptr) Variable Function
+  475(coordTemp):    182(ptr) Variable Function
+478(storeTempPre):     22(ptr) Variable Function
+482(storeTempPost):     22(ptr) Variable Function
+  490(coordTemp):    182(ptr) Variable Function
+493(storeTempPre):     15(ptr) Variable Function
+497(storeTempPost):     15(ptr) Variable Function
+  505(coordTemp):    182(ptr) Variable Function
+508(storeTempPre):      8(ptr) Variable Function
+512(storeTempPost):      8(ptr) Variable Function
+  520(coordTemp):    182(ptr) Variable Function
+523(storeTempPre):     22(ptr) Variable Function
+527(storeTempPost):     22(ptr) Variable Function
+  535(coordTemp):    182(ptr) Variable Function
+538(storeTempPre):      8(ptr) Variable Function
+542(storeTempPost):      8(ptr) Variable Function
+  550(coordTemp):    182(ptr) Variable Function
+553(storeTempPre):     15(ptr) Variable Function
+557(storeTempPost):     15(ptr) Variable Function
+  565(storeTemp):     22(ptr) Variable Function
+      573(psout):    572(ptr) Variable Function
+              72:          69 Load 71(g_tTex1df4)
+              74:     73(ptr) AccessChain 61 51
+              75:      6(int) Load 74
+              76:   21(fvec4) ImageRead 72 75
+              78:          69 Load 71(g_tTex1df4)
+              79:     73(ptr) AccessChain 61 51
+              80:      6(int) Load 79
+              81:   21(fvec4) ImageRead 78 80
+                              Store 77(r00) 81
+              86:          83 Load 85(g_tTex1di4)
+              87:     73(ptr) AccessChain 61 51
+              88:      6(int) Load 87
+              89:    7(ivec4) ImageRead 86 88
+                              Store 82(r01) 89
+              94:          91 Load 93(g_tTex1du4)
+              95:     73(ptr) AccessChain 61 51
+              96:      6(int) Load 95
+              97:   14(ivec4) ImageRead 94 96
+                              Store 90(r02) 97
+             102:          99 Load 101(g_tTex2df4)
+             105:    104(ptr) AccessChain 61 103
+             106:   57(ivec2) Load 105
+             107:   21(fvec4) ImageRead 102 106
+                              Store 98(r10) 107
+             112:         109 Load 111(g_tTex2di4)
+             113:    104(ptr) AccessChain 61 103
+             114:   57(ivec2) Load 113
+             115:    7(ivec4) ImageRead 112 114
+                              Store 108(r11) 115
+             120:         117 Load 119(g_tTex2du4)
+             121:    104(ptr) AccessChain 61 103
+             122:   57(ivec2) Load 121
+             123:   14(ivec4) ImageRead 120 122
+                              Store 116(r12) 123
+             128:         125 Load 127(g_tTex3df4)
+             131:    130(ptr) AccessChain 61 129
+             132:   58(ivec3) Load 131
+             133:   21(fvec4) ImageRead 128 132
+                              Store 124(r20) 133
+             138:         135 Load 137(g_tTex3di4)
+             139:    130(ptr) AccessChain 61 129
+             140:   58(ivec3) Load 139
+             141:    7(ivec4) ImageRead 138 140
+                              Store 134(r21) 141
+             146:         143 Load 145(g_tTex3du4)
+             147:    130(ptr) AccessChain 61 129
+             148:   58(ivec3) Load 147
+             149:   14(ivec4) ImageRead 146 148
+                              Store 142(r22) 149
+             153:    152(ptr) AccessChain 61 151
+             154:   21(fvec4) Load 153
+                              Store 150(lf4) 154
+             156:   21(fvec4) FunctionCall 40(SomeValue()
+                              Store 155(storeTemp) 156
+             157:          69 Load 71(g_tTex1df4)
+             158:     73(ptr) AccessChain 61 51
+             159:      6(int) Load 158
+             160:   21(fvec4) Load 155(storeTemp)
+                              ImageWrite 157 159 160
+             161:          69 Load 71(g_tTex1df4)
+             162:     73(ptr) AccessChain 61 51
+             163:      6(int) Load 162
+             164:   21(fvec4) Load 150(lf4)
+                              ImageWrite 161 163 164
+                              Store 165(storeTemp) 167
+             168:          83 Load 85(g_tTex1di4)
+             169:     73(ptr) AccessChain 61 51
+             170:      6(int) Load 169
+             171:    7(ivec4) Load 165(storeTemp)
+                              ImageWrite 168 170 171
+                              Store 172(storeTemp) 176
+             177:          91 Load 93(g_tTex1du4)
+             178:     73(ptr) AccessChain 61 51
+             179:      6(int) Load 178
+             180:   14(ivec4) Load 172(storeTemp)
+                              ImageWrite 177 179 180
+             184:     73(ptr) AccessChain 61 51
+             185:      6(int) Load 184
+                              Store 183(coordTemp) 185
+             187:          69 Load 71(g_tTex1df4)
+             188:      6(int) Load 183(coordTemp)
+             189:   21(fvec4) ImageRead 187 188
+                              Store 186(storeTemp) 189
+             191:   21(fvec4) Load 186(storeTemp)
+             192:   21(fvec4) VectorTimesScalar 191 190
+                              Store 186(storeTemp) 192
+             193:          69 Load 71(g_tTex1df4)
+             194:      6(int) Load 183(coordTemp)
+             195:   21(fvec4) Load 186(storeTemp)
+                              ImageWrite 193 194 195
+             196:   21(fvec4) Load 186(storeTemp)
+                              Store 181(val1) 196
+             198:     73(ptr) AccessChain 61 51
+             199:      6(int) Load 198
+                              Store 197(coordTemp) 199
+             201:          69 Load 71(g_tTex1df4)
+             202:      6(int) Load 197(coordTemp)
+             203:   21(fvec4) ImageRead 201 202
+                              Store 200(storeTemp) 203
+             205:   21(fvec4) Load 200(storeTemp)
+             206:   21(fvec4) CompositeConstruct 204 204 204 204
+             207:   21(fvec4) FSub 205 206
+                              Store 200(storeTemp) 207
+             208:          69 Load 71(g_tTex1df4)
+             209:      6(int) Load 197(coordTemp)
+             210:   21(fvec4) Load 200(storeTemp)
+                              ImageWrite 208 209 210
+             212:     73(ptr) AccessChain 61 51
+             213:      6(int) Load 212
+                              Store 211(coordTemp) 213
+             215:          69 Load 71(g_tTex1df4)
+             216:      6(int) Load 211(coordTemp)
+             217:   21(fvec4) ImageRead 215 216
+                              Store 214(storeTemp) 217
+             219:   21(fvec4) Load 214(storeTemp)
+             220:   21(fvec4) CompositeConstruct 218 218 218 218
+             221:   21(fvec4) FAdd 219 220
+                              Store 214(storeTemp) 221
+             222:          69 Load 71(g_tTex1df4)
+             223:      6(int) Load 211(coordTemp)
+             224:   21(fvec4) Load 214(storeTemp)
+                              ImageWrite 222 223 224
+             226:     73(ptr) AccessChain 61 51
+             227:      6(int) Load 226
+                              Store 225(coordTemp) 227
+             229:          83 Load 85(g_tTex1di4)
+             230:      6(int) Load 225(coordTemp)
+             231:    7(ivec4) ImageRead 229 230
+                              Store 228(storeTemp) 231
+             232:    7(ivec4) Load 228(storeTemp)
+             233:    7(ivec4) CompositeConstruct 129 129 129 129
+             234:    7(ivec4) SDiv 232 233
+                              Store 228(storeTemp) 234
+             235:          83 Load 85(g_tTex1di4)
+             236:      6(int) Load 225(coordTemp)
+             237:    7(ivec4) Load 228(storeTemp)
+                              ImageWrite 235 236 237
+             239:     73(ptr) AccessChain 61 51
+             240:      6(int) Load 239
+                              Store 238(coordTemp) 240
+             242:          83 Load 85(g_tTex1di4)
+             243:      6(int) Load 238(coordTemp)
+             244:    7(ivec4) ImageRead 242 243
+                              Store 241(storeTemp) 244
+             245:    7(ivec4) Load 241(storeTemp)
+             246:    7(ivec4) CompositeConstruct 129 129 129 129
+             247:    7(ivec4) SMod 245 246
+                              Store 241(storeTemp) 247
+             248:          83 Load 85(g_tTex1di4)
+             249:      6(int) Load 238(coordTemp)
+             250:    7(ivec4) Load 241(storeTemp)
+                              ImageWrite 248 249 250
+             252:     73(ptr) AccessChain 61 51
+             253:      6(int) Load 252
+                              Store 251(coordTemp) 253
+             255:          83 Load 85(g_tTex1di4)
+             256:      6(int) Load 251(coordTemp)
+             257:    7(ivec4) ImageRead 255 256
+                              Store 254(storeTemp) 257
+             259:    7(ivec4) Load 254(storeTemp)
+             260:    7(ivec4) CompositeConstruct 258 258 258 258
+             261:    7(ivec4) BitwiseAnd 259 260
+                              Store 254(storeTemp) 261
+             262:          83 Load 85(g_tTex1di4)
+             263:      6(int) Load 251(coordTemp)
+             264:    7(ivec4) Load 254(storeTemp)
+                              ImageWrite 262 263 264
+             266:     73(ptr) AccessChain 61 51
+             267:      6(int) Load 266
+                              Store 265(coordTemp) 267
+             269:          83 Load 85(g_tTex1di4)
+             270:      6(int) Load 265(coordTemp)
+             271:    7(ivec4) ImageRead 269 270
+                              Store 268(storeTemp) 271
+             273:    7(ivec4) Load 268(storeTemp)
+             274:    7(ivec4) CompositeConstruct 272 272 272 272
+             275:    7(ivec4) BitwiseOr 273 274
+                              Store 268(storeTemp) 275
+             276:          83 Load 85(g_tTex1di4)
+             277:      6(int) Load 265(coordTemp)
+             278:    7(ivec4) Load 268(storeTemp)
+                              ImageWrite 276 277 278
+             280:     73(ptr) AccessChain 61 51
+             281:      6(int) Load 280
+                              Store 279(coordTemp) 281
+             283:          83 Load 85(g_tTex1di4)
+             284:      6(int) Load 279(coordTemp)
+             285:    7(ivec4) ImageRead 283 284
+                              Store 282(storeTemp) 285
+             286:    7(ivec4) Load 282(storeTemp)
+             287:    7(ivec4) CompositeConstruct 129 129 129 129
+             288:    7(ivec4) ShiftLeftLogical 286 287
+                              Store 282(storeTemp) 288
+             289:          83 Load 85(g_tTex1di4)
+             290:      6(int) Load 279(coordTemp)
+             291:    7(ivec4) Load 282(storeTemp)
+                              ImageWrite 289 290 291
+             293:     73(ptr) AccessChain 61 51
+             294:      6(int) Load 293
+                              Store 292(coordTemp) 294
+             296:          83 Load 85(g_tTex1di4)
+             297:      6(int) Load 292(coordTemp)
+             298:    7(ivec4) ImageRead 296 297
+                              Store 295(storeTemp) 298
+             299:    7(ivec4) Load 295(storeTemp)
+             300:    7(ivec4) CompositeConstruct 129 129 129 129
+             301:    7(ivec4) ShiftRightArithmetic 299 300
+                              Store 295(storeTemp) 301
+             302:          83 Load 85(g_tTex1di4)
+             303:      6(int) Load 292(coordTemp)
+             304:    7(ivec4) Load 295(storeTemp)
+                              ImageWrite 302 303 304
+             306:   21(fvec4) FunctionCall 40(SomeValue()
+                              Store 305(storeTemp) 306
+             307:          99 Load 101(g_tTex2df4)
+             308:    104(ptr) AccessChain 61 103
+             309:   57(ivec2) Load 308
+             310:   21(fvec4) Load 305(storeTemp)
+                              ImageWrite 307 309 310
+             311:          99 Load 101(g_tTex2df4)
+             312:    104(ptr) AccessChain 61 103
+             313:   57(ivec2) Load 312
+             314:   21(fvec4) Load 150(lf4)
+                              ImageWrite 311 313 314
+                              Store 315(storeTemp) 317
+             318:         109 Load 111(g_tTex2di4)
+             319:    104(ptr) AccessChain 61 103
+             320:   57(ivec2) Load 319
+             321:    7(ivec4) Load 315(storeTemp)
+                              ImageWrite 318 320 321
+                              Store 322(storeTemp) 324
+             325:         117 Load 119(g_tTex2du4)
+             326:    104(ptr) AccessChain 61 103
+             327:   57(ivec2) Load 326
+             328:   14(ivec4) Load 322(storeTemp)
+                              ImageWrite 325 327 328
+             330:   21(fvec4) FunctionCall 40(SomeValue()
+                              Store 329(storeTemp) 330
+             331:         125 Load 127(g_tTex3df4)
+             332:    130(ptr) AccessChain 61 129
+             333:   58(ivec3) Load 332
+             334:   21(fvec4) Load 329(storeTemp)
+                              ImageWrite 331 333 334
+             335:         125 Load 127(g_tTex3df4)
+             336:    130(ptr) AccessChain 61 129
+             337:   58(ivec3) Load 336
+             338:   21(fvec4) Load 150(lf4)
+                              ImageWrite 335 337 338
+                              Store 339(storeTemp) 342
+             343:         135 Load 137(g_tTex3di4)
+             344:    130(ptr) AccessChain 61 129
+             345:   58(ivec3) Load 344
+             346:    7(ivec4) Load 339(storeTemp)
+                              ImageWrite 343 345 346
+                              Store 347(storeTemp) 349
+             350:         143 Load 145(g_tTex3du4)
+             351:    130(ptr) AccessChain 61 129
+             352:   58(ivec3) Load 351
+             353:   14(ivec4) Load 347(storeTemp)
+                              ImageWrite 350 352 353
+             354:          69 Load 71(g_tTex1df4)
+             355:     73(ptr) AccessChain 61 51
+             356:      6(int) Load 355
+             357:   21(fvec4) ImageRead 354 356
+                              Store 358(param) 357
+             359:   21(fvec4) FunctionCall 25(Fn1(vf4;) 358(param)
+             360:          83 Load 85(g_tTex1di4)
+             361:     73(ptr) AccessChain 61 51
+             362:      6(int) Load 361
+             363:    7(ivec4) ImageRead 360 362
+                              Store 364(param) 363
+             365:    7(ivec4) FunctionCall 11(Fn1(vi4;) 364(param)
+             366:          91 Load 93(g_tTex1du4)
+             367:     73(ptr) AccessChain 61 51
+             368:      6(int) Load 367
+             369:   14(ivec4) ImageRead 366 368
+                              Store 370(param) 369
+             371:   14(ivec4) FunctionCall 18(Fn1(vu4;) 370(param)
+             374:           2 FunctionCall 37(Fn2(vf4;) 373(param)
+             375:   21(fvec4) Load 373(param)
+                              Store 372(tempArg) 375
+             376:          69 Load 71(g_tTex1df4)
+             377:     73(ptr) AccessChain 61 51
+             378:      6(int) Load 377
+             379:   21(fvec4) Load 372(tempArg)
+                              ImageWrite 376 378 379
+             382:           2 FunctionCall 29(Fn2(vi4;) 381(param)
+             383:    7(ivec4) Load 381(param)
+                              Store 380(tempArg) 383
+             384:          83 Load 85(g_tTex1di4)
+             385:     73(ptr) AccessChain 61 51
+             386:      6(int) Load 385
+             387:    7(ivec4) Load 380(tempArg)
+                              ImageWrite 384 386 387
+             390:           2 FunctionCall 33(Fn2(vu4;) 389(param)
+             391:   14(ivec4) Load 389(param)
+                              Store 388(tempArg) 391
+             392:          91 Load 93(g_tTex1du4)
+             393:     73(ptr) AccessChain 61 51
+             394:      6(int) Load 393
+             395:   14(ivec4) Load 388(tempArg)
+                              ImageWrite 392 394 395
+             397:     73(ptr) AccessChain 61 51
+             398:      6(int) Load 397
+                              Store 396(coordTemp) 398
+             400:          69 Load 71(g_tTex1df4)
+             401:      6(int) Load 396(coordTemp)
+             402:   21(fvec4) ImageRead 400 401
+                              Store 399(storeTemp) 402
+             403:   21(fvec4) Load 399(storeTemp)
+             405:   21(fvec4) CompositeConstruct 404 404 404 404
+             406:   21(fvec4) FAdd 403 405
+                              Store 399(storeTemp) 406
+             407:          69 Load 71(g_tTex1df4)
+             408:      6(int) Load 396(coordTemp)
+             409:   21(fvec4) Load 399(storeTemp)
+                              ImageWrite 407 408 409
+             411:     73(ptr) AccessChain 61 51
+             412:      6(int) Load 411
+                              Store 410(coordTemp) 412
+             414:          83 Load 85(g_tTex1di4)
+             415:      6(int) Load 410(coordTemp)
+             416:    7(ivec4) ImageRead 414 415
+                              Store 413(storeTemp) 416
+             417:    7(ivec4) Load 413(storeTemp)
+             418:    7(ivec4) CompositeConstruct 103 103 103 103
+             419:    7(ivec4) IAdd 417 418
+                              Store 413(storeTemp) 419
+             420:          83 Load 85(g_tTex1di4)
+             421:      6(int) Load 410(coordTemp)
+             422:    7(ivec4) Load 413(storeTemp)
+                              ImageWrite 420 421 422
+             424:     73(ptr) AccessChain 61 51
+             425:      6(int) Load 424
+                              Store 423(coordTemp) 425
+             427:          91 Load 93(g_tTex1du4)
+             428:      6(int) Load 423(coordTemp)
+             429:   14(ivec4) ImageRead 427 428
+                              Store 426(storeTemp) 429
+             430:   14(ivec4) Load 426(storeTemp)
+             431:    7(ivec4) CompositeConstruct 103 103 103 103
+             432:   14(ivec4) IAdd 430 431
+                              Store 426(storeTemp) 432
+             433:          91 Load 93(g_tTex1du4)
+             434:      6(int) Load 423(coordTemp)
+             435:   14(ivec4) Load 426(storeTemp)
+                              ImageWrite 433 434 435
+             437:     73(ptr) AccessChain 61 51
+             438:      6(int) Load 437
+                              Store 436(coordTemp) 438
+             440:          69 Load 71(g_tTex1df4)
+             441:      6(int) Load 436(coordTemp)
+             442:   21(fvec4) ImageRead 440 441
+                              Store 439(storeTemp) 442
+             443:   21(fvec4) Load 439(storeTemp)
+             444:   21(fvec4) CompositeConstruct 404 404 404 404
+             445:   21(fvec4) FSub 443 444
+                              Store 439(storeTemp) 445
+             446:          69 Load 71(g_tTex1df4)
+             447:      6(int) Load 436(coordTemp)
+             448:   21(fvec4) Load 439(storeTemp)
+                              ImageWrite 446 447 448
+             450:     73(ptr) AccessChain 61 51
+             451:      6(int) Load 450
+                              Store 449(coordTemp) 451
+             453:          83 Load 85(g_tTex1di4)
+             454:      6(int) Load 449(coordTemp)
+             455:    7(ivec4) ImageRead 453 454
+                              Store 452(storeTemp) 455
+             456:    7(ivec4) Load 452(storeTemp)
+             457:    7(ivec4) CompositeConstruct 103 103 103 103
+             458:    7(ivec4) ISub 456 457
+                              Store 452(storeTemp) 458
+             459:          83 Load 85(g_tTex1di4)
+             460:      6(int) Load 449(coordTemp)
+             461:    7(ivec4) Load 452(storeTemp)
+                              ImageWrite 459 460 461
+             463:     73(ptr) AccessChain 61 51
+             464:      6(int) Load 463
+                              Store 462(coordTemp) 464
+             466:          91 Load 93(g_tTex1du4)
+             467:      6(int) Load 462(coordTemp)
+             468:   14(ivec4) ImageRead 466 467
+                              Store 465(storeTemp) 468
+             469:   14(ivec4) Load 465(storeTemp)
+             470:    7(ivec4) CompositeConstruct 103 103 103 103
+             471:   14(ivec4) ISub 469 470
+                              Store 465(storeTemp) 471
+             472:          91 Load 93(g_tTex1du4)
+             473:      6(int) Load 462(coordTemp)
+             474:   14(ivec4) Load 465(storeTemp)
+                              ImageWrite 472 473 474
+             476:     73(ptr) AccessChain 61 51
+             477:      6(int) Load 476
+                              Store 475(coordTemp) 477
+             479:          69 Load 71(g_tTex1df4)
+             480:      6(int) Load 475(coordTemp)
+             481:   21(fvec4) ImageRead 479 480
+                              Store 478(storeTempPre) 481
+             483:   21(fvec4) Load 478(storeTempPre)
+                              Store 482(storeTempPost) 483
+             484:   21(fvec4) Load 482(storeTempPost)
+             485:   21(fvec4) CompositeConstruct 404 404 404 404
+             486:   21(fvec4) FAdd 484 485
+                              Store 482(storeTempPost) 486
+             487:          69 Load 71(g_tTex1df4)
+             488:      6(int) Load 475(coordTemp)
+             489:   21(fvec4) Load 482(storeTempPost)
+                              ImageWrite 487 488 489
+             491:     73(ptr) AccessChain 61 51
+             492:      6(int) Load 491
+                              Store 490(coordTemp) 492
+             494:          91 Load 93(g_tTex1du4)
+             495:      6(int) Load 490(coordTemp)
+             496:   14(ivec4) ImageRead 494 495
+                              Store 493(storeTempPre) 496
+             498:   14(ivec4) Load 493(storeTempPre)
+                              Store 497(storeTempPost) 498
+             499:   14(ivec4) Load 497(storeTempPost)
+             500:    7(ivec4) CompositeConstruct 103 103 103 103
+             501:   14(ivec4) ISub 499 500
+                              Store 497(storeTempPost) 501
+             502:          91 Load 93(g_tTex1du4)
+             503:      6(int) Load 490(coordTemp)
+             504:   14(ivec4) Load 497(storeTempPost)
+                              ImageWrite 502 503 504
+             506:     73(ptr) AccessChain 61 51
+             507:      6(int) Load 506
+                              Store 505(coordTemp) 507
+             509:          83 Load 85(g_tTex1di4)
+             510:      6(int) Load 505(coordTemp)
+             511:    7(ivec4) ImageRead 509 510
+                              Store 508(storeTempPre) 511
+             513:    7(ivec4) Load 508(storeTempPre)
+                              Store 512(storeTempPost) 513
+             514:    7(ivec4) Load 512(storeTempPost)
+             515:    7(ivec4) CompositeConstruct 103 103 103 103
+             516:    7(ivec4) IAdd 514 515
+                              Store 512(storeTempPost) 516
+             517:          83 Load 85(g_tTex1di4)
+             518:      6(int) Load 505(coordTemp)
+             519:    7(ivec4) Load 512(storeTempPost)
+                              ImageWrite 517 518 519
+             521:     73(ptr) AccessChain 61 51
+             522:      6(int) Load 521
+                              Store 520(coordTemp) 522
+             524:          69 Load 71(g_tTex1df4)
+             525:      6(int) Load 520(coordTemp)
+             526:   21(fvec4) ImageRead 524 525
+                              Store 523(storeTempPre) 526
+             528:   21(fvec4) Load 523(storeTempPre)
+                              Store 527(storeTempPost) 528
+             529:   21(fvec4) Load 527(storeTempPost)
+             530:   21(fvec4) CompositeConstruct 404 404 404 404
+             531:   21(fvec4) FSub 529 530
+                              Store 527(storeTempPost) 531
+             532:          69 Load 71(g_tTex1df4)
+             533:      6(int) Load 520(coordTemp)
+             534:   21(fvec4) Load 527(storeTempPost)
+                              ImageWrite 532 533 534
+             536:     73(ptr) AccessChain 61 51
+             537:      6(int) Load 536
+                              Store 535(coordTemp) 537
+             539:          83 Load 85(g_tTex1di4)
+             540:      6(int) Load 535(coordTemp)
+             541:    7(ivec4) ImageRead 539 540
+                              Store 538(storeTempPre) 541
+             543:    7(ivec4) Load 538(storeTempPre)
+                              Store 542(storeTempPost) 543
+             544:    7(ivec4) Load 542(storeTempPost)
+             545:    7(ivec4) CompositeConstruct 103 103 103 103
+             546:    7(ivec4) IAdd 544 545
+                              Store 542(storeTempPost) 546
+             547:          83 Load 85(g_tTex1di4)
+             548:      6(int) Load 535(coordTemp)
+             549:    7(ivec4) Load 542(storeTempPost)
+                              ImageWrite 547 548 549
+             551:     73(ptr) AccessChain 61 51
+             552:      6(int) Load 551
+                              Store 550(coordTemp) 552
+             554:          91 Load 93(g_tTex1du4)
+             555:      6(int) Load 550(coordTemp)
+             556:   14(ivec4) ImageRead 554 555
+                              Store 553(storeTempPre) 556
+             558:   14(ivec4) Load 553(storeTempPre)
+                              Store 557(storeTempPost) 558
+             559:   14(ivec4) Load 557(storeTempPost)
+             560:    7(ivec4) CompositeConstruct 103 103 103 103
+             561:   14(ivec4) ISub 559 560
+                              Store 557(storeTempPost) 561
+             562:          91 Load 93(g_tTex1du4)
+             563:      6(int) Load 550(coordTemp)
+             564:   14(ivec4) Load 557(storeTempPost)
+                              ImageWrite 562 563 564
+             566:          99 Load 101(g_tTex2df4)
+             568:   21(fvec4) ImageRead 566 567
+                              Store 565(storeTemp) 568
+             569:          69 Load 71(g_tTex1df4)
+             570:   21(fvec4) Load 565(storeTemp)
+                              ImageWrite 569 103 570
+             575:     22(ptr) AccessChain 573(psout) 51
+                              Store 575 574
+             578:     22(ptr) AccessChain 573(psout) 51
+             579:   21(fvec4) Load 578
+                              Store 577(Color) 579
+                              Return
+                              FunctionEnd
+    11(Fn1(vi4;):    7(ivec4) Function None 9
+           10(x):      8(ptr) FunctionParameter
+              12:             Label
+              42:    7(ivec4) Load 10(x)
+                              ReturnValue 42
+                              FunctionEnd
+    18(Fn1(vu4;):   14(ivec4) Function None 16
+           17(x):     15(ptr) FunctionParameter
+              19:             Label
+              45:   14(ivec4) Load 17(x)
+                              ReturnValue 45
+                              FunctionEnd
+    25(Fn1(vf4;):   21(fvec4) Function None 23
+           24(x):     22(ptr) FunctionParameter
+              26:             Label
+              48:   21(fvec4) Load 24(x)
+                              ReturnValue 48
+                              FunctionEnd
+    29(Fn2(vi4;):           2 Function None 27
+           28(x):      8(ptr) FunctionParameter
+              30:             Label
+                              Store 28(x) 52
+                              Return
+                              FunctionEnd
+    33(Fn2(vu4;):           2 Function None 31
+           32(x):     15(ptr) FunctionParameter
+              34:             Label
+                              Store 32(x) 54
+                              Return
+                              FunctionEnd
+    37(Fn2(vf4;):           2 Function None 35
+           36(x):     22(ptr) FunctionParameter
+              38:             Label
+                              Store 36(x) 56
+                              Return
+                              FunctionEnd
+  40(SomeValue():   21(fvec4) Function None 39
+              41:             Label
+              64:     63(ptr) AccessChain 61 62
+              65:    7(ivec4) Load 64
+              66:   21(fvec4) ConvertSToF 65
+                              ReturnValue 66
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..f369cac79fc171baa52d158b64f8f71ad9688db5
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -0,0 +1,158 @@
+hlsl.rw.register.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'r00' (temp float)
+0:12          imageLoad (temp float)
+0:12            'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp uint)
+0:13          'r01' (temp uint)
+0:13          imageLoad (temp uint)
+0:13            'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+0:13            Constant:
+0:13              0 (const int)
+0:16      move second child to first child (temp 4-component vector of float)
+0:16        Color: direct index for structure (temp 4-component vector of float)
+0:16          'psout' (temp structure{temp 4-component vector of float Color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Sequence
+0:17        Sequence
+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              'psout' (temp structure{temp 4-component vector of float Color})
+0:17              Constant:
+0:17                0 (const int)
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:?     'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'r00' (temp float)
+0:12          imageLoad (temp float)
+0:12            'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp uint)
+0:13          'r01' (temp uint)
+0:13          imageLoad (temp uint)
+0:13            'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+0:13            Constant:
+0:13              0 (const int)
+0:16      move second child to first child (temp 4-component vector of float)
+0:16        Color: direct index for structure (temp 4-component vector of float)
+0:16          'psout' (temp structure{temp 4-component vector of float Color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Sequence
+0:17        Sequence
+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              'psout' (temp structure{temp 4-component vector of float Color})
+0:17              Constant:
+0:17                0 (const int)
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:?     'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 37
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 11  "g_tTex1df1"
+                              Name 18  "r01"
+                              Name 21  "g_tBuf1du1"
+                              Name 25  "PS_OUTPUT"
+                              MemberName 25(PS_OUTPUT) 0  "Color"
+                              Name 27  "psout"
+                              Name 33  "Color"
+                              Decorate 11(g_tTex1df1) DescriptorSet 0
+                              Decorate 11(g_tTex1df1) Binding 2
+                              Decorate 21(g_tBuf1du1) DescriptorSet 0
+                              Decorate 21(g_tBuf1du1) Binding 3
+                              Decorate 33(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D nonsampled format:R32f
+              10:             TypePointer UniformConstant 9
+  11(g_tTex1df1):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              16:             TypeInt 32 0
+              17:             TypePointer Function 16(int)
+              19:             TypeImage 16(int) Buffer nonsampled format:R32ui
+              20:             TypePointer UniformConstant 19
+  21(g_tBuf1du1):     20(ptr) Variable UniformConstant
+              24:             TypeVector 6(float) 4
+   25(PS_OUTPUT):             TypeStruct 24(fvec4)
+              26:             TypePointer Function 25(PS_OUTPUT)
+              28:    6(float) Constant 1065353216
+              29:   24(fvec4) ConstantComposite 28 28 28 28
+              30:             TypePointer Function 24(fvec4)
+              32:             TypePointer Output 24(fvec4)
+       33(Color):     32(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         18(r01):     17(ptr) Variable Function
+       27(psout):     26(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df1)
+              15:    6(float) ImageRead 12 14
+                              Store 8(r00) 15
+              22:          19 Load 21(g_tBuf1du1)
+              23:     16(int) ImageRead 22 14
+                              Store 18(r01) 23
+              31:     30(ptr) AccessChain 27(psout) 14
+                              Store 31 29
+              34:     30(ptr) AccessChain 27(psout) 14
+              35:   24(fvec4) Load 34
+                              Store 33(Color) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..8e40fd2e35d3c452233124662178dd696d83f56b
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -0,0 +1,2560 @@
+hlsl.rw.scalar.bracket.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(i1; (temp int)
+0:42    Function Parameters: 
+0:42      'x' (in int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in int)
+0:43  Function Definition: Fn1(u1; (temp uint)
+0:43    Function Parameters: 
+0:43      'x' (in uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in uint)
+0:44  Function Definition: Fn1(f1; (temp float)
+0:44    Function Parameters: 
+0:44      'x' (in float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in float)
+0:46  Function Definition: Fn2(i1; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out int)
+0:?     Sequence
+0:46      move second child to first child (temp int)
+0:46        'x' (out int)
+0:46        Constant:
+0:46          0 (const int)
+0:47  Function Definition: Fn2(u1; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out uint)
+0:?     Sequence
+0:47      move second child to first child (temp uint)
+0:47        'x' (out uint)
+0:47        Constant:
+0:47          0 (const uint)
+0:48  Function Definition: Fn2(f1; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out float)
+0:?     Sequence
+0:48      move second child to first child (temp float)
+0:48        'x' (out float)
+0:48        Constant:
+0:48          0.000000
+0:50  Function Definition: SomeValue( (temp float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp float)
+0:50          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:50            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:50            Constant:
+0:50              0 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp float)
+0:57        'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp float)
+0:59          'r00' (temp float)
+0:59          imageLoad (temp float)
+0:59            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp int)
+0:60          'r01' (temp int)
+0:60          imageLoad (temp int)
+0:60            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp uint)
+0:61          'r02' (temp uint)
+0:61          imageLoad (temp uint)
+0:61            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp float)
+0:64          'r10' (temp float)
+0:64          imageLoad (temp float)
+0:64            'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp int)
+0:65          'r11' (temp int)
+0:65          imageLoad (temp int)
+0:65            'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp uint)
+0:66          'r12' (temp uint)
+0:66          imageLoad (temp uint)
+0:66            'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp float)
+0:69          'r20' (temp float)
+0:69          imageLoad (temp float)
+0:69            'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp int)
+0:70          'r21' (temp int)
+0:70          imageLoad (temp int)
+0:70            'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'r22' (temp uint)
+0:71          imageLoad (temp uint)
+0:71            'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp float)
+0:73          'lf1' (temp float)
+0:73          uf1: direct index for structure (layout(offset=96 ) uniform float)
+0:73            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp float)
+0:77          'storeTemp' (temp float)
+0:77          Function Call: SomeValue( (temp float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp float)
+0:77        'storeTemp' (temp float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf1' (temp float)
+0:78        'lf1' (temp float)
+0:79      Sequence
+0:79        move second child to first child (temp int)
+0:79          'storeTemp' (temp int)
+0:79          Constant:
+0:79            2 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp int)
+0:79        'storeTemp' (temp int)
+0:80      Sequence
+0:80        move second child to first child (temp uint)
+0:80          'storeTemp' (temp uint)
+0:80          Constant:
+0:80            3 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp uint)
+0:80        'storeTemp' (temp uint)
+0:83      Sequence
+0:83        move second child to first child (temp float)
+0:83          'val1' (temp float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp float)
+0:83              'storeTemp' (temp float)
+0:83              imageLoad (temp float)
+0:83                'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            multiply second child into first child (temp float)
+0:83              'storeTemp' (temp float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp float)
+0:83            'storeTemp' (temp float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp float)
+0:84          'storeTemp' (temp float)
+0:84          imageLoad (temp float)
+0:84            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp float)
+0:84          'storeTemp' (temp float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp float)
+0:84        'storeTemp' (temp float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp float)
+0:85          'storeTemp' (temp float)
+0:85          imageLoad (temp float)
+0:85            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp float)
+0:85          'storeTemp' (temp float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp float)
+0:85        'storeTemp' (temp float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp int)
+0:87          'storeTemp' (temp int)
+0:87          imageLoad (temp int)
+0:87            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp int)
+0:87          'storeTemp' (temp int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp int)
+0:87        'storeTemp' (temp int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp int)
+0:88          'storeTemp' (temp int)
+0:88          imageLoad (temp int)
+0:88            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp int)
+0:88          'storeTemp' (temp int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp int)
+0:88        'storeTemp' (temp int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp int)
+0:89          'storeTemp' (temp int)
+0:89          imageLoad (temp int)
+0:89            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp int)
+0:89          'storeTemp' (temp int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp int)
+0:89        'storeTemp' (temp int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp int)
+0:90          'storeTemp' (temp int)
+0:90          imageLoad (temp int)
+0:90            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp int)
+0:90          'storeTemp' (temp int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp int)
+0:90        'storeTemp' (temp int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp int)
+0:91          'storeTemp' (temp int)
+0:91          imageLoad (temp int)
+0:91            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp int)
+0:91          'storeTemp' (temp int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp int)
+0:91        'storeTemp' (temp int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp int)
+0:92          'storeTemp' (temp int)
+0:92          imageLoad (temp int)
+0:92            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp int)
+0:92          'storeTemp' (temp int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp int)
+0:92        'storeTemp' (temp int)
+0:95      Sequence
+0:95        move second child to first child (temp float)
+0:95          'storeTemp' (temp float)
+0:95          Function Call: SomeValue( (temp float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp float)
+0:95        'storeTemp' (temp float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf1' (temp float)
+0:96        'lf1' (temp float)
+0:97      Sequence
+0:97        move second child to first child (temp int)
+0:97          'storeTemp' (temp int)
+0:97          Constant:
+0:97            5 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp int)
+0:97        'storeTemp' (temp int)
+0:98      Sequence
+0:98        move second child to first child (temp uint)
+0:98          'storeTemp' (temp uint)
+0:98          Constant:
+0:98            6 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp uint)
+0:98        'storeTemp' (temp uint)
+0:101      Sequence
+0:101        move second child to first child (temp float)
+0:101          'storeTemp' (temp float)
+0:101          Function Call: SomeValue( (temp float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp float)
+0:101        'storeTemp' (temp float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf1' (temp float)
+0:102        'lf1' (temp float)
+0:103      Sequence
+0:103        move second child to first child (temp int)
+0:103          'storeTemp' (temp int)
+0:103          Constant:
+0:103            8 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp int)
+0:103        'storeTemp' (temp int)
+0:104      Sequence
+0:104        move second child to first child (temp uint)
+0:104          'storeTemp' (temp uint)
+0:104          Constant:
+0:104            9 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp uint)
+0:104        'storeTemp' (temp uint)
+0:107      Function Call: Fn1(f1; (temp float)
+0:107        imageLoad (temp float)
+0:107          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(i1; (temp int)
+0:108        imageLoad (temp int)
+0:108          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(u1; (temp uint)
+0:109        imageLoad (temp uint)
+0:109          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(f1; (temp void)
+0:111          'tempArg' (temp float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp float)
+0:111          'tempArg' (temp float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(i1; (temp void)
+0:112          'tempArg' (temp int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp int)
+0:112          'tempArg' (temp int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(u1; (temp void)
+0:113          'tempArg' (temp uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp uint)
+0:113          'tempArg' (temp uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp float)
+0:117          'storeTemp' (temp float)
+0:117          imageLoad (temp float)
+0:117            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp float)
+0:117          'storeTemp' (temp float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp float)
+0:117        'storeTemp' (temp float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp int)
+0:118          'storeTemp' (temp int)
+0:118          imageLoad (temp int)
+0:118            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp int)
+0:118          'storeTemp' (temp int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp int)
+0:118        'storeTemp' (temp int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp uint)
+0:119          'storeTemp' (temp uint)
+0:119          imageLoad (temp uint)
+0:119            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp uint)
+0:119          'storeTemp' (temp uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp uint)
+0:119        'storeTemp' (temp uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp float)
+0:121          'storeTemp' (temp float)
+0:121          imageLoad (temp float)
+0:121            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp float)
+0:121          'storeTemp' (temp float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp float)
+0:121        'storeTemp' (temp float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp int)
+0:122          'storeTemp' (temp int)
+0:122          imageLoad (temp int)
+0:122            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp int)
+0:122          'storeTemp' (temp int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp int)
+0:122        'storeTemp' (temp int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp uint)
+0:123          'storeTemp' (temp uint)
+0:123          imageLoad (temp uint)
+0:123            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp uint)
+0:123          'storeTemp' (temp uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp uint)
+0:123        'storeTemp' (temp uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp float)
+0:126          'storeTempPre' (temp float)
+0:126          imageLoad (temp float)
+0:126            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp float)
+0:126          'storeTempPost' (temp float)
+0:126          'storeTempPre' (temp float)
+0:126        Post-Increment (temp float)
+0:126          'storeTempPost' (temp float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp float)
+0:126        'storeTempPre' (temp float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp uint)
+0:127          'storeTempPre' (temp uint)
+0:127          imageLoad (temp uint)
+0:127            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp uint)
+0:127          'storeTempPost' (temp uint)
+0:127          'storeTempPre' (temp uint)
+0:127        Post-Decrement (temp uint)
+0:127          'storeTempPost' (temp uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp uint)
+0:127        'storeTempPre' (temp uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp int)
+0:128          'storeTempPre' (temp int)
+0:128          imageLoad (temp int)
+0:128            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp int)
+0:128          'storeTempPost' (temp int)
+0:128          'storeTempPre' (temp int)
+0:128        Post-Increment (temp int)
+0:128          'storeTempPost' (temp int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp int)
+0:128        'storeTempPre' (temp int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp float)
+0:130          'storeTempPre' (temp float)
+0:130          imageLoad (temp float)
+0:130            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp float)
+0:130          'storeTempPost' (temp float)
+0:130          'storeTempPre' (temp float)
+0:130        Post-Decrement (temp float)
+0:130          'storeTempPost' (temp float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp float)
+0:130        'storeTempPre' (temp float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp int)
+0:131          'storeTempPre' (temp int)
+0:131          imageLoad (temp int)
+0:131            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp int)
+0:131          'storeTempPost' (temp int)
+0:131          'storeTempPre' (temp int)
+0:131        Post-Increment (temp int)
+0:131          'storeTempPost' (temp int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp int)
+0:131        'storeTempPre' (temp int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp uint)
+0:132          'storeTempPre' (temp uint)
+0:132          imageLoad (temp uint)
+0:132            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp uint)
+0:132          'storeTempPost' (temp uint)
+0:132          'storeTempPre' (temp uint)
+0:132        Post-Decrement (temp uint)
+0:132          'storeTempPost' (temp uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp uint)
+0:132        'storeTempPre' (temp uint)
+0:135      Sequence
+0:135        move second child to first child (temp float)
+0:135          'storeTemp' (temp float)
+0:?           imageLoad (temp float)
+0:135            'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp float)
+0:135        'storeTemp' (temp float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(i1; (temp int)
+0:42    Function Parameters: 
+0:42      'x' (in int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in int)
+0:43  Function Definition: Fn1(u1; (temp uint)
+0:43    Function Parameters: 
+0:43      'x' (in uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in uint)
+0:44  Function Definition: Fn1(f1; (temp float)
+0:44    Function Parameters: 
+0:44      'x' (in float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in float)
+0:46  Function Definition: Fn2(i1; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out int)
+0:?     Sequence
+0:46      move second child to first child (temp int)
+0:46        'x' (out int)
+0:46        Constant:
+0:46          0 (const int)
+0:47  Function Definition: Fn2(u1; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out uint)
+0:?     Sequence
+0:47      move second child to first child (temp uint)
+0:47        'x' (out uint)
+0:47        Constant:
+0:47          0 (const uint)
+0:48  Function Definition: Fn2(f1; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out float)
+0:?     Sequence
+0:48      move second child to first child (temp float)
+0:48        'x' (out float)
+0:48        Constant:
+0:48          0.000000
+0:50  Function Definition: SomeValue( (temp float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp float)
+0:50          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:50            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:50            Constant:
+0:50              0 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp float)
+0:57        'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp float)
+0:59          'r00' (temp float)
+0:59          imageLoad (temp float)
+0:59            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp int)
+0:60          'r01' (temp int)
+0:60          imageLoad (temp int)
+0:60            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp uint)
+0:61          'r02' (temp uint)
+0:61          imageLoad (temp uint)
+0:61            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp float)
+0:64          'r10' (temp float)
+0:64          imageLoad (temp float)
+0:64            'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp int)
+0:65          'r11' (temp int)
+0:65          imageLoad (temp int)
+0:65            'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp uint)
+0:66          'r12' (temp uint)
+0:66          imageLoad (temp uint)
+0:66            'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp float)
+0:69          'r20' (temp float)
+0:69          imageLoad (temp float)
+0:69            'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp int)
+0:70          'r21' (temp int)
+0:70          imageLoad (temp int)
+0:70            'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp uint)
+0:71          'r22' (temp uint)
+0:71          imageLoad (temp uint)
+0:71            'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp float)
+0:73          'lf1' (temp float)
+0:73          uf1: direct index for structure (layout(offset=96 ) uniform float)
+0:73            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp float)
+0:77          'storeTemp' (temp float)
+0:77          Function Call: SomeValue( (temp float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp float)
+0:77        'storeTemp' (temp float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf1' (temp float)
+0:78        'lf1' (temp float)
+0:79      Sequence
+0:79        move second child to first child (temp int)
+0:79          'storeTemp' (temp int)
+0:79          Constant:
+0:79            2 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp int)
+0:79        'storeTemp' (temp int)
+0:80      Sequence
+0:80        move second child to first child (temp uint)
+0:80          'storeTemp' (temp uint)
+0:80          Constant:
+0:80            3 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp uint)
+0:80        'storeTemp' (temp uint)
+0:83      Sequence
+0:83        move second child to first child (temp float)
+0:83          'val1' (temp float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp float)
+0:83              'storeTemp' (temp float)
+0:83              imageLoad (temp float)
+0:83                'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            multiply second child into first child (temp float)
+0:83              'storeTemp' (temp float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp float)
+0:83            'storeTemp' (temp float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp float)
+0:84          'storeTemp' (temp float)
+0:84          imageLoad (temp float)
+0:84            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp float)
+0:84          'storeTemp' (temp float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp float)
+0:84        'storeTemp' (temp float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp float)
+0:85          'storeTemp' (temp float)
+0:85          imageLoad (temp float)
+0:85            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp float)
+0:85          'storeTemp' (temp float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp float)
+0:85        'storeTemp' (temp float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp int)
+0:87          'storeTemp' (temp int)
+0:87          imageLoad (temp int)
+0:87            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp int)
+0:87          'storeTemp' (temp int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp int)
+0:87        'storeTemp' (temp int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp int)
+0:88          'storeTemp' (temp int)
+0:88          imageLoad (temp int)
+0:88            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp int)
+0:88          'storeTemp' (temp int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp int)
+0:88        'storeTemp' (temp int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp int)
+0:89          'storeTemp' (temp int)
+0:89          imageLoad (temp int)
+0:89            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp int)
+0:89          'storeTemp' (temp int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp int)
+0:89        'storeTemp' (temp int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp int)
+0:90          'storeTemp' (temp int)
+0:90          imageLoad (temp int)
+0:90            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp int)
+0:90          'storeTemp' (temp int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp int)
+0:90        'storeTemp' (temp int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp int)
+0:91          'storeTemp' (temp int)
+0:91          imageLoad (temp int)
+0:91            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp int)
+0:91          'storeTemp' (temp int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp int)
+0:91        'storeTemp' (temp int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp int)
+0:92          'storeTemp' (temp int)
+0:92          imageLoad (temp int)
+0:92            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp int)
+0:92          'storeTemp' (temp int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp int)
+0:92        'storeTemp' (temp int)
+0:95      Sequence
+0:95        move second child to first child (temp float)
+0:95          'storeTemp' (temp float)
+0:95          Function Call: SomeValue( (temp float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp float)
+0:95        'storeTemp' (temp float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf1' (temp float)
+0:96        'lf1' (temp float)
+0:97      Sequence
+0:97        move second child to first child (temp int)
+0:97          'storeTemp' (temp int)
+0:97          Constant:
+0:97            5 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp int)
+0:97        'storeTemp' (temp int)
+0:98      Sequence
+0:98        move second child to first child (temp uint)
+0:98          'storeTemp' (temp uint)
+0:98          Constant:
+0:98            6 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp uint)
+0:98        'storeTemp' (temp uint)
+0:101      Sequence
+0:101        move second child to first child (temp float)
+0:101          'storeTemp' (temp float)
+0:101          Function Call: SomeValue( (temp float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp float)
+0:101        'storeTemp' (temp float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf1' (temp float)
+0:102        'lf1' (temp float)
+0:103      Sequence
+0:103        move second child to first child (temp int)
+0:103          'storeTemp' (temp int)
+0:103          Constant:
+0:103            8 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp int)
+0:103        'storeTemp' (temp int)
+0:104      Sequence
+0:104        move second child to first child (temp uint)
+0:104          'storeTemp' (temp uint)
+0:104          Constant:
+0:104            9 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp uint)
+0:104        'storeTemp' (temp uint)
+0:107      Function Call: Fn1(f1; (temp float)
+0:107        imageLoad (temp float)
+0:107          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(i1; (temp int)
+0:108        imageLoad (temp int)
+0:108          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(u1; (temp uint)
+0:109        imageLoad (temp uint)
+0:109          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(f1; (temp void)
+0:111          'tempArg' (temp float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp float)
+0:111          'tempArg' (temp float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(i1; (temp void)
+0:112          'tempArg' (temp int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp int)
+0:112          'tempArg' (temp int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(u1; (temp void)
+0:113          'tempArg' (temp uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp uint)
+0:113          'tempArg' (temp uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp float)
+0:117          'storeTemp' (temp float)
+0:117          imageLoad (temp float)
+0:117            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp float)
+0:117          'storeTemp' (temp float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp float)
+0:117        'storeTemp' (temp float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp int)
+0:118          'storeTemp' (temp int)
+0:118          imageLoad (temp int)
+0:118            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp int)
+0:118          'storeTemp' (temp int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp int)
+0:118        'storeTemp' (temp int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp uint)
+0:119          'storeTemp' (temp uint)
+0:119          imageLoad (temp uint)
+0:119            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp uint)
+0:119          'storeTemp' (temp uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp uint)
+0:119        'storeTemp' (temp uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp float)
+0:121          'storeTemp' (temp float)
+0:121          imageLoad (temp float)
+0:121            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp float)
+0:121          'storeTemp' (temp float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp float)
+0:121        'storeTemp' (temp float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp int)
+0:122          'storeTemp' (temp int)
+0:122          imageLoad (temp int)
+0:122            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp int)
+0:122          'storeTemp' (temp int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp int)
+0:122        'storeTemp' (temp int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp uint)
+0:123          'storeTemp' (temp uint)
+0:123          imageLoad (temp uint)
+0:123            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp uint)
+0:123          'storeTemp' (temp uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp uint)
+0:123        'storeTemp' (temp uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp float)
+0:126          'storeTempPre' (temp float)
+0:126          imageLoad (temp float)
+0:126            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp float)
+0:126          'storeTempPost' (temp float)
+0:126          'storeTempPre' (temp float)
+0:126        Post-Increment (temp float)
+0:126          'storeTempPost' (temp float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp float)
+0:126        'storeTempPre' (temp float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp uint)
+0:127          'storeTempPre' (temp uint)
+0:127          imageLoad (temp uint)
+0:127            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp uint)
+0:127          'storeTempPost' (temp uint)
+0:127          'storeTempPre' (temp uint)
+0:127        Post-Decrement (temp uint)
+0:127          'storeTempPost' (temp uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp uint)
+0:127        'storeTempPre' (temp uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp int)
+0:128          'storeTempPre' (temp int)
+0:128          imageLoad (temp int)
+0:128            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp int)
+0:128          'storeTempPost' (temp int)
+0:128          'storeTempPre' (temp int)
+0:128        Post-Increment (temp int)
+0:128          'storeTempPost' (temp int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp int)
+0:128        'storeTempPre' (temp int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp float)
+0:130          'storeTempPre' (temp float)
+0:130          imageLoad (temp float)
+0:130            'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp float)
+0:130          'storeTempPost' (temp float)
+0:130          'storeTempPre' (temp float)
+0:130        Post-Decrement (temp float)
+0:130          'storeTempPost' (temp float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp float)
+0:130        'storeTempPre' (temp float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp int)
+0:131          'storeTempPre' (temp int)
+0:131          imageLoad (temp int)
+0:131            'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp int)
+0:131          'storeTempPost' (temp int)
+0:131          'storeTempPre' (temp int)
+0:131        Post-Increment (temp int)
+0:131          'storeTempPost' (temp int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp int)
+0:131        'storeTempPre' (temp int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp uint)
+0:132          'storeTempPre' (temp uint)
+0:132          imageLoad (temp uint)
+0:132            'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp uint)
+0:132          'storeTempPost' (temp uint)
+0:132          'storeTempPre' (temp uint)
+0:132        Post-Decrement (temp uint)
+0:132          'storeTempPost' (temp uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp uint)
+0:132        'storeTempPre' (temp uint)
+0:135      Sequence
+0:135        move second child to first child (temp float)
+0:135          'storeTemp' (temp float)
+0:?           imageLoad (temp float)
+0:135            'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp float)
+0:135        'storeTemp' (temp float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 566
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 541
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 10  "Fn1(i1;"
+                              Name 9  "x"
+                              Name 16  "Fn1(u1;"
+                              Name 15  "x"
+                              Name 22  "Fn1(f1;"
+                              Name 21  "x"
+                              Name 26  "Fn2(i1;"
+                              Name 25  "x"
+                              Name 30  "Fn2(u1;"
+                              Name 29  "x"
+                              Name 34  "Fn2(f1;"
+                              Name 33  "x"
+                              Name 37  "SomeValue("
+                              Name 54  "$Global"
+                              MemberName 54($Global) 0  "c1"
+                              MemberName 54($Global) 1  "c2"
+                              MemberName 54($Global) 2  "c3"
+                              MemberName 54($Global) 3  "c4"
+                              MemberName 54($Global) 4  "o1"
+                              MemberName 54($Global) 5  "o2"
+                              MemberName 54($Global) 6  "o3"
+                              MemberName 54($Global) 7  "o4"
+                              MemberName 54($Global) 8  "uf1"
+                              MemberName 54($Global) 9  "ui1"
+                              MemberName 54($Global) 10  "uu1"
+                              Name 56  ""
+                              Name 65  "g_tTex1df1"
+                              Name 70  "r00"
+                              Name 75  "r01"
+                              Name 78  "g_tTex1di1"
+                              Name 83  "r02"
+                              Name 86  "g_tTex1du1"
+                              Name 91  "r10"
+                              Name 94  "g_tTex2df1"
+                              Name 101  "r11"
+                              Name 104  "g_tTex2di1"
+                              Name 109  "r12"
+                              Name 112  "g_tTex2du1"
+                              Name 117  "r20"
+                              Name 120  "g_tTex3df1"
+                              Name 127  "r21"
+                              Name 130  "g_tTex3di1"
+                              Name 135  "r22"
+                              Name 138  "g_tTex3du1"
+                              Name 143  "lf1"
+                              Name 148  "storeTemp"
+                              Name 158  "storeTemp"
+                              Name 163  "storeTemp"
+                              Name 169  "val1"
+                              Name 170  "coordTemp"
+                              Name 173  "storeTemp"
+                              Name 184  "coordTemp"
+                              Name 187  "storeTemp"
+                              Name 197  "coordTemp"
+                              Name 200  "storeTemp"
+                              Name 210  "coordTemp"
+                              Name 213  "storeTemp"
+                              Name 222  "coordTemp"
+                              Name 225  "storeTemp"
+                              Name 234  "coordTemp"
+                              Name 237  "storeTemp"
+                              Name 247  "coordTemp"
+                              Name 250  "storeTemp"
+                              Name 260  "coordTemp"
+                              Name 263  "storeTemp"
+                              Name 272  "coordTemp"
+                              Name 275  "storeTemp"
+                              Name 284  "storeTemp"
+                              Name 294  "storeTemp"
+                              Name 300  "storeTemp"
+                              Name 306  "storeTemp"
+                              Name 316  "storeTemp"
+                              Name 321  "storeTemp"
+                              Name 331  "param"
+                              Name 337  "param"
+                              Name 343  "param"
+                              Name 345  "tempArg"
+                              Name 346  "param"
+                              Name 353  "tempArg"
+                              Name 354  "param"
+                              Name 361  "tempArg"
+                              Name 362  "param"
+                              Name 369  "coordTemp"
+                              Name 372  "storeTemp"
+                              Name 382  "coordTemp"
+                              Name 385  "storeTemp"
+                              Name 394  "coordTemp"
+                              Name 397  "storeTemp"
+                              Name 406  "coordTemp"
+                              Name 409  "storeTemp"
+                              Name 418  "coordTemp"
+                              Name 421  "storeTemp"
+                              Name 430  "coordTemp"
+                              Name 433  "storeTemp"
+                              Name 442  "coordTemp"
+                              Name 445  "storeTempPre"
+                              Name 449  "storeTempPost"
+                              Name 456  "coordTemp"
+                              Name 459  "storeTempPre"
+                              Name 463  "storeTempPost"
+                              Name 470  "coordTemp"
+                              Name 473  "storeTempPre"
+                              Name 477  "storeTempPost"
+                              Name 484  "coordTemp"
+                              Name 487  "storeTempPre"
+                              Name 491  "storeTempPost"
+                              Name 498  "coordTemp"
+                              Name 501  "storeTempPre"
+                              Name 505  "storeTempPost"
+                              Name 512  "coordTemp"
+                              Name 515  "storeTempPre"
+                              Name 519  "storeTempPost"
+                              Name 526  "storeTemp"
+                              Name 534  "PS_OUTPUT"
+                              MemberName 534(PS_OUTPUT) 0  "Color"
+                              Name 536  "psout"
+                              Name 541  "Color"
+                              Name 547  "g_sSamp"
+                              Name 550  "g_tTex1df1a"
+                              Name 553  "g_tTex1di1a"
+                              Name 556  "g_tTex1du1a"
+                              Name 559  "g_tTex2df1a"
+                              Name 562  "g_tTex2di1a"
+                              Name 565  "g_tTex2du1a"
+                              MemberDecorate 54($Global) 0 Offset 0
+                              MemberDecorate 54($Global) 1 Offset 8
+                              MemberDecorate 54($Global) 2 Offset 16
+                              MemberDecorate 54($Global) 3 Offset 32
+                              MemberDecorate 54($Global) 4 Offset 48
+                              MemberDecorate 54($Global) 5 Offset 56
+                              MemberDecorate 54($Global) 6 Offset 64
+                              MemberDecorate 54($Global) 7 Offset 80
+                              MemberDecorate 54($Global) 8 Offset 96
+                              MemberDecorate 54($Global) 9 Offset 100
+                              MemberDecorate 54($Global) 10 Offset 104
+                              Decorate 54($Global) Block
+                              Decorate 56 DescriptorSet 0
+                              Decorate 65(g_tTex1df1) DescriptorSet 0
+                              Decorate 78(g_tTex1di1) DescriptorSet 0
+                              Decorate 86(g_tTex1du1) DescriptorSet 0
+                              Decorate 94(g_tTex2df1) DescriptorSet 0
+                              Decorate 104(g_tTex2di1) DescriptorSet 0
+                              Decorate 112(g_tTex2du1) DescriptorSet 0
+                              Decorate 120(g_tTex3df1) DescriptorSet 0
+                              Decorate 130(g_tTex3di1) DescriptorSet 0
+                              Decorate 138(g_tTex3du1) DescriptorSet 0
+                              Decorate 541(Color) Location 0
+                              Decorate 547(g_sSamp) DescriptorSet 0
+                              Decorate 547(g_sSamp) Binding 0
+                              Decorate 550(g_tTex1df1a) DescriptorSet 0
+                              Decorate 553(g_tTex1di1a) DescriptorSet 0
+                              Decorate 556(g_tTex1du1a) DescriptorSet 0
+                              Decorate 559(g_tTex2df1a) DescriptorSet 0
+                              Decorate 562(g_tTex2di1a) DescriptorSet 0
+                              Decorate 565(g_tTex2du1a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 6(int) 7(ptr)
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              14:             TypeFunction 12(int) 13(ptr)
+              18:             TypeFloat 32
+              19:             TypePointer Function 18(float)
+              20:             TypeFunction 18(float) 19(ptr)
+              24:             TypeFunction 2 7(ptr)
+              28:             TypeFunction 2 13(ptr)
+              32:             TypeFunction 2 19(ptr)
+              36:             TypeFunction 18(float)
+              48:      6(int) Constant 0
+              49:     12(int) Constant 0
+              50:   18(float) Constant 0
+              51:             TypeVector 6(int) 2
+              52:             TypeVector 6(int) 3
+              53:             TypeVector 6(int) 4
+     54($Global):             TypeStruct 6(int) 51(ivec2) 52(ivec3) 53(ivec4) 6(int) 51(ivec2) 52(ivec3) 53(ivec4) 18(float) 6(int) 12(int)
+              55:             TypePointer Uniform 54($Global)
+              56:     55(ptr) Variable Uniform
+              57:             TypePointer Uniform 6(int)
+              63:             TypeImage 18(float) 1D nonsampled format:R32f
+              64:             TypePointer UniformConstant 63
+  65(g_tTex1df1):     64(ptr) Variable UniformConstant
+              76:             TypeImage 6(int) 1D nonsampled format:R32i
+              77:             TypePointer UniformConstant 76
+  78(g_tTex1di1):     77(ptr) Variable UniformConstant
+              84:             TypeImage 12(int) 1D nonsampled format:R32ui
+              85:             TypePointer UniformConstant 84
+  86(g_tTex1du1):     85(ptr) Variable UniformConstant
+              92:             TypeImage 18(float) 2D nonsampled format:R32f
+              93:             TypePointer UniformConstant 92
+  94(g_tTex2df1):     93(ptr) Variable UniformConstant
+              96:      6(int) Constant 1
+              97:             TypePointer Uniform 51(ivec2)
+             102:             TypeImage 6(int) 2D nonsampled format:R32i
+             103:             TypePointer UniformConstant 102
+ 104(g_tTex2di1):    103(ptr) Variable UniformConstant
+             110:             TypeImage 12(int) 2D nonsampled format:R32ui
+             111:             TypePointer UniformConstant 110
+ 112(g_tTex2du1):    111(ptr) Variable UniformConstant
+             118:             TypeImage 18(float) 3D nonsampled format:R32f
+             119:             TypePointer UniformConstant 118
+ 120(g_tTex3df1):    119(ptr) Variable UniformConstant
+             122:      6(int) Constant 2
+             123:             TypePointer Uniform 52(ivec3)
+             128:             TypeImage 6(int) 3D nonsampled format:R32i
+             129:             TypePointer UniformConstant 128
+ 130(g_tTex3di1):    129(ptr) Variable UniformConstant
+             136:             TypeImage 12(int) 3D nonsampled format:R32ui
+             137:             TypePointer UniformConstant 136
+ 138(g_tTex3du1):    137(ptr) Variable UniformConstant
+             144:      6(int) Constant 8
+             145:             TypePointer Uniform 18(float)
+             164:     12(int) Constant 3
+             177:   18(float) Constant 1073741824
+             191:   18(float) Constant 1077936128
+             204:   18(float) Constant 1082130432
+             241:      6(int) Constant 65535
+             254:      6(int) Constant 61680
+             295:      6(int) Constant 5
+             301:     12(int) Constant 6
+             322:     12(int) Constant 9
+             377:   18(float) Constant 1065353216
+             528:      6(int) Constant 3
+             529:   51(ivec2) ConstantComposite 122 528
+             533:             TypeVector 18(float) 4
+  534(PS_OUTPUT):             TypeStruct 533(fvec4)
+             535:             TypePointer Function 534(PS_OUTPUT)
+             537:  533(fvec4) ConstantComposite 377 377 377 377
+             538:             TypePointer Function 533(fvec4)
+             540:             TypePointer Output 533(fvec4)
+      541(Color):    540(ptr) Variable Output
+             545:             TypeSampler
+             546:             TypePointer UniformConstant 545
+    547(g_sSamp):    546(ptr) Variable UniformConstant
+             548:             TypeImage 18(float) 1D array nonsampled format:R32f
+             549:             TypePointer UniformConstant 548
+550(g_tTex1df1a):    549(ptr) Variable UniformConstant
+             551:             TypeImage 6(int) 1D array nonsampled format:R32i
+             552:             TypePointer UniformConstant 551
+553(g_tTex1di1a):    552(ptr) Variable UniformConstant
+             554:             TypeImage 12(int) 1D array nonsampled format:R32ui
+             555:             TypePointer UniformConstant 554
+556(g_tTex1du1a):    555(ptr) Variable UniformConstant
+             557:             TypeImage 18(float) 2D array nonsampled format:R32f
+             558:             TypePointer UniformConstant 557
+559(g_tTex2df1a):    558(ptr) Variable UniformConstant
+             560:             TypeImage 6(int) 2D array nonsampled format:R32i
+             561:             TypePointer UniformConstant 560
+562(g_tTex2di1a):    561(ptr) Variable UniformConstant
+             563:             TypeImage 12(int) 2D array nonsampled format:R32ui
+             564:             TypePointer UniformConstant 563
+565(g_tTex2du1a):    564(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+         70(r00):     19(ptr) Variable Function
+         75(r01):      7(ptr) Variable Function
+         83(r02):     13(ptr) Variable Function
+         91(r10):     19(ptr) Variable Function
+        101(r11):      7(ptr) Variable Function
+        109(r12):     13(ptr) Variable Function
+        117(r20):     19(ptr) Variable Function
+        127(r21):      7(ptr) Variable Function
+        135(r22):     13(ptr) Variable Function
+        143(lf1):     19(ptr) Variable Function
+  148(storeTemp):     19(ptr) Variable Function
+  158(storeTemp):      7(ptr) Variable Function
+  163(storeTemp):     13(ptr) Variable Function
+       169(val1):     19(ptr) Variable Function
+  170(coordTemp):      7(ptr) Variable Function
+  173(storeTemp):     19(ptr) Variable Function
+  184(coordTemp):      7(ptr) Variable Function
+  187(storeTemp):     19(ptr) Variable Function
+  197(coordTemp):      7(ptr) Variable Function
+  200(storeTemp):     19(ptr) Variable Function
+  210(coordTemp):      7(ptr) Variable Function
+  213(storeTemp):      7(ptr) Variable Function
+  222(coordTemp):      7(ptr) Variable Function
+  225(storeTemp):      7(ptr) Variable Function
+  234(coordTemp):      7(ptr) Variable Function
+  237(storeTemp):      7(ptr) Variable Function
+  247(coordTemp):      7(ptr) Variable Function
+  250(storeTemp):      7(ptr) Variable Function
+  260(coordTemp):      7(ptr) Variable Function
+  263(storeTemp):      7(ptr) Variable Function
+  272(coordTemp):      7(ptr) Variable Function
+  275(storeTemp):      7(ptr) Variable Function
+  284(storeTemp):     19(ptr) Variable Function
+  294(storeTemp):      7(ptr) Variable Function
+  300(storeTemp):     13(ptr) Variable Function
+  306(storeTemp):     19(ptr) Variable Function
+  316(storeTemp):      7(ptr) Variable Function
+  321(storeTemp):     13(ptr) Variable Function
+      331(param):     19(ptr) Variable Function
+      337(param):      7(ptr) Variable Function
+      343(param):     13(ptr) Variable Function
+    345(tempArg):     19(ptr) Variable Function
+      346(param):     19(ptr) Variable Function
+    353(tempArg):      7(ptr) Variable Function
+      354(param):      7(ptr) Variable Function
+    361(tempArg):     13(ptr) Variable Function
+      362(param):     13(ptr) Variable Function
+  369(coordTemp):      7(ptr) Variable Function
+  372(storeTemp):     19(ptr) Variable Function
+  382(coordTemp):      7(ptr) Variable Function
+  385(storeTemp):      7(ptr) Variable Function
+  394(coordTemp):      7(ptr) Variable Function
+  397(storeTemp):     13(ptr) Variable Function
+  406(coordTemp):      7(ptr) Variable Function
+  409(storeTemp):     19(ptr) Variable Function
+  418(coordTemp):      7(ptr) Variable Function
+  421(storeTemp):      7(ptr) Variable Function
+  430(coordTemp):      7(ptr) Variable Function
+  433(storeTemp):     13(ptr) Variable Function
+  442(coordTemp):      7(ptr) Variable Function
+445(storeTempPre):     19(ptr) Variable Function
+449(storeTempPost):     19(ptr) Variable Function
+  456(coordTemp):      7(ptr) Variable Function
+459(storeTempPre):     13(ptr) Variable Function
+463(storeTempPost):     13(ptr) Variable Function
+  470(coordTemp):      7(ptr) Variable Function
+473(storeTempPre):      7(ptr) Variable Function
+477(storeTempPost):      7(ptr) Variable Function
+  484(coordTemp):      7(ptr) Variable Function
+487(storeTempPre):     19(ptr) Variable Function
+491(storeTempPost):     19(ptr) Variable Function
+  498(coordTemp):      7(ptr) Variable Function
+501(storeTempPre):      7(ptr) Variable Function
+505(storeTempPost):      7(ptr) Variable Function
+  512(coordTemp):      7(ptr) Variable Function
+515(storeTempPre):     13(ptr) Variable Function
+519(storeTempPost):     13(ptr) Variable Function
+  526(storeTemp):     19(ptr) Variable Function
+      536(psout):    535(ptr) Variable Function
+              66:          63 Load 65(g_tTex1df1)
+              67:     57(ptr) AccessChain 56 48
+              68:      6(int) Load 67
+              69:   18(float) ImageRead 66 68
+              71:          63 Load 65(g_tTex1df1)
+              72:     57(ptr) AccessChain 56 48
+              73:      6(int) Load 72
+              74:   18(float) ImageRead 71 73
+                              Store 70(r00) 74
+              79:          76 Load 78(g_tTex1di1)
+              80:     57(ptr) AccessChain 56 48
+              81:      6(int) Load 80
+              82:      6(int) ImageRead 79 81
+                              Store 75(r01) 82
+              87:          84 Load 86(g_tTex1du1)
+              88:     57(ptr) AccessChain 56 48
+              89:      6(int) Load 88
+              90:     12(int) ImageRead 87 89
+                              Store 83(r02) 90
+              95:          92 Load 94(g_tTex2df1)
+              98:     97(ptr) AccessChain 56 96
+              99:   51(ivec2) Load 98
+             100:   18(float) ImageRead 95 99
+                              Store 91(r10) 100
+             105:         102 Load 104(g_tTex2di1)
+             106:     97(ptr) AccessChain 56 96
+             107:   51(ivec2) Load 106
+             108:      6(int) ImageRead 105 107
+                              Store 101(r11) 108
+             113:         110 Load 112(g_tTex2du1)
+             114:     97(ptr) AccessChain 56 96
+             115:   51(ivec2) Load 114
+             116:     12(int) ImageRead 113 115
+                              Store 109(r12) 116
+             121:         118 Load 120(g_tTex3df1)
+             124:    123(ptr) AccessChain 56 122
+             125:   52(ivec3) Load 124
+             126:   18(float) ImageRead 121 125
+                              Store 117(r20) 126
+             131:         128 Load 130(g_tTex3di1)
+             132:    123(ptr) AccessChain 56 122
+             133:   52(ivec3) Load 132
+             134:      6(int) ImageRead 131 133
+                              Store 127(r21) 134
+             139:         136 Load 138(g_tTex3du1)
+             140:    123(ptr) AccessChain 56 122
+             141:   52(ivec3) Load 140
+             142:     12(int) ImageRead 139 141
+                              Store 135(r22) 142
+             146:    145(ptr) AccessChain 56 144
+             147:   18(float) Load 146
+                              Store 143(lf1) 147
+             149:   18(float) FunctionCall 37(SomeValue()
+                              Store 148(storeTemp) 149
+             150:          63 Load 65(g_tTex1df1)
+             151:     57(ptr) AccessChain 56 48
+             152:      6(int) Load 151
+             153:   18(float) Load 148(storeTemp)
+                              ImageWrite 150 152 153
+             154:          63 Load 65(g_tTex1df1)
+             155:     57(ptr) AccessChain 56 48
+             156:      6(int) Load 155
+             157:   18(float) Load 143(lf1)
+                              ImageWrite 154 156 157
+                              Store 158(storeTemp) 122
+             159:          76 Load 78(g_tTex1di1)
+             160:     57(ptr) AccessChain 56 48
+             161:      6(int) Load 160
+             162:      6(int) Load 158(storeTemp)
+                              ImageWrite 159 161 162
+                              Store 163(storeTemp) 164
+             165:          84 Load 86(g_tTex1du1)
+             166:     57(ptr) AccessChain 56 48
+             167:      6(int) Load 166
+             168:     12(int) Load 163(storeTemp)
+                              ImageWrite 165 167 168
+             171:     57(ptr) AccessChain 56 48
+             172:      6(int) Load 171
+                              Store 170(coordTemp) 172
+             174:          63 Load 65(g_tTex1df1)
+             175:      6(int) Load 170(coordTemp)
+             176:   18(float) ImageRead 174 175
+                              Store 173(storeTemp) 176
+             178:   18(float) Load 173(storeTemp)
+             179:   18(float) FMul 178 177
+                              Store 173(storeTemp) 179
+             180:          63 Load 65(g_tTex1df1)
+             181:      6(int) Load 170(coordTemp)
+             182:   18(float) Load 173(storeTemp)
+                              ImageWrite 180 181 182
+             183:   18(float) Load 173(storeTemp)
+                              Store 169(val1) 183
+             185:     57(ptr) AccessChain 56 48
+             186:      6(int) Load 185
+                              Store 184(coordTemp) 186
+             188:          63 Load 65(g_tTex1df1)
+             189:      6(int) Load 184(coordTemp)
+             190:   18(float) ImageRead 188 189
+                              Store 187(storeTemp) 190
+             192:   18(float) Load 187(storeTemp)
+             193:   18(float) FSub 192 191
+                              Store 187(storeTemp) 193
+             194:          63 Load 65(g_tTex1df1)
+             195:      6(int) Load 184(coordTemp)
+             196:   18(float) Load 187(storeTemp)
+                              ImageWrite 194 195 196
+             198:     57(ptr) AccessChain 56 48
+             199:      6(int) Load 198
+                              Store 197(coordTemp) 199
+             201:          63 Load 65(g_tTex1df1)
+             202:      6(int) Load 197(coordTemp)
+             203:   18(float) ImageRead 201 202
+                              Store 200(storeTemp) 203
+             205:   18(float) Load 200(storeTemp)
+             206:   18(float) FAdd 205 204
+                              Store 200(storeTemp) 206
+             207:          63 Load 65(g_tTex1df1)
+             208:      6(int) Load 197(coordTemp)
+             209:   18(float) Load 200(storeTemp)
+                              ImageWrite 207 208 209
+             211:     57(ptr) AccessChain 56 48
+             212:      6(int) Load 211
+                              Store 210(coordTemp) 212
+             214:          76 Load 78(g_tTex1di1)
+             215:      6(int) Load 210(coordTemp)
+             216:      6(int) ImageRead 214 215
+                              Store 213(storeTemp) 216
+             217:      6(int) Load 213(storeTemp)
+             218:      6(int) SDiv 217 122
+                              Store 213(storeTemp) 218
+             219:          76 Load 78(g_tTex1di1)
+             220:      6(int) Load 210(coordTemp)
+             221:      6(int) Load 213(storeTemp)
+                              ImageWrite 219 220 221
+             223:     57(ptr) AccessChain 56 48
+             224:      6(int) Load 223
+                              Store 222(coordTemp) 224
+             226:          76 Load 78(g_tTex1di1)
+             227:      6(int) Load 222(coordTemp)
+             228:      6(int) ImageRead 226 227
+                              Store 225(storeTemp) 228
+             229:      6(int) Load 225(storeTemp)
+             230:      6(int) SMod 229 122
+                              Store 225(storeTemp) 230
+             231:          76 Load 78(g_tTex1di1)
+             232:      6(int) Load 222(coordTemp)
+             233:      6(int) Load 225(storeTemp)
+                              ImageWrite 231 232 233
+             235:     57(ptr) AccessChain 56 48
+             236:      6(int) Load 235
+                              Store 234(coordTemp) 236
+             238:          76 Load 78(g_tTex1di1)
+             239:      6(int) Load 234(coordTemp)
+             240:      6(int) ImageRead 238 239
+                              Store 237(storeTemp) 240
+             242:      6(int) Load 237(storeTemp)
+             243:      6(int) BitwiseAnd 242 241
+                              Store 237(storeTemp) 243
+             244:          76 Load 78(g_tTex1di1)
+             245:      6(int) Load 234(coordTemp)
+             246:      6(int) Load 237(storeTemp)
+                              ImageWrite 244 245 246
+             248:     57(ptr) AccessChain 56 48
+             249:      6(int) Load 248
+                              Store 247(coordTemp) 249
+             251:          76 Load 78(g_tTex1di1)
+             252:      6(int) Load 247(coordTemp)
+             253:      6(int) ImageRead 251 252
+                              Store 250(storeTemp) 253
+             255:      6(int) Load 250(storeTemp)
+             256:      6(int) BitwiseOr 255 254
+                              Store 250(storeTemp) 256
+             257:          76 Load 78(g_tTex1di1)
+             258:      6(int) Load 247(coordTemp)
+             259:      6(int) Load 250(storeTemp)
+                              ImageWrite 257 258 259
+             261:     57(ptr) AccessChain 56 48
+             262:      6(int) Load 261
+                              Store 260(coordTemp) 262
+             264:          76 Load 78(g_tTex1di1)
+             265:      6(int) Load 260(coordTemp)
+             266:      6(int) ImageRead 264 265
+                              Store 263(storeTemp) 266
+             267:      6(int) Load 263(storeTemp)
+             268:      6(int) ShiftLeftLogical 267 122
+                              Store 263(storeTemp) 268
+             269:          76 Load 78(g_tTex1di1)
+             270:      6(int) Load 260(coordTemp)
+             271:      6(int) Load 263(storeTemp)
+                              ImageWrite 269 270 271
+             273:     57(ptr) AccessChain 56 48
+             274:      6(int) Load 273
+                              Store 272(coordTemp) 274
+             276:          76 Load 78(g_tTex1di1)
+             277:      6(int) Load 272(coordTemp)
+             278:      6(int) ImageRead 276 277
+                              Store 275(storeTemp) 278
+             279:      6(int) Load 275(storeTemp)
+             280:      6(int) ShiftRightArithmetic 279 122
+                              Store 275(storeTemp) 280
+             281:          76 Load 78(g_tTex1di1)
+             282:      6(int) Load 272(coordTemp)
+             283:      6(int) Load 275(storeTemp)
+                              ImageWrite 281 282 283
+             285:   18(float) FunctionCall 37(SomeValue()
+                              Store 284(storeTemp) 285
+             286:          92 Load 94(g_tTex2df1)
+             287:     97(ptr) AccessChain 56 96
+             288:   51(ivec2) Load 287
+             289:   18(float) Load 284(storeTemp)
+                              ImageWrite 286 288 289
+             290:          92 Load 94(g_tTex2df1)
+             291:     97(ptr) AccessChain 56 96
+             292:   51(ivec2) Load 291
+             293:   18(float) Load 143(lf1)
+                              ImageWrite 290 292 293
+                              Store 294(storeTemp) 295
+             296:         102 Load 104(g_tTex2di1)
+             297:     97(ptr) AccessChain 56 96
+             298:   51(ivec2) Load 297
+             299:      6(int) Load 294(storeTemp)
+                              ImageWrite 296 298 299
+                              Store 300(storeTemp) 301
+             302:         110 Load 112(g_tTex2du1)
+             303:     97(ptr) AccessChain 56 96
+             304:   51(ivec2) Load 303
+             305:     12(int) Load 300(storeTemp)
+                              ImageWrite 302 304 305
+             307:   18(float) FunctionCall 37(SomeValue()
+                              Store 306(storeTemp) 307
+             308:         118 Load 120(g_tTex3df1)
+             309:    123(ptr) AccessChain 56 122
+             310:   52(ivec3) Load 309
+             311:   18(float) Load 306(storeTemp)
+                              ImageWrite 308 310 311
+             312:         118 Load 120(g_tTex3df1)
+             313:    123(ptr) AccessChain 56 122
+             314:   52(ivec3) Load 313
+             315:   18(float) Load 143(lf1)
+                              ImageWrite 312 314 315
+                              Store 316(storeTemp) 144
+             317:         128 Load 130(g_tTex3di1)
+             318:    123(ptr) AccessChain 56 122
+             319:   52(ivec3) Load 318
+             320:      6(int) Load 316(storeTemp)
+                              ImageWrite 317 319 320
+                              Store 321(storeTemp) 322
+             323:         136 Load 138(g_tTex3du1)
+             324:    123(ptr) AccessChain 56 122
+             325:   52(ivec3) Load 324
+             326:     12(int) Load 321(storeTemp)
+                              ImageWrite 323 325 326
+             327:          63 Load 65(g_tTex1df1)
+             328:     57(ptr) AccessChain 56 48
+             329:      6(int) Load 328
+             330:   18(float) ImageRead 327 329
+                              Store 331(param) 330
+             332:   18(float) FunctionCall 22(Fn1(f1;) 331(param)
+             333:          76 Load 78(g_tTex1di1)
+             334:     57(ptr) AccessChain 56 48
+             335:      6(int) Load 334
+             336:      6(int) ImageRead 333 335
+                              Store 337(param) 336
+             338:      6(int) FunctionCall 10(Fn1(i1;) 337(param)
+             339:          84 Load 86(g_tTex1du1)
+             340:     57(ptr) AccessChain 56 48
+             341:      6(int) Load 340
+             342:     12(int) ImageRead 339 341
+                              Store 343(param) 342
+             344:     12(int) FunctionCall 16(Fn1(u1;) 343(param)
+             347:           2 FunctionCall 34(Fn2(f1;) 346(param)
+             348:   18(float) Load 346(param)
+                              Store 345(tempArg) 348
+             349:          63 Load 65(g_tTex1df1)
+             350:     57(ptr) AccessChain 56 48
+             351:      6(int) Load 350
+             352:   18(float) Load 345(tempArg)
+                              ImageWrite 349 351 352
+             355:           2 FunctionCall 26(Fn2(i1;) 354(param)
+             356:      6(int) Load 354(param)
+                              Store 353(tempArg) 356
+             357:          76 Load 78(g_tTex1di1)
+             358:     57(ptr) AccessChain 56 48
+             359:      6(int) Load 358
+             360:      6(int) Load 353(tempArg)
+                              ImageWrite 357 359 360
+             363:           2 FunctionCall 30(Fn2(u1;) 362(param)
+             364:     12(int) Load 362(param)
+                              Store 361(tempArg) 364
+             365:          84 Load 86(g_tTex1du1)
+             366:     57(ptr) AccessChain 56 48
+             367:      6(int) Load 366
+             368:     12(int) Load 361(tempArg)
+                              ImageWrite 365 367 368
+             370:     57(ptr) AccessChain 56 48
+             371:      6(int) Load 370
+                              Store 369(coordTemp) 371
+             373:          63 Load 65(g_tTex1df1)
+             374:      6(int) Load 369(coordTemp)
+             375:   18(float) ImageRead 373 374
+                              Store 372(storeTemp) 375
+             376:   18(float) Load 372(storeTemp)
+             378:   18(float) FAdd 376 377
+                              Store 372(storeTemp) 378
+             379:          63 Load 65(g_tTex1df1)
+             380:      6(int) Load 369(coordTemp)
+             381:   18(float) Load 372(storeTemp)
+                              ImageWrite 379 380 381
+             383:     57(ptr) AccessChain 56 48
+             384:      6(int) Load 383
+                              Store 382(coordTemp) 384
+             386:          76 Load 78(g_tTex1di1)
+             387:      6(int) Load 382(coordTemp)
+             388:      6(int) ImageRead 386 387
+                              Store 385(storeTemp) 388
+             389:      6(int) Load 385(storeTemp)
+             390:      6(int) IAdd 389 96
+                              Store 385(storeTemp) 390
+             391:          76 Load 78(g_tTex1di1)
+             392:      6(int) Load 382(coordTemp)
+             393:      6(int) Load 385(storeTemp)
+                              ImageWrite 391 392 393
+             395:     57(ptr) AccessChain 56 48
+             396:      6(int) Load 395
+                              Store 394(coordTemp) 396
+             398:          84 Load 86(g_tTex1du1)
+             399:      6(int) Load 394(coordTemp)
+             400:     12(int) ImageRead 398 399
+                              Store 397(storeTemp) 400
+             401:     12(int) Load 397(storeTemp)
+             402:     12(int) IAdd 401 96
+                              Store 397(storeTemp) 402
+             403:          84 Load 86(g_tTex1du1)
+             404:      6(int) Load 394(coordTemp)
+             405:     12(int) Load 397(storeTemp)
+                              ImageWrite 403 404 405
+             407:     57(ptr) AccessChain 56 48
+             408:      6(int) Load 407
+                              Store 406(coordTemp) 408
+             410:          63 Load 65(g_tTex1df1)
+             411:      6(int) Load 406(coordTemp)
+             412:   18(float) ImageRead 410 411
+                              Store 409(storeTemp) 412
+             413:   18(float) Load 409(storeTemp)
+             414:   18(float) FSub 413 377
+                              Store 409(storeTemp) 414
+             415:          63 Load 65(g_tTex1df1)
+             416:      6(int) Load 406(coordTemp)
+             417:   18(float) Load 409(storeTemp)
+                              ImageWrite 415 416 417
+             419:     57(ptr) AccessChain 56 48
+             420:      6(int) Load 419
+                              Store 418(coordTemp) 420
+             422:          76 Load 78(g_tTex1di1)
+             423:      6(int) Load 418(coordTemp)
+             424:      6(int) ImageRead 422 423
+                              Store 421(storeTemp) 424
+             425:      6(int) Load 421(storeTemp)
+             426:      6(int) ISub 425 96
+                              Store 421(storeTemp) 426
+             427:          76 Load 78(g_tTex1di1)
+             428:      6(int) Load 418(coordTemp)
+             429:      6(int) Load 421(storeTemp)
+                              ImageWrite 427 428 429
+             431:     57(ptr) AccessChain 56 48
+             432:      6(int) Load 431
+                              Store 430(coordTemp) 432
+             434:          84 Load 86(g_tTex1du1)
+             435:      6(int) Load 430(coordTemp)
+             436:     12(int) ImageRead 434 435
+                              Store 433(storeTemp) 436
+             437:     12(int) Load 433(storeTemp)
+             438:     12(int) ISub 437 96
+                              Store 433(storeTemp) 438
+             439:          84 Load 86(g_tTex1du1)
+             440:      6(int) Load 430(coordTemp)
+             441:     12(int) Load 433(storeTemp)
+                              ImageWrite 439 440 441
+             443:     57(ptr) AccessChain 56 48
+             444:      6(int) Load 443
+                              Store 442(coordTemp) 444
+             446:          63 Load 65(g_tTex1df1)
+             447:      6(int) Load 442(coordTemp)
+             448:   18(float) ImageRead 446 447
+                              Store 445(storeTempPre) 448
+             450:   18(float) Load 445(storeTempPre)
+                              Store 449(storeTempPost) 450
+             451:   18(float) Load 449(storeTempPost)
+             452:   18(float) FAdd 451 377
+                              Store 449(storeTempPost) 452
+             453:          63 Load 65(g_tTex1df1)
+             454:      6(int) Load 442(coordTemp)
+             455:   18(float) Load 449(storeTempPost)
+                              ImageWrite 453 454 455
+             457:     57(ptr) AccessChain 56 48
+             458:      6(int) Load 457
+                              Store 456(coordTemp) 458
+             460:          84 Load 86(g_tTex1du1)
+             461:      6(int) Load 456(coordTemp)
+             462:     12(int) ImageRead 460 461
+                              Store 459(storeTempPre) 462
+             464:     12(int) Load 459(storeTempPre)
+                              Store 463(storeTempPost) 464
+             465:     12(int) Load 463(storeTempPost)
+             466:     12(int) ISub 465 96
+                              Store 463(storeTempPost) 466
+             467:          84 Load 86(g_tTex1du1)
+             468:      6(int) Load 456(coordTemp)
+             469:     12(int) Load 463(storeTempPost)
+                              ImageWrite 467 468 469
+             471:     57(ptr) AccessChain 56 48
+             472:      6(int) Load 471
+                              Store 470(coordTemp) 472
+             474:          76 Load 78(g_tTex1di1)
+             475:      6(int) Load 470(coordTemp)
+             476:      6(int) ImageRead 474 475
+                              Store 473(storeTempPre) 476
+             478:      6(int) Load 473(storeTempPre)
+                              Store 477(storeTempPost) 478
+             479:      6(int) Load 477(storeTempPost)
+             480:      6(int) IAdd 479 96
+                              Store 477(storeTempPost) 480
+             481:          76 Load 78(g_tTex1di1)
+             482:      6(int) Load 470(coordTemp)
+             483:      6(int) Load 477(storeTempPost)
+                              ImageWrite 481 482 483
+             485:     57(ptr) AccessChain 56 48
+             486:      6(int) Load 485
+                              Store 484(coordTemp) 486
+             488:          63 Load 65(g_tTex1df1)
+             489:      6(int) Load 484(coordTemp)
+             490:   18(float) ImageRead 488 489
+                              Store 487(storeTempPre) 490
+             492:   18(float) Load 487(storeTempPre)
+                              Store 491(storeTempPost) 492
+             493:   18(float) Load 491(storeTempPost)
+             494:   18(float) FSub 493 377
+                              Store 491(storeTempPost) 494
+             495:          63 Load 65(g_tTex1df1)
+             496:      6(int) Load 484(coordTemp)
+             497:   18(float) Load 491(storeTempPost)
+                              ImageWrite 495 496 497
+             499:     57(ptr) AccessChain 56 48
+             500:      6(int) Load 499
+                              Store 498(coordTemp) 500
+             502:          76 Load 78(g_tTex1di1)
+             503:      6(int) Load 498(coordTemp)
+             504:      6(int) ImageRead 502 503
+                              Store 501(storeTempPre) 504
+             506:      6(int) Load 501(storeTempPre)
+                              Store 505(storeTempPost) 506
+             507:      6(int) Load 505(storeTempPost)
+             508:      6(int) IAdd 507 96
+                              Store 505(storeTempPost) 508
+             509:          76 Load 78(g_tTex1di1)
+             510:      6(int) Load 498(coordTemp)
+             511:      6(int) Load 505(storeTempPost)
+                              ImageWrite 509 510 511
+             513:     57(ptr) AccessChain 56 48
+             514:      6(int) Load 513
+                              Store 512(coordTemp) 514
+             516:          84 Load 86(g_tTex1du1)
+             517:      6(int) Load 512(coordTemp)
+             518:     12(int) ImageRead 516 517
+                              Store 515(storeTempPre) 518
+             520:     12(int) Load 515(storeTempPre)
+                              Store 519(storeTempPost) 520
+             521:     12(int) Load 519(storeTempPost)
+             522:     12(int) ISub 521 96
+                              Store 519(storeTempPost) 522
+             523:          84 Load 86(g_tTex1du1)
+             524:      6(int) Load 512(coordTemp)
+             525:     12(int) Load 519(storeTempPost)
+                              ImageWrite 523 524 525
+             527:          92 Load 94(g_tTex2df1)
+             530:   18(float) ImageRead 527 529
+                              Store 526(storeTemp) 530
+             531:          63 Load 65(g_tTex1df1)
+             532:   18(float) Load 526(storeTemp)
+                              ImageWrite 531 96 532
+             539:    538(ptr) AccessChain 536(psout) 48
+                              Store 539 537
+             542:    538(ptr) AccessChain 536(psout) 48
+             543:  533(fvec4) Load 542
+                              Store 541(Color) 543
+                              Return
+                              FunctionEnd
+     10(Fn1(i1;):      6(int) Function None 8
+            9(x):      7(ptr) FunctionParameter
+              11:             Label
+              39:      6(int) Load 9(x)
+                              ReturnValue 39
+                              FunctionEnd
+     16(Fn1(u1;):     12(int) Function None 14
+           15(x):     13(ptr) FunctionParameter
+              17:             Label
+              42:     12(int) Load 15(x)
+                              ReturnValue 42
+                              FunctionEnd
+     22(Fn1(f1;):   18(float) Function None 20
+           21(x):     19(ptr) FunctionParameter
+              23:             Label
+              45:   18(float) Load 21(x)
+                              ReturnValue 45
+                              FunctionEnd
+     26(Fn2(i1;):           2 Function None 24
+           25(x):      7(ptr) FunctionParameter
+              27:             Label
+                              Store 25(x) 48
+                              Return
+                              FunctionEnd
+     30(Fn2(u1;):           2 Function None 28
+           29(x):     13(ptr) FunctionParameter
+              31:             Label
+                              Store 29(x) 49
+                              Return
+                              FunctionEnd
+     34(Fn2(f1;):           2 Function None 32
+           33(x):     19(ptr) FunctionParameter
+              35:             Label
+                              Store 33(x) 50
+                              Return
+                              FunctionEnd
+  37(SomeValue():   18(float) Function None 36
+              38:             Label
+              58:     57(ptr) AccessChain 56 48
+              59:      6(int) Load 58
+              60:   18(float) ConvertSToF 59
+                              ReturnValue 60
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..7ca7e3e4bc4707af933e85bb17c5335c04e00d69
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -0,0 +1,2613 @@
+hlsl.rw.vec2.bracket.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(vi2; (temp 2-component vector of int)
+0:42    Function Parameters: 
+0:42      'x' (in 2-component vector of int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in 2-component vector of int)
+0:43  Function Definition: Fn1(vu2; (temp 2-component vector of uint)
+0:43    Function Parameters: 
+0:43      'x' (in 2-component vector of uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in 2-component vector of uint)
+0:44  Function Definition: Fn1(vf2; (temp 2-component vector of float)
+0:44    Function Parameters: 
+0:44      'x' (in 2-component vector of float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in 2-component vector of float)
+0:46  Function Definition: Fn2(vi2; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out 2-component vector of int)
+0:?     Sequence
+0:46      move second child to first child (temp 2-component vector of int)
+0:46        'x' (out 2-component vector of int)
+0:?         Constant:
+0:?           0 (const int)
+0:?           0 (const int)
+0:47  Function Definition: Fn2(vu2; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out 2-component vector of uint)
+0:?     Sequence
+0:47      move second child to first child (temp 2-component vector of uint)
+0:47        'x' (out 2-component vector of uint)
+0:?         Constant:
+0:?           0 (const uint)
+0:?           0 (const uint)
+0:48  Function Definition: Fn2(vf2; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out 2-component vector of float)
+0:?     Sequence
+0:48      move second child to first child (temp 2-component vector of float)
+0:48        'x' (out 2-component vector of float)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:50  Function Definition: SomeValue( (temp 2-component vector of float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp 2-component vector of float)
+0:50          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:50            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:50            Constant:
+0:50              1 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp 2-component vector of float)
+0:57        'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp 2-component vector of float)
+0:59          'r00' (temp 2-component vector of float)
+0:59          imageLoad (temp 2-component vector of float)
+0:59            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp 2-component vector of int)
+0:60          'r01' (temp 2-component vector of int)
+0:60          imageLoad (temp 2-component vector of int)
+0:60            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp 2-component vector of uint)
+0:61          'r02' (temp 2-component vector of uint)
+0:61          imageLoad (temp 2-component vector of uint)
+0:61            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp 2-component vector of float)
+0:64          'r10' (temp 2-component vector of float)
+0:64          imageLoad (temp 2-component vector of float)
+0:64            'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp 2-component vector of int)
+0:65          'r11' (temp 2-component vector of int)
+0:65          imageLoad (temp 2-component vector of int)
+0:65            'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp 2-component vector of uint)
+0:66          'r12' (temp 2-component vector of uint)
+0:66          imageLoad (temp 2-component vector of uint)
+0:66            'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp 2-component vector of float)
+0:69          'r20' (temp 2-component vector of float)
+0:69          imageLoad (temp 2-component vector of float)
+0:69            'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp 2-component vector of int)
+0:70          'r21' (temp 2-component vector of int)
+0:70          imageLoad (temp 2-component vector of int)
+0:70            'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp 2-component vector of uint)
+0:71          'r22' (temp 2-component vector of uint)
+0:71          imageLoad (temp 2-component vector of uint)
+0:71            'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp 2-component vector of float)
+0:73          'lf2' (temp 2-component vector of float)
+0:73          uf2: direct index for structure (layout(offset=96 ) uniform 2-component vector of float)
+0:73            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2-component vector of float)
+0:77          'storeTemp' (temp 2-component vector of float)
+0:77          Function Call: SomeValue( (temp 2-component vector of float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp 2-component vector of float)
+0:77        'storeTemp' (temp 2-component vector of float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf2' (temp 2-component vector of float)
+0:78        'lf2' (temp 2-component vector of float)
+0:79      Sequence
+0:79        move second child to first child (temp 2-component vector of int)
+0:79          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             2 (const int)
+0:?             2 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp 2-component vector of int)
+0:79        'storeTemp' (temp 2-component vector of int)
+0:80      Sequence
+0:80        move second child to first child (temp 2-component vector of uint)
+0:80          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             3 (const uint)
+0:?             2 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp 2-component vector of uint)
+0:80        'storeTemp' (temp 2-component vector of uint)
+0:83      Sequence
+0:83        move second child to first child (temp 2-component vector of float)
+0:83          'val1' (temp 2-component vector of float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp 2-component vector of float)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83              imageLoad (temp 2-component vector of float)
+0:83                'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            vector scale second child into first child (temp 2-component vector of float)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83            'storeTemp' (temp 2-component vector of float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp 2-component vector of float)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84          imageLoad (temp 2-component vector of float)
+0:84            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp 2-component vector of float)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84        'storeTemp' (temp 2-component vector of float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp 2-component vector of float)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85          imageLoad (temp 2-component vector of float)
+0:85            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp 2-component vector of float)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85        'storeTemp' (temp 2-component vector of float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp 2-component vector of int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87          imageLoad (temp 2-component vector of int)
+0:87            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp 2-component vector of int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87        'storeTemp' (temp 2-component vector of int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp 2-component vector of int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88          imageLoad (temp 2-component vector of int)
+0:88            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp 2-component vector of int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88        'storeTemp' (temp 2-component vector of int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp 2-component vector of int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89          imageLoad (temp 2-component vector of int)
+0:89            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp 2-component vector of int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89        'storeTemp' (temp 2-component vector of int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp 2-component vector of int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90          imageLoad (temp 2-component vector of int)
+0:90            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp 2-component vector of int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90        'storeTemp' (temp 2-component vector of int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp 2-component vector of int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91          imageLoad (temp 2-component vector of int)
+0:91            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp 2-component vector of int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91        'storeTemp' (temp 2-component vector of int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp 2-component vector of int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92          imageLoad (temp 2-component vector of int)
+0:92            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp 2-component vector of int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92        'storeTemp' (temp 2-component vector of int)
+0:95      Sequence
+0:95        move second child to first child (temp 2-component vector of float)
+0:95          'storeTemp' (temp 2-component vector of float)
+0:95          Function Call: SomeValue( (temp 2-component vector of float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp 2-component vector of float)
+0:95        'storeTemp' (temp 2-component vector of float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf2' (temp 2-component vector of float)
+0:96        'lf2' (temp 2-component vector of float)
+0:97      Sequence
+0:97        move second child to first child (temp 2-component vector of int)
+0:97          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             5 (const int)
+0:?             2 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp 2-component vector of int)
+0:97        'storeTemp' (temp 2-component vector of int)
+0:98      Sequence
+0:98        move second child to first child (temp 2-component vector of uint)
+0:98          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             6 (const uint)
+0:?             2 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp 2-component vector of uint)
+0:98        'storeTemp' (temp 2-component vector of uint)
+0:101      Sequence
+0:101        move second child to first child (temp 2-component vector of float)
+0:101          'storeTemp' (temp 2-component vector of float)
+0:101          Function Call: SomeValue( (temp 2-component vector of float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp 2-component vector of float)
+0:101        'storeTemp' (temp 2-component vector of float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf2' (temp 2-component vector of float)
+0:102        'lf2' (temp 2-component vector of float)
+0:103      Sequence
+0:103        move second child to first child (temp 2-component vector of int)
+0:103          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             8 (const int)
+0:?             6 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp 2-component vector of int)
+0:103        'storeTemp' (temp 2-component vector of int)
+0:104      Sequence
+0:104        move second child to first child (temp 2-component vector of uint)
+0:104          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             9 (const uint)
+0:?             2 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp 2-component vector of uint)
+0:104        'storeTemp' (temp 2-component vector of uint)
+0:107      Function Call: Fn1(vf2; (temp 2-component vector of float)
+0:107        imageLoad (temp 2-component vector of float)
+0:107          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(vi2; (temp 2-component vector of int)
+0:108        imageLoad (temp 2-component vector of int)
+0:108          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(vu2; (temp 2-component vector of uint)
+0:109        imageLoad (temp 2-component vector of uint)
+0:109          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(vf2; (temp void)
+0:111          'tempArg' (temp 2-component vector of float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp 2-component vector of float)
+0:111          'tempArg' (temp 2-component vector of float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(vi2; (temp void)
+0:112          'tempArg' (temp 2-component vector of int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp 2-component vector of int)
+0:112          'tempArg' (temp 2-component vector of int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(vu2; (temp void)
+0:113          'tempArg' (temp 2-component vector of uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp 2-component vector of uint)
+0:113          'tempArg' (temp 2-component vector of uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp 2-component vector of float)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117          imageLoad (temp 2-component vector of float)
+0:117            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp 2-component vector of float)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117        'storeTemp' (temp 2-component vector of float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp 2-component vector of int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118          imageLoad (temp 2-component vector of int)
+0:118            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp 2-component vector of int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118        'storeTemp' (temp 2-component vector of int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp 2-component vector of uint)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119          imageLoad (temp 2-component vector of uint)
+0:119            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp 2-component vector of uint)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119        'storeTemp' (temp 2-component vector of uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp 2-component vector of float)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121          imageLoad (temp 2-component vector of float)
+0:121            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp 2-component vector of float)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121        'storeTemp' (temp 2-component vector of float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp 2-component vector of int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122          imageLoad (temp 2-component vector of int)
+0:122            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp 2-component vector of int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122        'storeTemp' (temp 2-component vector of int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp 2-component vector of uint)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123          imageLoad (temp 2-component vector of uint)
+0:123            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp 2-component vector of uint)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123        'storeTemp' (temp 2-component vector of uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp 2-component vector of float)
+0:126          'storeTempPre' (temp 2-component vector of float)
+0:126          imageLoad (temp 2-component vector of float)
+0:126            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp 2-component vector of float)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126          'storeTempPre' (temp 2-component vector of float)
+0:126        Post-Increment (temp 2-component vector of float)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126        'storeTempPre' (temp 2-component vector of float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp 2-component vector of uint)
+0:127          'storeTempPre' (temp 2-component vector of uint)
+0:127          imageLoad (temp 2-component vector of uint)
+0:127            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp 2-component vector of uint)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127          'storeTempPre' (temp 2-component vector of uint)
+0:127        Post-Decrement (temp 2-component vector of uint)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127        'storeTempPre' (temp 2-component vector of uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp 2-component vector of int)
+0:128          'storeTempPre' (temp 2-component vector of int)
+0:128          imageLoad (temp 2-component vector of int)
+0:128            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp 2-component vector of int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128          'storeTempPre' (temp 2-component vector of int)
+0:128        Post-Increment (temp 2-component vector of int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128        'storeTempPre' (temp 2-component vector of int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'storeTempPre' (temp 2-component vector of float)
+0:130          imageLoad (temp 2-component vector of float)
+0:130            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130          'storeTempPre' (temp 2-component vector of float)
+0:130        Post-Decrement (temp 2-component vector of float)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130        'storeTempPre' (temp 2-component vector of float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp 2-component vector of int)
+0:131          'storeTempPre' (temp 2-component vector of int)
+0:131          imageLoad (temp 2-component vector of int)
+0:131            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp 2-component vector of int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131          'storeTempPre' (temp 2-component vector of int)
+0:131        Post-Increment (temp 2-component vector of int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131        'storeTempPre' (temp 2-component vector of int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp 2-component vector of uint)
+0:132          'storeTempPre' (temp 2-component vector of uint)
+0:132          imageLoad (temp 2-component vector of uint)
+0:132            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp 2-component vector of uint)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132          'storeTempPre' (temp 2-component vector of uint)
+0:132        Post-Decrement (temp 2-component vector of uint)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132        'storeTempPre' (temp 2-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child (temp 2-component vector of float)
+0:135          'storeTemp' (temp 2-component vector of float)
+0:?           imageLoad (temp 2-component vector of float)
+0:135            'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp 2-component vector of float)
+0:135        'storeTemp' (temp 2-component vector of float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:?     'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:?     'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:?     'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:?     'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:?     'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:?     'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:?     'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:?     'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:?     'g_tTex1df2a' (layout(rg32f ) uniform image1DArray)
+0:?     'g_tTex1di2a' (layout(rg32i ) uniform iimage1DArray)
+0:?     'g_tTex1du2a' (layout(rg32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df2a' (layout(rg32f ) uniform image2DArray)
+0:?     'g_tTex2di2a' (layout(rg32i ) uniform iimage2DArray)
+0:?     'g_tTex2du2a' (layout(rg32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:42  Function Definition: Fn1(vi2; (temp 2-component vector of int)
+0:42    Function Parameters: 
+0:42      'x' (in 2-component vector of int)
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        'x' (in 2-component vector of int)
+0:43  Function Definition: Fn1(vu2; (temp 2-component vector of uint)
+0:43    Function Parameters: 
+0:43      'x' (in 2-component vector of uint)
+0:?     Sequence
+0:43      Branch: Return with expression
+0:43        'x' (in 2-component vector of uint)
+0:44  Function Definition: Fn1(vf2; (temp 2-component vector of float)
+0:44    Function Parameters: 
+0:44      'x' (in 2-component vector of float)
+0:?     Sequence
+0:44      Branch: Return with expression
+0:44        'x' (in 2-component vector of float)
+0:46  Function Definition: Fn2(vi2; (temp void)
+0:46    Function Parameters: 
+0:46      'x' (out 2-component vector of int)
+0:?     Sequence
+0:46      move second child to first child (temp 2-component vector of int)
+0:46        'x' (out 2-component vector of int)
+0:?         Constant:
+0:?           0 (const int)
+0:?           0 (const int)
+0:47  Function Definition: Fn2(vu2; (temp void)
+0:47    Function Parameters: 
+0:47      'x' (out 2-component vector of uint)
+0:?     Sequence
+0:47      move second child to first child (temp 2-component vector of uint)
+0:47        'x' (out 2-component vector of uint)
+0:?         Constant:
+0:?           0 (const uint)
+0:?           0 (const uint)
+0:48  Function Definition: Fn2(vf2; (temp void)
+0:48    Function Parameters: 
+0:48      'x' (out 2-component vector of float)
+0:?     Sequence
+0:48      move second child to first child (temp 2-component vector of float)
+0:48        'x' (out 2-component vector of float)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:50  Function Definition: SomeValue( (temp 2-component vector of float)
+0:50    Function Parameters: 
+0:?     Sequence
+0:50      Branch: Return with expression
+0:50        Convert int to float (temp 2-component vector of float)
+0:50          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:50            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:50            Constant:
+0:50              1 (const uint)
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:53    Function Parameters: 
+0:?     Sequence
+0:57      imageLoad (temp 2-component vector of float)
+0:57        'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:57        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:57          '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:57          Constant:
+0:57            0 (const uint)
+0:59      Sequence
+0:59        move second child to first child (temp 2-component vector of float)
+0:59          'r00' (temp 2-component vector of float)
+0:59          imageLoad (temp 2-component vector of float)
+0:59            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:59            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:59              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:59              Constant:
+0:59                0 (const uint)
+0:60      Sequence
+0:60        move second child to first child (temp 2-component vector of int)
+0:60          'r01' (temp 2-component vector of int)
+0:60          imageLoad (temp 2-component vector of int)
+0:60            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:60            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:60              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:60              Constant:
+0:60                0 (const uint)
+0:61      Sequence
+0:61        move second child to first child (temp 2-component vector of uint)
+0:61          'r02' (temp 2-component vector of uint)
+0:61          imageLoad (temp 2-component vector of uint)
+0:61            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:61            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:61              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:61              Constant:
+0:61                0 (const uint)
+0:64      Sequence
+0:64        move second child to first child (temp 2-component vector of float)
+0:64          'r10' (temp 2-component vector of float)
+0:64          imageLoad (temp 2-component vector of float)
+0:64            'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:64            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:64              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:64              Constant:
+0:64                1 (const uint)
+0:65      Sequence
+0:65        move second child to first child (temp 2-component vector of int)
+0:65          'r11' (temp 2-component vector of int)
+0:65          imageLoad (temp 2-component vector of int)
+0:65            'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:65            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:65              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:65              Constant:
+0:65                1 (const uint)
+0:66      Sequence
+0:66        move second child to first child (temp 2-component vector of uint)
+0:66          'r12' (temp 2-component vector of uint)
+0:66          imageLoad (temp 2-component vector of uint)
+0:66            'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:66            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:66              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:66              Constant:
+0:66                1 (const uint)
+0:69      Sequence
+0:69        move second child to first child (temp 2-component vector of float)
+0:69          'r20' (temp 2-component vector of float)
+0:69          imageLoad (temp 2-component vector of float)
+0:69            'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:69            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:69              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:69              Constant:
+0:69                2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp 2-component vector of int)
+0:70          'r21' (temp 2-component vector of int)
+0:70          imageLoad (temp 2-component vector of int)
+0:70            'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:70            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:70              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:70              Constant:
+0:70                2 (const uint)
+0:71      Sequence
+0:71        move second child to first child (temp 2-component vector of uint)
+0:71          'r22' (temp 2-component vector of uint)
+0:71          imageLoad (temp 2-component vector of uint)
+0:71            'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:71            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:71              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:71              Constant:
+0:71                2 (const uint)
+0:73      Sequence
+0:73        move second child to first child (temp 2-component vector of float)
+0:73          'lf2' (temp 2-component vector of float)
+0:73          uf2: direct index for structure (layout(offset=96 ) uniform 2-component vector of float)
+0:73            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:73            Constant:
+0:73              8 (const uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2-component vector of float)
+0:77          'storeTemp' (temp 2-component vector of float)
+0:77          Function Call: SomeValue( (temp 2-component vector of float)
+0:77        imageStore (temp void)
+0:77          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:77          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:77            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          'storeTemp' (temp 2-component vector of float)
+0:77        'storeTemp' (temp 2-component vector of float)
+0:78      Sequence
+0:78        imageStore (temp void)
+0:78          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:78          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:78            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:78            Constant:
+0:78              0 (const uint)
+0:78          'lf2' (temp 2-component vector of float)
+0:78        'lf2' (temp 2-component vector of float)
+0:79      Sequence
+0:79        move second child to first child (temp 2-component vector of int)
+0:79          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             2 (const int)
+0:?             2 (const int)
+0:79        imageStore (temp void)
+0:79          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:79          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:79            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          'storeTemp' (temp 2-component vector of int)
+0:79        'storeTemp' (temp 2-component vector of int)
+0:80      Sequence
+0:80        move second child to first child (temp 2-component vector of uint)
+0:80          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             3 (const uint)
+0:?             2 (const uint)
+0:80        imageStore (temp void)
+0:80          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:80          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:80            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:80            Constant:
+0:80              0 (const uint)
+0:80          'storeTemp' (temp 2-component vector of uint)
+0:80        'storeTemp' (temp 2-component vector of uint)
+0:83      Sequence
+0:83        move second child to first child (temp 2-component vector of float)
+0:83          'val1' (temp 2-component vector of float)
+0:83          Sequence
+0:83            move second child to first child (temp int)
+0:83              'coordTemp' (temp int)
+0:83              c1: direct index for structure (layout(offset=0 ) uniform int)
+0:83                '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:83                Constant:
+0:83                  0 (const uint)
+0:83            move second child to first child (temp 2-component vector of float)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83              imageLoad (temp 2-component vector of float)
+0:83                'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:83                'coordTemp' (temp int)
+0:83            vector scale second child into first child (temp 2-component vector of float)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83              Constant:
+0:83                2.000000
+0:83            imageStore (temp void)
+0:83              'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:83              'coordTemp' (temp int)
+0:83              'storeTemp' (temp 2-component vector of float)
+0:83            'storeTemp' (temp 2-component vector of float)
+0:84      Sequence
+0:84        move second child to first child (temp int)
+0:84          'coordTemp' (temp int)
+0:84          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:84            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:84            Constant:
+0:84              0 (const uint)
+0:84        move second child to first child (temp 2-component vector of float)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84          imageLoad (temp 2-component vector of float)
+0:84            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:84            'coordTemp' (temp int)
+0:84        subtract second child into first child (temp 2-component vector of float)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84          Constant:
+0:84            3.000000
+0:84        imageStore (temp void)
+0:84          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:84          'coordTemp' (temp int)
+0:84          'storeTemp' (temp 2-component vector of float)
+0:84        'storeTemp' (temp 2-component vector of float)
+0:85      Sequence
+0:85        move second child to first child (temp int)
+0:85          'coordTemp' (temp int)
+0:85          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:85            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:85            Constant:
+0:85              0 (const uint)
+0:85        move second child to first child (temp 2-component vector of float)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85          imageLoad (temp 2-component vector of float)
+0:85            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:85            'coordTemp' (temp int)
+0:85        add second child into first child (temp 2-component vector of float)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85          Constant:
+0:85            4.000000
+0:85        imageStore (temp void)
+0:85          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:85          'coordTemp' (temp int)
+0:85          'storeTemp' (temp 2-component vector of float)
+0:85        'storeTemp' (temp 2-component vector of float)
+0:87      Sequence
+0:87        move second child to first child (temp int)
+0:87          'coordTemp' (temp int)
+0:87          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:87            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:87            Constant:
+0:87              0 (const uint)
+0:87        move second child to first child (temp 2-component vector of int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87          imageLoad (temp 2-component vector of int)
+0:87            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:87            'coordTemp' (temp int)
+0:87        divide second child into first child (temp 2-component vector of int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87          Constant:
+0:87            2 (const int)
+0:87        imageStore (temp void)
+0:87          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:87          'coordTemp' (temp int)
+0:87          'storeTemp' (temp 2-component vector of int)
+0:87        'storeTemp' (temp 2-component vector of int)
+0:88      Sequence
+0:88        move second child to first child (temp int)
+0:88          'coordTemp' (temp int)
+0:88          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:88            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:88            Constant:
+0:88              0 (const uint)
+0:88        move second child to first child (temp 2-component vector of int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88          imageLoad (temp 2-component vector of int)
+0:88            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:88            'coordTemp' (temp int)
+0:88        mod second child into first child (temp 2-component vector of int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88          Constant:
+0:88            2 (const int)
+0:88        imageStore (temp void)
+0:88          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:88          'coordTemp' (temp int)
+0:88          'storeTemp' (temp 2-component vector of int)
+0:88        'storeTemp' (temp 2-component vector of int)
+0:89      Sequence
+0:89        move second child to first child (temp int)
+0:89          'coordTemp' (temp int)
+0:89          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:89            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:89            Constant:
+0:89              0 (const uint)
+0:89        move second child to first child (temp 2-component vector of int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89          imageLoad (temp 2-component vector of int)
+0:89            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:89            'coordTemp' (temp int)
+0:89        and second child into first child (temp 2-component vector of int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89          Constant:
+0:89            65535 (const int)
+0:89        imageStore (temp void)
+0:89          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:89          'coordTemp' (temp int)
+0:89          'storeTemp' (temp 2-component vector of int)
+0:89        'storeTemp' (temp 2-component vector of int)
+0:90      Sequence
+0:90        move second child to first child (temp int)
+0:90          'coordTemp' (temp int)
+0:90          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:90            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:90            Constant:
+0:90              0 (const uint)
+0:90        move second child to first child (temp 2-component vector of int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90          imageLoad (temp 2-component vector of int)
+0:90            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:90            'coordTemp' (temp int)
+0:90        or second child into first child (temp 2-component vector of int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90          Constant:
+0:90            61680 (const int)
+0:90        imageStore (temp void)
+0:90          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:90          'coordTemp' (temp int)
+0:90          'storeTemp' (temp 2-component vector of int)
+0:90        'storeTemp' (temp 2-component vector of int)
+0:91      Sequence
+0:91        move second child to first child (temp int)
+0:91          'coordTemp' (temp int)
+0:91          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:91            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:91            Constant:
+0:91              0 (const uint)
+0:91        move second child to first child (temp 2-component vector of int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91          imageLoad (temp 2-component vector of int)
+0:91            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:91            'coordTemp' (temp int)
+0:91        left shift second child into first child (temp 2-component vector of int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        imageStore (temp void)
+0:91          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:91          'coordTemp' (temp int)
+0:91          'storeTemp' (temp 2-component vector of int)
+0:91        'storeTemp' (temp 2-component vector of int)
+0:92      Sequence
+0:92        move second child to first child (temp int)
+0:92          'coordTemp' (temp int)
+0:92          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:92            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:92            Constant:
+0:92              0 (const uint)
+0:92        move second child to first child (temp 2-component vector of int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92          imageLoad (temp 2-component vector of int)
+0:92            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:92            'coordTemp' (temp int)
+0:92        right shift second child into first child (temp 2-component vector of int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92          Constant:
+0:92            2 (const int)
+0:92        imageStore (temp void)
+0:92          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:92          'coordTemp' (temp int)
+0:92          'storeTemp' (temp 2-component vector of int)
+0:92        'storeTemp' (temp 2-component vector of int)
+0:95      Sequence
+0:95        move second child to first child (temp 2-component vector of float)
+0:95          'storeTemp' (temp 2-component vector of float)
+0:95          Function Call: SomeValue( (temp 2-component vector of float)
+0:95        imageStore (temp void)
+0:95          'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:95          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:95            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:95            Constant:
+0:95              1 (const uint)
+0:95          'storeTemp' (temp 2-component vector of float)
+0:95        'storeTemp' (temp 2-component vector of float)
+0:96      Sequence
+0:96        imageStore (temp void)
+0:96          'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:96          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:96            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:96            Constant:
+0:96              1 (const uint)
+0:96          'lf2' (temp 2-component vector of float)
+0:96        'lf2' (temp 2-component vector of float)
+0:97      Sequence
+0:97        move second child to first child (temp 2-component vector of int)
+0:97          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             5 (const int)
+0:?             2 (const int)
+0:97        imageStore (temp void)
+0:97          'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:97          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:97            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:97            Constant:
+0:97              1 (const uint)
+0:97          'storeTemp' (temp 2-component vector of int)
+0:97        'storeTemp' (temp 2-component vector of int)
+0:98      Sequence
+0:98        move second child to first child (temp 2-component vector of uint)
+0:98          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             6 (const uint)
+0:?             2 (const uint)
+0:98        imageStore (temp void)
+0:98          'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:98          c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:98            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:98            Constant:
+0:98              1 (const uint)
+0:98          'storeTemp' (temp 2-component vector of uint)
+0:98        'storeTemp' (temp 2-component vector of uint)
+0:101      Sequence
+0:101        move second child to first child (temp 2-component vector of float)
+0:101          'storeTemp' (temp 2-component vector of float)
+0:101          Function Call: SomeValue( (temp 2-component vector of float)
+0:101        imageStore (temp void)
+0:101          'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:101          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:101            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:101            Constant:
+0:101              2 (const uint)
+0:101          'storeTemp' (temp 2-component vector of float)
+0:101        'storeTemp' (temp 2-component vector of float)
+0:102      Sequence
+0:102        imageStore (temp void)
+0:102          'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:102          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:102            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:102            Constant:
+0:102              2 (const uint)
+0:102          'lf2' (temp 2-component vector of float)
+0:102        'lf2' (temp 2-component vector of float)
+0:103      Sequence
+0:103        move second child to first child (temp 2-component vector of int)
+0:103          'storeTemp' (temp 2-component vector of int)
+0:?           Constant:
+0:?             8 (const int)
+0:?             6 (const int)
+0:103        imageStore (temp void)
+0:103          'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:103          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:103            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:103            Constant:
+0:103              2 (const uint)
+0:103          'storeTemp' (temp 2-component vector of int)
+0:103        'storeTemp' (temp 2-component vector of int)
+0:104      Sequence
+0:104        move second child to first child (temp 2-component vector of uint)
+0:104          'storeTemp' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             9 (const uint)
+0:?             2 (const uint)
+0:104        imageStore (temp void)
+0:104          'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:104          c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:104            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:104            Constant:
+0:104              2 (const uint)
+0:104          'storeTemp' (temp 2-component vector of uint)
+0:104        'storeTemp' (temp 2-component vector of uint)
+0:107      Function Call: Fn1(vf2; (temp 2-component vector of float)
+0:107        imageLoad (temp 2-component vector of float)
+0:107          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:107          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:107            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      Function Call: Fn1(vi2; (temp 2-component vector of int)
+0:108        imageLoad (temp 2-component vector of int)
+0:108          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:108          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:108            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:108            Constant:
+0:108              0 (const uint)
+0:109      Function Call: Fn1(vu2; (temp 2-component vector of uint)
+0:109        imageLoad (temp 2-component vector of uint)
+0:109          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:109          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:109            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:109            Constant:
+0:109              0 (const uint)
+0:111      Comma (temp void)
+0:111        Function Call: Fn2(vf2; (temp void)
+0:111          'tempArg' (temp 2-component vector of float)
+0:111        Sequence
+0:111          imageStore (temp void)
+0:111            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:111            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:111              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:111              Constant:
+0:111                0 (const uint)
+0:111            'tempArg' (temp 2-component vector of float)
+0:111          'tempArg' (temp 2-component vector of float)
+0:112      Comma (temp void)
+0:112        Function Call: Fn2(vi2; (temp void)
+0:112          'tempArg' (temp 2-component vector of int)
+0:112        Sequence
+0:112          imageStore (temp void)
+0:112            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:112            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:112              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:112              Constant:
+0:112                0 (const uint)
+0:112            'tempArg' (temp 2-component vector of int)
+0:112          'tempArg' (temp 2-component vector of int)
+0:113      Comma (temp void)
+0:113        Function Call: Fn2(vu2; (temp void)
+0:113          'tempArg' (temp 2-component vector of uint)
+0:113        Sequence
+0:113          imageStore (temp void)
+0:113            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:113            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:113              '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:113              Constant:
+0:113                0 (const uint)
+0:113            'tempArg' (temp 2-component vector of uint)
+0:113          'tempArg' (temp 2-component vector of uint)
+0:117      Sequence
+0:117        move second child to first child (temp int)
+0:117          'coordTemp' (temp int)
+0:117          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:117            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:117            Constant:
+0:117              0 (const uint)
+0:117        move second child to first child (temp 2-component vector of float)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117          imageLoad (temp 2-component vector of float)
+0:117            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:117            'coordTemp' (temp int)
+0:117        Pre-Increment (temp 2-component vector of float)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117        imageStore (temp void)
+0:117          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:117          'coordTemp' (temp int)
+0:117          'storeTemp' (temp 2-component vector of float)
+0:117        'storeTemp' (temp 2-component vector of float)
+0:118      Sequence
+0:118        move second child to first child (temp int)
+0:118          'coordTemp' (temp int)
+0:118          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:118            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:118            Constant:
+0:118              0 (const uint)
+0:118        move second child to first child (temp 2-component vector of int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118          imageLoad (temp 2-component vector of int)
+0:118            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:118            'coordTemp' (temp int)
+0:118        Pre-Increment (temp 2-component vector of int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118        imageStore (temp void)
+0:118          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:118          'coordTemp' (temp int)
+0:118          'storeTemp' (temp 2-component vector of int)
+0:118        'storeTemp' (temp 2-component vector of int)
+0:119      Sequence
+0:119        move second child to first child (temp int)
+0:119          'coordTemp' (temp int)
+0:119          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:119            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:119            Constant:
+0:119              0 (const uint)
+0:119        move second child to first child (temp 2-component vector of uint)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119          imageLoad (temp 2-component vector of uint)
+0:119            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:119            'coordTemp' (temp int)
+0:119        Pre-Increment (temp 2-component vector of uint)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119        imageStore (temp void)
+0:119          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:119          'coordTemp' (temp int)
+0:119          'storeTemp' (temp 2-component vector of uint)
+0:119        'storeTemp' (temp 2-component vector of uint)
+0:121      Sequence
+0:121        move second child to first child (temp int)
+0:121          'coordTemp' (temp int)
+0:121          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:121            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:121            Constant:
+0:121              0 (const uint)
+0:121        move second child to first child (temp 2-component vector of float)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121          imageLoad (temp 2-component vector of float)
+0:121            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:121            'coordTemp' (temp int)
+0:121        Pre-Decrement (temp 2-component vector of float)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121        imageStore (temp void)
+0:121          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:121          'coordTemp' (temp int)
+0:121          'storeTemp' (temp 2-component vector of float)
+0:121        'storeTemp' (temp 2-component vector of float)
+0:122      Sequence
+0:122        move second child to first child (temp int)
+0:122          'coordTemp' (temp int)
+0:122          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:122            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:122            Constant:
+0:122              0 (const uint)
+0:122        move second child to first child (temp 2-component vector of int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122          imageLoad (temp 2-component vector of int)
+0:122            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:122            'coordTemp' (temp int)
+0:122        Pre-Decrement (temp 2-component vector of int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122        imageStore (temp void)
+0:122          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:122          'coordTemp' (temp int)
+0:122          'storeTemp' (temp 2-component vector of int)
+0:122        'storeTemp' (temp 2-component vector of int)
+0:123      Sequence
+0:123        move second child to first child (temp int)
+0:123          'coordTemp' (temp int)
+0:123          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:123            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:123            Constant:
+0:123              0 (const uint)
+0:123        move second child to first child (temp 2-component vector of uint)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123          imageLoad (temp 2-component vector of uint)
+0:123            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:123            'coordTemp' (temp int)
+0:123        Pre-Decrement (temp 2-component vector of uint)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123        imageStore (temp void)
+0:123          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:123          'coordTemp' (temp int)
+0:123          'storeTemp' (temp 2-component vector of uint)
+0:123        'storeTemp' (temp 2-component vector of uint)
+0:126      Sequence
+0:126        move second child to first child (temp int)
+0:126          'coordTemp' (temp int)
+0:126          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:126            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:126            Constant:
+0:126              0 (const uint)
+0:126        move second child to first child (temp 2-component vector of float)
+0:126          'storeTempPre' (temp 2-component vector of float)
+0:126          imageLoad (temp 2-component vector of float)
+0:126            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:126            'coordTemp' (temp int)
+0:126        move second child to first child (temp 2-component vector of float)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126          'storeTempPre' (temp 2-component vector of float)
+0:126        Post-Increment (temp 2-component vector of float)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126        imageStore (temp void)
+0:126          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:126          'coordTemp' (temp int)
+0:126          'storeTempPost' (temp 2-component vector of float)
+0:126        'storeTempPre' (temp 2-component vector of float)
+0:127      Sequence
+0:127        move second child to first child (temp int)
+0:127          'coordTemp' (temp int)
+0:127          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:127            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:127            Constant:
+0:127              0 (const uint)
+0:127        move second child to first child (temp 2-component vector of uint)
+0:127          'storeTempPre' (temp 2-component vector of uint)
+0:127          imageLoad (temp 2-component vector of uint)
+0:127            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:127            'coordTemp' (temp int)
+0:127        move second child to first child (temp 2-component vector of uint)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127          'storeTempPre' (temp 2-component vector of uint)
+0:127        Post-Decrement (temp 2-component vector of uint)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127        imageStore (temp void)
+0:127          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:127          'coordTemp' (temp int)
+0:127          'storeTempPost' (temp 2-component vector of uint)
+0:127        'storeTempPre' (temp 2-component vector of uint)
+0:128      Sequence
+0:128        move second child to first child (temp int)
+0:128          'coordTemp' (temp int)
+0:128          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:128            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:128            Constant:
+0:128              0 (const uint)
+0:128        move second child to first child (temp 2-component vector of int)
+0:128          'storeTempPre' (temp 2-component vector of int)
+0:128          imageLoad (temp 2-component vector of int)
+0:128            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:128            'coordTemp' (temp int)
+0:128        move second child to first child (temp 2-component vector of int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128          'storeTempPre' (temp 2-component vector of int)
+0:128        Post-Increment (temp 2-component vector of int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128        imageStore (temp void)
+0:128          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:128          'coordTemp' (temp int)
+0:128          'storeTempPost' (temp 2-component vector of int)
+0:128        'storeTempPre' (temp 2-component vector of int)
+0:130      Sequence
+0:130        move second child to first child (temp int)
+0:130          'coordTemp' (temp int)
+0:130          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:130            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:130            Constant:
+0:130              0 (const uint)
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'storeTempPre' (temp 2-component vector of float)
+0:130          imageLoad (temp 2-component vector of float)
+0:130            'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:130            'coordTemp' (temp int)
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130          'storeTempPre' (temp 2-component vector of float)
+0:130        Post-Decrement (temp 2-component vector of float)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130        imageStore (temp void)
+0:130          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:130          'coordTemp' (temp int)
+0:130          'storeTempPost' (temp 2-component vector of float)
+0:130        'storeTempPre' (temp 2-component vector of float)
+0:131      Sequence
+0:131        move second child to first child (temp int)
+0:131          'coordTemp' (temp int)
+0:131          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:131            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:131            Constant:
+0:131              0 (const uint)
+0:131        move second child to first child (temp 2-component vector of int)
+0:131          'storeTempPre' (temp 2-component vector of int)
+0:131          imageLoad (temp 2-component vector of int)
+0:131            'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:131            'coordTemp' (temp int)
+0:131        move second child to first child (temp 2-component vector of int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131          'storeTempPre' (temp 2-component vector of int)
+0:131        Post-Increment (temp 2-component vector of int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131        imageStore (temp void)
+0:131          'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:131          'coordTemp' (temp int)
+0:131          'storeTempPost' (temp 2-component vector of int)
+0:131        'storeTempPre' (temp 2-component vector of int)
+0:132      Sequence
+0:132        move second child to first child (temp int)
+0:132          'coordTemp' (temp int)
+0:132          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:132            '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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+0:132            Constant:
+0:132              0 (const uint)
+0:132        move second child to first child (temp 2-component vector of uint)
+0:132          'storeTempPre' (temp 2-component vector of uint)
+0:132          imageLoad (temp 2-component vector of uint)
+0:132            'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:132            'coordTemp' (temp int)
+0:132        move second child to first child (temp 2-component vector of uint)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132          'storeTempPre' (temp 2-component vector of uint)
+0:132        Post-Decrement (temp 2-component vector of uint)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132        imageStore (temp void)
+0:132          'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:132          'coordTemp' (temp int)
+0:132          'storeTempPost' (temp 2-component vector of uint)
+0:132        'storeTempPre' (temp 2-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child (temp 2-component vector of float)
+0:135          'storeTemp' (temp 2-component vector of float)
+0:?           imageLoad (temp 2-component vector of float)
+0:135            'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:135        imageStore (temp void)
+0:135          'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:135          Constant:
+0:135            1 (const int)
+0:135          'storeTemp' (temp 2-component vector of float)
+0:135        'storeTemp' (temp 2-component vector of float)
+0:137      move second child to first child (temp 4-component vector of float)
+0:137        Color: direct index for structure (temp 4-component vector of float)
+0:137          'psout' (temp structure{temp 4-component vector of float Color})
+0:137          Constant:
+0:137            0 (const int)
+0:137        Constant:
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:137          1.000000
+0:139      Sequence
+0:139        Sequence
+0:139          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:139            Color: direct index for structure (temp 4-component vector of float)
+0:139              'psout' (temp structure{temp 4-component vector of float Color})
+0:139              Constant:
+0:139                0 (const int)
+0:139        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df2' (layout(rg32f ) uniform image1D)
+0:?     'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
+0:?     'g_tTex1du2' (layout(rg32ui ) uniform uimage1D)
+0:?     'g_tTex2df2' (layout(rg32f ) uniform image2D)
+0:?     'g_tTex2di2' (layout(rg32i ) uniform iimage2D)
+0:?     'g_tTex2du2' (layout(rg32ui ) uniform uimage2D)
+0:?     'g_tTex3df2' (layout(rg32f ) uniform image3D)
+0:?     'g_tTex3di2' (layout(rg32i ) uniform iimage3D)
+0:?     'g_tTex3du2' (layout(rg32ui ) uniform uimage3D)
+0:?     'g_tTex1df2a' (layout(rg32f ) uniform image1DArray)
+0:?     'g_tTex1di2a' (layout(rg32i ) uniform iimage1DArray)
+0:?     'g_tTex1du2a' (layout(rg32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df2a' (layout(rg32f ) uniform image2DArray)
+0:?     'g_tTex2di2a' (layout(rg32i ) uniform iimage2DArray)
+0:?     'g_tTex2du2a' (layout(rg32ui ) uniform uimage2DArray)
+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, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 600
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability StorageImageExtendedFormats
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 575
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 11  "Fn1(vi2;"
+                              Name 10  "x"
+                              Name 18  "Fn1(vu2;"
+                              Name 17  "x"
+                              Name 25  "Fn1(vf2;"
+                              Name 24  "x"
+                              Name 29  "Fn2(vi2;"
+                              Name 28  "x"
+                              Name 33  "Fn2(vu2;"
+                              Name 32  "x"
+                              Name 37  "Fn2(vf2;"
+                              Name 36  "x"
+                              Name 40  "SomeValue("
+                              Name 59  "$Global"
+                              MemberName 59($Global) 0  "c1"
+                              MemberName 59($Global) 1  "c2"
+                              MemberName 59($Global) 2  "c3"
+                              MemberName 59($Global) 3  "c4"
+                              MemberName 59($Global) 4  "o1"
+                              MemberName 59($Global) 5  "o2"
+                              MemberName 59($Global) 6  "o3"
+                              MemberName 59($Global) 7  "o4"
+                              MemberName 59($Global) 8  "uf2"
+                              MemberName 59($Global) 9  "ui2"
+                              MemberName 59($Global) 10  "uu2"
+                              Name 61  ""
+                              Name 71  "g_tTex1df2"
+                              Name 77  "r00"
+                              Name 82  "r01"
+                              Name 85  "g_tTex1di2"
+                              Name 90  "r02"
+                              Name 93  "g_tTex1du2"
+                              Name 98  "r10"
+                              Name 101  "g_tTex2df2"
+                              Name 106  "r11"
+                              Name 109  "g_tTex2di2"
+                              Name 114  "r12"
+                              Name 117  "g_tTex2du2"
+                              Name 122  "r20"
+                              Name 125  "g_tTex3df2"
+                              Name 132  "r21"
+                              Name 135  "g_tTex3di2"
+                              Name 140  "r22"
+                              Name 143  "g_tTex3du2"
+                              Name 148  "lf2"
+                              Name 153  "storeTemp"
+                              Name 163  "storeTemp"
+                              Name 169  "storeTemp"
+                              Name 177  "val1"
+                              Name 179  "coordTemp"
+                              Name 182  "storeTemp"
+                              Name 193  "coordTemp"
+                              Name 196  "storeTemp"
+                              Name 207  "coordTemp"
+                              Name 210  "storeTemp"
+                              Name 221  "coordTemp"
+                              Name 224  "storeTemp"
+                              Name 234  "coordTemp"
+                              Name 237  "storeTemp"
+                              Name 247  "coordTemp"
+                              Name 250  "storeTemp"
+                              Name 261  "coordTemp"
+                              Name 264  "storeTemp"
+                              Name 275  "coordTemp"
+                              Name 278  "storeTemp"
+                              Name 288  "coordTemp"
+                              Name 291  "storeTemp"
+                              Name 301  "storeTemp"
+                              Name 311  "storeTemp"
+                              Name 318  "storeTemp"
+                              Name 325  "storeTemp"
+                              Name 335  "storeTemp"
+                              Name 342  "storeTemp"
+                              Name 353  "param"
+                              Name 359  "param"
+                              Name 365  "param"
+                              Name 367  "tempArg"
+                              Name 368  "param"
+                              Name 375  "tempArg"
+                              Name 376  "param"
+                              Name 383  "tempArg"
+                              Name 384  "param"
+                              Name 391  "coordTemp"
+                              Name 394  "storeTemp"
+                              Name 405  "coordTemp"
+                              Name 408  "storeTemp"
+                              Name 418  "coordTemp"
+                              Name 421  "storeTemp"
+                              Name 431  "coordTemp"
+                              Name 434  "storeTemp"
+                              Name 444  "coordTemp"
+                              Name 447  "storeTemp"
+                              Name 457  "coordTemp"
+                              Name 460  "storeTemp"
+                              Name 470  "coordTemp"
+                              Name 473  "storeTempPre"
+                              Name 477  "storeTempPost"
+                              Name 485  "coordTemp"
+                              Name 488  "storeTempPre"
+                              Name 492  "storeTempPost"
+                              Name 500  "coordTemp"
+                              Name 503  "storeTempPre"
+                              Name 507  "storeTempPost"
+                              Name 515  "coordTemp"
+                              Name 518  "storeTempPre"
+                              Name 522  "storeTempPost"
+                              Name 530  "coordTemp"
+                              Name 533  "storeTempPre"
+                              Name 537  "storeTempPost"
+                              Name 545  "coordTemp"
+                              Name 548  "storeTempPre"
+                              Name 552  "storeTempPost"
+                              Name 560  "storeTemp"
+                              Name 568  "PS_OUTPUT"
+                              MemberName 568(PS_OUTPUT) 0  "Color"
+                              Name 570  "psout"
+                              Name 575  "Color"
+                              Name 581  "g_sSamp"
+                              Name 584  "g_tTex1df2a"
+                              Name 587  "g_tTex1di2a"
+                              Name 590  "g_tTex1du2a"
+                              Name 593  "g_tTex2df2a"
+                              Name 596  "g_tTex2di2a"
+                              Name 599  "g_tTex2du2a"
+                              MemberDecorate 59($Global) 0 Offset 0
+                              MemberDecorate 59($Global) 1 Offset 8
+                              MemberDecorate 59($Global) 2 Offset 16
+                              MemberDecorate 59($Global) 3 Offset 32
+                              MemberDecorate 59($Global) 4 Offset 48
+                              MemberDecorate 59($Global) 5 Offset 56
+                              MemberDecorate 59($Global) 6 Offset 64
+                              MemberDecorate 59($Global) 7 Offset 80
+                              MemberDecorate 59($Global) 8 Offset 96
+                              MemberDecorate 59($Global) 9 Offset 104
+                              MemberDecorate 59($Global) 10 Offset 112
+                              Decorate 59($Global) Block
+                              Decorate 61 DescriptorSet 0
+                              Decorate 71(g_tTex1df2) DescriptorSet 0
+                              Decorate 85(g_tTex1di2) DescriptorSet 0
+                              Decorate 93(g_tTex1du2) DescriptorSet 0
+                              Decorate 101(g_tTex2df2) DescriptorSet 0
+                              Decorate 109(g_tTex2di2) DescriptorSet 0
+                              Decorate 117(g_tTex2du2) DescriptorSet 0
+                              Decorate 125(g_tTex3df2) DescriptorSet 0
+                              Decorate 135(g_tTex3di2) DescriptorSet 0
+                              Decorate 143(g_tTex3du2) DescriptorSet 0
+                              Decorate 575(Color) Location 0
+                              Decorate 581(g_sSamp) DescriptorSet 0
+                              Decorate 581(g_sSamp) Binding 0
+                              Decorate 584(g_tTex1df2a) DescriptorSet 0
+                              Decorate 587(g_tTex1di2a) DescriptorSet 0
+                              Decorate 590(g_tTex1du2a) DescriptorSet 0
+                              Decorate 593(g_tTex2df2a) DescriptorSet 0
+                              Decorate 596(g_tTex2di2a) DescriptorSet 0
+                              Decorate 599(g_tTex2du2a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+               9:             TypeFunction 7(ivec2) 8(ptr)
+              13:             TypeInt 32 0
+              14:             TypeVector 13(int) 2
+              15:             TypePointer Function 14(ivec2)
+              16:             TypeFunction 14(ivec2) 15(ptr)
+              20:             TypeFloat 32
+              21:             TypeVector 20(float) 2
+              22:             TypePointer Function 21(fvec2)
+              23:             TypeFunction 21(fvec2) 22(ptr)
+              27:             TypeFunction 2 8(ptr)
+              31:             TypeFunction 2 15(ptr)
+              35:             TypeFunction 2 22(ptr)
+              39:             TypeFunction 21(fvec2)
+              51:      6(int) Constant 0
+              52:    7(ivec2) ConstantComposite 51 51
+              53:     13(int) Constant 0
+              54:   14(ivec2) ConstantComposite 53 53
+              55:   20(float) Constant 0
+              56:   21(fvec2) ConstantComposite 55 55
+              57:             TypeVector 6(int) 3
+              58:             TypeVector 6(int) 4
+     59($Global):             TypeStruct 6(int) 7(ivec2) 57(ivec3) 58(ivec4) 6(int) 7(ivec2) 57(ivec3) 58(ivec4) 21(fvec2) 7(ivec2) 14(ivec2)
+              60:             TypePointer Uniform 59($Global)
+              61:     60(ptr) Variable Uniform
+              62:      6(int) Constant 1
+              63:             TypePointer Uniform 7(ivec2)
+              69:             TypeImage 20(float) 1D nonsampled format:Rg32f
+              70:             TypePointer UniformConstant 69
+  71(g_tTex1df2):     70(ptr) Variable UniformConstant
+              73:             TypePointer Uniform 6(int)
+              83:             TypeImage 6(int) 1D nonsampled format:Rg32i
+              84:             TypePointer UniformConstant 83
+  85(g_tTex1di2):     84(ptr) Variable UniformConstant
+              91:             TypeImage 13(int) 1D nonsampled format:Rg32ui
+              92:             TypePointer UniformConstant 91
+  93(g_tTex1du2):     92(ptr) Variable UniformConstant
+              99:             TypeImage 20(float) 2D nonsampled format:Rg32f
+             100:             TypePointer UniformConstant 99
+ 101(g_tTex2df2):    100(ptr) Variable UniformConstant
+             107:             TypeImage 6(int) 2D nonsampled format:Rg32i
+             108:             TypePointer UniformConstant 107
+ 109(g_tTex2di2):    108(ptr) Variable UniformConstant
+             115:             TypeImage 13(int) 2D nonsampled format:Rg32ui
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex2du2):    116(ptr) Variable UniformConstant
+             123:             TypeImage 20(float) 3D nonsampled format:Rg32f
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex3df2):    124(ptr) Variable UniformConstant
+             127:      6(int) Constant 2
+             128:             TypePointer Uniform 57(ivec3)
+             133:             TypeImage 6(int) 3D nonsampled format:Rg32i
+             134:             TypePointer UniformConstant 133
+ 135(g_tTex3di2):    134(ptr) Variable UniformConstant
+             141:             TypeImage 13(int) 3D nonsampled format:Rg32ui
+             142:             TypePointer UniformConstant 141
+ 143(g_tTex3du2):    142(ptr) Variable UniformConstant
+             149:      6(int) Constant 8
+             150:             TypePointer Uniform 21(fvec2)
+             164:    7(ivec2) ConstantComposite 127 127
+             170:     13(int) Constant 3
+             171:     13(int) Constant 2
+             172:   14(ivec2) ConstantComposite 170 171
+             178:             TypePointer Function 6(int)
+             186:   20(float) Constant 1073741824
+             200:   20(float) Constant 1077936128
+             214:   20(float) Constant 1082130432
+             254:      6(int) Constant 65535
+             268:      6(int) Constant 61680
+             312:      6(int) Constant 5
+             313:    7(ivec2) ConstantComposite 312 127
+             319:     13(int) Constant 6
+             320:   14(ivec2) ConstantComposite 319 171
+             336:      6(int) Constant 6
+             337:    7(ivec2) ConstantComposite 149 336
+             343:     13(int) Constant 9
+             344:   14(ivec2) ConstantComposite 343 171
+             399:   20(float) Constant 1065353216
+             562:      6(int) Constant 3
+             563:    7(ivec2) ConstantComposite 127 562
+             567:             TypeVector 20(float) 4
+  568(PS_OUTPUT):             TypeStruct 567(fvec4)
+             569:             TypePointer Function 568(PS_OUTPUT)
+             571:  567(fvec4) ConstantComposite 399 399 399 399
+             572:             TypePointer Function 567(fvec4)
+             574:             TypePointer Output 567(fvec4)
+      575(Color):    574(ptr) Variable Output
+             579:             TypeSampler
+             580:             TypePointer UniformConstant 579
+    581(g_sSamp):    580(ptr) Variable UniformConstant
+             582:             TypeImage 20(float) 1D array nonsampled format:Rg32f
+             583:             TypePointer UniformConstant 582
+584(g_tTex1df2a):    583(ptr) Variable UniformConstant
+             585:             TypeImage 6(int) 1D array nonsampled format:Rg32i
+             586:             TypePointer UniformConstant 585
+587(g_tTex1di2a):    586(ptr) Variable UniformConstant
+             588:             TypeImage 13(int) 1D array nonsampled format:Rg32ui
+             589:             TypePointer UniformConstant 588
+590(g_tTex1du2a):    589(ptr) Variable UniformConstant
+             591:             TypeImage 20(float) 2D array nonsampled format:Rg32f
+             592:             TypePointer UniformConstant 591
+593(g_tTex2df2a):    592(ptr) Variable UniformConstant
+             594:             TypeImage 6(int) 2D array nonsampled format:Rg32i
+             595:             TypePointer UniformConstant 594
+596(g_tTex2di2a):    595(ptr) Variable UniformConstant
+             597:             TypeImage 13(int) 2D array nonsampled format:Rg32ui
+             598:             TypePointer UniformConstant 597
+599(g_tTex2du2a):    598(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+         77(r00):     22(ptr) Variable Function
+         82(r01):      8(ptr) Variable Function
+         90(r02):     15(ptr) Variable Function
+         98(r10):     22(ptr) Variable Function
+        106(r11):      8(ptr) Variable Function
+        114(r12):     15(ptr) Variable Function
+        122(r20):     22(ptr) Variable Function
+        132(r21):      8(ptr) Variable Function
+        140(r22):     15(ptr) Variable Function
+        148(lf2):     22(ptr) Variable Function
+  153(storeTemp):     22(ptr) Variable Function
+  163(storeTemp):      8(ptr) Variable Function
+  169(storeTemp):     15(ptr) Variable Function
+       177(val1):     22(ptr) Variable Function
+  179(coordTemp):    178(ptr) Variable Function
+  182(storeTemp):     22(ptr) Variable Function
+  193(coordTemp):    178(ptr) Variable Function
+  196(storeTemp):     22(ptr) Variable Function
+  207(coordTemp):    178(ptr) Variable Function
+  210(storeTemp):     22(ptr) Variable Function
+  221(coordTemp):    178(ptr) Variable Function
+  224(storeTemp):      8(ptr) Variable Function
+  234(coordTemp):    178(ptr) Variable Function
+  237(storeTemp):      8(ptr) Variable Function
+  247(coordTemp):    178(ptr) Variable Function
+  250(storeTemp):      8(ptr) Variable Function
+  261(coordTemp):    178(ptr) Variable Function
+  264(storeTemp):      8(ptr) Variable Function
+  275(coordTemp):    178(ptr) Variable Function
+  278(storeTemp):      8(ptr) Variable Function
+  288(coordTemp):    178(ptr) Variable Function
+  291(storeTemp):      8(ptr) Variable Function
+  301(storeTemp):     22(ptr) Variable Function
+  311(storeTemp):      8(ptr) Variable Function
+  318(storeTemp):     15(ptr) Variable Function
+  325(storeTemp):     22(ptr) Variable Function
+  335(storeTemp):      8(ptr) Variable Function
+  342(storeTemp):     15(ptr) Variable Function
+      353(param):     22(ptr) Variable Function
+      359(param):      8(ptr) Variable Function
+      365(param):     15(ptr) Variable Function
+    367(tempArg):     22(ptr) Variable Function
+      368(param):     22(ptr) Variable Function
+    375(tempArg):      8(ptr) Variable Function
+      376(param):      8(ptr) Variable Function
+    383(tempArg):     15(ptr) Variable Function
+      384(param):     15(ptr) Variable Function
+  391(coordTemp):    178(ptr) Variable Function
+  394(storeTemp):     22(ptr) Variable Function
+  405(coordTemp):    178(ptr) Variable Function
+  408(storeTemp):      8(ptr) Variable Function
+  418(coordTemp):    178(ptr) Variable Function
+  421(storeTemp):     15(ptr) Variable Function
+  431(coordTemp):    178(ptr) Variable Function
+  434(storeTemp):     22(ptr) Variable Function
+  444(coordTemp):    178(ptr) Variable Function
+  447(storeTemp):      8(ptr) Variable Function
+  457(coordTemp):    178(ptr) Variable Function
+  460(storeTemp):     15(ptr) Variable Function
+  470(coordTemp):    178(ptr) Variable Function
+473(storeTempPre):     22(ptr) Variable Function
+477(storeTempPost):     22(ptr) Variable Function
+  485(coordTemp):    178(ptr) Variable Function
+488(storeTempPre):     15(ptr) Variable Function
+492(storeTempPost):     15(ptr) Variable Function
+  500(coordTemp):    178(ptr) Variable Function
+503(storeTempPre):      8(ptr) Variable Function
+507(storeTempPost):      8(ptr) Variable Function
+  515(coordTemp):    178(ptr) Variable Function
+518(storeTempPre):     22(ptr) Variable Function
+522(storeTempPost):     22(ptr) Variable Function
+  530(coordTemp):    178(ptr) Variable Function
+533(storeTempPre):      8(ptr) Variable Function
+537(storeTempPost):      8(ptr) Variable Function
+  545(coordTemp):    178(ptr) Variable Function
+548(storeTempPre):     15(ptr) Variable Function
+552(storeTempPost):     15(ptr) Variable Function
+  560(storeTemp):     22(ptr) Variable Function
+      570(psout):    569(ptr) Variable Function
+              72:          69 Load 71(g_tTex1df2)
+              74:     73(ptr) AccessChain 61 51
+              75:      6(int) Load 74
+              76:   21(fvec2) ImageRead 72 75
+              78:          69 Load 71(g_tTex1df2)
+              79:     73(ptr) AccessChain 61 51
+              80:      6(int) Load 79
+              81:   21(fvec2) ImageRead 78 80
+                              Store 77(r00) 81
+              86:          83 Load 85(g_tTex1di2)
+              87:     73(ptr) AccessChain 61 51
+              88:      6(int) Load 87
+              89:    7(ivec2) ImageRead 86 88
+                              Store 82(r01) 89
+              94:          91 Load 93(g_tTex1du2)
+              95:     73(ptr) AccessChain 61 51
+              96:      6(int) Load 95
+              97:   14(ivec2) ImageRead 94 96
+                              Store 90(r02) 97
+             102:          99 Load 101(g_tTex2df2)
+             103:     63(ptr) AccessChain 61 62
+             104:    7(ivec2) Load 103
+             105:   21(fvec2) ImageRead 102 104
+                              Store 98(r10) 105
+             110:         107 Load 109(g_tTex2di2)
+             111:     63(ptr) AccessChain 61 62
+             112:    7(ivec2) Load 111
+             113:    7(ivec2) ImageRead 110 112
+                              Store 106(r11) 113
+             118:         115 Load 117(g_tTex2du2)
+             119:     63(ptr) AccessChain 61 62
+             120:    7(ivec2) Load 119
+             121:   14(ivec2) ImageRead 118 120
+                              Store 114(r12) 121
+             126:         123 Load 125(g_tTex3df2)
+             129:    128(ptr) AccessChain 61 127
+             130:   57(ivec3) Load 129
+             131:   21(fvec2) ImageRead 126 130
+                              Store 122(r20) 131
+             136:         133 Load 135(g_tTex3di2)
+             137:    128(ptr) AccessChain 61 127
+             138:   57(ivec3) Load 137
+             139:    7(ivec2) ImageRead 136 138
+                              Store 132(r21) 139
+             144:         141 Load 143(g_tTex3du2)
+             145:    128(ptr) AccessChain 61 127
+             146:   57(ivec3) Load 145
+             147:   14(ivec2) ImageRead 144 146
+                              Store 140(r22) 147
+             151:    150(ptr) AccessChain 61 149
+             152:   21(fvec2) Load 151
+                              Store 148(lf2) 152
+             154:   21(fvec2) FunctionCall 40(SomeValue()
+                              Store 153(storeTemp) 154
+             155:          69 Load 71(g_tTex1df2)
+             156:     73(ptr) AccessChain 61 51
+             157:      6(int) Load 156
+             158:   21(fvec2) Load 153(storeTemp)
+                              ImageWrite 155 157 158
+             159:          69 Load 71(g_tTex1df2)
+             160:     73(ptr) AccessChain 61 51
+             161:      6(int) Load 160
+             162:   21(fvec2) Load 148(lf2)
+                              ImageWrite 159 161 162
+                              Store 163(storeTemp) 164
+             165:          83 Load 85(g_tTex1di2)
+             166:     73(ptr) AccessChain 61 51
+             167:      6(int) Load 166
+             168:    7(ivec2) Load 163(storeTemp)
+                              ImageWrite 165 167 168
+                              Store 169(storeTemp) 172
+             173:          91 Load 93(g_tTex1du2)
+             174:     73(ptr) AccessChain 61 51
+             175:      6(int) Load 174
+             176:   14(ivec2) Load 169(storeTemp)
+                              ImageWrite 173 175 176
+             180:     73(ptr) AccessChain 61 51
+             181:      6(int) Load 180
+                              Store 179(coordTemp) 181
+             183:          69 Load 71(g_tTex1df2)
+             184:      6(int) Load 179(coordTemp)
+             185:   21(fvec2) ImageRead 183 184
+                              Store 182(storeTemp) 185
+             187:   21(fvec2) Load 182(storeTemp)
+             188:   21(fvec2) VectorTimesScalar 187 186
+                              Store 182(storeTemp) 188
+             189:          69 Load 71(g_tTex1df2)
+             190:      6(int) Load 179(coordTemp)
+             191:   21(fvec2) Load 182(storeTemp)
+                              ImageWrite 189 190 191
+             192:   21(fvec2) Load 182(storeTemp)
+                              Store 177(val1) 192
+             194:     73(ptr) AccessChain 61 51
+             195:      6(int) Load 194
+                              Store 193(coordTemp) 195
+             197:          69 Load 71(g_tTex1df2)
+             198:      6(int) Load 193(coordTemp)
+             199:   21(fvec2) ImageRead 197 198
+                              Store 196(storeTemp) 199
+             201:   21(fvec2) Load 196(storeTemp)
+             202:   21(fvec2) CompositeConstruct 200 200
+             203:   21(fvec2) FSub 201 202
+                              Store 196(storeTemp) 203
+             204:          69 Load 71(g_tTex1df2)
+             205:      6(int) Load 193(coordTemp)
+             206:   21(fvec2) Load 196(storeTemp)
+                              ImageWrite 204 205 206
+             208:     73(ptr) AccessChain 61 51
+             209:      6(int) Load 208
+                              Store 207(coordTemp) 209
+             211:          69 Load 71(g_tTex1df2)
+             212:      6(int) Load 207(coordTemp)
+             213:   21(fvec2) ImageRead 211 212
+                              Store 210(storeTemp) 213
+             215:   21(fvec2) Load 210(storeTemp)
+             216:   21(fvec2) CompositeConstruct 214 214
+             217:   21(fvec2) FAdd 215 216
+                              Store 210(storeTemp) 217
+             218:          69 Load 71(g_tTex1df2)
+             219:      6(int) Load 207(coordTemp)
+             220:   21(fvec2) Load 210(storeTemp)
+                              ImageWrite 218 219 220
+             222:     73(ptr) AccessChain 61 51
+             223:      6(int) Load 222
+                              Store 221(coordTemp) 223
+             225:          83 Load 85(g_tTex1di2)
+             226:      6(int) Load 221(coordTemp)
+             227:    7(ivec2) ImageRead 225 226
+                              Store 224(storeTemp) 227
+             228:    7(ivec2) Load 224(storeTemp)
+             229:    7(ivec2) CompositeConstruct 127 127
+             230:    7(ivec2) SDiv 228 229
+                              Store 224(storeTemp) 230
+             231:          83 Load 85(g_tTex1di2)
+             232:      6(int) Load 221(coordTemp)
+             233:    7(ivec2) Load 224(storeTemp)
+                              ImageWrite 231 232 233
+             235:     73(ptr) AccessChain 61 51
+             236:      6(int) Load 235
+                              Store 234(coordTemp) 236
+             238:          83 Load 85(g_tTex1di2)
+             239:      6(int) Load 234(coordTemp)
+             240:    7(ivec2) ImageRead 238 239
+                              Store 237(storeTemp) 240
+             241:    7(ivec2) Load 237(storeTemp)
+             242:    7(ivec2) CompositeConstruct 127 127
+             243:    7(ivec2) SMod 241 242
+                              Store 237(storeTemp) 243
+             244:          83 Load 85(g_tTex1di2)
+             245:      6(int) Load 234(coordTemp)
+             246:    7(ivec2) Load 237(storeTemp)
+                              ImageWrite 244 245 246
+             248:     73(ptr) AccessChain 61 51
+             249:      6(int) Load 248
+                              Store 247(coordTemp) 249
+             251:          83 Load 85(g_tTex1di2)
+             252:      6(int) Load 247(coordTemp)
+             253:    7(ivec2) ImageRead 251 252
+                              Store 250(storeTemp) 253
+             255:    7(ivec2) Load 250(storeTemp)
+             256:    7(ivec2) CompositeConstruct 254 254
+             257:    7(ivec2) BitwiseAnd 255 256
+                              Store 250(storeTemp) 257
+             258:          83 Load 85(g_tTex1di2)
+             259:      6(int) Load 247(coordTemp)
+             260:    7(ivec2) Load 250(storeTemp)
+                              ImageWrite 258 259 260
+             262:     73(ptr) AccessChain 61 51
+             263:      6(int) Load 262
+                              Store 261(coordTemp) 263
+             265:          83 Load 85(g_tTex1di2)
+             266:      6(int) Load 261(coordTemp)
+             267:    7(ivec2) ImageRead 265 266
+                              Store 264(storeTemp) 267
+             269:    7(ivec2) Load 264(storeTemp)
+             270:    7(ivec2) CompositeConstruct 268 268
+             271:    7(ivec2) BitwiseOr 269 270
+                              Store 264(storeTemp) 271
+             272:          83 Load 85(g_tTex1di2)
+             273:      6(int) Load 261(coordTemp)
+             274:    7(ivec2) Load 264(storeTemp)
+                              ImageWrite 272 273 274
+             276:     73(ptr) AccessChain 61 51
+             277:      6(int) Load 276
+                              Store 275(coordTemp) 277
+             279:          83 Load 85(g_tTex1di2)
+             280:      6(int) Load 275(coordTemp)
+             281:    7(ivec2) ImageRead 279 280
+                              Store 278(storeTemp) 281
+             282:    7(ivec2) Load 278(storeTemp)
+             283:    7(ivec2) CompositeConstruct 127 127
+             284:    7(ivec2) ShiftLeftLogical 282 283
+                              Store 278(storeTemp) 284
+             285:          83 Load 85(g_tTex1di2)
+             286:      6(int) Load 275(coordTemp)
+             287:    7(ivec2) Load 278(storeTemp)
+                              ImageWrite 285 286 287
+             289:     73(ptr) AccessChain 61 51
+             290:      6(int) Load 289
+                              Store 288(coordTemp) 290
+             292:          83 Load 85(g_tTex1di2)
+             293:      6(int) Load 288(coordTemp)
+             294:    7(ivec2) ImageRead 292 293
+                              Store 291(storeTemp) 294
+             295:    7(ivec2) Load 291(storeTemp)
+             296:    7(ivec2) CompositeConstruct 127 127
+             297:    7(ivec2) ShiftRightArithmetic 295 296
+                              Store 291(storeTemp) 297
+             298:          83 Load 85(g_tTex1di2)
+             299:      6(int) Load 288(coordTemp)
+             300:    7(ivec2) Load 291(storeTemp)
+                              ImageWrite 298 299 300
+             302:   21(fvec2) FunctionCall 40(SomeValue()
+                              Store 301(storeTemp) 302
+             303:          99 Load 101(g_tTex2df2)
+             304:     63(ptr) AccessChain 61 62
+             305:    7(ivec2) Load 304
+             306:   21(fvec2) Load 301(storeTemp)
+                              ImageWrite 303 305 306
+             307:          99 Load 101(g_tTex2df2)
+             308:     63(ptr) AccessChain 61 62
+             309:    7(ivec2) Load 308
+             310:   21(fvec2) Load 148(lf2)
+                              ImageWrite 307 309 310
+                              Store 311(storeTemp) 313
+             314:         107 Load 109(g_tTex2di2)
+             315:     63(ptr) AccessChain 61 62
+             316:    7(ivec2) Load 315
+             317:    7(ivec2) Load 311(storeTemp)
+                              ImageWrite 314 316 317
+                              Store 318(storeTemp) 320
+             321:         115 Load 117(g_tTex2du2)
+             322:     63(ptr) AccessChain 61 62
+             323:    7(ivec2) Load 322
+             324:   14(ivec2) Load 318(storeTemp)
+                              ImageWrite 321 323 324
+             326:   21(fvec2) FunctionCall 40(SomeValue()
+                              Store 325(storeTemp) 326
+             327:         123 Load 125(g_tTex3df2)
+             328:    128(ptr) AccessChain 61 127
+             329:   57(ivec3) Load 328
+             330:   21(fvec2) Load 325(storeTemp)
+                              ImageWrite 327 329 330
+             331:         123 Load 125(g_tTex3df2)
+             332:    128(ptr) AccessChain 61 127
+             333:   57(ivec3) Load 332
+             334:   21(fvec2) Load 148(lf2)
+                              ImageWrite 331 333 334
+                              Store 335(storeTemp) 337
+             338:         133 Load 135(g_tTex3di2)
+             339:    128(ptr) AccessChain 61 127
+             340:   57(ivec3) Load 339
+             341:    7(ivec2) Load 335(storeTemp)
+                              ImageWrite 338 340 341
+                              Store 342(storeTemp) 344
+             345:         141 Load 143(g_tTex3du2)
+             346:    128(ptr) AccessChain 61 127
+             347:   57(ivec3) Load 346
+             348:   14(ivec2) Load 342(storeTemp)
+                              ImageWrite 345 347 348
+             349:          69 Load 71(g_tTex1df2)
+             350:     73(ptr) AccessChain 61 51
+             351:      6(int) Load 350
+             352:   21(fvec2) ImageRead 349 351
+                              Store 353(param) 352
+             354:   21(fvec2) FunctionCall 25(Fn1(vf2;) 353(param)
+             355:          83 Load 85(g_tTex1di2)
+             356:     73(ptr) AccessChain 61 51
+             357:      6(int) Load 356
+             358:    7(ivec2) ImageRead 355 357
+                              Store 359(param) 358
+             360:    7(ivec2) FunctionCall 11(Fn1(vi2;) 359(param)
+             361:          91 Load 93(g_tTex1du2)
+             362:     73(ptr) AccessChain 61 51
+             363:      6(int) Load 362
+             364:   14(ivec2) ImageRead 361 363
+                              Store 365(param) 364
+             366:   14(ivec2) FunctionCall 18(Fn1(vu2;) 365(param)
+             369:           2 FunctionCall 37(Fn2(vf2;) 368(param)
+             370:   21(fvec2) Load 368(param)
+                              Store 367(tempArg) 370
+             371:          69 Load 71(g_tTex1df2)
+             372:     73(ptr) AccessChain 61 51
+             373:      6(int) Load 372
+             374:   21(fvec2) Load 367(tempArg)
+                              ImageWrite 371 373 374
+             377:           2 FunctionCall 29(Fn2(vi2;) 376(param)
+             378:    7(ivec2) Load 376(param)
+                              Store 375(tempArg) 378
+             379:          83 Load 85(g_tTex1di2)
+             380:     73(ptr) AccessChain 61 51
+             381:      6(int) Load 380
+             382:    7(ivec2) Load 375(tempArg)
+                              ImageWrite 379 381 382
+             385:           2 FunctionCall 33(Fn2(vu2;) 384(param)
+             386:   14(ivec2) Load 384(param)
+                              Store 383(tempArg) 386
+             387:          91 Load 93(g_tTex1du2)
+             388:     73(ptr) AccessChain 61 51
+             389:      6(int) Load 388
+             390:   14(ivec2) Load 383(tempArg)
+                              ImageWrite 387 389 390
+             392:     73(ptr) AccessChain 61 51
+             393:      6(int) Load 392
+                              Store 391(coordTemp) 393
+             395:          69 Load 71(g_tTex1df2)
+             396:      6(int) Load 391(coordTemp)
+             397:   21(fvec2) ImageRead 395 396
+                              Store 394(storeTemp) 397
+             398:   21(fvec2) Load 394(storeTemp)
+             400:   21(fvec2) CompositeConstruct 399 399
+             401:   21(fvec2) FAdd 398 400
+                              Store 394(storeTemp) 401
+             402:          69 Load 71(g_tTex1df2)
+             403:      6(int) Load 391(coordTemp)
+             404:   21(fvec2) Load 394(storeTemp)
+                              ImageWrite 402 403 404
+             406:     73(ptr) AccessChain 61 51
+             407:      6(int) Load 406
+                              Store 405(coordTemp) 407
+             409:          83 Load 85(g_tTex1di2)
+             410:      6(int) Load 405(coordTemp)
+             411:    7(ivec2) ImageRead 409 410
+                              Store 408(storeTemp) 411
+             412:    7(ivec2) Load 408(storeTemp)
+             413:    7(ivec2) CompositeConstruct 62 62
+             414:    7(ivec2) IAdd 412 413
+                              Store 408(storeTemp) 414
+             415:          83 Load 85(g_tTex1di2)
+             416:      6(int) Load 405(coordTemp)
+             417:    7(ivec2) Load 408(storeTemp)
+                              ImageWrite 415 416 417
+             419:     73(ptr) AccessChain 61 51
+             420:      6(int) Load 419
+                              Store 418(coordTemp) 420
+             422:          91 Load 93(g_tTex1du2)
+             423:      6(int) Load 418(coordTemp)
+             424:   14(ivec2) ImageRead 422 423
+                              Store 421(storeTemp) 424
+             425:   14(ivec2) Load 421(storeTemp)
+             426:    7(ivec2) CompositeConstruct 62 62
+             427:   14(ivec2) IAdd 425 426
+                              Store 421(storeTemp) 427
+             428:          91 Load 93(g_tTex1du2)
+             429:      6(int) Load 418(coordTemp)
+             430:   14(ivec2) Load 421(storeTemp)
+                              ImageWrite 428 429 430
+             432:     73(ptr) AccessChain 61 51
+             433:      6(int) Load 432
+                              Store 431(coordTemp) 433
+             435:          69 Load 71(g_tTex1df2)
+             436:      6(int) Load 431(coordTemp)
+             437:   21(fvec2) ImageRead 435 436
+                              Store 434(storeTemp) 437
+             438:   21(fvec2) Load 434(storeTemp)
+             439:   21(fvec2) CompositeConstruct 399 399
+             440:   21(fvec2) FSub 438 439
+                              Store 434(storeTemp) 440
+             441:          69 Load 71(g_tTex1df2)
+             442:      6(int) Load 431(coordTemp)
+             443:   21(fvec2) Load 434(storeTemp)
+                              ImageWrite 441 442 443
+             445:     73(ptr) AccessChain 61 51
+             446:      6(int) Load 445
+                              Store 444(coordTemp) 446
+             448:          83 Load 85(g_tTex1di2)
+             449:      6(int) Load 444(coordTemp)
+             450:    7(ivec2) ImageRead 448 449
+                              Store 447(storeTemp) 450
+             451:    7(ivec2) Load 447(storeTemp)
+             452:    7(ivec2) CompositeConstruct 62 62
+             453:    7(ivec2) ISub 451 452
+                              Store 447(storeTemp) 453
+             454:          83 Load 85(g_tTex1di2)
+             455:      6(int) Load 444(coordTemp)
+             456:    7(ivec2) Load 447(storeTemp)
+                              ImageWrite 454 455 456
+             458:     73(ptr) AccessChain 61 51
+             459:      6(int) Load 458
+                              Store 457(coordTemp) 459
+             461:          91 Load 93(g_tTex1du2)
+             462:      6(int) Load 457(coordTemp)
+             463:   14(ivec2) ImageRead 461 462
+                              Store 460(storeTemp) 463
+             464:   14(ivec2) Load 460(storeTemp)
+             465:    7(ivec2) CompositeConstruct 62 62
+             466:   14(ivec2) ISub 464 465
+                              Store 460(storeTemp) 466
+             467:          91 Load 93(g_tTex1du2)
+             468:      6(int) Load 457(coordTemp)
+             469:   14(ivec2) Load 460(storeTemp)
+                              ImageWrite 467 468 469
+             471:     73(ptr) AccessChain 61 51
+             472:      6(int) Load 471
+                              Store 470(coordTemp) 472
+             474:          69 Load 71(g_tTex1df2)
+             475:      6(int) Load 470(coordTemp)
+             476:   21(fvec2) ImageRead 474 475
+                              Store 473(storeTempPre) 476
+             478:   21(fvec2) Load 473(storeTempPre)
+                              Store 477(storeTempPost) 478
+             479:   21(fvec2) Load 477(storeTempPost)
+             480:   21(fvec2) CompositeConstruct 399 399
+             481:   21(fvec2) FAdd 479 480
+                              Store 477(storeTempPost) 481
+             482:          69 Load 71(g_tTex1df2)
+             483:      6(int) Load 470(coordTemp)
+             484:   21(fvec2) Load 477(storeTempPost)
+                              ImageWrite 482 483 484
+             486:     73(ptr) AccessChain 61 51
+             487:      6(int) Load 486
+                              Store 485(coordTemp) 487
+             489:          91 Load 93(g_tTex1du2)
+             490:      6(int) Load 485(coordTemp)
+             491:   14(ivec2) ImageRead 489 490
+                              Store 488(storeTempPre) 491
+             493:   14(ivec2) Load 488(storeTempPre)
+                              Store 492(storeTempPost) 493
+             494:   14(ivec2) Load 492(storeTempPost)
+             495:    7(ivec2) CompositeConstruct 62 62
+             496:   14(ivec2) ISub 494 495
+                              Store 492(storeTempPost) 496
+             497:          91 Load 93(g_tTex1du2)
+             498:      6(int) Load 485(coordTemp)
+             499:   14(ivec2) Load 492(storeTempPost)
+                              ImageWrite 497 498 499
+             501:     73(ptr) AccessChain 61 51
+             502:      6(int) Load 501
+                              Store 500(coordTemp) 502
+             504:          83 Load 85(g_tTex1di2)
+             505:      6(int) Load 500(coordTemp)
+             506:    7(ivec2) ImageRead 504 505
+                              Store 503(storeTempPre) 506
+             508:    7(ivec2) Load 503(storeTempPre)
+                              Store 507(storeTempPost) 508
+             509:    7(ivec2) Load 507(storeTempPost)
+             510:    7(ivec2) CompositeConstruct 62 62
+             511:    7(ivec2) IAdd 509 510
+                              Store 507(storeTempPost) 511
+             512:          83 Load 85(g_tTex1di2)
+             513:      6(int) Load 500(coordTemp)
+             514:    7(ivec2) Load 507(storeTempPost)
+                              ImageWrite 512 513 514
+             516:     73(ptr) AccessChain 61 51
+             517:      6(int) Load 516
+                              Store 515(coordTemp) 517
+             519:          69 Load 71(g_tTex1df2)
+             520:      6(int) Load 515(coordTemp)
+             521:   21(fvec2) ImageRead 519 520
+                              Store 518(storeTempPre) 521
+             523:   21(fvec2) Load 518(storeTempPre)
+                              Store 522(storeTempPost) 523
+             524:   21(fvec2) Load 522(storeTempPost)
+             525:   21(fvec2) CompositeConstruct 399 399
+             526:   21(fvec2) FSub 524 525
+                              Store 522(storeTempPost) 526
+             527:          69 Load 71(g_tTex1df2)
+             528:      6(int) Load 515(coordTemp)
+             529:   21(fvec2) Load 522(storeTempPost)
+                              ImageWrite 527 528 529
+             531:     73(ptr) AccessChain 61 51
+             532:      6(int) Load 531
+                              Store 530(coordTemp) 532
+             534:          83 Load 85(g_tTex1di2)
+             535:      6(int) Load 530(coordTemp)
+             536:    7(ivec2) ImageRead 534 535
+                              Store 533(storeTempPre) 536
+             538:    7(ivec2) Load 533(storeTempPre)
+                              Store 537(storeTempPost) 538
+             539:    7(ivec2) Load 537(storeTempPost)
+             540:    7(ivec2) CompositeConstruct 62 62
+             541:    7(ivec2) IAdd 539 540
+                              Store 537(storeTempPost) 541
+             542:          83 Load 85(g_tTex1di2)
+             543:      6(int) Load 530(coordTemp)
+             544:    7(ivec2) Load 537(storeTempPost)
+                              ImageWrite 542 543 544
+             546:     73(ptr) AccessChain 61 51
+             547:      6(int) Load 546
+                              Store 545(coordTemp) 547
+             549:          91 Load 93(g_tTex1du2)
+             550:      6(int) Load 545(coordTemp)
+             551:   14(ivec2) ImageRead 549 550
+                              Store 548(storeTempPre) 551
+             553:   14(ivec2) Load 548(storeTempPre)
+                              Store 552(storeTempPost) 553
+             554:   14(ivec2) Load 552(storeTempPost)
+             555:    7(ivec2) CompositeConstruct 62 62
+             556:   14(ivec2) ISub 554 555
+                              Store 552(storeTempPost) 556
+             557:          91 Load 93(g_tTex1du2)
+             558:      6(int) Load 545(coordTemp)
+             559:   14(ivec2) Load 552(storeTempPost)
+                              ImageWrite 557 558 559
+             561:          99 Load 101(g_tTex2df2)
+             564:   21(fvec2) ImageRead 561 563
+                              Store 560(storeTemp) 564
+             565:          69 Load 71(g_tTex1df2)
+             566:   21(fvec2) Load 560(storeTemp)
+                              ImageWrite 565 62 566
+             573:    572(ptr) AccessChain 570(psout) 51
+                              Store 573 571
+             576:    572(ptr) AccessChain 570(psout) 51
+             577:  567(fvec4) Load 576
+                              Store 575(Color) 577
+                              Return
+                              FunctionEnd
+    11(Fn1(vi2;):    7(ivec2) Function None 9
+           10(x):      8(ptr) FunctionParameter
+              12:             Label
+              42:    7(ivec2) Load 10(x)
+                              ReturnValue 42
+                              FunctionEnd
+    18(Fn1(vu2;):   14(ivec2) Function None 16
+           17(x):     15(ptr) FunctionParameter
+              19:             Label
+              45:   14(ivec2) Load 17(x)
+                              ReturnValue 45
+                              FunctionEnd
+    25(Fn1(vf2;):   21(fvec2) Function None 23
+           24(x):     22(ptr) FunctionParameter
+              26:             Label
+              48:   21(fvec2) Load 24(x)
+                              ReturnValue 48
+                              FunctionEnd
+    29(Fn2(vi2;):           2 Function None 27
+           28(x):      8(ptr) FunctionParameter
+              30:             Label
+                              Store 28(x) 52
+                              Return
+                              FunctionEnd
+    33(Fn2(vu2;):           2 Function None 31
+           32(x):     15(ptr) FunctionParameter
+              34:             Label
+                              Store 32(x) 54
+                              Return
+                              FunctionEnd
+    37(Fn2(vf2;):           2 Function None 35
+           36(x):     22(ptr) FunctionParameter
+              38:             Label
+                              Store 36(x) 56
+                              Return
+                              FunctionEnd
+  40(SomeValue():   21(fvec2) Function None 39
+              41:             Label
+              64:     63(ptr) AccessChain 61 62
+              65:    7(ivec2) Load 64
+              66:   21(fvec2) ConvertSToF 65
+                              ReturnValue 66
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 54c3553a09db347130efba76cad65aa51441bda6..f223e4bf6b823971729e49516ea18df05a6005d0 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.sample.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          texture (global 4-component vector of float)
+0:27          texture (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -18,7 +18,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          texture (global 4-component vector of int)
+0:28          texture (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -28,7 +28,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          texture (global 4-component vector of uint)
+0:29          texture (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -49,7 +49,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -60,7 +60,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -71,7 +71,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -83,7 +83,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -121,8 +121,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -137,6 +137,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -148,8 +150,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -158,13 +158,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          texture (global 4-component vector of float)
+0:27          texture (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -174,7 +174,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          texture (global 4-component vector of int)
+0:28          texture (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -184,7 +184,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          texture (global 4-component vector of uint)
+0:29          texture (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -194,7 +194,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -205,7 +205,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -216,7 +216,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -227,7 +227,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -239,7 +239,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -251,7 +251,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -277,8 +277,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -293,6 +293,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -304,8 +306,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (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
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index dca7f774a1471199cf0ed62260d0209f39043a55..a222125a821a2013333656f4e327cddd0e20083f 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -4,7 +4,7 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:53  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:53    Function Parameters: 
 0:?     Sequence
 0:57      move second child to first child (temp int)
@@ -94,7 +94,7 @@ gl_FragCoord origin is upper left
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of float)
 0:70          'txval10' (temp 4-component vector of float)
-0:70          texture (global 4-component vector of float)
+0:70          texture (temp 4-component vector of float)
 0:70            Construct combined texture-sampler (temp sampler1D)
 0:70              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -103,7 +103,7 @@ gl_FragCoord origin is upper left
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of int)
 0:71          'txval11' (temp 4-component vector of int)
-0:71          texture (global 4-component vector of int)
+0:71          texture (temp 4-component vector of int)
 0:71            Construct combined texture-sampler (temp isampler1D)
 0:71              'g_tTex1di4' (uniform itexture1D)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -112,7 +112,7 @@ gl_FragCoord origin is upper left
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of uint)
 0:72          'txval12' (temp 4-component vector of uint)
-0:72          texture (global 4-component vector of uint)
+0:72          texture (temp 4-component vector of uint)
 0:72            Construct combined texture-sampler (temp usampler1D)
 0:72              'g_tTex1du4' (uniform utexture1D)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -121,7 +121,7 @@ gl_FragCoord origin is upper left
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of float)
 0:74          'txval20' (temp 4-component vector of float)
-0:74          texture (global 4-component vector of float)
+0:74          texture (temp 4-component vector of float)
 0:74            Construct combined texture-sampler (temp sampler2D)
 0:74              'g_tTex2df4' (uniform texture2D)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -131,7 +131,7 @@ gl_FragCoord origin is upper left
 0:75      Sequence
 0:75        move second child to first child (temp 4-component vector of int)
 0:75          'txval21' (temp 4-component vector of int)
-0:75          texture (global 4-component vector of int)
+0:75          texture (temp 4-component vector of int)
 0:75            Construct combined texture-sampler (temp isampler2D)
 0:75              'g_tTex2di4' (uniform itexture2D)
 0:75              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -141,7 +141,7 @@ gl_FragCoord origin is upper left
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of uint)
 0:76          'txval22' (temp 4-component vector of uint)
-0:76          texture (global 4-component vector of uint)
+0:76          texture (temp 4-component vector of uint)
 0:76            Construct combined texture-sampler (temp usampler2D)
 0:76              'g_tTex2du4' (uniform utexture2D)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -151,7 +151,7 @@ gl_FragCoord origin is upper left
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval30' (temp 4-component vector of float)
-0:78          texture (global 4-component vector of float)
+0:78          texture (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler3D)
 0:78              'g_tTex3df4' (uniform texture3D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -162,7 +162,7 @@ gl_FragCoord origin is upper left
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval31' (temp 4-component vector of int)
-0:79          texture (global 4-component vector of int)
+0:79          texture (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler3D)
 0:79              'g_tTex3di4' (uniform itexture3D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -173,7 +173,7 @@ gl_FragCoord origin is upper left
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval32' (temp 4-component vector of uint)
-0:80          texture (global 4-component vector of uint)
+0:80          texture (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler3D)
 0:80              'g_tTex3du4' (uniform utexture3D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -184,7 +184,7 @@ gl_FragCoord origin is upper left
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval40' (temp 4-component vector of float)
-0:82          texture (global 4-component vector of float)
+0:82          texture (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp samplerCube)
 0:82              'g_tTexcdf4' (uniform textureCube)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -195,7 +195,7 @@ gl_FragCoord origin is upper left
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval41' (temp 4-component vector of int)
-0:83          texture (global 4-component vector of int)
+0:83          texture (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isamplerCube)
 0:83              'g_tTexcdi4' (uniform itextureCube)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -206,7 +206,7 @@ gl_FragCoord origin is upper left
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval42' (temp 4-component vector of uint)
-0:84          texture (global 4-component vector of uint)
+0:84          texture (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usamplerCube)
 0:84              'g_tTexcdu4' (uniform utextureCube)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -231,8 +231,8 @@ gl_FragCoord origin is upper left
 0:87            1 (const int)
 0:87        Constant:
 0:87          1.000000
-0:?       Sequence
-0:?         Sequence
+0:89      Sequence
+0:89        Sequence
 0:89          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:89            Color: direct index for structure (temp 4-component vector of float)
@@ -247,6 +247,8 @@ gl_FragCoord origin is upper left
 0:89                1 (const int)
 0:89        Branch: Return
 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_sSamp2D_b' (uniform sampler)
@@ -263,8 +265,6 @@ 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:
@@ -273,7 +273,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:53  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:53  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:53    Function Parameters: 
 0:?     Sequence
 0:57      move second child to first child (temp int)
@@ -363,7 +363,7 @@ gl_FragCoord origin is upper left
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of float)
 0:70          'txval10' (temp 4-component vector of float)
-0:70          texture (global 4-component vector of float)
+0:70          texture (temp 4-component vector of float)
 0:70            Construct combined texture-sampler (temp sampler1D)
 0:70              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -372,7 +372,7 @@ gl_FragCoord origin is upper left
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of int)
 0:71          'txval11' (temp 4-component vector of int)
-0:71          texture (global 4-component vector of int)
+0:71          texture (temp 4-component vector of int)
 0:71            Construct combined texture-sampler (temp isampler1D)
 0:71              'g_tTex1di4' (uniform itexture1D)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -381,7 +381,7 @@ gl_FragCoord origin is upper left
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of uint)
 0:72          'txval12' (temp 4-component vector of uint)
-0:72          texture (global 4-component vector of uint)
+0:72          texture (temp 4-component vector of uint)
 0:72            Construct combined texture-sampler (temp usampler1D)
 0:72              'g_tTex1du4' (uniform utexture1D)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -390,7 +390,7 @@ gl_FragCoord origin is upper left
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of float)
 0:74          'txval20' (temp 4-component vector of float)
-0:74          texture (global 4-component vector of float)
+0:74          texture (temp 4-component vector of float)
 0:74            Construct combined texture-sampler (temp sampler2D)
 0:74              'g_tTex2df4' (uniform texture2D)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -400,7 +400,7 @@ gl_FragCoord origin is upper left
 0:75      Sequence
 0:75        move second child to first child (temp 4-component vector of int)
 0:75          'txval21' (temp 4-component vector of int)
-0:75          texture (global 4-component vector of int)
+0:75          texture (temp 4-component vector of int)
 0:75            Construct combined texture-sampler (temp isampler2D)
 0:75              'g_tTex2di4' (uniform itexture2D)
 0:75              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -410,7 +410,7 @@ gl_FragCoord origin is upper left
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of uint)
 0:76          'txval22' (temp 4-component vector of uint)
-0:76          texture (global 4-component vector of uint)
+0:76          texture (temp 4-component vector of uint)
 0:76            Construct combined texture-sampler (temp usampler2D)
 0:76              'g_tTex2du4' (uniform utexture2D)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -420,7 +420,7 @@ gl_FragCoord origin is upper left
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval30' (temp 4-component vector of float)
-0:78          texture (global 4-component vector of float)
+0:78          texture (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler3D)
 0:78              'g_tTex3df4' (uniform texture3D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -431,7 +431,7 @@ gl_FragCoord origin is upper left
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval31' (temp 4-component vector of int)
-0:79          texture (global 4-component vector of int)
+0:79          texture (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler3D)
 0:79              'g_tTex3di4' (uniform itexture3D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -442,7 +442,7 @@ gl_FragCoord origin is upper left
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval32' (temp 4-component vector of uint)
-0:80          texture (global 4-component vector of uint)
+0:80          texture (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler3D)
 0:80              'g_tTex3du4' (uniform utexture3D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -453,7 +453,7 @@ gl_FragCoord origin is upper left
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval40' (temp 4-component vector of float)
-0:82          texture (global 4-component vector of float)
+0:82          texture (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp samplerCube)
 0:82              'g_tTexcdf4' (uniform textureCube)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -464,7 +464,7 @@ gl_FragCoord origin is upper left
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval41' (temp 4-component vector of int)
-0:83          texture (global 4-component vector of int)
+0:83          texture (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isamplerCube)
 0:83              'g_tTexcdi4' (uniform itextureCube)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -475,7 +475,7 @@ gl_FragCoord origin is upper left
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval42' (temp 4-component vector of uint)
-0:84          texture (global 4-component vector of uint)
+0:84          texture (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usamplerCube)
 0:84              'g_tTexcdu4' (uniform utextureCube)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -500,8 +500,8 @@ gl_FragCoord origin is upper left
 0:87            1 (const int)
 0:87        Constant:
 0:87          1.000000
-0:?       Sequence
-0:?         Sequence
+0:89      Sequence
+0:89        Sequence
 0:89          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:89            Color: direct index for structure (temp 4-component vector of float)
@@ -516,6 +516,8 @@ gl_FragCoord origin is upper left
 0:89                1 (const int)
 0:89        Branch: Return
 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_sSamp2D_b' (uniform sampler)
@@ -532,8 +534,6 @@ 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
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index b8c7d5ccc0430eb27545a6c915bef1fd7735b2c8..a148a86ed75d4afbb75161cfb57561b67b839e5b 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.sample.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureOffset (global 4-component vector of float)
+0:31          textureOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -19,7 +19,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureOffset (global 4-component vector of int)
+0:32          textureOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -30,7 +30,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureOffset (global 4-component vector of uint)
+0:33          textureOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureOffset (global 4-component vector of float)
+0:35          textureOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -54,7 +54,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureOffset (global 4-component vector of int)
+0:36          textureOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -67,7 +67,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureOffset (global 4-component vector of uint)
+0:37          textureOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -80,7 +80,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureOffset (global 4-component vector of float)
+0:39          textureOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureOffset (global 4-component vector of int)
+0:40          textureOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -110,7 +110,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureOffset (global 4-component vector of uint)
+0:41          textureOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -139,8 +139,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -155,6 +155,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -169,8 +171,6 @@ 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:
@@ -179,13 +179,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureOffset (global 4-component vector of float)
+0:31          textureOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -196,7 +196,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureOffset (global 4-component vector of int)
+0:32          textureOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -207,7 +207,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureOffset (global 4-component vector of uint)
+0:33          textureOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -218,7 +218,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureOffset (global 4-component vector of float)
+0:35          textureOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -231,7 +231,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureOffset (global 4-component vector of int)
+0:36          textureOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureOffset (global 4-component vector of uint)
+0:37          textureOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -257,7 +257,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureOffset (global 4-component vector of float)
+0:39          textureOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -272,7 +272,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureOffset (global 4-component vector of int)
+0:40          textureOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -287,7 +287,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureOffset (global 4-component vector of uint)
+0:41          textureOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -316,8 +316,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -332,6 +332,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -346,8 +348,6 @@ 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
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index b30a4e2d51267dd1a7958dbee703f3e0e51b84af..abdf03270f0c3896a340669d6ec450fc237f37a9 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.sample.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureOffset (global 4-component vector of float)
+0:23          textureOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -20,7 +20,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureOffset (global 4-component vector of int)
+0:24          textureOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -32,7 +32,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureOffset (global 4-component vector of uint)
+0:25          textureOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureOffset (global 4-component vector of float)
+0:27          textureOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -58,7 +58,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureOffset (global 4-component vector of int)
+0:28          textureOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureOffset (global 4-component vector of uint)
+0:29          textureOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -100,8 +100,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -116,6 +116,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -124,8 +126,6 @@ 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:
@@ -134,13 +134,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureOffset (global 4-component vector of float)
+0:23          textureOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -152,7 +152,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureOffset (global 4-component vector of int)
+0:24          textureOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -164,7 +164,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureOffset (global 4-component vector of uint)
+0:25          textureOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -176,7 +176,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureOffset (global 4-component vector of float)
+0:27          textureOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -190,7 +190,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureOffset (global 4-component vector of int)
+0:28          textureOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -204,7 +204,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureOffset (global 4-component vector of uint)
+0:29          textureOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -232,8 +232,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -248,6 +248,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -256,8 +258,6 @@ 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
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..bfbad5c2078d9a0946fcac1d67589648037b5404
--- /dev/null
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -0,0 +1,252 @@
+hlsl.sample.sub-vec4.dx10.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 Parameters: 
+0:?     Sequence
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'txval10' (temp float)
+0:17          Construct float (temp float)
+0:?             texture (temp 4-component vector of float)
+0:17              Construct combined texture-sampler (temp sampler1D)
+0:17                'g_tTex1df1' (uniform texture1D)
+0:17                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:17              Constant:
+0:17                0.100000
+0:18      Sequence
+0:18        move second child to first child (temp 2-component vector of float)
+0:18          'txval11' (temp 2-component vector of float)
+0:18          Construct vec2 (temp 2-component vector of float)
+0:?             texture (temp 4-component vector of float)
+0:18              Construct combined texture-sampler (temp sampler1D)
+0:18                'g_tTex1df2' (uniform texture1D)
+0:18                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:18              Constant:
+0:18                0.200000
+0:19      Sequence
+0:19        move second child to first child (temp 3-component vector of float)
+0:19          'txval12' (temp 3-component vector of float)
+0:19          Construct vec3 (temp 3-component vector of float)
+0:?             texture (temp 4-component vector of float)
+0:19              Construct combined texture-sampler (temp sampler1D)
+0:19                'g_tTex1df3' (uniform texture1D)
+0:19                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:19              Constant:
+0:19                0.200000
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:20          'txval13' (temp 4-component vector of float)
+0:20          texture (temp 4-component vector of float)
+0:20            Construct combined texture-sampler (temp sampler1D)
+0:20              'g_tTex1df4' (uniform texture1D)
+0:20              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:20            Constant:
+0:20              0.200000
+0:22      move second child to first child (temp 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})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Constant:
+0:22          1.000000
+0:22          1.000000
+0:22          1.000000
+0:22          1.000000
+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:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df1' (uniform texture1D)
+0:?     'g_tTex1df2' (uniform texture1D)
+0:?     'g_tTex1df3' (uniform texture1D)
+0:?     'g_tTex1df4' (uniform texture1D)
+
+
+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 Parameters: 
+0:?     Sequence
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'txval10' (temp float)
+0:17          Construct float (temp float)
+0:?             texture (temp 4-component vector of float)
+0:17              Construct combined texture-sampler (temp sampler1D)
+0:17                'g_tTex1df1' (uniform texture1D)
+0:17                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:17              Constant:
+0:17                0.100000
+0:18      Sequence
+0:18        move second child to first child (temp 2-component vector of float)
+0:18          'txval11' (temp 2-component vector of float)
+0:18          Construct vec2 (temp 2-component vector of float)
+0:?             texture (temp 4-component vector of float)
+0:18              Construct combined texture-sampler (temp sampler1D)
+0:18                'g_tTex1df2' (uniform texture1D)
+0:18                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:18              Constant:
+0:18                0.200000
+0:19      Sequence
+0:19        move second child to first child (temp 3-component vector of float)
+0:19          'txval12' (temp 3-component vector of float)
+0:19          Construct vec3 (temp 3-component vector of float)
+0:?             texture (temp 4-component vector of float)
+0:19              Construct combined texture-sampler (temp sampler1D)
+0:19                'g_tTex1df3' (uniform texture1D)
+0:19                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:19              Constant:
+0:19                0.200000
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of float)
+0:20          'txval13' (temp 4-component vector of float)
+0:20          texture (temp 4-component vector of float)
+0:20            Construct combined texture-sampler (temp sampler1D)
+0:20              'g_tTex1df4' (uniform texture1D)
+0:20              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:20            Constant:
+0:20              0.200000
+0:22      move second child to first child (temp 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})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Constant:
+0:22          1.000000
+0:22          1.000000
+0:22          1.000000
+0:22          1.000000
+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:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df1' (uniform texture1D)
+0:?     'g_tTex1df2' (uniform texture1D)
+0:?     'g_tTex1df3' (uniform texture1D)
+0:?     'g_tTex1df4' (uniform texture1D)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 67
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 63
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "txval10"
+                              Name 11  "g_tTex1df1"
+                              Name 15  "g_sSamp"
+                              Name 25  "txval11"
+                              Name 26  "g_tTex1df2"
+                              Name 37  "txval12"
+                              Name 38  "g_tTex1df3"
+                              Name 48  "txval13"
+                              Name 49  "g_tTex1df4"
+                              Name 54  "PS_OUTPUT"
+                              MemberName 54(PS_OUTPUT) 0  "Color"
+                              Name 56  "psout"
+                              Name 63  "Color"
+                              Decorate 11(g_tTex1df1) DescriptorSet 0
+                              Decorate 15(g_sSamp) DescriptorSet 0
+                              Decorate 15(g_sSamp) Binding 0
+                              Decorate 26(g_tTex1df2) DescriptorSet 0
+                              Decorate 38(g_tTex1df3) DescriptorSet 0
+                              Decorate 49(g_tTex1df4) DescriptorSet 0
+                              Decorate 63(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+  11(g_tTex1df1):     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) 4
+              23:             TypeVector 6(float) 2
+              24:             TypePointer Function 23(fvec2)
+  26(g_tTex1df2):     10(ptr) Variable UniformConstant
+              30:    6(float) Constant 1045220557
+              35:             TypeVector 6(float) 3
+              36:             TypePointer Function 35(fvec3)
+  38(g_tTex1df3):     10(ptr) Variable UniformConstant
+              47:             TypePointer Function 20(fvec4)
+  49(g_tTex1df4):     10(ptr) Variable UniformConstant
+   54(PS_OUTPUT):             TypeStruct 20(fvec4)
+              55:             TypePointer Function 54(PS_OUTPUT)
+              57:             TypeInt 32 1
+              58:     57(int) Constant 0
+              59:    6(float) Constant 1065353216
+              60:   20(fvec4) ConstantComposite 59 59 59 59
+              62:             TypePointer Output 20(fvec4)
+       63(Color):     62(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+      8(txval10):      7(ptr) Variable Function
+     25(txval11):     24(ptr) Variable Function
+     37(txval12):     36(ptr) Variable Function
+     48(txval13):     47(ptr) Variable Function
+       56(psout):     55(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df1)
+              16:          13 Load 15(g_sSamp)
+              18:          17 SampledImage 12 16
+              21:   20(fvec4) ImageSampleImplicitLod 18 19
+              22:    6(float) CompositeExtract 21 0
+                              Store 8(txval10) 22
+              27:           9 Load 26(g_tTex1df2)
+              28:          13 Load 15(g_sSamp)
+              29:          17 SampledImage 27 28
+              31:   20(fvec4) ImageSampleImplicitLod 29 30
+              32:    6(float) CompositeExtract 31 0
+              33:    6(float) CompositeExtract 31 1
+              34:   23(fvec2) CompositeConstruct 32 33
+                              Store 25(txval11) 34
+              39:           9 Load 38(g_tTex1df3)
+              40:          13 Load 15(g_sSamp)
+              41:          17 SampledImage 39 40
+              42:   20(fvec4) ImageSampleImplicitLod 41 30
+              43:    6(float) CompositeExtract 42 0
+              44:    6(float) CompositeExtract 42 1
+              45:    6(float) CompositeExtract 42 2
+              46:   35(fvec3) CompositeConstruct 43 44 45
+                              Store 37(txval12) 46
+              50:           9 Load 49(g_tTex1df4)
+              51:          13 Load 15(g_sSamp)
+              52:          17 SampledImage 50 51
+              53:   20(fvec4) ImageSampleImplicitLod 52 30
+                              Store 48(txval13) 53
+              61:     47(ptr) AccessChain 56(psout) 58
+                              Store 61 60
+              64:     47(ptr) AccessChain 56(psout) 58
+              65:   20(fvec4) Load 64
+                              Store 63(Color) 65
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index 66f4629a00683b1b4da3cd9d552744f032a9f6cd..05ac32a507bb85f943cdcda196c1be067ae7b989 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplebias.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          texture (global 4-component vector of float)
+0:27          texture (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -20,7 +20,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          texture (global 4-component vector of int)
+0:28          texture (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -32,7 +32,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          texture (global 4-component vector of uint)
+0:29          texture (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -57,7 +57,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -70,7 +70,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -83,7 +83,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -97,7 +97,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -111,7 +111,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -139,8 +139,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -155,6 +155,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -166,8 +168,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -176,13 +176,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          texture (global 4-component vector of float)
+0:27          texture (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -194,7 +194,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          texture (global 4-component vector of int)
+0:28          texture (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -206,7 +206,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          texture (global 4-component vector of uint)
+0:29          texture (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -218,7 +218,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -231,7 +231,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -257,7 +257,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -271,7 +271,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -285,7 +285,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -313,8 +313,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -329,6 +329,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -340,8 +342,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (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
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index faba4bef2c9b55af14ae36bd6868bb01b98ddc85..1442fc3c78310606a3b957ba4ea10dd1a19fbcca 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplebias.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -19,7 +19,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -30,7 +30,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -53,7 +53,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          texture (global 4-component vector of float)
+0:39          texture (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -90,7 +90,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          texture (global 4-component vector of int)
+0:40          texture (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -103,7 +103,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          texture (global 4-component vector of uint)
+0:41          texture (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -116,7 +116,7 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval40' (temp 4-component vector of float)
-0:43          texture (global 4-component vector of float)
+0:43          texture (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -129,7 +129,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval41' (temp 4-component vector of int)
-0:44          texture (global 4-component vector of int)
+0:44          texture (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -142,7 +142,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval42' (temp 4-component vector of uint)
-0:45          texture (global 4-component vector of uint)
+0:45          texture (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -169,8 +169,8 @@ gl_FragCoord origin is upper left
 0:48            1 (const int)
 0:48        Constant:
 0:48          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -185,6 +185,8 @@ gl_FragCoord origin is upper left
 0:50                1 (const int)
 0:50        Branch: Return
 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)
@@ -199,8 +201,6 @@ 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:
@@ -209,13 +209,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          texture (global 4-component vector of float)
+0:31          texture (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -226,7 +226,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          texture (global 4-component vector of int)
+0:32          texture (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -237,7 +237,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          texture (global 4-component vector of uint)
+0:33          texture (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -248,7 +248,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          texture (global 4-component vector of float)
+0:35          texture (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -260,7 +260,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          texture (global 4-component vector of int)
+0:36          texture (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -272,7 +272,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          texture (global 4-component vector of uint)
+0:37          texture (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -284,7 +284,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          texture (global 4-component vector of float)
+0:39          texture (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -297,7 +297,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          texture (global 4-component vector of int)
+0:40          texture (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -310,7 +310,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          texture (global 4-component vector of uint)
+0:41          texture (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -323,7 +323,7 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval40' (temp 4-component vector of float)
-0:43          texture (global 4-component vector of float)
+0:43          texture (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -336,7 +336,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval41' (temp 4-component vector of int)
-0:44          texture (global 4-component vector of int)
+0:44          texture (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -349,7 +349,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval42' (temp 4-component vector of uint)
-0:45          texture (global 4-component vector of uint)
+0:45          texture (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -376,8 +376,8 @@ gl_FragCoord origin is upper left
 0:48            1 (const int)
 0:48        Constant:
 0:48          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -392,6 +392,8 @@ gl_FragCoord origin is upper left
 0:50                1 (const int)
 0:50        Branch: Return
 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)
@@ -406,8 +408,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index e83058b07c76e720699a51ab212ad8568744fcc9..01facb65d7ffaceb9dd8c7ba886c6d3261f5314d 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplebias.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureOffset (global 4-component vector of float)
+0:31          textureOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureOffset (global 4-component vector of int)
+0:32          textureOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureOffset (global 4-component vector of uint)
+0:33          textureOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -47,7 +47,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureOffset (global 4-component vector of float)
+0:35          textureOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -62,7 +62,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureOffset (global 4-component vector of int)
+0:36          textureOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureOffset (global 4-component vector of uint)
+0:37          textureOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -92,7 +92,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureOffset (global 4-component vector of float)
+0:39          textureOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -109,7 +109,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureOffset (global 4-component vector of int)
+0:40          textureOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -126,7 +126,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureOffset (global 4-component vector of uint)
+0:41          textureOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -157,8 +157,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -173,6 +173,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -187,8 +189,6 @@ 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:
@@ -197,13 +197,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureOffset (global 4-component vector of float)
+0:31          textureOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -216,7 +216,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureOffset (global 4-component vector of int)
+0:32          textureOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -229,7 +229,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureOffset (global 4-component vector of uint)
+0:33          textureOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -242,7 +242,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureOffset (global 4-component vector of float)
+0:35          textureOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -257,7 +257,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureOffset (global 4-component vector of int)
+0:36          textureOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -272,7 +272,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureOffset (global 4-component vector of uint)
+0:37          textureOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -287,7 +287,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureOffset (global 4-component vector of float)
+0:39          textureOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -304,7 +304,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureOffset (global 4-component vector of int)
+0:40          textureOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -321,7 +321,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureOffset (global 4-component vector of uint)
+0:41          textureOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -352,8 +352,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -368,6 +368,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -382,8 +384,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index a9e44041ad58559c5b163b0630cb705f83d4c1ad..17aef7aec89dbf4e15c0fe9491609c6c9e3d226c 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplebias.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureOffset (global 4-component vector of float)
+0:23          textureOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureOffset (global 4-component vector of int)
+0:24          textureOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureOffset (global 4-component vector of uint)
+0:25          textureOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureOffset (global 4-component vector of float)
+0:27          textureOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -66,7 +66,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureOffset (global 4-component vector of int)
+0:28          textureOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -82,7 +82,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureOffset (global 4-component vector of uint)
+0:29          textureOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -128,6 +128,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -136,8 +138,6 @@ 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:
@@ -146,13 +146,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureOffset (global 4-component vector of float)
+0:23          textureOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -166,7 +166,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureOffset (global 4-component vector of int)
+0:24          textureOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -180,7 +180,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureOffset (global 4-component vector of uint)
+0:25          textureOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -194,7 +194,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureOffset (global 4-component vector of float)
+0:27          textureOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -210,7 +210,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureOffset (global 4-component vector of int)
+0:28          textureOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -226,7 +226,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureOffset (global 4-component vector of uint)
+0:29          textureOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -256,8 +256,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -272,6 +272,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -280,8 +282,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 660db5b25ed4f1a0468e6b291b18700572bf9555..c4f5d11c8c5bb495befa136b4f48d55f7369cae9 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmp.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -21,11 +21,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -34,11 +34,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -47,11 +47,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -61,11 +61,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -75,11 +75,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -89,11 +89,11 @@ gl_FragCoord origin is upper left
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          texture (global float)
+0:52          texture (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -104,11 +104,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -119,11 +119,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -148,8 +148,8 @@ gl_FragCoord origin is upper left
 0:57            1 (const int)
 0:57        Constant:
 0:57          1.000000
-0:?       Sequence
-0:?         Sequence
+0:59      Sequence
+0:59        Sequence
 0:59          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:59            Color: direct index for structure (temp 4-component vector of float)
@@ -164,6 +164,8 @@ gl_FragCoord origin is upper left
 0:59                1 (const int)
 0:59        Branch: Return
 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)
@@ -186,8 +188,6 @@ 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:
@@ -196,17 +196,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -215,11 +215,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -228,11 +228,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -241,11 +241,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -255,11 +255,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -269,11 +269,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -283,11 +283,11 @@ gl_FragCoord origin is upper left
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          texture (global float)
+0:52          texture (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -298,11 +298,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -313,11 +313,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -342,8 +342,8 @@ gl_FragCoord origin is upper left
 0:57            1 (const int)
 0:57        Constant:
 0:57          1.000000
-0:?       Sequence
-0:?         Sequence
+0:59      Sequence
+0:59        Sequence
 0:59          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:59            Color: direct index for structure (temp 4-component vector of float)
@@ -358,6 +358,8 @@ gl_FragCoord origin is upper left
 0:59                1 (const int)
 0:59        Branch: Return
 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)
@@ -380,84 +382,82 @@ 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 184
+// Id's are bound by 211
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 140 144
+                              EntryPoint Fragment 4  "main" 167 171
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r10"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 28  "r12"
-                              Name 32  "g_tTex1di4a"
-                              Name 41  "r14"
-                              Name 45  "g_tTex1du4a"
-                              Name 54  "r30"
-                              Name 57  "g_tTex2df4a"
-                              Name 69  "r32"
-                              Name 72  "g_tTex2di4a"
-                              Name 81  "r34"
-                              Name 84  "g_tTex2du4a"
-                              Name 93  "r60"
-                              Name 96  "g_tTexcdf4a"
-                              Name 107  "r62"
-                              Name 110  "g_tTexcdi4a"
-                              Name 118  "r64"
-                              Name 121  "g_tTexcdu4a"
-                              Name 129  "PS_OUTPUT"
-                              MemberName 129(PS_OUTPUT) 0  "Color"
-                              MemberName 129(PS_OUTPUT) 1  "Depth"
-                              Name 131  "psout"
-                              Name 140  "Color"
-                              Name 144  "Depth"
-                              Name 150  "g_tTex1df4"
-                              Name 153  "g_tTex1di4"
-                              Name 156  "g_tTex1du4"
-                              Name 159  "g_tTex2df4"
-                              Name 162  "g_tTex2di4"
-                              Name 165  "g_tTex2du4"
-                              Name 168  "g_tTex3df4"
-                              Name 171  "g_tTex3di4"
-                              Name 174  "g_tTex3du4"
-                              Name 177  "g_tTexcdf4"
-                              Name 180  "g_tTexcdi4"
-                              Name 183  "g_tTexcdu4"
+                              Name 31  "r12"
+                              Name 35  "g_tTex1di4a"
+                              Name 46  "r14"
+                              Name 50  "g_tTex1du4a"
+                              Name 61  "r30"
+                              Name 64  "g_tTex2df4a"
+                              Name 79  "r32"
+                              Name 82  "g_tTex2di4a"
+                              Name 94  "r34"
+                              Name 97  "g_tTex2du4a"
+                              Name 109  "r60"
+                              Name 112  "g_tTexcdf4a"
+                              Name 126  "r62"
+                              Name 129  "g_tTexcdi4a"
+                              Name 141  "r64"
+                              Name 144  "g_tTexcdu4a"
+                              Name 156  "PS_OUTPUT"
+                              MemberName 156(PS_OUTPUT) 0  "Color"
+                              MemberName 156(PS_OUTPUT) 1  "Depth"
+                              Name 158  "psout"
+                              Name 167  "Color"
+                              Name 171  "Depth"
+                              Name 177  "g_tTex1df4"
+                              Name 180  "g_tTex1di4"
+                              Name 183  "g_tTex1du4"
+                              Name 186  "g_tTex2df4"
+                              Name 189  "g_tTex2di4"
+                              Name 192  "g_tTex2du4"
+                              Name 195  "g_tTex3df4"
+                              Name 198  "g_tTex3di4"
+                              Name 201  "g_tTex3du4"
+                              Name 204  "g_tTexcdf4"
+                              Name 207  "g_tTexcdi4"
+                              Name 210  "g_tTexcdu4"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 32(g_tTex1di4a) DescriptorSet 0
-                              Decorate 45(g_tTex1du4a) DescriptorSet 0
-                              Decorate 57(g_tTex2df4a) DescriptorSet 0
-                              Decorate 72(g_tTex2di4a) DescriptorSet 0
-                              Decorate 84(g_tTex2du4a) DescriptorSet 0
-                              Decorate 96(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 110(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 121(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 140(Color) Location 0
-                              Decorate 144(Depth) BuiltIn FragDepth
-                              Decorate 150(g_tTex1df4) DescriptorSet 0
-                              Decorate 150(g_tTex1df4) Binding 0
-                              Decorate 153(g_tTex1di4) DescriptorSet 0
-                              Decorate 156(g_tTex1du4) DescriptorSet 0
-                              Decorate 159(g_tTex2df4) DescriptorSet 0
-                              Decorate 162(g_tTex2di4) DescriptorSet 0
-                              Decorate 165(g_tTex2du4) DescriptorSet 0
-                              Decorate 168(g_tTex3df4) DescriptorSet 0
-                              Decorate 171(g_tTex3di4) DescriptorSet 0
-                              Decorate 174(g_tTex3du4) DescriptorSet 0
-                              Decorate 177(g_tTexcdf4) DescriptorSet 0
-                              Decorate 180(g_tTexcdi4) DescriptorSet 0
-                              Decorate 183(g_tTexcdu4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4a) DescriptorSet 0
+                              Decorate 50(g_tTex1du4a) DescriptorSet 0
+                              Decorate 64(g_tTex2df4a) DescriptorSet 0
+                              Decorate 82(g_tTex2di4a) DescriptorSet 0
+                              Decorate 97(g_tTex2du4a) DescriptorSet 0
+                              Decorate 112(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 129(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 144(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 167(Color) Location 0
+                              Decorate 171(Depth) BuiltIn FragDepth
+                              Decorate 177(g_tTex1df4) DescriptorSet 0
+                              Decorate 177(g_tTex1df4) Binding 0
+                              Decorate 180(g_tTex1di4) DescriptorSet 0
+                              Decorate 183(g_tTex1du4) DescriptorSet 0
+                              Decorate 186(g_tTex2df4) DescriptorSet 0
+                              Decorate 189(g_tTex2di4) DescriptorSet 0
+                              Decorate 192(g_tTex2du4) DescriptorSet 0
+                              Decorate 195(g_tTex3df4) DescriptorSet 0
+                              Decorate 198(g_tTex3di4) DescriptorSet 0
+                              Decorate 201(g_tTex3du4) DescriptorSet 0
+                              Decorate 204(g_tTexcdf4) DescriptorSet 0
+                              Decorate 207(g_tTexcdi4) DescriptorSet 0
+                              Decorate 210(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -475,182 +475,209 @@ gl_FragCoord origin is upper left
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              29:             TypeInt 32 1
-              30:             TypeImage 29(int) 1D array sampled format:Unknown
-              31:             TypePointer UniformConstant 30
- 32(g_tTex1di4a):     31(ptr) Variable UniformConstant
-              35:             TypeImage 29(int) 1D depth array sampled format:Unknown
-              36:             TypeSampledImage 35
-              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:             TypeImage 42(int) 1D depth array sampled format:Unknown
-              49:             TypeSampledImage 48
-              55:             TypeImage 6(float) 2D array sampled format:Unknown
-              56:             TypePointer UniformConstant 55
- 57(g_tTex2df4a):     56(ptr) Variable UniformConstant
-              60:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              61:             TypeSampledImage 60
-              63:             TypeVector 6(float) 3
-              64:    6(float) Constant 1050253722
-              65:   63(fvec3) ConstantComposite 21 22 64
-              70:             TypeImage 29(int) 2D array sampled format:Unknown
-              71:             TypePointer UniformConstant 70
- 72(g_tTex2di4a):     71(ptr) Variable UniformConstant
-              75:             TypeImage 29(int) 2D depth array sampled format:Unknown
-              76:             TypeSampledImage 75
-              82:             TypeImage 42(int) 2D array sampled format:Unknown
-              83:             TypePointer UniformConstant 82
- 84(g_tTex2du4a):     83(ptr) Variable UniformConstant
-              87:             TypeImage 42(int) 2D depth array sampled format:Unknown
-              88:             TypeSampledImage 87
-              94:             TypeImage 6(float) Cube array sampled format:Unknown
-              95:             TypePointer UniformConstant 94
- 96(g_tTexcdf4a):     95(ptr) Variable UniformConstant
-              99:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             100:             TypeSampledImage 99
-             102:             TypeVector 6(float) 4
-             103:    6(float) Constant 1053609165
-             104:  102(fvec4) ConstantComposite 21 22 64 103
-             108:             TypeImage 29(int) Cube array sampled format:Unknown
-             109:             TypePointer UniformConstant 108
-110(g_tTexcdi4a):    109(ptr) Variable UniformConstant
-             113:             TypeImage 29(int) Cube depth array sampled format:Unknown
-             114:             TypeSampledImage 113
-             119:             TypeImage 42(int) Cube array sampled format:Unknown
-             120:             TypePointer UniformConstant 119
-121(g_tTexcdu4a):    120(ptr) Variable UniformConstant
-             124:             TypeImage 42(int) Cube depth array sampled format:Unknown
-             125:             TypeSampledImage 124
-  129(PS_OUTPUT):             TypeStruct 102(fvec4) 6(float)
-             130:             TypePointer Function 129(PS_OUTPUT)
-             132:     29(int) Constant 0
-             133:    6(float) Constant 1065353216
-             134:  102(fvec4) ConstantComposite 133 133 133 133
-             135:             TypePointer Function 102(fvec4)
-             137:     29(int) Constant 1
-             139:             TypePointer Output 102(fvec4)
-      140(Color):    139(ptr) Variable Output
-             143:             TypePointer Output 6(float)
-      144(Depth):    143(ptr) Variable Output
-             148:             TypeImage 6(float) 1D sampled format:Unknown
-             149:             TypePointer UniformConstant 148
- 150(g_tTex1df4):    149(ptr) Variable UniformConstant
-             151:             TypeImage 29(int) 1D sampled format:Unknown
-             152:             TypePointer UniformConstant 151
- 153(g_tTex1di4):    152(ptr) Variable UniformConstant
-             154:             TypeImage 42(int) 1D sampled format:Unknown
-             155:             TypePointer UniformConstant 154
- 156(g_tTex1du4):    155(ptr) Variable UniformConstant
-             157:             TypeImage 6(float) 2D sampled format:Unknown
-             158:             TypePointer UniformConstant 157
- 159(g_tTex2df4):    158(ptr) Variable UniformConstant
-             160:             TypeImage 29(int) 2D sampled format:Unknown
-             161:             TypePointer UniformConstant 160
- 162(g_tTex2di4):    161(ptr) Variable UniformConstant
-             163:             TypeImage 42(int) 2D sampled format:Unknown
-             164:             TypePointer UniformConstant 163
- 165(g_tTex2du4):    164(ptr) Variable UniformConstant
-             166:             TypeImage 6(float) 3D sampled format:Unknown
-             167:             TypePointer UniformConstant 166
- 168(g_tTex3df4):    167(ptr) Variable UniformConstant
-             169:             TypeImage 29(int) 3D sampled format:Unknown
-             170:             TypePointer UniformConstant 169
- 171(g_tTex3di4):    170(ptr) Variable UniformConstant
-             172:             TypeImage 42(int) 3D sampled format:Unknown
-             173:             TypePointer UniformConstant 172
- 174(g_tTex3du4):    173(ptr) Variable UniformConstant
-             175:             TypeImage 6(float) Cube sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              32:             TypeInt 32 1
+              33:             TypeImage 32(int) 1D array sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+ 35(g_tTex1di4a):     34(ptr) Variable UniformConstant
+              38:             TypeImage 32(int) 1D depth array sampled format:Unknown
+              39:             TypeSampledImage 38
+              47:             TypeInt 32 0
+              48:             TypeImage 47(int) 1D array sampled format:Unknown
+              49:             TypePointer UniformConstant 48
+ 50(g_tTex1du4a):     49(ptr) Variable UniformConstant
+              53:             TypeImage 47(int) 1D depth array sampled format:Unknown
+              54:             TypeSampledImage 53
+              62:             TypeImage 6(float) 2D array sampled format:Unknown
+              63:             TypePointer UniformConstant 62
+ 64(g_tTex2df4a):     63(ptr) Variable UniformConstant
+              67:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              68:             TypeSampledImage 67
+              70:    6(float) Constant 1050253722
+              71:   25(fvec3) ConstantComposite 21 22 70
+              72:             TypeVector 6(float) 4
+              80:             TypeImage 32(int) 2D array sampled format:Unknown
+              81:             TypePointer UniformConstant 80
+ 82(g_tTex2di4a):     81(ptr) Variable UniformConstant
+              85:             TypeImage 32(int) 2D depth array sampled format:Unknown
+              86:             TypeSampledImage 85
+              95:             TypeImage 47(int) 2D array sampled format:Unknown
+              96:             TypePointer UniformConstant 95
+ 97(g_tTex2du4a):     96(ptr) Variable UniformConstant
+             100:             TypeImage 47(int) 2D depth array sampled format:Unknown
+             101:             TypeSampledImage 100
+             110:             TypeImage 6(float) Cube array sampled format:Unknown
+             111:             TypePointer UniformConstant 110
+112(g_tTexcdf4a):    111(ptr) Variable UniformConstant
+             115:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             116:             TypeSampledImage 115
+             118:    6(float) Constant 1053609165
+             119:   72(fvec4) ConstantComposite 21 22 70 118
+             127:             TypeImage 32(int) Cube array sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+129(g_tTexcdi4a):    128(ptr) Variable UniformConstant
+             132:             TypeImage 32(int) Cube depth array sampled format:Unknown
+             133:             TypeSampledImage 132
+             142:             TypeImage 47(int) Cube array sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+144(g_tTexcdu4a):    143(ptr) Variable UniformConstant
+             147:             TypeImage 47(int) Cube depth array sampled format:Unknown
+             148:             TypeSampledImage 147
+  156(PS_OUTPUT):             TypeStruct 72(fvec4) 6(float)
+             157:             TypePointer Function 156(PS_OUTPUT)
+             159:     32(int) Constant 0
+             160:    6(float) Constant 1065353216
+             161:   72(fvec4) ConstantComposite 160 160 160 160
+             162:             TypePointer Function 72(fvec4)
+             164:     32(int) Constant 1
+             166:             TypePointer Output 72(fvec4)
+      167(Color):    166(ptr) Variable Output
+             170:             TypePointer Output 6(float)
+      171(Depth):    170(ptr) Variable Output
+             175:             TypeImage 6(float) 1D sampled format:Unknown
              176:             TypePointer UniformConstant 175
- 177(g_tTexcdf4):    176(ptr) Variable UniformConstant
-             178:             TypeImage 29(int) Cube sampled format:Unknown
+ 177(g_tTex1df4):    176(ptr) Variable UniformConstant
+             178:             TypeImage 32(int) 1D sampled format:Unknown
              179:             TypePointer UniformConstant 178
- 180(g_tTexcdi4):    179(ptr) Variable UniformConstant
-             181:             TypeImage 42(int) Cube sampled format:Unknown
+ 180(g_tTex1di4):    179(ptr) Variable UniformConstant
+             181:             TypeImage 47(int) 1D sampled format:Unknown
              182:             TypePointer UniformConstant 181
- 183(g_tTexcdu4):    182(ptr) Variable UniformConstant
+ 183(g_tTex1du4):    182(ptr) Variable UniformConstant
+             184:             TypeImage 6(float) 2D sampled format:Unknown
+             185:             TypePointer UniformConstant 184
+ 186(g_tTex2df4):    185(ptr) Variable UniformConstant
+             187:             TypeImage 32(int) 2D sampled format:Unknown
+             188:             TypePointer UniformConstant 187
+ 189(g_tTex2di4):    188(ptr) Variable UniformConstant
+             190:             TypeImage 47(int) 2D sampled format:Unknown
+             191:             TypePointer UniformConstant 190
+ 192(g_tTex2du4):    191(ptr) Variable UniformConstant
+             193:             TypeImage 6(float) 3D sampled format:Unknown
+             194:             TypePointer UniformConstant 193
+ 195(g_tTex3df4):    194(ptr) Variable UniformConstant
+             196:             TypeImage 32(int) 3D sampled format:Unknown
+             197:             TypePointer UniformConstant 196
+ 198(g_tTex3di4):    197(ptr) Variable UniformConstant
+             199:             TypeImage 47(int) 3D sampled format:Unknown
+             200:             TypePointer UniformConstant 199
+ 201(g_tTex3du4):    200(ptr) Variable UniformConstant
+             202:             TypeImage 6(float) Cube sampled format:Unknown
+             203:             TypePointer UniformConstant 202
+ 204(g_tTexcdf4):    203(ptr) Variable UniformConstant
+             205:             TypeImage 32(int) Cube sampled format:Unknown
+             206:             TypePointer UniformConstant 205
+ 207(g_tTexcdi4):    206(ptr) Variable UniformConstant
+             208:             TypeImage 47(int) Cube sampled format:Unknown
+             209:             TypePointer UniformConstant 208
+ 210(g_tTexcdu4):    209(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r10):      7(ptr) Variable Function
-         28(r12):      7(ptr) Variable Function
-         41(r14):      7(ptr) Variable Function
-         54(r30):      7(ptr) Variable Function
-         69(r32):      7(ptr) Variable Function
-         81(r34):      7(ptr) Variable Function
-         93(r60):      7(ptr) Variable Function
-        107(r62):      7(ptr) Variable Function
-        118(r64):      7(ptr) Variable Function
-      131(psout):    130(ptr) Variable Function
+         31(r12):      7(ptr) Variable Function
+         46(r14):      7(ptr) Variable Function
+         61(r30):      7(ptr) Variable Function
+         79(r32):      7(ptr) Variable Function
+         94(r34):      7(ptr) Variable Function
+        109(r60):      7(ptr) Variable Function
+        126(r62):      7(ptr) Variable Function
+        141(r64):      7(ptr) Variable Function
+      158(psout):    157(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              26:    6(float) CompositeExtract 25 0
-              27:    6(float) ImageSampleDrefImplicitLod 19 25 26
-                              Store 8(r10) 27
-              33:          30 Load 32(g_tTex1di4a)
-              34:          13 Load 15(g_sSamp)
-              37:          36 SampledImage 33 34
-              38:    6(float) CompositeExtract 23 0
-              39:    6(float) CompositeExtract 38 0
-              40:    6(float) ImageSampleDrefImplicitLod 37 38 39
-                              Store 28(r12) 40
-              46:          43 Load 45(g_tTex1du4a)
-              47:          13 Load 15(g_sSamp)
-              50:          49 SampledImage 46 47
-              51:    6(float) CompositeExtract 23 0
-              52:    6(float) CompositeExtract 51 0
-              53:    6(float) ImageSampleDrefImplicitLod 50 51 52
-                              Store 41(r14) 53
-              58:          55 Load 57(g_tTex2df4a)
-              59:          13 Load 15(g_sSamp)
-              62:          61 SampledImage 58 59
-              66:    6(float) CompositeExtract 65 0
-              67:    6(float) CompositeExtract 66 0
-              68:    6(float) ImageSampleDrefImplicitLod 62 66 67
-                              Store 54(r30) 68
-              73:          70 Load 72(g_tTex2di4a)
-              74:          13 Load 15(g_sSamp)
-              77:          76 SampledImage 73 74
-              78:    6(float) CompositeExtract 65 0
-              79:    6(float) CompositeExtract 78 0
-              80:    6(float) ImageSampleDrefImplicitLod 77 78 79
-                              Store 69(r32) 80
-              85:          82 Load 84(g_tTex2du4a)
-              86:          13 Load 15(g_sSamp)
-              89:          88 SampledImage 85 86
-              90:    6(float) CompositeExtract 65 0
-              91:    6(float) CompositeExtract 90 0
-              92:    6(float) ImageSampleDrefImplicitLod 89 90 91
-                              Store 81(r34) 92
-              97:          94 Load 96(g_tTexcdf4a)
-              98:          13 Load 15(g_sSamp)
-             101:         100 SampledImage 97 98
-             105:    6(float) CompositeExtract 104 0
-             106:    6(float) ImageSampleDrefImplicitLod 101 105 24
-                              Store 93(r60) 106
-             111:         108 Load 110(g_tTexcdi4a)
-             112:          13 Load 15(g_sSamp)
-             115:         114 SampledImage 111 112
-             116:    6(float) CompositeExtract 104 0
-             117:    6(float) ImageSampleDrefImplicitLod 115 116 24
-                              Store 107(r62) 117
-             122:         119 Load 121(g_tTexcdu4a)
-             123:          13 Load 15(g_sSamp)
-             126:         125 SampledImage 122 123
-             127:    6(float) CompositeExtract 104 0
-             128:    6(float) ImageSampleDrefImplicitLod 126 127 24
-                              Store 118(r64) 128
-             136:    135(ptr) AccessChain 131(psout) 132
-                              Store 136 134
-             138:      7(ptr) AccessChain 131(psout) 137
-                              Store 138 133
-             141:    135(ptr) AccessChain 131(psout) 132
-             142:  102(fvec4) Load 141
-                              Store 140(Color) 142
-             145:      7(ptr) AccessChain 131(psout) 137
-             146:    6(float) Load 145
-                              Store 144(Depth) 146
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              29:    6(float) CompositeExtract 28 2
+              30:    6(float) ImageSampleDrefImplicitLod 19 28 29
+                              Store 8(r10) 30
+              36:          33 Load 35(g_tTex1di4a)
+              37:          13 Load 15(g_sSamp)
+              40:          39 SampledImage 36 37
+              41:    6(float) CompositeExtract 23 0
+              42:    6(float) CompositeExtract 23 1
+              43:   25(fvec3) CompositeConstruct 41 42 24
+              44:    6(float) CompositeExtract 43 2
+              45:    6(float) ImageSampleDrefImplicitLod 40 43 44
+                              Store 31(r12) 45
+              51:          48 Load 50(g_tTex1du4a)
+              52:          13 Load 15(g_sSamp)
+              55:          54 SampledImage 51 52
+              56:    6(float) CompositeExtract 23 0
+              57:    6(float) CompositeExtract 23 1
+              58:   25(fvec3) CompositeConstruct 56 57 24
+              59:    6(float) CompositeExtract 58 2
+              60:    6(float) ImageSampleDrefImplicitLod 55 58 59
+                              Store 46(r14) 60
+              65:          62 Load 64(g_tTex2df4a)
+              66:          13 Load 15(g_sSamp)
+              69:          68 SampledImage 65 66
+              73:    6(float) CompositeExtract 71 0
+              74:    6(float) CompositeExtract 71 1
+              75:    6(float) CompositeExtract 71 2
+              76:   72(fvec4) CompositeConstruct 73 74 75 24
+              77:    6(float) CompositeExtract 76 3
+              78:    6(float) ImageSampleDrefImplicitLod 69 76 77
+                              Store 61(r30) 78
+              83:          80 Load 82(g_tTex2di4a)
+              84:          13 Load 15(g_sSamp)
+              87:          86 SampledImage 83 84
+              88:    6(float) CompositeExtract 71 0
+              89:    6(float) CompositeExtract 71 1
+              90:    6(float) CompositeExtract 71 2
+              91:   72(fvec4) CompositeConstruct 88 89 90 24
+              92:    6(float) CompositeExtract 91 3
+              93:    6(float) ImageSampleDrefImplicitLod 87 91 92
+                              Store 79(r32) 93
+              98:          95 Load 97(g_tTex2du4a)
+              99:          13 Load 15(g_sSamp)
+             102:         101 SampledImage 98 99
+             103:    6(float) CompositeExtract 71 0
+             104:    6(float) CompositeExtract 71 1
+             105:    6(float) CompositeExtract 71 2
+             106:   72(fvec4) CompositeConstruct 103 104 105 24
+             107:    6(float) CompositeExtract 106 3
+             108:    6(float) ImageSampleDrefImplicitLod 102 106 107
+                              Store 94(r34) 108
+             113:         110 Load 112(g_tTexcdf4a)
+             114:          13 Load 15(g_sSamp)
+             117:         116 SampledImage 113 114
+             120:    6(float) CompositeExtract 119 0
+             121:    6(float) CompositeExtract 119 1
+             122:    6(float) CompositeExtract 119 2
+             123:    6(float) CompositeExtract 119 3
+             124:   72(fvec4) CompositeConstruct 120 121 122 123
+             125:    6(float) ImageSampleDrefImplicitLod 117 124 24
+                              Store 109(r60) 125
+             130:         127 Load 129(g_tTexcdi4a)
+             131:          13 Load 15(g_sSamp)
+             134:         133 SampledImage 130 131
+             135:    6(float) CompositeExtract 119 0
+             136:    6(float) CompositeExtract 119 1
+             137:    6(float) CompositeExtract 119 2
+             138:    6(float) CompositeExtract 119 3
+             139:   72(fvec4) CompositeConstruct 135 136 137 138
+             140:    6(float) ImageSampleDrefImplicitLod 134 139 24
+                              Store 126(r62) 140
+             145:         142 Load 144(g_tTexcdu4a)
+             146:          13 Load 15(g_sSamp)
+             149:         148 SampledImage 145 146
+             150:    6(float) CompositeExtract 119 0
+             151:    6(float) CompositeExtract 119 1
+             152:    6(float) CompositeExtract 119 2
+             153:    6(float) CompositeExtract 119 3
+             154:   72(fvec4) CompositeConstruct 150 151 152 153
+             155:    6(float) ImageSampleDrefImplicitLod 149 154 24
+                              Store 141(r64) 155
+             163:    162(ptr) AccessChain 158(psout) 159
+                              Store 163 161
+             165:      7(ptr) AccessChain 158(psout) 164
+                              Store 165 160
+             168:    162(ptr) AccessChain 158(psout) 159
+             169:   72(fvec4) Load 168
+                              Store 167(Color) 169
+             172:      7(ptr) AccessChain 158(psout) 164
+             173:    6(float) Load 172
+                              Store 171(Depth) 173
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index 253a59e26be31fc8b96bed95724dbea93002b437..acd24b8bb472cd95bdcc4803486f232098c20d0e 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmp.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -20,11 +20,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -32,11 +32,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -44,11 +44,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -57,11 +57,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -70,11 +70,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -83,11 +83,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -97,11 +97,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -111,11 +111,11 @@ gl_FragCoord origin is upper left
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          texture (global float)
+0:55          texture (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -139,8 +139,8 @@ gl_FragCoord origin is upper left
 0:58            1 (const int)
 0:58        Constant:
 0:58          1.000000
-0:?       Sequence
-0:?         Sequence
+0:60      Sequence
+0:60        Sequence
 0:60          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:60            Color: direct index for structure (temp 4-component vector of float)
@@ -155,6 +155,8 @@ gl_FragCoord origin is upper left
 0:60                1 (const int)
 0:60        Branch: Return
 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)
@@ -177,8 +179,6 @@ 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:
@@ -187,17 +187,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -205,11 +205,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -217,11 +217,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -229,11 +229,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -242,11 +242,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -255,11 +255,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -268,11 +268,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -282,11 +282,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -296,11 +296,11 @@ gl_FragCoord origin is upper left
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          texture (global float)
+0:55          texture (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -324,8 +324,8 @@ gl_FragCoord origin is upper left
 0:58            1 (const int)
 0:58        Constant:
 0:58          1.000000
-0:?       Sequence
-0:?         Sequence
+0:60      Sequence
+0:60        Sequence
 0:60          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:60            Color: direct index for structure (temp 4-component vector of float)
@@ -340,6 +340,8 @@ gl_FragCoord origin is upper left
 0:60                1 (const int)
 0:60        Branch: Return
 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)
@@ -362,84 +364,82 @@ 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 182
+// Id's are bound by 200
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 138 142
+                              EntryPoint Fragment 4  "main" 156 160
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r00"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 24  "r02"
-                              Name 28  "g_tTex1di4"
-                              Name 36  "r04"
-                              Name 40  "g_tTex1du4"
-                              Name 48  "r20"
-                              Name 51  "g_tTex2df4"
-                              Name 63  "r22"
-                              Name 66  "g_tTex2di4"
-                              Name 75  "r24"
-                              Name 78  "g_tTex2du4"
-                              Name 87  "r50"
-                              Name 90  "g_tTexcdf4"
-                              Name 102  "r52"
-                              Name 105  "g_tTexcdi4"
-                              Name 114  "r54"
-                              Name 117  "g_tTexcdu4"
-                              Name 127  "PS_OUTPUT"
-                              MemberName 127(PS_OUTPUT) 0  "Color"
-                              MemberName 127(PS_OUTPUT) 1  "Depth"
-                              Name 129  "psout"
-                              Name 138  "Color"
-                              Name 142  "Depth"
-                              Name 148  "g_tTex3df4"
-                              Name 151  "g_tTex3di4"
-                              Name 154  "g_tTex3du4"
-                              Name 157  "g_tTex1df4a"
-                              Name 160  "g_tTex1di4a"
-                              Name 163  "g_tTex1du4a"
-                              Name 166  "g_tTex2df4a"
-                              Name 169  "g_tTex2di4a"
-                              Name 172  "g_tTex2du4a"
-                              Name 175  "g_tTexcdf4a"
-                              Name 178  "g_tTexcdi4a"
-                              Name 181  "g_tTexcdu4a"
+                              Name 26  "r02"
+                              Name 30  "g_tTex1di4"
+                              Name 39  "r04"
+                              Name 43  "g_tTex1du4"
+                              Name 52  "r20"
+                              Name 55  "g_tTex2df4"
+                              Name 69  "r22"
+                              Name 72  "g_tTex2di4"
+                              Name 83  "r24"
+                              Name 86  "g_tTex2du4"
+                              Name 97  "r50"
+                              Name 100  "g_tTexcdf4"
+                              Name 115  "r52"
+                              Name 118  "g_tTexcdi4"
+                              Name 130  "r54"
+                              Name 133  "g_tTexcdu4"
+                              Name 145  "PS_OUTPUT"
+                              MemberName 145(PS_OUTPUT) 0  "Color"
+                              MemberName 145(PS_OUTPUT) 1  "Depth"
+                              Name 147  "psout"
+                              Name 156  "Color"
+                              Name 160  "Depth"
+                              Name 166  "g_tTex3df4"
+                              Name 169  "g_tTex3di4"
+                              Name 172  "g_tTex3du4"
+                              Name 175  "g_tTex1df4a"
+                              Name 178  "g_tTex1di4a"
+                              Name 181  "g_tTex1du4a"
+                              Name 184  "g_tTex2df4a"
+                              Name 187  "g_tTex2di4a"
+                              Name 190  "g_tTex2du4a"
+                              Name 193  "g_tTexcdf4a"
+                              Name 196  "g_tTexcdi4a"
+                              Name 199  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 28(g_tTex1di4) DescriptorSet 0
-                              Decorate 40(g_tTex1du4) DescriptorSet 0
-                              Decorate 51(g_tTex2df4) DescriptorSet 0
-                              Decorate 66(g_tTex2di4) DescriptorSet 0
-                              Decorate 78(g_tTex2du4) DescriptorSet 0
-                              Decorate 90(g_tTexcdf4) DescriptorSet 0
-                              Decorate 105(g_tTexcdi4) DescriptorSet 0
-                              Decorate 117(g_tTexcdu4) DescriptorSet 0
-                              Decorate 138(Color) Location 0
-                              Decorate 142(Depth) BuiltIn FragDepth
-                              Decorate 148(g_tTex3df4) DescriptorSet 0
-                              Decorate 151(g_tTex3di4) DescriptorSet 0
-                              Decorate 154(g_tTex3du4) DescriptorSet 0
-                              Decorate 157(g_tTex1df4a) DescriptorSet 0
-                              Decorate 160(g_tTex1di4a) DescriptorSet 0
-                              Decorate 163(g_tTex1du4a) DescriptorSet 0
-                              Decorate 166(g_tTex2df4a) DescriptorSet 0
-                              Decorate 169(g_tTex2di4a) DescriptorSet 0
-                              Decorate 172(g_tTex2du4a) DescriptorSet 0
-                              Decorate 175(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 178(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 181(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 30(g_tTex1di4) DescriptorSet 0
+                              Decorate 43(g_tTex1du4) DescriptorSet 0
+                              Decorate 55(g_tTex2df4) DescriptorSet 0
+                              Decorate 72(g_tTex2di4) DescriptorSet 0
+                              Decorate 86(g_tTex2du4) DescriptorSet 0
+                              Decorate 100(g_tTexcdf4) DescriptorSet 0
+                              Decorate 118(g_tTexcdi4) DescriptorSet 0
+                              Decorate 133(g_tTexcdu4) DescriptorSet 0
+                              Decorate 156(Color) Location 0
+                              Decorate 160(Depth) BuiltIn FragDepth
+                              Decorate 166(g_tTex3df4) DescriptorSet 0
+                              Decorate 169(g_tTex3di4) DescriptorSet 0
+                              Decorate 172(g_tTex3du4) DescriptorSet 0
+                              Decorate 175(g_tTex1df4a) DescriptorSet 0
+                              Decorate 178(g_tTex1di4a) DescriptorSet 0
+                              Decorate 181(g_tTex1du4a) DescriptorSet 0
+                              Decorate 184(g_tTex2df4a) DescriptorSet 0
+                              Decorate 187(g_tTex2di4a) DescriptorSet 0
+                              Decorate 190(g_tTex2du4a) DescriptorSet 0
+                              Decorate 193(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 196(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 199(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -454,183 +454,201 @@ gl_FragCoord origin is upper left
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              25:             TypeInt 32 1
-              26:             TypeImage 25(int) 1D sampled format:Unknown
-              27:             TypePointer UniformConstant 26
-  28(g_tTex1di4):     27(ptr) Variable UniformConstant
-              31:             TypeImage 25(int) 1D depth sampled format:Unknown
-              32:             TypeSampledImage 31
-              37:             TypeInt 32 0
-              38:             TypeImage 37(int) 1D sampled format:Unknown
-              39:             TypePointer UniformConstant 38
-  40(g_tTex1du4):     39(ptr) Variable UniformConstant
-              43:             TypeImage 37(int) 1D depth sampled format:Unknown
-              44:             TypeSampledImage 43
-              49:             TypeImage 6(float) 2D sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2df4):     50(ptr) Variable UniformConstant
-              54:             TypeImage 6(float) 2D depth sampled format:Unknown
-              55:             TypeSampledImage 54
-              57:             TypeVector 6(float) 2
-              58:    6(float) Constant 1045220557
-              59:   57(fvec2) ConstantComposite 20 58
-              64:             TypeImage 25(int) 2D sampled format:Unknown
-              65:             TypePointer UniformConstant 64
-  66(g_tTex2di4):     65(ptr) Variable UniformConstant
-              69:             TypeImage 25(int) 2D depth sampled format:Unknown
-              70:             TypeSampledImage 69
-              76:             TypeImage 37(int) 2D sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-  78(g_tTex2du4):     77(ptr) Variable UniformConstant
-              81:             TypeImage 37(int) 2D depth sampled format:Unknown
-              82:             TypeSampledImage 81
-              88:             TypeImage 6(float) Cube sampled format:Unknown
-              89:             TypePointer UniformConstant 88
-  90(g_tTexcdf4):     89(ptr) Variable UniformConstant
-              93:             TypeImage 6(float) Cube depth sampled format:Unknown
-              94:             TypeSampledImage 93
-              96:             TypeVector 6(float) 3
-              97:    6(float) Constant 1050253722
-              98:   96(fvec3) ConstantComposite 20 58 97
-             103:             TypeImage 25(int) Cube sampled format:Unknown
-             104:             TypePointer UniformConstant 103
- 105(g_tTexcdi4):    104(ptr) Variable UniformConstant
-             108:             TypeImage 25(int) Cube depth sampled format:Unknown
-             109:             TypeSampledImage 108
-             115:             TypeImage 37(int) Cube sampled format:Unknown
-             116:             TypePointer UniformConstant 115
- 117(g_tTexcdu4):    116(ptr) Variable UniformConstant
-             120:             TypeImage 37(int) Cube depth sampled format:Unknown
-             121:             TypeSampledImage 120
-             126:             TypeVector 6(float) 4
-  127(PS_OUTPUT):             TypeStruct 126(fvec4) 6(float)
-             128:             TypePointer Function 127(PS_OUTPUT)
-             130:     25(int) Constant 0
-             131:    6(float) Constant 1065353216
-             132:  126(fvec4) ConstantComposite 131 131 131 131
-             133:             TypePointer Function 126(fvec4)
-             135:     25(int) Constant 1
-             137:             TypePointer Output 126(fvec4)
-      138(Color):    137(ptr) Variable Output
-             141:             TypePointer Output 6(float)
-      142(Depth):    141(ptr) Variable Output
-             146:             TypeImage 6(float) 3D sampled format:Unknown
-             147:             TypePointer UniformConstant 146
- 148(g_tTex3df4):    147(ptr) Variable UniformConstant
-             149:             TypeImage 25(int) 3D sampled format:Unknown
-             150:             TypePointer UniformConstant 149
- 151(g_tTex3di4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 37(int) 3D sampled format:Unknown
-             153:             TypePointer UniformConstant 152
- 154(g_tTex3du4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 6(float) 1D array sampled format:Unknown
-             156:             TypePointer UniformConstant 155
-157(g_tTex1df4a):    156(ptr) Variable UniformConstant
-             158:             TypeImage 25(int) 1D array sampled format:Unknown
-             159:             TypePointer UniformConstant 158
-160(g_tTex1di4a):    159(ptr) Variable UniformConstant
-             161:             TypeImage 37(int) 1D array sampled format:Unknown
-             162:             TypePointer UniformConstant 161
-163(g_tTex1du4a):    162(ptr) Variable UniformConstant
-             164:             TypeImage 6(float) 2D array sampled format:Unknown
+              22:             TypeVector 6(float) 2
+              27:             TypeInt 32 1
+              28:             TypeImage 27(int) 1D sampled format:Unknown
+              29:             TypePointer UniformConstant 28
+  30(g_tTex1di4):     29(ptr) Variable UniformConstant
+              33:             TypeImage 27(int) 1D depth sampled format:Unknown
+              34:             TypeSampledImage 33
+              40:             TypeInt 32 0
+              41:             TypeImage 40(int) 1D sampled format:Unknown
+              42:             TypePointer UniformConstant 41
+  43(g_tTex1du4):     42(ptr) Variable UniformConstant
+              46:             TypeImage 40(int) 1D depth sampled format:Unknown
+              47:             TypeSampledImage 46
+              53:             TypeImage 6(float) 2D sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2df4):     54(ptr) Variable UniformConstant
+              58:             TypeImage 6(float) 2D depth sampled format:Unknown
+              59:             TypeSampledImage 58
+              61:    6(float) Constant 1045220557
+              62:   22(fvec2) ConstantComposite 20 61
+              63:             TypeVector 6(float) 3
+              70:             TypeImage 27(int) 2D sampled format:Unknown
+              71:             TypePointer UniformConstant 70
+  72(g_tTex2di4):     71(ptr) Variable UniformConstant
+              75:             TypeImage 27(int) 2D depth sampled format:Unknown
+              76:             TypeSampledImage 75
+              84:             TypeImage 40(int) 2D sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+  86(g_tTex2du4):     85(ptr) Variable UniformConstant
+              89:             TypeImage 40(int) 2D depth sampled format:Unknown
+              90:             TypeSampledImage 89
+              98:             TypeImage 6(float) Cube sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+ 100(g_tTexcdf4):     99(ptr) Variable UniformConstant
+             103:             TypeImage 6(float) Cube depth sampled format:Unknown
+             104:             TypeSampledImage 103
+             106:    6(float) Constant 1050253722
+             107:   63(fvec3) ConstantComposite 20 61 106
+             108:             TypeVector 6(float) 4
+             116:             TypeImage 27(int) Cube sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+ 118(g_tTexcdi4):    117(ptr) Variable UniformConstant
+             121:             TypeImage 27(int) Cube depth sampled format:Unknown
+             122:             TypeSampledImage 121
+             131:             TypeImage 40(int) Cube sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+ 133(g_tTexcdu4):    132(ptr) Variable UniformConstant
+             136:             TypeImage 40(int) Cube depth sampled format:Unknown
+             137:             TypeSampledImage 136
+  145(PS_OUTPUT):             TypeStruct 108(fvec4) 6(float)
+             146:             TypePointer Function 145(PS_OUTPUT)
+             148:     27(int) Constant 0
+             149:    6(float) Constant 1065353216
+             150:  108(fvec4) ConstantComposite 149 149 149 149
+             151:             TypePointer Function 108(fvec4)
+             153:     27(int) Constant 1
+             155:             TypePointer Output 108(fvec4)
+      156(Color):    155(ptr) Variable Output
+             159:             TypePointer Output 6(float)
+      160(Depth):    159(ptr) Variable Output
+             164:             TypeImage 6(float) 3D sampled format:Unknown
              165:             TypePointer UniformConstant 164
-166(g_tTex2df4a):    165(ptr) Variable UniformConstant
-             167:             TypeImage 25(int) 2D array sampled format:Unknown
+ 166(g_tTex3df4):    165(ptr) Variable UniformConstant
+             167:             TypeImage 27(int) 3D sampled format:Unknown
              168:             TypePointer UniformConstant 167
-169(g_tTex2di4a):    168(ptr) Variable UniformConstant
-             170:             TypeImage 37(int) 2D array sampled format:Unknown
+ 169(g_tTex3di4):    168(ptr) Variable UniformConstant
+             170:             TypeImage 40(int) 3D sampled format:Unknown
              171:             TypePointer UniformConstant 170
-172(g_tTex2du4a):    171(ptr) Variable UniformConstant
-             173:             TypeImage 6(float) Cube array sampled format:Unknown
+ 172(g_tTex3du4):    171(ptr) Variable UniformConstant
+             173:             TypeImage 6(float) 1D array sampled format:Unknown
              174:             TypePointer UniformConstant 173
-175(g_tTexcdf4a):    174(ptr) Variable UniformConstant
-             176:             TypeImage 25(int) Cube array sampled format:Unknown
+175(g_tTex1df4a):    174(ptr) Variable UniformConstant
+             176:             TypeImage 27(int) 1D array sampled format:Unknown
              177:             TypePointer UniformConstant 176
-178(g_tTexcdi4a):    177(ptr) Variable UniformConstant
-             179:             TypeImage 37(int) Cube array sampled format:Unknown
+178(g_tTex1di4a):    177(ptr) Variable UniformConstant
+             179:             TypeImage 40(int) 1D array sampled format:Unknown
              180:             TypePointer UniformConstant 179
-181(g_tTexcdu4a):    180(ptr) Variable UniformConstant
+181(g_tTex1du4a):    180(ptr) Variable UniformConstant
+             182:             TypeImage 6(float) 2D array sampled format:Unknown
+             183:             TypePointer UniformConstant 182
+184(g_tTex2df4a):    183(ptr) Variable UniformConstant
+             185:             TypeImage 27(int) 2D array sampled format:Unknown
+             186:             TypePointer UniformConstant 185
+187(g_tTex2di4a):    186(ptr) Variable UniformConstant
+             188:             TypeImage 40(int) 2D array sampled format:Unknown
+             189:             TypePointer UniformConstant 188
+190(g_tTex2du4a):    189(ptr) Variable UniformConstant
+             191:             TypeImage 6(float) Cube array sampled format:Unknown
+             192:             TypePointer UniformConstant 191
+193(g_tTexcdf4a):    192(ptr) Variable UniformConstant
+             194:             TypeImage 27(int) Cube array sampled format:Unknown
+             195:             TypePointer UniformConstant 194
+196(g_tTexcdi4a):    195(ptr) Variable UniformConstant
+             197:             TypeImage 40(int) Cube array sampled format:Unknown
+             198:             TypePointer UniformConstant 197
+199(g_tTexcdu4a):    198(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r00):      7(ptr) Variable Function
-         24(r02):      7(ptr) Variable Function
-         36(r04):      7(ptr) Variable Function
-         48(r20):      7(ptr) Variable Function
-         63(r22):      7(ptr) Variable Function
-         75(r24):      7(ptr) Variable Function
-         87(r50):      7(ptr) Variable Function
-        102(r52):      7(ptr) Variable Function
-        114(r54):      7(ptr) Variable Function
-      129(psout):    128(ptr) Variable Function
+         26(r02):      7(ptr) Variable Function
+         39(r04):      7(ptr) Variable Function
+         52(r20):      7(ptr) Variable Function
+         69(r22):      7(ptr) Variable Function
+         83(r24):      7(ptr) Variable Function
+         97(r50):      7(ptr) Variable Function
+        115(r52):      7(ptr) Variable Function
+        130(r54):      7(ptr) Variable Function
+      147(psout):    146(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              22:    6(float) CompositeExtract 20 0
-              23:    6(float) ImageSampleDrefImplicitLod 19 20 22
-                              Store 8(r00) 23
-              29:          26 Load 28(g_tTex1di4)
-              30:          13 Load 15(g_sSamp)
-              33:          32 SampledImage 29 30
-              34:    6(float) CompositeExtract 20 0
-              35:    6(float) ImageSampleDrefImplicitLod 33 20 34
-                              Store 24(r02) 35
-              41:          38 Load 40(g_tTex1du4)
-              42:          13 Load 15(g_sSamp)
-              45:          44 SampledImage 41 42
-              46:    6(float) CompositeExtract 20 0
-              47:    6(float) ImageSampleDrefImplicitLod 45 20 46
-                              Store 36(r04) 47
-              52:          49 Load 51(g_tTex2df4)
-              53:          13 Load 15(g_sSamp)
-              56:          55 SampledImage 52 53
-              60:    6(float) CompositeExtract 59 0
-              61:    6(float) CompositeExtract 60 0
-              62:    6(float) ImageSampleDrefImplicitLod 56 60 61
-                              Store 48(r20) 62
-              67:          64 Load 66(g_tTex2di4)
-              68:          13 Load 15(g_sSamp)
-              71:          70 SampledImage 67 68
-              72:    6(float) CompositeExtract 59 0
-              73:    6(float) CompositeExtract 72 0
-              74:    6(float) ImageSampleDrefImplicitLod 71 72 73
-                              Store 63(r22) 74
-              79:          76 Load 78(g_tTex2du4)
-              80:          13 Load 15(g_sSamp)
-              83:          82 SampledImage 79 80
-              84:    6(float) CompositeExtract 59 0
-              85:    6(float) CompositeExtract 84 0
-              86:    6(float) ImageSampleDrefImplicitLod 83 84 85
-                              Store 75(r24) 86
-              91:          88 Load 90(g_tTexcdf4)
-              92:          13 Load 15(g_sSamp)
-              95:          94 SampledImage 91 92
-              99:    6(float) CompositeExtract 98 0
-             100:    6(float) CompositeExtract 99 0
-             101:    6(float) ImageSampleDrefImplicitLod 95 99 100
-                              Store 87(r50) 101
-             106:         103 Load 105(g_tTexcdi4)
-             107:          13 Load 15(g_sSamp)
-             110:         109 SampledImage 106 107
-             111:    6(float) CompositeExtract 98 0
-             112:    6(float) CompositeExtract 111 0
-             113:    6(float) ImageSampleDrefImplicitLod 110 111 112
-                              Store 102(r52) 113
-             118:         115 Load 117(g_tTexcdu4)
-             119:          13 Load 15(g_sSamp)
-             122:         121 SampledImage 118 119
-             123:    6(float) CompositeExtract 98 0
-             124:    6(float) CompositeExtract 123 0
-             125:    6(float) ImageSampleDrefImplicitLod 122 123 124
-                              Store 114(r54) 125
-             134:    133(ptr) AccessChain 129(psout) 130
-                              Store 134 132
-             136:      7(ptr) AccessChain 129(psout) 135
-                              Store 136 131
-             139:    133(ptr) AccessChain 129(psout) 130
-             140:  126(fvec4) Load 139
-                              Store 138(Color) 140
-             143:      7(ptr) AccessChain 129(psout) 135
-             144:    6(float) Load 143
-                              Store 142(Depth) 144
+              23:   22(fvec2) CompositeConstruct 20 21
+              24:    6(float) CompositeExtract 23 1
+              25:    6(float) ImageSampleDrefImplicitLod 19 23 24
+                              Store 8(r00) 25
+              31:          28 Load 30(g_tTex1di4)
+              32:          13 Load 15(g_sSamp)
+              35:          34 SampledImage 31 32
+              36:   22(fvec2) CompositeConstruct 20 21
+              37:    6(float) CompositeExtract 36 1
+              38:    6(float) ImageSampleDrefImplicitLod 35 36 37
+                              Store 26(r02) 38
+              44:          41 Load 43(g_tTex1du4)
+              45:          13 Load 15(g_sSamp)
+              48:          47 SampledImage 44 45
+              49:   22(fvec2) CompositeConstruct 20 21
+              50:    6(float) CompositeExtract 49 1
+              51:    6(float) ImageSampleDrefImplicitLod 48 49 50
+                              Store 39(r04) 51
+              56:          53 Load 55(g_tTex2df4)
+              57:          13 Load 15(g_sSamp)
+              60:          59 SampledImage 56 57
+              64:    6(float) CompositeExtract 62 0
+              65:    6(float) CompositeExtract 62 1
+              66:   63(fvec3) CompositeConstruct 64 65 21
+              67:    6(float) CompositeExtract 66 2
+              68:    6(float) ImageSampleDrefImplicitLod 60 66 67
+                              Store 52(r20) 68
+              73:          70 Load 72(g_tTex2di4)
+              74:          13 Load 15(g_sSamp)
+              77:          76 SampledImage 73 74
+              78:    6(float) CompositeExtract 62 0
+              79:    6(float) CompositeExtract 62 1
+              80:   63(fvec3) CompositeConstruct 78 79 21
+              81:    6(float) CompositeExtract 80 2
+              82:    6(float) ImageSampleDrefImplicitLod 77 80 81
+                              Store 69(r22) 82
+              87:          84 Load 86(g_tTex2du4)
+              88:          13 Load 15(g_sSamp)
+              91:          90 SampledImage 87 88
+              92:    6(float) CompositeExtract 62 0
+              93:    6(float) CompositeExtract 62 1
+              94:   63(fvec3) CompositeConstruct 92 93 21
+              95:    6(float) CompositeExtract 94 2
+              96:    6(float) ImageSampleDrefImplicitLod 91 94 95
+                              Store 83(r24) 96
+             101:          98 Load 100(g_tTexcdf4)
+             102:          13 Load 15(g_sSamp)
+             105:         104 SampledImage 101 102
+             109:    6(float) CompositeExtract 107 0
+             110:    6(float) CompositeExtract 107 1
+             111:    6(float) CompositeExtract 107 2
+             112:  108(fvec4) CompositeConstruct 109 110 111 21
+             113:    6(float) CompositeExtract 112 3
+             114:    6(float) ImageSampleDrefImplicitLod 105 112 113
+                              Store 97(r50) 114
+             119:         116 Load 118(g_tTexcdi4)
+             120:          13 Load 15(g_sSamp)
+             123:         122 SampledImage 119 120
+             124:    6(float) CompositeExtract 107 0
+             125:    6(float) CompositeExtract 107 1
+             126:    6(float) CompositeExtract 107 2
+             127:  108(fvec4) CompositeConstruct 124 125 126 21
+             128:    6(float) CompositeExtract 127 3
+             129:    6(float) ImageSampleDrefImplicitLod 123 127 128
+                              Store 115(r52) 129
+             134:         131 Load 133(g_tTexcdu4)
+             135:          13 Load 15(g_sSamp)
+             138:         137 SampledImage 134 135
+             139:    6(float) CompositeExtract 107 0
+             140:    6(float) CompositeExtract 107 1
+             141:    6(float) CompositeExtract 107 2
+             142:  108(fvec4) CompositeConstruct 139 140 141 21
+             143:    6(float) CompositeExtract 142 3
+             144:    6(float) ImageSampleDrefImplicitLod 138 142 143
+                              Store 130(r54) 144
+             152:    151(ptr) AccessChain 147(psout) 148
+                              Store 152 150
+             154:      7(ptr) AccessChain 147(psout) 153
+                              Store 154 149
+             157:    151(ptr) AccessChain 147(psout) 148
+             158:  108(fvec4) Load 157
+                              Store 156(Color) 158
+             161:      7(ptr) AccessChain 147(psout) 153
+             162:    6(float) Load 161
+                              Store 160(Depth) 162
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 3d744bd3db2fec1412ea9ecc190c5471eec36a59..fe2c74f56990d3de9f417fdb6f336013ae009b08 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmp.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -22,11 +22,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -36,11 +36,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -50,11 +50,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -66,11 +66,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -82,11 +82,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:63            1 (const int)
 0:63        Constant:
 0:63          1.000000
-0:?       Sequence
-0:?         Sequence
+0:65      Sequence
+0:65        Sequence
 0:65          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:65            Color: direct index for structure (temp 4-component vector of float)
@@ -128,6 +128,8 @@ gl_FragCoord origin is upper left
 0:65                1 (const int)
 0:65        Branch: Return
 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)
@@ -150,8 +152,6 @@ 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:
@@ -160,17 +160,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -180,11 +180,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -194,11 +194,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -208,11 +208,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -224,11 +224,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -240,11 +240,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -270,8 +270,8 @@ gl_FragCoord origin is upper left
 0:63            1 (const int)
 0:63        Constant:
 0:63          1.000000
-0:?       Sequence
-0:?         Sequence
+0:65      Sequence
+0:65        Sequence
 0:65          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:65            Color: direct index for structure (temp 4-component vector of float)
@@ -286,6 +286,8 @@ gl_FragCoord origin is upper left
 0:65                1 (const int)
 0:65        Branch: Return
 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)
@@ -308,81 +310,79 @@ 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 156
+// Id's are bound by 166
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 103 107
+                              EntryPoint Fragment 4  "main" 113 117
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r01"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 26  "r03"
-                              Name 29  "g_tTex1di4"
-                              Name 37  "r05"
-                              Name 41  "g_tTex1du4"
-                              Name 49  "r21"
-                              Name 52  "g_tTex2df4"
-                              Name 67  "r23"
-                              Name 70  "g_tTex2di4"
-                              Name 79  "r25"
-                              Name 82  "g_tTex2du4"
-                              Name 92  "PS_OUTPUT"
-                              MemberName 92(PS_OUTPUT) 0  "Color"
-                              MemberName 92(PS_OUTPUT) 1  "Depth"
-                              Name 94  "psout"
-                              Name 103  "Color"
-                              Name 107  "Depth"
-                              Name 113  "g_tTex3df4"
-                              Name 116  "g_tTex3di4"
-                              Name 119  "g_tTex3du4"
-                              Name 122  "g_tTexcdf4"
-                              Name 125  "g_tTexcdi4"
-                              Name 128  "g_tTexcdu4"
-                              Name 131  "g_tTex1df4a"
-                              Name 134  "g_tTex1di4a"
-                              Name 137  "g_tTex1du4a"
-                              Name 140  "g_tTex2df4a"
-                              Name 143  "g_tTex2di4a"
-                              Name 146  "g_tTex2du4a"
-                              Name 149  "g_tTexcdf4a"
-                              Name 152  "g_tTexcdi4a"
-                              Name 155  "g_tTexcdu4a"
+                              Name 28  "r03"
+                              Name 31  "g_tTex1di4"
+                              Name 40  "r05"
+                              Name 44  "g_tTex1du4"
+                              Name 53  "r21"
+                              Name 56  "g_tTex2df4"
+                              Name 73  "r23"
+                              Name 76  "g_tTex2di4"
+                              Name 87  "r25"
+                              Name 90  "g_tTex2du4"
+                              Name 102  "PS_OUTPUT"
+                              MemberName 102(PS_OUTPUT) 0  "Color"
+                              MemberName 102(PS_OUTPUT) 1  "Depth"
+                              Name 104  "psout"
+                              Name 113  "Color"
+                              Name 117  "Depth"
+                              Name 123  "g_tTex3df4"
+                              Name 126  "g_tTex3di4"
+                              Name 129  "g_tTex3du4"
+                              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"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 41(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex2df4) DescriptorSet 0
-                              Decorate 70(g_tTex2di4) DescriptorSet 0
-                              Decorate 82(g_tTex2du4) DescriptorSet 0
-                              Decorate 103(Color) Location 0
-                              Decorate 107(Depth) BuiltIn FragDepth
-                              Decorate 113(g_tTex3df4) DescriptorSet 0
-                              Decorate 116(g_tTex3di4) DescriptorSet 0
-                              Decorate 119(g_tTex3du4) DescriptorSet 0
-                              Decorate 122(g_tTexcdf4) DescriptorSet 0
-                              Decorate 125(g_tTexcdi4) DescriptorSet 0
-                              Decorate 128(g_tTexcdu4) DescriptorSet 0
-                              Decorate 131(g_tTex1df4a) DescriptorSet 0
-                              Decorate 134(g_tTex1di4a) DescriptorSet 0
-                              Decorate 137(g_tTex1du4a) DescriptorSet 0
-                              Decorate 140(g_tTex2df4a) DescriptorSet 0
-                              Decorate 143(g_tTex2di4a) DescriptorSet 0
-                              Decorate 146(g_tTex2du4a) DescriptorSet 0
-                              Decorate 149(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 152(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 155(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 31(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 76(g_tTex2di4) DescriptorSet 0
+                              Decorate 90(g_tTex2du4) DescriptorSet 0
+                              Decorate 113(Color) Location 0
+                              Decorate 117(Depth) BuiltIn FragDepth
+                              Decorate 123(g_tTex3df4) DescriptorSet 0
+                              Decorate 126(g_tTex3di4) DescriptorSet 0
+                              Decorate 129(g_tTex3du4) DescriptorSet 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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -397,154 +397,164 @@ gl_FragCoord origin is upper left
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:             TypeInt 32 1
-              23:     22(int) Constant 2
-              27:             TypeImage 22(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              32:             TypeImage 22(int) 1D depth sampled format:Unknown
-              33:             TypeSampledImage 32
-              38:             TypeInt 32 0
-              39:             TypeImage 38(int) 1D sampled format:Unknown
-              40:             TypePointer UniformConstant 39
-  41(g_tTex1du4):     40(ptr) Variable UniformConstant
-              44:             TypeImage 38(int) 1D depth sampled format:Unknown
-              45:             TypeSampledImage 44
-              50:             TypeImage 6(float) 2D sampled format:Unknown
-              51:             TypePointer UniformConstant 50
-  52(g_tTex2df4):     51(ptr) Variable UniformConstant
-              55:             TypeImage 6(float) 2D depth sampled format:Unknown
-              56:             TypeSampledImage 55
-              58:             TypeVector 6(float) 2
-              59:    6(float) Constant 1045220557
-              60:   58(fvec2) ConstantComposite 20 59
-              62:             TypeVector 22(int) 2
-              63:     22(int) Constant 3
-              64:   62(ivec2) ConstantComposite 23 63
-              68:             TypeImage 22(int) 2D sampled format:Unknown
-              69:             TypePointer UniformConstant 68
-  70(g_tTex2di4):     69(ptr) Variable UniformConstant
-              73:             TypeImage 22(int) 2D depth sampled format:Unknown
-              74:             TypeSampledImage 73
-              80:             TypeImage 38(int) 2D sampled format:Unknown
-              81:             TypePointer UniformConstant 80
-  82(g_tTex2du4):     81(ptr) Variable UniformConstant
-              85:             TypeImage 38(int) 2D depth sampled format:Unknown
-              86:             TypeSampledImage 85
-              91:             TypeVector 6(float) 4
-   92(PS_OUTPUT):             TypeStruct 91(fvec4) 6(float)
-              93:             TypePointer Function 92(PS_OUTPUT)
-              95:     22(int) Constant 0
-              96:    6(float) Constant 1065353216
-              97:   91(fvec4) ConstantComposite 96 96 96 96
-              98:             TypePointer Function 91(fvec4)
-             100:     22(int) Constant 1
-             102:             TypePointer Output 91(fvec4)
-      103(Color):    102(ptr) Variable Output
-             106:             TypePointer Output 6(float)
-      107(Depth):    106(ptr) Variable Output
-             111:             TypeImage 6(float) 3D sampled format:Unknown
-             112:             TypePointer UniformConstant 111
- 113(g_tTex3df4):    112(ptr) Variable UniformConstant
-             114:             TypeImage 22(int) 3D sampled format:Unknown
-             115:             TypePointer UniformConstant 114
- 116(g_tTex3di4):    115(ptr) Variable UniformConstant
-             117:             TypeImage 38(int) 3D sampled format:Unknown
-             118:             TypePointer UniformConstant 117
- 119(g_tTex3du4):    118(ptr) Variable UniformConstant
-             120:             TypeImage 6(float) Cube sampled format:Unknown
-             121:             TypePointer UniformConstant 120
- 122(g_tTexcdf4):    121(ptr) Variable UniformConstant
-             123:             TypeImage 22(int) Cube sampled format:Unknown
-             124:             TypePointer UniformConstant 123
- 125(g_tTexcdi4):    124(ptr) Variable UniformConstant
-             126:             TypeImage 38(int) Cube sampled format:Unknown
-             127:             TypePointer UniformConstant 126
- 128(g_tTexcdu4):    127(ptr) Variable UniformConstant
-             129:             TypeImage 6(float) 1D array sampled format:Unknown
-             130:             TypePointer UniformConstant 129
-131(g_tTex1df4a):    130(ptr) Variable UniformConstant
-             132:             TypeImage 22(int) 1D array sampled format:Unknown
-             133:             TypePointer UniformConstant 132
-134(g_tTex1di4a):    133(ptr) Variable UniformConstant
-             135:             TypeImage 38(int) 1D array sampled format:Unknown
-             136:             TypePointer UniformConstant 135
-137(g_tTex1du4a):    136(ptr) Variable UniformConstant
-             138:             TypeImage 6(float) 2D array sampled format:Unknown
-             139:             TypePointer UniformConstant 138
-140(g_tTex2df4a):    139(ptr) Variable UniformConstant
-             141:             TypeImage 22(int) 2D array sampled format:Unknown
-             142:             TypePointer UniformConstant 141
-143(g_tTex2di4a):    142(ptr) Variable UniformConstant
-             144:             TypeImage 38(int) 2D array sampled format:Unknown
-             145:             TypePointer UniformConstant 144
-146(g_tTex2du4a):    145(ptr) Variable UniformConstant
-             147:             TypeImage 6(float) Cube array sampled format:Unknown
-             148:             TypePointer UniformConstant 147
-149(g_tTexcdf4a):    148(ptr) Variable UniformConstant
-             150:             TypeImage 22(int) Cube array sampled format:Unknown
-             151:             TypePointer UniformConstant 150
-152(g_tTexcdi4a):    151(ptr) Variable UniformConstant
-             153:             TypeImage 38(int) Cube array sampled format:Unknown
-             154:             TypePointer UniformConstant 153
-155(g_tTexcdu4a):    154(ptr) Variable UniformConstant
+              22:             TypeVector 6(float) 2
+              24:             TypeInt 32 1
+              25:     24(int) Constant 2
+              29:             TypeImage 24(int) 1D sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+  31(g_tTex1di4):     30(ptr) Variable UniformConstant
+              34:             TypeImage 24(int) 1D depth sampled format:Unknown
+              35:             TypeSampledImage 34
+              41:             TypeInt 32 0
+              42:             TypeImage 41(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              47:             TypeImage 41(int) 1D depth sampled format:Unknown
+              48:             TypeSampledImage 47
+              54:             TypeImage 6(float) 2D sampled format:Unknown
+              55:             TypePointer UniformConstant 54
+  56(g_tTex2df4):     55(ptr) Variable UniformConstant
+              59:             TypeImage 6(float) 2D depth sampled format:Unknown
+              60:             TypeSampledImage 59
+              62:    6(float) Constant 1045220557
+              63:   22(fvec2) ConstantComposite 20 62
+              64:             TypeVector 6(float) 3
+              68:             TypeVector 24(int) 2
+              69:     24(int) Constant 3
+              70:   68(ivec2) ConstantComposite 25 69
+              74:             TypeImage 24(int) 2D sampled format:Unknown
+              75:             TypePointer UniformConstant 74
+  76(g_tTex2di4):     75(ptr) Variable UniformConstant
+              79:             TypeImage 24(int) 2D depth sampled format:Unknown
+              80:             TypeSampledImage 79
+              88:             TypeImage 41(int) 2D sampled format:Unknown
+              89:             TypePointer UniformConstant 88
+  90(g_tTex2du4):     89(ptr) Variable UniformConstant
+              93:             TypeImage 41(int) 2D depth sampled format:Unknown
+              94:             TypeSampledImage 93
+             101:             TypeVector 6(float) 4
+  102(PS_OUTPUT):             TypeStruct 101(fvec4) 6(float)
+             103:             TypePointer Function 102(PS_OUTPUT)
+             105:     24(int) Constant 0
+             106:    6(float) Constant 1065353216
+             107:  101(fvec4) ConstantComposite 106 106 106 106
+             108:             TypePointer Function 101(fvec4)
+             110:     24(int) Constant 1
+             112:             TypePointer Output 101(fvec4)
+      113(Color):    112(ptr) Variable Output
+             116:             TypePointer Output 6(float)
+      117(Depth):    116(ptr) Variable Output
+             121:             TypeImage 6(float) 3D sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+ 123(g_tTex3df4):    122(ptr) Variable UniformConstant
+             124:             TypeImage 24(int) 3D sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+ 126(g_tTex3di4):    125(ptr) Variable UniformConstant
+             127:             TypeImage 41(int) 3D sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTex3du4):    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 24(int) Cube sampled format:Unknown
+             134:             TypePointer UniformConstant 133
+ 135(g_tTexcdi4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 41(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 24(int) 1D array sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+144(g_tTex1di4a):    143(ptr) Variable UniformConstant
+             145:             TypeImage 41(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 24(int) 2D array sampled format:Unknown
+             152:             TypePointer UniformConstant 151
+153(g_tTex2di4a):    152(ptr) Variable UniformConstant
+             154:             TypeImage 41(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 24(int) Cube array sampled format:Unknown
+             161:             TypePointer UniformConstant 160
+162(g_tTexcdi4a):    161(ptr) Variable UniformConstant
+             163:             TypeImage 41(int) Cube array sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+165(g_tTexcdu4a):    164(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r01):      7(ptr) Variable Function
-         26(r03):      7(ptr) Variable Function
-         37(r05):      7(ptr) Variable Function
-         49(r21):      7(ptr) Variable Function
-         67(r23):      7(ptr) Variable Function
-         79(r25):      7(ptr) Variable Function
-       94(psout):     93(ptr) Variable Function
+         28(r03):      7(ptr) Variable Function
+         40(r05):      7(ptr) Variable Function
+         53(r21):      7(ptr) Variable Function
+         73(r23):      7(ptr) Variable Function
+         87(r25):      7(ptr) Variable Function
+      104(psout):    103(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              24:    6(float) CompositeExtract 20 0
-              25:    6(float) ImageSampleDrefImplicitLod 19 20 24 ConstOffset 23
-                              Store 8(r01) 25
-              30:          27 Load 29(g_tTex1di4)
-              31:          13 Load 15(g_sSamp)
-              34:          33 SampledImage 30 31
-              35:    6(float) CompositeExtract 20 0
-              36:    6(float) ImageSampleDrefImplicitLod 34 20 35 ConstOffset 23
-                              Store 26(r03) 36
-              42:          39 Load 41(g_tTex1du4)
-              43:          13 Load 15(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 20 0
-              48:    6(float) ImageSampleDrefImplicitLod 46 20 47 ConstOffset 23
-                              Store 37(r05) 48
-              53:          50 Load 52(g_tTex2df4)
-              54:          13 Load 15(g_sSamp)
-              57:          56 SampledImage 53 54
-              61:    6(float) CompositeExtract 60 0
-              65:    6(float) CompositeExtract 61 0
-              66:    6(float) ImageSampleDrefImplicitLod 57 61 65 ConstOffset 64
-                              Store 49(r21) 66
-              71:          68 Load 70(g_tTex2di4)
-              72:          13 Load 15(g_sSamp)
-              75:          74 SampledImage 71 72
-              76:    6(float) CompositeExtract 60 0
-              77:    6(float) CompositeExtract 76 0
-              78:    6(float) ImageSampleDrefImplicitLod 75 76 77 ConstOffset 64
-                              Store 67(r23) 78
-              83:          80 Load 82(g_tTex2du4)
-              84:          13 Load 15(g_sSamp)
-              87:          86 SampledImage 83 84
-              88:    6(float) CompositeExtract 60 0
-              89:    6(float) CompositeExtract 88 0
-              90:    6(float) ImageSampleDrefImplicitLod 87 88 89 ConstOffset 64
-                              Store 79(r25) 90
-              99:     98(ptr) AccessChain 94(psout) 95
-                              Store 99 97
-             101:      7(ptr) AccessChain 94(psout) 100
-                              Store 101 96
-             104:     98(ptr) AccessChain 94(psout) 95
-             105:   91(fvec4) Load 104
-                              Store 103(Color) 105
-             108:      7(ptr) AccessChain 94(psout) 100
-             109:    6(float) Load 108
-                              Store 107(Depth) 109
+              23:   22(fvec2) CompositeConstruct 20 21
+              26:    6(float) CompositeExtract 23 1
+              27:    6(float) ImageSampleDrefImplicitLod 19 23 26 ConstOffset 25
+                              Store 8(r01) 27
+              32:          29 Load 31(g_tTex1di4)
+              33:          13 Load 15(g_sSamp)
+              36:          35 SampledImage 32 33
+              37:   22(fvec2) CompositeConstruct 20 21
+              38:    6(float) CompositeExtract 37 1
+              39:    6(float) ImageSampleDrefImplicitLod 36 37 38 ConstOffset 25
+                              Store 28(r03) 39
+              45:          42 Load 44(g_tTex1du4)
+              46:          13 Load 15(g_sSamp)
+              49:          48 SampledImage 45 46
+              50:   22(fvec2) CompositeConstruct 20 21
+              51:    6(float) CompositeExtract 50 1
+              52:    6(float) ImageSampleDrefImplicitLod 49 50 51 ConstOffset 25
+                              Store 40(r05) 52
+              57:          54 Load 56(g_tTex2df4)
+              58:          13 Load 15(g_sSamp)
+              61:          60 SampledImage 57 58
+              65:    6(float) CompositeExtract 63 0
+              66:    6(float) CompositeExtract 63 1
+              67:   64(fvec3) CompositeConstruct 65 66 21
+              71:    6(float) CompositeExtract 67 2
+              72:    6(float) ImageSampleDrefImplicitLod 61 67 71 ConstOffset 70
+                              Store 53(r21) 72
+              77:          74 Load 76(g_tTex2di4)
+              78:          13 Load 15(g_sSamp)
+              81:          80 SampledImage 77 78
+              82:    6(float) CompositeExtract 63 0
+              83:    6(float) CompositeExtract 63 1
+              84:   64(fvec3) CompositeConstruct 82 83 21
+              85:    6(float) CompositeExtract 84 2
+              86:    6(float) ImageSampleDrefImplicitLod 81 84 85 ConstOffset 70
+                              Store 73(r23) 86
+              91:          88 Load 90(g_tTex2du4)
+              92:          13 Load 15(g_sSamp)
+              95:          94 SampledImage 91 92
+              96:    6(float) CompositeExtract 63 0
+              97:    6(float) CompositeExtract 63 1
+              98:   64(fvec3) CompositeConstruct 96 97 21
+              99:    6(float) CompositeExtract 98 2
+             100:    6(float) ImageSampleDrefImplicitLod 95 98 99 ConstOffset 70
+                              Store 87(r25) 100
+             109:    108(ptr) AccessChain 104(psout) 105
+                              Store 109 107
+             111:      7(ptr) AccessChain 104(psout) 110
+                              Store 111 106
+             114:    108(ptr) AccessChain 104(psout) 105
+             115:  101(fvec4) Load 114
+                              Store 113(Color) 115
+             118:      7(ptr) AccessChain 104(psout) 110
+             119:    6(float) Load 118
+                              Store 117(Depth) 119
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 2eb302e7b7e1c2e95e89ca8880a64eb41780bf66..013a645c49ee9e0e8e8ec4b90792fe1b609587a4 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmp.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -23,11 +23,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -38,11 +38,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -53,11 +53,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -70,11 +70,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -87,11 +87,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -118,8 +118,8 @@ gl_FragCoord origin is upper left
 0:64            1 (const int)
 0:64        Constant:
 0:64          1.000000
-0:?       Sequence
-0:?         Sequence
+0:66      Sequence
+0:66        Sequence
 0:66          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:66            Color: direct index for structure (temp 4-component vector of float)
@@ -134,6 +134,8 @@ gl_FragCoord origin is upper left
 0:66                1 (const int)
 0:66        Branch: Return
 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)
@@ -156,8 +158,6 @@ 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:
@@ -166,17 +166,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -187,11 +187,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -202,11 +202,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -217,11 +217,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -234,11 +234,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -251,11 +251,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -282,8 +282,8 @@ gl_FragCoord origin is upper left
 0:64            1 (const int)
 0:64        Constant:
 0:64          1.000000
-0:?       Sequence
-0:?         Sequence
+0:66      Sequence
+0:66        Sequence
 0:66          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:66            Color: direct index for structure (temp 4-component vector of float)
@@ -298,6 +298,8 @@ gl_FragCoord origin is upper left
 0:66                1 (const int)
 0:66        Branch: Return
 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)
@@ -320,81 +322,79 @@ 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 162
+// Id's are bound by 177
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 109 113
+                              EntryPoint Fragment 4  "main" 124 128
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r11"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 30  "r13"
-                              Name 33  "g_tTex1di4a"
-                              Name 42  "r15"
-                              Name 46  "g_tTex1du4a"
-                              Name 55  "r31"
-                              Name 58  "g_tTex2df4a"
-                              Name 73  "r33"
-                              Name 76  "g_tTex2di4a"
-                              Name 85  "r35"
-                              Name 88  "g_tTex2du4a"
-                              Name 98  "PS_OUTPUT"
-                              MemberName 98(PS_OUTPUT) 0  "Color"
-                              MemberName 98(PS_OUTPUT) 1  "Depth"
-                              Name 100  "psout"
-                              Name 109  "Color"
-                              Name 113  "Depth"
-                              Name 119  "g_tTex1df4"
-                              Name 122  "g_tTex1di4"
-                              Name 125  "g_tTex1du4"
-                              Name 128  "g_tTex2df4"
-                              Name 131  "g_tTex2di4"
-                              Name 134  "g_tTex2du4"
-                              Name 137  "g_tTex3df4"
-                              Name 140  "g_tTex3di4"
-                              Name 143  "g_tTex3du4"
-                              Name 146  "g_tTexcdf4"
-                              Name 149  "g_tTexcdi4"
-                              Name 152  "g_tTexcdu4"
-                              Name 155  "g_tTexcdf4a"
-                              Name 158  "g_tTexcdi4a"
-                              Name 161  "g_tTexcdu4a"
+                              Name 33  "r13"
+                              Name 36  "g_tTex1di4a"
+                              Name 47  "r15"
+                              Name 51  "g_tTex1du4a"
+                              Name 62  "r31"
+                              Name 65  "g_tTex2df4a"
+                              Name 83  "r33"
+                              Name 86  "g_tTex2di4a"
+                              Name 98  "r35"
+                              Name 101  "g_tTex2du4a"
+                              Name 113  "PS_OUTPUT"
+                              MemberName 113(PS_OUTPUT) 0  "Color"
+                              MemberName 113(PS_OUTPUT) 1  "Depth"
+                              Name 115  "psout"
+                              Name 124  "Color"
+                              Name 128  "Depth"
+                              Name 134  "g_tTex1df4"
+                              Name 137  "g_tTex1di4"
+                              Name 140  "g_tTex1du4"
+                              Name 143  "g_tTex2df4"
+                              Name 146  "g_tTex2di4"
+                              Name 149  "g_tTex2du4"
+                              Name 152  "g_tTex3df4"
+                              Name 155  "g_tTex3di4"
+                              Name 158  "g_tTex3du4"
+                              Name 161  "g_tTexcdf4"
+                              Name 164  "g_tTexcdi4"
+                              Name 167  "g_tTexcdu4"
+                              Name 170  "g_tTexcdf4a"
+                              Name 173  "g_tTexcdi4a"
+                              Name 176  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 46(g_tTex1du4a) DescriptorSet 0
-                              Decorate 58(g_tTex2df4a) DescriptorSet 0
-                              Decorate 76(g_tTex2di4a) DescriptorSet 0
-                              Decorate 88(g_tTex2du4a) DescriptorSet 0
-                              Decorate 109(Color) Location 0
-                              Decorate 113(Depth) BuiltIn FragDepth
-                              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_tTex2df4) DescriptorSet 0
-                              Decorate 131(g_tTex2di4) DescriptorSet 0
-                              Decorate 134(g_tTex2du4) DescriptorSet 0
-                              Decorate 137(g_tTex3df4) DescriptorSet 0
-                              Decorate 140(g_tTex3di4) DescriptorSet 0
-                              Decorate 143(g_tTex3du4) DescriptorSet 0
-                              Decorate 146(g_tTexcdf4) DescriptorSet 0
-                              Decorate 149(g_tTexcdi4) DescriptorSet 0
-                              Decorate 152(g_tTexcdu4) DescriptorSet 0
-                              Decorate 155(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 158(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 161(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 51(g_tTex1du4a) DescriptorSet 0
+                              Decorate 65(g_tTex2df4a) DescriptorSet 0
+                              Decorate 86(g_tTex2di4a) DescriptorSet 0
+                              Decorate 101(g_tTex2du4a) DescriptorSet 0
+                              Decorate 124(Color) Location 0
+                              Decorate 128(Depth) BuiltIn FragDepth
+                              Decorate 134(g_tTex1df4) DescriptorSet 0
+                              Decorate 134(g_tTex1df4) Binding 0
+                              Decorate 137(g_tTex1di4) DescriptorSet 0
+                              Decorate 140(g_tTex1du4) DescriptorSet 0
+                              Decorate 143(g_tTex2df4) DescriptorSet 0
+                              Decorate 146(g_tTex2di4) DescriptorSet 0
+                              Decorate 149(g_tTex2du4) DescriptorSet 0
+                              Decorate 152(g_tTex3df4) DescriptorSet 0
+                              Decorate 155(g_tTex3di4) DescriptorSet 0
+                              Decorate 158(g_tTex3du4) DescriptorSet 0
+                              Decorate 161(g_tTexcdf4) DescriptorSet 0
+                              Decorate 164(g_tTexcdi4) DescriptorSet 0
+                              Decorate 167(g_tTexcdu4) DescriptorSet 0
+                              Decorate 170(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 173(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 176(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -412,157 +412,172 @@ gl_FragCoord origin is upper left
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:             TypeInt 32 1
-              27:     26(int) Constant 2
-              31:             TypeImage 26(int) 1D array sampled format:Unknown
-              32:             TypePointer UniformConstant 31
- 33(g_tTex1di4a):     32(ptr) Variable UniformConstant
-              36:             TypeImage 26(int) 1D depth array sampled format:Unknown
-              37:             TypeSampledImage 36
-              43:             TypeInt 32 0
-              44:             TypeImage 43(int) 1D array sampled format:Unknown
-              45:             TypePointer UniformConstant 44
- 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
-              49:             TypeImage 43(int) 1D depth array sampled format:Unknown
-              50:             TypeSampledImage 49
-              56:             TypeImage 6(float) 2D array sampled format:Unknown
-              57:             TypePointer UniformConstant 56
- 58(g_tTex2df4a):     57(ptr) Variable UniformConstant
-              61:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              62:             TypeSampledImage 61
-              64:             TypeVector 6(float) 3
-              65:    6(float) Constant 1050253722
-              66:   64(fvec3) ConstantComposite 21 22 65
-              68:             TypeVector 26(int) 2
-              69:     26(int) Constant 3
-              70:   68(ivec2) ConstantComposite 27 69
-              74:             TypeImage 26(int) 2D array sampled format:Unknown
-              75:             TypePointer UniformConstant 74
- 76(g_tTex2di4a):     75(ptr) Variable UniformConstant
-              79:             TypeImage 26(int) 2D depth array sampled format:Unknown
-              80:             TypeSampledImage 79
-              86:             TypeImage 43(int) 2D array sampled format:Unknown
-              87:             TypePointer UniformConstant 86
- 88(g_tTex2du4a):     87(ptr) Variable UniformConstant
-              91:             TypeImage 43(int) 2D depth array sampled format:Unknown
-              92:             TypeSampledImage 91
-              97:             TypeVector 6(float) 4
-   98(PS_OUTPUT):             TypeStruct 97(fvec4) 6(float)
-              99:             TypePointer Function 98(PS_OUTPUT)
-             101:     26(int) Constant 0
-             102:    6(float) Constant 1065353216
-             103:   97(fvec4) ConstantComposite 102 102 102 102
-             104:             TypePointer Function 97(fvec4)
-             106:     26(int) Constant 1
-             108:             TypePointer Output 97(fvec4)
-      109(Color):    108(ptr) Variable Output
-             112:             TypePointer Output 6(float)
-      113(Depth):    112(ptr) Variable Output
-             117:             TypeImage 6(float) 1D sampled format:Unknown
-             118:             TypePointer UniformConstant 117
- 119(g_tTex1df4):    118(ptr) Variable UniformConstant
-             120:             TypeImage 26(int) 1D sampled format:Unknown
-             121:             TypePointer UniformConstant 120
- 122(g_tTex1di4):    121(ptr) Variable UniformConstant
-             123:             TypeImage 43(int) 1D sampled format:Unknown
-             124:             TypePointer UniformConstant 123
- 125(g_tTex1du4):    124(ptr) Variable UniformConstant
-             126:             TypeImage 6(float) 2D sampled format:Unknown
-             127:             TypePointer UniformConstant 126
- 128(g_tTex2df4):    127(ptr) Variable UniformConstant
-             129:             TypeImage 26(int) 2D sampled format:Unknown
-             130:             TypePointer UniformConstant 129
- 131(g_tTex2di4):    130(ptr) Variable UniformConstant
-             132:             TypeImage 43(int) 2D sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:             TypeInt 32 1
+              30:     29(int) Constant 2
+              34:             TypeImage 29(int) 1D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+ 36(g_tTex1di4a):     35(ptr) Variable UniformConstant
+              39:             TypeImage 29(int) 1D depth array sampled format:Unknown
+              40:             TypeSampledImage 39
+              48:             TypeInt 32 0
+              49:             TypeImage 48(int) 1D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+ 51(g_tTex1du4a):     50(ptr) Variable UniformConstant
+              54:             TypeImage 48(int) 1D depth array sampled format:Unknown
+              55:             TypeSampledImage 54
+              63:             TypeImage 6(float) 2D array sampled format:Unknown
+              64:             TypePointer UniformConstant 63
+ 65(g_tTex2df4a):     64(ptr) Variable UniformConstant
+              68:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              69:             TypeSampledImage 68
+              71:    6(float) Constant 1050253722
+              72:   25(fvec3) ConstantComposite 21 22 71
+              73:             TypeVector 6(float) 4
+              78:             TypeVector 29(int) 2
+              79:     29(int) Constant 3
+              80:   78(ivec2) ConstantComposite 30 79
+              84:             TypeImage 29(int) 2D array sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+ 86(g_tTex2di4a):     85(ptr) Variable UniformConstant
+              89:             TypeImage 29(int) 2D depth array sampled format:Unknown
+              90:             TypeSampledImage 89
+              99:             TypeImage 48(int) 2D array sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+101(g_tTex2du4a):    100(ptr) Variable UniformConstant
+             104:             TypeImage 48(int) 2D depth array sampled format:Unknown
+             105:             TypeSampledImage 104
+  113(PS_OUTPUT):             TypeStruct 73(fvec4) 6(float)
+             114:             TypePointer Function 113(PS_OUTPUT)
+             116:     29(int) Constant 0
+             117:    6(float) Constant 1065353216
+             118:   73(fvec4) ConstantComposite 117 117 117 117
+             119:             TypePointer Function 73(fvec4)
+             121:     29(int) Constant 1
+             123:             TypePointer Output 73(fvec4)
+      124(Color):    123(ptr) Variable Output
+             127:             TypePointer Output 6(float)
+      128(Depth):    127(ptr) Variable Output
+             132:             TypeImage 6(float) 1D sampled format:Unknown
              133:             TypePointer UniformConstant 132
- 134(g_tTex2du4):    133(ptr) Variable UniformConstant
-             135:             TypeImage 6(float) 3D sampled format:Unknown
+ 134(g_tTex1df4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 29(int) 1D sampled format:Unknown
              136:             TypePointer UniformConstant 135
- 137(g_tTex3df4):    136(ptr) Variable UniformConstant
-             138:             TypeImage 26(int) 3D sampled format:Unknown
+ 137(g_tTex1di4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 48(int) 1D sampled format:Unknown
              139:             TypePointer UniformConstant 138
- 140(g_tTex3di4):    139(ptr) Variable UniformConstant
-             141:             TypeImage 43(int) 3D sampled format:Unknown
+ 140(g_tTex1du4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 6(float) 2D sampled format:Unknown
              142:             TypePointer UniformConstant 141
- 143(g_tTex3du4):    142(ptr) Variable UniformConstant
-             144:             TypeImage 6(float) Cube sampled format:Unknown
+ 143(g_tTex2df4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 29(int) 2D sampled format:Unknown
              145:             TypePointer UniformConstant 144
- 146(g_tTexcdf4):    145(ptr) Variable UniformConstant
-             147:             TypeImage 26(int) Cube sampled format:Unknown
+ 146(g_tTex2di4):    145(ptr) Variable UniformConstant
+             147:             TypeImage 48(int) 2D sampled format:Unknown
              148:             TypePointer UniformConstant 147
- 149(g_tTexcdi4):    148(ptr) Variable UniformConstant
-             150:             TypeImage 43(int) Cube sampled format:Unknown
+ 149(g_tTex2du4):    148(ptr) Variable UniformConstant
+             150:             TypeImage 6(float) 3D sampled format:Unknown
              151:             TypePointer UniformConstant 150
- 152(g_tTexcdu4):    151(ptr) Variable UniformConstant
-             153:             TypeImage 6(float) Cube array sampled format:Unknown
+ 152(g_tTex3df4):    151(ptr) Variable UniformConstant
+             153:             TypeImage 29(int) 3D sampled format:Unknown
              154:             TypePointer UniformConstant 153
-155(g_tTexcdf4a):    154(ptr) Variable UniformConstant
-             156:             TypeImage 26(int) Cube array sampled format:Unknown
+ 155(g_tTex3di4):    154(ptr) Variable UniformConstant
+             156:             TypeImage 48(int) 3D sampled format:Unknown
              157:             TypePointer UniformConstant 156
-158(g_tTexcdi4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 43(int) Cube array sampled format:Unknown
+ 158(g_tTex3du4):    157(ptr) Variable UniformConstant
+             159:             TypeImage 6(float) Cube sampled format:Unknown
              160:             TypePointer UniformConstant 159
-161(g_tTexcdu4a):    160(ptr) Variable UniformConstant
+ 161(g_tTexcdf4):    160(ptr) Variable UniformConstant
+             162:             TypeImage 29(int) Cube sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTexcdi4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 48(int) Cube sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTexcdu4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 6(float) Cube array sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+170(g_tTexcdf4a):    169(ptr) Variable UniformConstant
+             171:             TypeImage 29(int) Cube array sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+173(g_tTexcdi4a):    172(ptr) Variable UniformConstant
+             174:             TypeImage 48(int) Cube array sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+176(g_tTexcdu4a):    175(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r11):      7(ptr) Variable Function
-         30(r13):      7(ptr) Variable Function
-         42(r15):      7(ptr) Variable Function
-         55(r31):      7(ptr) Variable Function
-         73(r33):      7(ptr) Variable Function
-         85(r35):      7(ptr) Variable Function
-      100(psout):     99(ptr) Variable Function
+         33(r13):      7(ptr) Variable Function
+         47(r15):      7(ptr) Variable Function
+         62(r31):      7(ptr) Variable Function
+         83(r33):      7(ptr) Variable Function
+         98(r35):      7(ptr) Variable Function
+      115(psout):    114(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              28:    6(float) CompositeExtract 25 0
-              29:    6(float) ImageSampleDrefImplicitLod 19 25 28 ConstOffset 27
-                              Store 8(r11) 29
-              34:          31 Load 33(g_tTex1di4a)
-              35:          13 Load 15(g_sSamp)
-              38:          37 SampledImage 34 35
-              39:    6(float) CompositeExtract 23 0
-              40:    6(float) CompositeExtract 39 0
-              41:    6(float) ImageSampleDrefImplicitLod 38 39 40 ConstOffset 27
-                              Store 30(r13) 41
-              47:          44 Load 46(g_tTex1du4a)
-              48:          13 Load 15(g_sSamp)
-              51:          50 SampledImage 47 48
-              52:    6(float) CompositeExtract 23 0
-              53:    6(float) CompositeExtract 52 0
-              54:    6(float) ImageSampleDrefImplicitLod 51 52 53 ConstOffset 27
-                              Store 42(r15) 54
-              59:          56 Load 58(g_tTex2df4a)
-              60:          13 Load 15(g_sSamp)
-              63:          62 SampledImage 59 60
-              67:    6(float) CompositeExtract 66 0
-              71:    6(float) CompositeExtract 67 0
-              72:    6(float) ImageSampleDrefImplicitLod 63 67 71 ConstOffset 70
-                              Store 55(r31) 72
-              77:          74 Load 76(g_tTex2di4a)
-              78:          13 Load 15(g_sSamp)
-              81:          80 SampledImage 77 78
-              82:    6(float) CompositeExtract 66 0
-              83:    6(float) CompositeExtract 82 0
-              84:    6(float) ImageSampleDrefImplicitLod 81 82 83 ConstOffset 70
-                              Store 73(r33) 84
-              89:          86 Load 88(g_tTex2du4a)
-              90:          13 Load 15(g_sSamp)
-              93:          92 SampledImage 89 90
-              94:    6(float) CompositeExtract 66 0
-              95:    6(float) CompositeExtract 94 0
-              96:    6(float) ImageSampleDrefImplicitLod 93 94 95 ConstOffset 70
-                              Store 85(r35) 96
-             105:    104(ptr) AccessChain 100(psout) 101
-                              Store 105 103
-             107:      7(ptr) AccessChain 100(psout) 106
-                              Store 107 102
-             110:    104(ptr) AccessChain 100(psout) 101
-             111:   97(fvec4) Load 110
-                              Store 109(Color) 111
-             114:      7(ptr) AccessChain 100(psout) 106
-             115:    6(float) Load 114
-                              Store 113(Depth) 115
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              31:    6(float) CompositeExtract 28 2
+              32:    6(float) ImageSampleDrefImplicitLod 19 28 31 ConstOffset 30
+                              Store 8(r11) 32
+              37:          34 Load 36(g_tTex1di4a)
+              38:          13 Load 15(g_sSamp)
+              41:          40 SampledImage 37 38
+              42:    6(float) CompositeExtract 23 0
+              43:    6(float) CompositeExtract 23 1
+              44:   25(fvec3) CompositeConstruct 42 43 24
+              45:    6(float) CompositeExtract 44 2
+              46:    6(float) ImageSampleDrefImplicitLod 41 44 45 ConstOffset 30
+                              Store 33(r13) 46
+              52:          49 Load 51(g_tTex1du4a)
+              53:          13 Load 15(g_sSamp)
+              56:          55 SampledImage 52 53
+              57:    6(float) CompositeExtract 23 0
+              58:    6(float) CompositeExtract 23 1
+              59:   25(fvec3) CompositeConstruct 57 58 24
+              60:    6(float) CompositeExtract 59 2
+              61:    6(float) ImageSampleDrefImplicitLod 56 59 60 ConstOffset 30
+                              Store 47(r15) 61
+              66:          63 Load 65(g_tTex2df4a)
+              67:          13 Load 15(g_sSamp)
+              70:          69 SampledImage 66 67
+              74:    6(float) CompositeExtract 72 0
+              75:    6(float) CompositeExtract 72 1
+              76:    6(float) CompositeExtract 72 2
+              77:   73(fvec4) CompositeConstruct 74 75 76 24
+              81:    6(float) CompositeExtract 77 3
+              82:    6(float) ImageSampleDrefImplicitLod 70 77 81 ConstOffset 80
+                              Store 62(r31) 82
+              87:          84 Load 86(g_tTex2di4a)
+              88:          13 Load 15(g_sSamp)
+              91:          90 SampledImage 87 88
+              92:    6(float) CompositeExtract 72 0
+              93:    6(float) CompositeExtract 72 1
+              94:    6(float) CompositeExtract 72 2
+              95:   73(fvec4) CompositeConstruct 92 93 94 24
+              96:    6(float) CompositeExtract 95 3
+              97:    6(float) ImageSampleDrefImplicitLod 91 95 96 ConstOffset 80
+                              Store 83(r33) 97
+             102:          99 Load 101(g_tTex2du4a)
+             103:          13 Load 15(g_sSamp)
+             106:         105 SampledImage 102 103
+             107:    6(float) CompositeExtract 72 0
+             108:    6(float) CompositeExtract 72 1
+             109:    6(float) CompositeExtract 72 2
+             110:   73(fvec4) CompositeConstruct 107 108 109 24
+             111:    6(float) CompositeExtract 110 3
+             112:    6(float) ImageSampleDrefImplicitLod 106 110 111 ConstOffset 80
+                              Store 98(r35) 112
+             120:    119(ptr) AccessChain 115(psout) 116
+                              Store 120 118
+             122:      7(ptr) AccessChain 115(psout) 121
+                              Store 122 117
+             125:    119(ptr) AccessChain 115(psout) 116
+             126:   73(fvec4) Load 125
+                              Store 124(Color) 126
+             129:      7(ptr) AccessChain 115(psout) 121
+             130:    6(float) Load 129
+                              Store 128(Depth) 130
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 949f7f2bd586d177384a61b61fa0657453f6f81f..29e02cd9088df254129efccf9dff8531eb0b9c4c 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmplevelzero.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -23,11 +23,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -38,11 +38,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -53,11 +53,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -69,11 +69,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -85,11 +85,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -101,11 +101,11 @@ gl_FragCoord origin is upper left
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          textureLod (global float)
+0:52          textureLod (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -118,11 +118,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -135,11 +135,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -166,8 +166,8 @@ gl_FragCoord origin is upper left
 0:57            1 (const int)
 0:57        Constant:
 0:57          1.000000
-0:?       Sequence
-0:?         Sequence
+0:59      Sequence
+0:59        Sequence
 0:59          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:59            Color: direct index for structure (temp 4-component vector of float)
@@ -182,6 +182,8 @@ gl_FragCoord origin is upper left
 0:59                1 (const int)
 0:59        Branch: Return
 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)
@@ -204,8 +206,6 @@ 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:
@@ -214,17 +214,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -235,11 +235,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -250,11 +250,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -265,11 +265,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -281,11 +281,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -297,11 +297,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -313,11 +313,11 @@ gl_FragCoord origin is upper left
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          textureLod (global float)
+0:52          textureLod (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -330,11 +330,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -347,11 +347,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -378,8 +378,8 @@ gl_FragCoord origin is upper left
 0:57            1 (const int)
 0:57        Constant:
 0:57          1.000000
-0:?       Sequence
-0:?         Sequence
+0:59      Sequence
+0:59        Sequence
 0:59          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:59            Color: direct index for structure (temp 4-component vector of float)
@@ -394,6 +394,8 @@ gl_FragCoord origin is upper left
 0:59                1 (const int)
 0:59        Branch: Return
 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)
@@ -416,84 +418,82 @@ 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 185
+// Id's are bound by 212
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 141 145
+                              EntryPoint Fragment 4  "main" 168 172
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r10"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 29  "r12"
-                              Name 33  "g_tTex1di4a"
-                              Name 42  "r14"
-                              Name 46  "g_tTex1du4a"
-                              Name 55  "r30"
-                              Name 58  "g_tTex2df4a"
-                              Name 70  "r32"
-                              Name 73  "g_tTex2di4a"
-                              Name 82  "r34"
-                              Name 85  "g_tTex2du4a"
-                              Name 94  "r60"
-                              Name 97  "g_tTexcdf4a"
-                              Name 108  "r62"
-                              Name 111  "g_tTexcdi4a"
-                              Name 119  "r64"
-                              Name 122  "g_tTexcdu4a"
-                              Name 130  "PS_OUTPUT"
-                              MemberName 130(PS_OUTPUT) 0  "Color"
-                              MemberName 130(PS_OUTPUT) 1  "Depth"
-                              Name 132  "psout"
-                              Name 141  "Color"
-                              Name 145  "Depth"
-                              Name 151  "g_tTex1df4"
-                              Name 154  "g_tTex1di4"
-                              Name 157  "g_tTex1du4"
-                              Name 160  "g_tTex2df4"
-                              Name 163  "g_tTex2di4"
-                              Name 166  "g_tTex2du4"
-                              Name 169  "g_tTex3df4"
-                              Name 172  "g_tTex3di4"
-                              Name 175  "g_tTex3du4"
-                              Name 178  "g_tTexcdf4"
-                              Name 181  "g_tTexcdi4"
-                              Name 184  "g_tTexcdu4"
+                              Name 32  "r12"
+                              Name 36  "g_tTex1di4a"
+                              Name 47  "r14"
+                              Name 51  "g_tTex1du4a"
+                              Name 62  "r30"
+                              Name 65  "g_tTex2df4a"
+                              Name 80  "r32"
+                              Name 83  "g_tTex2di4a"
+                              Name 95  "r34"
+                              Name 98  "g_tTex2du4a"
+                              Name 110  "r60"
+                              Name 113  "g_tTexcdf4a"
+                              Name 127  "r62"
+                              Name 130  "g_tTexcdi4a"
+                              Name 142  "r64"
+                              Name 145  "g_tTexcdu4a"
+                              Name 157  "PS_OUTPUT"
+                              MemberName 157(PS_OUTPUT) 0  "Color"
+                              MemberName 157(PS_OUTPUT) 1  "Depth"
+                              Name 159  "psout"
+                              Name 168  "Color"
+                              Name 172  "Depth"
+                              Name 178  "g_tTex1df4"
+                              Name 181  "g_tTex1di4"
+                              Name 184  "g_tTex1du4"
+                              Name 187  "g_tTex2df4"
+                              Name 190  "g_tTex2di4"
+                              Name 193  "g_tTex2du4"
+                              Name 196  "g_tTex3df4"
+                              Name 199  "g_tTex3di4"
+                              Name 202  "g_tTex3du4"
+                              Name 205  "g_tTexcdf4"
+                              Name 208  "g_tTexcdi4"
+                              Name 211  "g_tTexcdu4"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 46(g_tTex1du4a) DescriptorSet 0
-                              Decorate 58(g_tTex2df4a) DescriptorSet 0
-                              Decorate 73(g_tTex2di4a) DescriptorSet 0
-                              Decorate 85(g_tTex2du4a) DescriptorSet 0
-                              Decorate 97(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 111(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 122(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 141(Color) Location 0
-                              Decorate 145(Depth) BuiltIn FragDepth
-                              Decorate 151(g_tTex1df4) DescriptorSet 0
-                              Decorate 151(g_tTex1df4) Binding 0
-                              Decorate 154(g_tTex1di4) DescriptorSet 0
-                              Decorate 157(g_tTex1du4) DescriptorSet 0
-                              Decorate 160(g_tTex2df4) DescriptorSet 0
-                              Decorate 163(g_tTex2di4) DescriptorSet 0
-                              Decorate 166(g_tTex2du4) DescriptorSet 0
-                              Decorate 169(g_tTex3df4) DescriptorSet 0
-                              Decorate 172(g_tTex3di4) DescriptorSet 0
-                              Decorate 175(g_tTex3du4) DescriptorSet 0
-                              Decorate 178(g_tTexcdf4) DescriptorSet 0
-                              Decorate 181(g_tTexcdi4) DescriptorSet 0
-                              Decorate 184(g_tTexcdu4) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 51(g_tTex1du4a) DescriptorSet 0
+                              Decorate 65(g_tTex2df4a) DescriptorSet 0
+                              Decorate 83(g_tTex2di4a) DescriptorSet 0
+                              Decorate 98(g_tTex2du4a) DescriptorSet 0
+                              Decorate 113(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 130(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 145(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 168(Color) Location 0
+                              Decorate 172(Depth) BuiltIn FragDepth
+                              Decorate 178(g_tTex1df4) DescriptorSet 0
+                              Decorate 178(g_tTex1df4) Binding 0
+                              Decorate 181(g_tTex1di4) DescriptorSet 0
+                              Decorate 184(g_tTex1du4) DescriptorSet 0
+                              Decorate 187(g_tTex2df4) DescriptorSet 0
+                              Decorate 190(g_tTex2di4) DescriptorSet 0
+                              Decorate 193(g_tTex2du4) DescriptorSet 0
+                              Decorate 196(g_tTex3df4) DescriptorSet 0
+                              Decorate 199(g_tTex3di4) DescriptorSet 0
+                              Decorate 202(g_tTex3du4) DescriptorSet 0
+                              Decorate 205(g_tTexcdf4) DescriptorSet 0
+                              Decorate 208(g_tTexcdi4) DescriptorSet 0
+                              Decorate 211(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -511,183 +511,210 @@ gl_FragCoord origin is upper left
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:    6(float) Constant 0
-              30:             TypeInt 32 1
-              31:             TypeImage 30(int) 1D array sampled format:Unknown
-              32:             TypePointer UniformConstant 31
- 33(g_tTex1di4a):     32(ptr) Variable UniformConstant
-              36:             TypeImage 30(int) 1D depth array sampled format:Unknown
-              37:             TypeSampledImage 36
-              43:             TypeInt 32 0
-              44:             TypeImage 43(int) 1D array sampled format:Unknown
-              45:             TypePointer UniformConstant 44
- 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
-              49:             TypeImage 43(int) 1D depth array sampled format:Unknown
-              50:             TypeSampledImage 49
-              56:             TypeImage 6(float) 2D array sampled format:Unknown
-              57:             TypePointer UniformConstant 56
- 58(g_tTex2df4a):     57(ptr) Variable UniformConstant
-              61:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              62:             TypeSampledImage 61
-              64:             TypeVector 6(float) 3
-              65:    6(float) Constant 1050253722
-              66:   64(fvec3) ConstantComposite 21 22 65
-              71:             TypeImage 30(int) 2D array sampled format:Unknown
-              72:             TypePointer UniformConstant 71
- 73(g_tTex2di4a):     72(ptr) Variable UniformConstant
-              76:             TypeImage 30(int) 2D depth array sampled format:Unknown
-              77:             TypeSampledImage 76
-              83:             TypeImage 43(int) 2D array sampled format:Unknown
-              84:             TypePointer UniformConstant 83
- 85(g_tTex2du4a):     84(ptr) Variable UniformConstant
-              88:             TypeImage 43(int) 2D depth array sampled format:Unknown
-              89:             TypeSampledImage 88
-              95:             TypeImage 6(float) Cube array sampled format:Unknown
-              96:             TypePointer UniformConstant 95
- 97(g_tTexcdf4a):     96(ptr) Variable UniformConstant
-             100:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             101:             TypeSampledImage 100
-             103:             TypeVector 6(float) 4
-             104:    6(float) Constant 1053609165
-             105:  103(fvec4) ConstantComposite 21 22 65 104
-             109:             TypeImage 30(int) Cube array sampled format:Unknown
-             110:             TypePointer UniformConstant 109
-111(g_tTexcdi4a):    110(ptr) Variable UniformConstant
-             114:             TypeImage 30(int) Cube depth array sampled format:Unknown
-             115:             TypeSampledImage 114
-             120:             TypeImage 43(int) Cube array sampled format:Unknown
-             121:             TypePointer UniformConstant 120
-122(g_tTexcdu4a):    121(ptr) Variable UniformConstant
-             125:             TypeImage 43(int) Cube depth array sampled format:Unknown
-             126:             TypeSampledImage 125
-  130(PS_OUTPUT):             TypeStruct 103(fvec4) 6(float)
-             131:             TypePointer Function 130(PS_OUTPUT)
-             133:     30(int) Constant 0
-             134:    6(float) Constant 1065353216
-             135:  103(fvec4) ConstantComposite 134 134 134 134
-             136:             TypePointer Function 103(fvec4)
-             138:     30(int) Constant 1
-             140:             TypePointer Output 103(fvec4)
-      141(Color):    140(ptr) Variable Output
-             144:             TypePointer Output 6(float)
-      145(Depth):    144(ptr) Variable Output
-             149:             TypeImage 6(float) 1D sampled format:Unknown
-             150:             TypePointer UniformConstant 149
- 151(g_tTex1df4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 30(int) 1D sampled format:Unknown
-             153:             TypePointer UniformConstant 152
- 154(g_tTex1di4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 43(int) 1D sampled format:Unknown
-             156:             TypePointer UniformConstant 155
- 157(g_tTex1du4):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) 2D sampled format:Unknown
-             159:             TypePointer UniformConstant 158
- 160(g_tTex2df4):    159(ptr) Variable UniformConstant
-             161:             TypeImage 30(int) 2D sampled format:Unknown
-             162:             TypePointer UniformConstant 161
- 163(g_tTex2di4):    162(ptr) Variable UniformConstant
-             164:             TypeImage 43(int) 2D sampled format:Unknown
-             165:             TypePointer UniformConstant 164
- 166(g_tTex2du4):    165(ptr) Variable UniformConstant
-             167:             TypeImage 6(float) 3D sampled format:Unknown
-             168:             TypePointer UniformConstant 167
- 169(g_tTex3df4):    168(ptr) Variable UniformConstant
-             170:             TypeImage 30(int) 3D sampled format:Unknown
-             171:             TypePointer UniformConstant 170
- 172(g_tTex3di4):    171(ptr) Variable UniformConstant
-             173:             TypeImage 43(int) 3D sampled format:Unknown
-             174:             TypePointer UniformConstant 173
- 175(g_tTex3du4):    174(ptr) Variable UniformConstant
-             176:             TypeImage 6(float) Cube sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:    6(float) Constant 0
+              33:             TypeInt 32 1
+              34:             TypeImage 33(int) 1D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+ 36(g_tTex1di4a):     35(ptr) Variable UniformConstant
+              39:             TypeImage 33(int) 1D depth array sampled format:Unknown
+              40:             TypeSampledImage 39
+              48:             TypeInt 32 0
+              49:             TypeImage 48(int) 1D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+ 51(g_tTex1du4a):     50(ptr) Variable UniformConstant
+              54:             TypeImage 48(int) 1D depth array sampled format:Unknown
+              55:             TypeSampledImage 54
+              63:             TypeImage 6(float) 2D array sampled format:Unknown
+              64:             TypePointer UniformConstant 63
+ 65(g_tTex2df4a):     64(ptr) Variable UniformConstant
+              68:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              69:             TypeSampledImage 68
+              71:    6(float) Constant 1050253722
+              72:   25(fvec3) ConstantComposite 21 22 71
+              73:             TypeVector 6(float) 4
+              81:             TypeImage 33(int) 2D array sampled format:Unknown
+              82:             TypePointer UniformConstant 81
+ 83(g_tTex2di4a):     82(ptr) Variable UniformConstant
+              86:             TypeImage 33(int) 2D depth array sampled format:Unknown
+              87:             TypeSampledImage 86
+              96:             TypeImage 48(int) 2D array sampled format:Unknown
+              97:             TypePointer UniformConstant 96
+ 98(g_tTex2du4a):     97(ptr) Variable UniformConstant
+             101:             TypeImage 48(int) 2D depth array sampled format:Unknown
+             102:             TypeSampledImage 101
+             111:             TypeImage 6(float) Cube array sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+113(g_tTexcdf4a):    112(ptr) Variable UniformConstant
+             116:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             117:             TypeSampledImage 116
+             119:    6(float) Constant 1053609165
+             120:   73(fvec4) ConstantComposite 21 22 71 119
+             128:             TypeImage 33(int) Cube array sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+130(g_tTexcdi4a):    129(ptr) Variable UniformConstant
+             133:             TypeImage 33(int) Cube depth array sampled format:Unknown
+             134:             TypeSampledImage 133
+             143:             TypeImage 48(int) Cube array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTexcdu4a):    144(ptr) Variable UniformConstant
+             148:             TypeImage 48(int) Cube depth array sampled format:Unknown
+             149:             TypeSampledImage 148
+  157(PS_OUTPUT):             TypeStruct 73(fvec4) 6(float)
+             158:             TypePointer Function 157(PS_OUTPUT)
+             160:     33(int) Constant 0
+             161:    6(float) Constant 1065353216
+             162:   73(fvec4) ConstantComposite 161 161 161 161
+             163:             TypePointer Function 73(fvec4)
+             165:     33(int) Constant 1
+             167:             TypePointer Output 73(fvec4)
+      168(Color):    167(ptr) Variable Output
+             171:             TypePointer Output 6(float)
+      172(Depth):    171(ptr) Variable Output
+             176:             TypeImage 6(float) 1D sampled format:Unknown
              177:             TypePointer UniformConstant 176
- 178(g_tTexcdf4):    177(ptr) Variable UniformConstant
-             179:             TypeImage 30(int) Cube sampled format:Unknown
+ 178(g_tTex1df4):    177(ptr) Variable UniformConstant
+             179:             TypeImage 33(int) 1D sampled format:Unknown
              180:             TypePointer UniformConstant 179
- 181(g_tTexcdi4):    180(ptr) Variable UniformConstant
-             182:             TypeImage 43(int) Cube sampled format:Unknown
+ 181(g_tTex1di4):    180(ptr) Variable UniformConstant
+             182:             TypeImage 48(int) 1D sampled format:Unknown
              183:             TypePointer UniformConstant 182
- 184(g_tTexcdu4):    183(ptr) Variable UniformConstant
+ 184(g_tTex1du4):    183(ptr) Variable UniformConstant
+             185:             TypeImage 6(float) 2D sampled format:Unknown
+             186:             TypePointer UniformConstant 185
+ 187(g_tTex2df4):    186(ptr) Variable UniformConstant
+             188:             TypeImage 33(int) 2D sampled format:Unknown
+             189:             TypePointer UniformConstant 188
+ 190(g_tTex2di4):    189(ptr) Variable UniformConstant
+             191:             TypeImage 48(int) 2D sampled format:Unknown
+             192:             TypePointer UniformConstant 191
+ 193(g_tTex2du4):    192(ptr) Variable UniformConstant
+             194:             TypeImage 6(float) 3D sampled format:Unknown
+             195:             TypePointer UniformConstant 194
+ 196(g_tTex3df4):    195(ptr) Variable UniformConstant
+             197:             TypeImage 33(int) 3D sampled format:Unknown
+             198:             TypePointer UniformConstant 197
+ 199(g_tTex3di4):    198(ptr) Variable UniformConstant
+             200:             TypeImage 48(int) 3D sampled format:Unknown
+             201:             TypePointer UniformConstant 200
+ 202(g_tTex3du4):    201(ptr) Variable UniformConstant
+             203:             TypeImage 6(float) Cube sampled format:Unknown
+             204:             TypePointer UniformConstant 203
+ 205(g_tTexcdf4):    204(ptr) Variable UniformConstant
+             206:             TypeImage 33(int) Cube sampled format:Unknown
+             207:             TypePointer UniformConstant 206
+ 208(g_tTexcdi4):    207(ptr) Variable UniformConstant
+             209:             TypeImage 48(int) Cube sampled format:Unknown
+             210:             TypePointer UniformConstant 209
+ 211(g_tTexcdu4):    210(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r10):      7(ptr) Variable Function
-         29(r12):      7(ptr) Variable Function
-         42(r14):      7(ptr) Variable Function
-         55(r30):      7(ptr) Variable Function
-         70(r32):      7(ptr) Variable Function
-         82(r34):      7(ptr) Variable Function
-         94(r60):      7(ptr) Variable Function
-        108(r62):      7(ptr) Variable Function
-        119(r64):      7(ptr) Variable Function
-      132(psout):    131(ptr) Variable Function
+         32(r12):      7(ptr) Variable Function
+         47(r14):      7(ptr) Variable Function
+         62(r30):      7(ptr) Variable Function
+         80(r32):      7(ptr) Variable Function
+         95(r34):      7(ptr) Variable Function
+        110(r60):      7(ptr) Variable Function
+        127(r62):      7(ptr) Variable Function
+        142(r64):      7(ptr) Variable Function
+      159(psout):    158(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              27:    6(float) CompositeExtract 25 0
-              28:    6(float) ImageSampleDrefExplicitLod 19 25 27 Lod 26
-                              Store 8(r10) 28
-              34:          31 Load 33(g_tTex1di4a)
-              35:          13 Load 15(g_sSamp)
-              38:          37 SampledImage 34 35
-              39:    6(float) CompositeExtract 23 0
-              40:    6(float) CompositeExtract 39 0
-              41:    6(float) ImageSampleDrefExplicitLod 38 39 40 Lod 26
-                              Store 29(r12) 41
-              47:          44 Load 46(g_tTex1du4a)
-              48:          13 Load 15(g_sSamp)
-              51:          50 SampledImage 47 48
-              52:    6(float) CompositeExtract 23 0
-              53:    6(float) CompositeExtract 52 0
-              54:    6(float) ImageSampleDrefExplicitLod 51 52 53 Lod 26
-                              Store 42(r14) 54
-              59:          56 Load 58(g_tTex2df4a)
-              60:          13 Load 15(g_sSamp)
-              63:          62 SampledImage 59 60
-              67:    6(float) CompositeExtract 66 0
-              68:    6(float) CompositeExtract 67 0
-              69:    6(float) ImageSampleDrefExplicitLod 63 67 68 Lod 26
-                              Store 55(r30) 69
-              74:          71 Load 73(g_tTex2di4a)
-              75:          13 Load 15(g_sSamp)
-              78:          77 SampledImage 74 75
-              79:    6(float) CompositeExtract 66 0
-              80:    6(float) CompositeExtract 79 0
-              81:    6(float) ImageSampleDrefExplicitLod 78 79 80 Lod 26
-                              Store 70(r32) 81
-              86:          83 Load 85(g_tTex2du4a)
-              87:          13 Load 15(g_sSamp)
-              90:          89 SampledImage 86 87
-              91:    6(float) CompositeExtract 66 0
-              92:    6(float) CompositeExtract 91 0
-              93:    6(float) ImageSampleDrefExplicitLod 90 91 92 Lod 26
-                              Store 82(r34) 93
-              98:          95 Load 97(g_tTexcdf4a)
-              99:          13 Load 15(g_sSamp)
-             102:         101 SampledImage 98 99
-             106:    6(float) CompositeExtract 105 0
-             107:    6(float) ImageSampleDrefExplicitLod 102 106 24 Lod 24
-                              Store 94(r60) 107
-             112:         109 Load 111(g_tTexcdi4a)
-             113:          13 Load 15(g_sSamp)
-             116:         115 SampledImage 112 113
-             117:    6(float) CompositeExtract 105 0
-             118:    6(float) ImageSampleDrefExplicitLod 116 117 24 Lod 24
-                              Store 108(r62) 118
-             123:         120 Load 122(g_tTexcdu4a)
-             124:          13 Load 15(g_sSamp)
-             127:         126 SampledImage 123 124
-             128:    6(float) CompositeExtract 105 0
-             129:    6(float) ImageSampleDrefExplicitLod 127 128 24 Lod 24
-                              Store 119(r64) 129
-             137:    136(ptr) AccessChain 132(psout) 133
-                              Store 137 135
-             139:      7(ptr) AccessChain 132(psout) 138
-                              Store 139 134
-             142:    136(ptr) AccessChain 132(psout) 133
-             143:  103(fvec4) Load 142
-                              Store 141(Color) 143
-             146:      7(ptr) AccessChain 132(psout) 138
-             147:    6(float) Load 146
-                              Store 145(Depth) 147
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              30:    6(float) CompositeExtract 28 2
+              31:    6(float) ImageSampleDrefExplicitLod 19 28 30 Lod 29
+                              Store 8(r10) 31
+              37:          34 Load 36(g_tTex1di4a)
+              38:          13 Load 15(g_sSamp)
+              41:          40 SampledImage 37 38
+              42:    6(float) CompositeExtract 23 0
+              43:    6(float) CompositeExtract 23 1
+              44:   25(fvec3) CompositeConstruct 42 43 24
+              45:    6(float) CompositeExtract 44 2
+              46:    6(float) ImageSampleDrefExplicitLod 41 44 45 Lod 29
+                              Store 32(r12) 46
+              52:          49 Load 51(g_tTex1du4a)
+              53:          13 Load 15(g_sSamp)
+              56:          55 SampledImage 52 53
+              57:    6(float) CompositeExtract 23 0
+              58:    6(float) CompositeExtract 23 1
+              59:   25(fvec3) CompositeConstruct 57 58 24
+              60:    6(float) CompositeExtract 59 2
+              61:    6(float) ImageSampleDrefExplicitLod 56 59 60 Lod 29
+                              Store 47(r14) 61
+              66:          63 Load 65(g_tTex2df4a)
+              67:          13 Load 15(g_sSamp)
+              70:          69 SampledImage 66 67
+              74:    6(float) CompositeExtract 72 0
+              75:    6(float) CompositeExtract 72 1
+              76:    6(float) CompositeExtract 72 2
+              77:   73(fvec4) CompositeConstruct 74 75 76 24
+              78:    6(float) CompositeExtract 77 3
+              79:    6(float) ImageSampleDrefExplicitLod 70 77 78 Lod 29
+                              Store 62(r30) 79
+              84:          81 Load 83(g_tTex2di4a)
+              85:          13 Load 15(g_sSamp)
+              88:          87 SampledImage 84 85
+              89:    6(float) CompositeExtract 72 0
+              90:    6(float) CompositeExtract 72 1
+              91:    6(float) CompositeExtract 72 2
+              92:   73(fvec4) CompositeConstruct 89 90 91 24
+              93:    6(float) CompositeExtract 92 3
+              94:    6(float) ImageSampleDrefExplicitLod 88 92 93 Lod 29
+                              Store 80(r32) 94
+              99:          96 Load 98(g_tTex2du4a)
+             100:          13 Load 15(g_sSamp)
+             103:         102 SampledImage 99 100
+             104:    6(float) CompositeExtract 72 0
+             105:    6(float) CompositeExtract 72 1
+             106:    6(float) CompositeExtract 72 2
+             107:   73(fvec4) CompositeConstruct 104 105 106 24
+             108:    6(float) CompositeExtract 107 3
+             109:    6(float) ImageSampleDrefExplicitLod 103 107 108 Lod 29
+                              Store 95(r34) 109
+             114:         111 Load 113(g_tTexcdf4a)
+             115:          13 Load 15(g_sSamp)
+             118:         117 SampledImage 114 115
+             121:    6(float) CompositeExtract 120 0
+             122:    6(float) CompositeExtract 120 1
+             123:    6(float) CompositeExtract 120 2
+             124:    6(float) CompositeExtract 120 3
+             125:   73(fvec4) CompositeConstruct 121 122 123 124
+             126:    6(float) ImageSampleDrefExplicitLod 118 125 24 Lod 24
+                              Store 110(r60) 126
+             131:         128 Load 130(g_tTexcdi4a)
+             132:          13 Load 15(g_sSamp)
+             135:         134 SampledImage 131 132
+             136:    6(float) CompositeExtract 120 0
+             137:    6(float) CompositeExtract 120 1
+             138:    6(float) CompositeExtract 120 2
+             139:    6(float) CompositeExtract 120 3
+             140:   73(fvec4) CompositeConstruct 136 137 138 139
+             141:    6(float) ImageSampleDrefExplicitLod 135 140 24 Lod 24
+                              Store 127(r62) 141
+             146:         143 Load 145(g_tTexcdu4a)
+             147:          13 Load 15(g_sSamp)
+             150:         149 SampledImage 146 147
+             151:    6(float) CompositeExtract 120 0
+             152:    6(float) CompositeExtract 120 1
+             153:    6(float) CompositeExtract 120 2
+             154:    6(float) CompositeExtract 120 3
+             155:   73(fvec4) CompositeConstruct 151 152 153 154
+             156:    6(float) ImageSampleDrefExplicitLod 150 155 24 Lod 24
+                              Store 142(r64) 156
+             164:    163(ptr) AccessChain 159(psout) 160
+                              Store 164 162
+             166:      7(ptr) AccessChain 159(psout) 165
+                              Store 166 161
+             169:    163(ptr) AccessChain 159(psout) 160
+             170:   73(fvec4) Load 169
+                              Store 168(Color) 170
+             173:      7(ptr) AccessChain 159(psout) 165
+             174:    6(float) Load 173
+                              Store 172(Depth) 174
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 5f83499a44474af1aa0cd814034750049ad6b3ca..de8227649a548860e961748dd601f83fe2e65b85 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmplevelzero.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -22,11 +22,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -36,11 +36,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -50,11 +50,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -65,11 +65,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -80,11 +80,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -95,11 +95,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -111,11 +111,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -127,11 +127,11 @@ gl_FragCoord origin is upper left
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          textureLod (global float)
+0:55          textureLod (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -157,8 +157,8 @@ gl_FragCoord origin is upper left
 0:58            1 (const int)
 0:58        Constant:
 0:58          1.000000
-0:?       Sequence
-0:?         Sequence
+0:60      Sequence
+0:60        Sequence
 0:60          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:60            Color: direct index for structure (temp 4-component vector of float)
@@ -173,6 +173,8 @@ gl_FragCoord origin is upper left
 0:60                1 (const int)
 0:60        Branch: Return
 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)
@@ -195,8 +197,6 @@ 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:
@@ -205,17 +205,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -225,11 +225,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -239,11 +239,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -253,11 +253,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -268,11 +268,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -283,11 +283,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -298,11 +298,11 @@ gl_FragCoord origin is upper left
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -314,11 +314,11 @@ gl_FragCoord origin is upper left
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -330,11 +330,11 @@ gl_FragCoord origin is upper left
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          textureLod (global float)
+0:55          textureLod (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -360,8 +360,8 @@ gl_FragCoord origin is upper left
 0:58            1 (const int)
 0:58        Constant:
 0:58          1.000000
-0:?       Sequence
-0:?         Sequence
+0:60      Sequence
+0:60        Sequence
 0:60          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:60            Color: direct index for structure (temp 4-component vector of float)
@@ -376,6 +376,8 @@ gl_FragCoord origin is upper left
 0:60                1 (const int)
 0:60        Branch: Return
 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)
@@ -398,84 +400,82 @@ 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 183
+// Id's are bound by 201
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 139 143
+                              EntryPoint Fragment 4  "main" 157 161
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r00"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 25  "r02"
-                              Name 29  "g_tTex1di4"
-                              Name 37  "r04"
-                              Name 41  "g_tTex1du4"
-                              Name 49  "r20"
-                              Name 52  "g_tTex2df4"
-                              Name 64  "r22"
-                              Name 67  "g_tTex2di4"
-                              Name 76  "r24"
-                              Name 79  "g_tTex2du4"
-                              Name 88  "r50"
-                              Name 91  "g_tTexcdf4"
-                              Name 103  "r52"
-                              Name 106  "g_tTexcdi4"
-                              Name 115  "r54"
-                              Name 118  "g_tTexcdu4"
-                              Name 128  "PS_OUTPUT"
-                              MemberName 128(PS_OUTPUT) 0  "Color"
-                              MemberName 128(PS_OUTPUT) 1  "Depth"
-                              Name 130  "psout"
-                              Name 139  "Color"
-                              Name 143  "Depth"
-                              Name 149  "g_tTex3df4"
-                              Name 152  "g_tTex3di4"
-                              Name 155  "g_tTex3du4"
-                              Name 158  "g_tTex1df4a"
-                              Name 161  "g_tTex1di4a"
-                              Name 164  "g_tTex1du4a"
-                              Name 167  "g_tTex2df4a"
-                              Name 170  "g_tTex2di4a"
-                              Name 173  "g_tTex2du4a"
-                              Name 176  "g_tTexcdf4a"
-                              Name 179  "g_tTexcdi4a"
-                              Name 182  "g_tTexcdu4a"
+                              Name 27  "r02"
+                              Name 31  "g_tTex1di4"
+                              Name 40  "r04"
+                              Name 44  "g_tTex1du4"
+                              Name 53  "r20"
+                              Name 56  "g_tTex2df4"
+                              Name 70  "r22"
+                              Name 73  "g_tTex2di4"
+                              Name 84  "r24"
+                              Name 87  "g_tTex2du4"
+                              Name 98  "r50"
+                              Name 101  "g_tTexcdf4"
+                              Name 116  "r52"
+                              Name 119  "g_tTexcdi4"
+                              Name 131  "r54"
+                              Name 134  "g_tTexcdu4"
+                              Name 146  "PS_OUTPUT"
+                              MemberName 146(PS_OUTPUT) 0  "Color"
+                              MemberName 146(PS_OUTPUT) 1  "Depth"
+                              Name 148  "psout"
+                              Name 157  "Color"
+                              Name 161  "Depth"
+                              Name 167  "g_tTex3df4"
+                              Name 170  "g_tTex3di4"
+                              Name 173  "g_tTex3du4"
+                              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 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 41(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex2df4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 79(g_tTex2du4) DescriptorSet 0
-                              Decorate 91(g_tTexcdf4) DescriptorSet 0
-                              Decorate 106(g_tTexcdi4) DescriptorSet 0
-                              Decorate 118(g_tTexcdu4) DescriptorSet 0
-                              Decorate 139(Color) Location 0
-                              Decorate 143(Depth) BuiltIn FragDepth
-                              Decorate 149(g_tTex3df4) DescriptorSet 0
-                              Decorate 152(g_tTex3di4) DescriptorSet 0
-                              Decorate 155(g_tTex3du4) DescriptorSet 0
-                              Decorate 158(g_tTex1df4a) DescriptorSet 0
-                              Decorate 161(g_tTex1di4a) DescriptorSet 0
-                              Decorate 164(g_tTex1du4a) DescriptorSet 0
-                              Decorate 167(g_tTex2df4a) DescriptorSet 0
-                              Decorate 170(g_tTex2di4a) DescriptorSet 0
-                              Decorate 173(g_tTex2du4a) DescriptorSet 0
-                              Decorate 176(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 179(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 182(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 31(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 101(g_tTexcdf4) DescriptorSet 0
+                              Decorate 119(g_tTexcdi4) DescriptorSet 0
+                              Decorate 134(g_tTexcdu4) DescriptorSet 0
+                              Decorate 157(Color) Location 0
+                              Decorate 161(Depth) BuiltIn FragDepth
+                              Decorate 167(g_tTex3df4) DescriptorSet 0
+                              Decorate 170(g_tTex3di4) DescriptorSet 0
+                              Decorate 173(g_tTex3du4) 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
@@ -490,184 +490,202 @@ gl_FragCoord origin is upper left
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:    6(float) Constant 0
-              26:             TypeInt 32 1
-              27:             TypeImage 26(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              32:             TypeImage 26(int) 1D depth sampled format:Unknown
-              33:             TypeSampledImage 32
-              38:             TypeInt 32 0
-              39:             TypeImage 38(int) 1D sampled format:Unknown
-              40:             TypePointer UniformConstant 39
-  41(g_tTex1du4):     40(ptr) Variable UniformConstant
-              44:             TypeImage 38(int) 1D depth sampled format:Unknown
-              45:             TypeSampledImage 44
-              50:             TypeImage 6(float) 2D sampled format:Unknown
-              51:             TypePointer UniformConstant 50
-  52(g_tTex2df4):     51(ptr) Variable UniformConstant
-              55:             TypeImage 6(float) 2D depth sampled format:Unknown
-              56:             TypeSampledImage 55
-              58:             TypeVector 6(float) 2
-              59:    6(float) Constant 1045220557
-              60:   58(fvec2) ConstantComposite 20 59
-              65:             TypeImage 26(int) 2D sampled format:Unknown
-              66:             TypePointer UniformConstant 65
-  67(g_tTex2di4):     66(ptr) Variable UniformConstant
-              70:             TypeImage 26(int) 2D depth sampled format:Unknown
-              71:             TypeSampledImage 70
-              77:             TypeImage 38(int) 2D sampled format:Unknown
-              78:             TypePointer UniformConstant 77
-  79(g_tTex2du4):     78(ptr) Variable UniformConstant
-              82:             TypeImage 38(int) 2D depth sampled format:Unknown
-              83:             TypeSampledImage 82
-              89:             TypeImage 6(float) Cube sampled format:Unknown
-              90:             TypePointer UniformConstant 89
-  91(g_tTexcdf4):     90(ptr) Variable UniformConstant
-              94:             TypeImage 6(float) Cube depth sampled format:Unknown
-              95:             TypeSampledImage 94
-              97:             TypeVector 6(float) 3
-              98:    6(float) Constant 1050253722
-              99:   97(fvec3) ConstantComposite 20 59 98
-             104:             TypeImage 26(int) Cube sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTexcdi4):    105(ptr) Variable UniformConstant
-             109:             TypeImage 26(int) Cube depth sampled format:Unknown
-             110:             TypeSampledImage 109
-             116:             TypeImage 38(int) Cube sampled format:Unknown
-             117:             TypePointer UniformConstant 116
- 118(g_tTexcdu4):    117(ptr) Variable UniformConstant
-             121:             TypeImage 38(int) Cube depth sampled format:Unknown
-             122:             TypeSampledImage 121
-             127:             TypeVector 6(float) 4
-  128(PS_OUTPUT):             TypeStruct 127(fvec4) 6(float)
-             129:             TypePointer Function 128(PS_OUTPUT)
-             131:     26(int) Constant 0
-             132:    6(float) Constant 1065353216
-             133:  127(fvec4) ConstantComposite 132 132 132 132
-             134:             TypePointer Function 127(fvec4)
-             136:     26(int) Constant 1
-             138:             TypePointer Output 127(fvec4)
-      139(Color):    138(ptr) Variable Output
-             142:             TypePointer Output 6(float)
-      143(Depth):    142(ptr) Variable Output
-             147:             TypeImage 6(float) 3D sampled format:Unknown
-             148:             TypePointer UniformConstant 147
- 149(g_tTex3df4):    148(ptr) Variable UniformConstant
-             150:             TypeImage 26(int) 3D sampled format:Unknown
-             151:             TypePointer UniformConstant 150
- 152(g_tTex3di4):    151(ptr) Variable UniformConstant
-             153:             TypeImage 38(int) 3D sampled format:Unknown
-             154:             TypePointer UniformConstant 153
- 155(g_tTex3du4):    154(ptr) Variable UniformConstant
-             156:             TypeImage 6(float) 1D array sampled format:Unknown
-             157:             TypePointer UniformConstant 156
-158(g_tTex1df4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 26(int) 1D array sampled format:Unknown
-             160:             TypePointer UniformConstant 159
-161(g_tTex1di4a):    160(ptr) Variable UniformConstant
-             162:             TypeImage 38(int) 1D array sampled format:Unknown
-             163:             TypePointer UniformConstant 162
-164(g_tTex1du4a):    163(ptr) Variable UniformConstant
-             165:             TypeImage 6(float) 2D array sampled format:Unknown
+              22:             TypeVector 6(float) 2
+              24:    6(float) Constant 0
+              28:             TypeInt 32 1
+              29:             TypeImage 28(int) 1D sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+  31(g_tTex1di4):     30(ptr) Variable UniformConstant
+              34:             TypeImage 28(int) 1D depth sampled format:Unknown
+              35:             TypeSampledImage 34
+              41:             TypeInt 32 0
+              42:             TypeImage 41(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              47:             TypeImage 41(int) 1D depth sampled format:Unknown
+              48:             TypeSampledImage 47
+              54:             TypeImage 6(float) 2D sampled format:Unknown
+              55:             TypePointer UniformConstant 54
+  56(g_tTex2df4):     55(ptr) Variable UniformConstant
+              59:             TypeImage 6(float) 2D depth sampled format:Unknown
+              60:             TypeSampledImage 59
+              62:    6(float) Constant 1045220557
+              63:   22(fvec2) ConstantComposite 20 62
+              64:             TypeVector 6(float) 3
+              71:             TypeImage 28(int) 2D sampled format:Unknown
+              72:             TypePointer UniformConstant 71
+  73(g_tTex2di4):     72(ptr) Variable UniformConstant
+              76:             TypeImage 28(int) 2D depth sampled format:Unknown
+              77:             TypeSampledImage 76
+              85:             TypeImage 41(int) 2D sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex2du4):     86(ptr) Variable UniformConstant
+              90:             TypeImage 41(int) 2D depth sampled format:Unknown
+              91:             TypeSampledImage 90
+              99:             TypeImage 6(float) Cube sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+ 101(g_tTexcdf4):    100(ptr) Variable UniformConstant
+             104:             TypeImage 6(float) Cube depth sampled format:Unknown
+             105:             TypeSampledImage 104
+             107:    6(float) Constant 1050253722
+             108:   64(fvec3) ConstantComposite 20 62 107
+             109:             TypeVector 6(float) 4
+             117:             TypeImage 28(int) Cube sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTexcdi4):    118(ptr) Variable UniformConstant
+             122:             TypeImage 28(int) Cube depth sampled format:Unknown
+             123:             TypeSampledImage 122
+             132:             TypeImage 41(int) Cube sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTexcdu4):    133(ptr) Variable UniformConstant
+             137:             TypeImage 41(int) Cube depth sampled format:Unknown
+             138:             TypeSampledImage 137
+  146(PS_OUTPUT):             TypeStruct 109(fvec4) 6(float)
+             147:             TypePointer Function 146(PS_OUTPUT)
+             149:     28(int) Constant 0
+             150:    6(float) Constant 1065353216
+             151:  109(fvec4) ConstantComposite 150 150 150 150
+             152:             TypePointer Function 109(fvec4)
+             154:     28(int) Constant 1
+             156:             TypePointer Output 109(fvec4)
+      157(Color):    156(ptr) Variable Output
+             160:             TypePointer Output 6(float)
+      161(Depth):    160(ptr) Variable Output
+             165:             TypeImage 6(float) 3D sampled format:Unknown
              166:             TypePointer UniformConstant 165
-167(g_tTex2df4a):    166(ptr) Variable UniformConstant
-             168:             TypeImage 26(int) 2D array sampled format:Unknown
+ 167(g_tTex3df4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 28(int) 3D sampled format:Unknown
              169:             TypePointer UniformConstant 168
-170(g_tTex2di4a):    169(ptr) Variable UniformConstant
-             171:             TypeImage 38(int) 2D array sampled format:Unknown
+ 170(g_tTex3di4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 41(int) 3D sampled format:Unknown
              172:             TypePointer UniformConstant 171
-173(g_tTex2du4a):    172(ptr) Variable UniformConstant
-             174:             TypeImage 6(float) Cube array sampled format:Unknown
+ 173(g_tTex3du4):    172(ptr) Variable UniformConstant
+             174:             TypeImage 6(float) 1D array sampled format:Unknown
              175:             TypePointer UniformConstant 174
-176(g_tTexcdf4a):    175(ptr) Variable UniformConstant
-             177:             TypeImage 26(int) Cube array sampled format:Unknown
+176(g_tTex1df4a):    175(ptr) Variable UniformConstant
+             177:             TypeImage 28(int) 1D array sampled format:Unknown
              178:             TypePointer UniformConstant 177
-179(g_tTexcdi4a):    178(ptr) Variable UniformConstant
-             180:             TypeImage 38(int) Cube array sampled format:Unknown
+179(g_tTex1di4a):    178(ptr) Variable UniformConstant
+             180:             TypeImage 41(int) 1D array sampled format:Unknown
              181:             TypePointer UniformConstant 180
-182(g_tTexcdu4a):    181(ptr) Variable UniformConstant
+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 28(int) 2D array sampled format:Unknown
+             187:             TypePointer UniformConstant 186
+188(g_tTex2di4a):    187(ptr) Variable UniformConstant
+             189:             TypeImage 41(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 28(int) Cube array sampled format:Unknown
+             196:             TypePointer UniformConstant 195
+197(g_tTexcdi4a):    196(ptr) Variable UniformConstant
+             198:             TypeImage 41(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
           8(r00):      7(ptr) Variable Function
-         25(r02):      7(ptr) Variable Function
-         37(r04):      7(ptr) Variable Function
-         49(r20):      7(ptr) Variable Function
-         64(r22):      7(ptr) Variable Function
-         76(r24):      7(ptr) Variable Function
-         88(r50):      7(ptr) Variable Function
-        103(r52):      7(ptr) Variable Function
-        115(r54):      7(ptr) Variable Function
-      130(psout):    129(ptr) Variable Function
+         27(r02):      7(ptr) Variable Function
+         40(r04):      7(ptr) Variable Function
+         53(r20):      7(ptr) Variable Function
+         70(r22):      7(ptr) Variable Function
+         84(r24):      7(ptr) Variable Function
+         98(r50):      7(ptr) Variable Function
+        116(r52):      7(ptr) Variable Function
+        131(r54):      7(ptr) Variable Function
+      148(psout):    147(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              23:    6(float) CompositeExtract 20 0
-              24:    6(float) ImageSampleDrefExplicitLod 19 20 23 Lod 22
-                              Store 8(r00) 24
-              30:          27 Load 29(g_tTex1di4)
-              31:          13 Load 15(g_sSamp)
-              34:          33 SampledImage 30 31
-              35:    6(float) CompositeExtract 20 0
-              36:    6(float) ImageSampleDrefExplicitLod 34 20 35 Lod 22
-                              Store 25(r02) 36
-              42:          39 Load 41(g_tTex1du4)
-              43:          13 Load 15(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 20 0
-              48:    6(float) ImageSampleDrefExplicitLod 46 20 47 Lod 22
-                              Store 37(r04) 48
-              53:          50 Load 52(g_tTex2df4)
-              54:          13 Load 15(g_sSamp)
-              57:          56 SampledImage 53 54
-              61:    6(float) CompositeExtract 60 0
-              62:    6(float) CompositeExtract 61 0
-              63:    6(float) ImageSampleDrefExplicitLod 57 61 62 Lod 22
-                              Store 49(r20) 63
-              68:          65 Load 67(g_tTex2di4)
-              69:          13 Load 15(g_sSamp)
-              72:          71 SampledImage 68 69
-              73:    6(float) CompositeExtract 60 0
-              74:    6(float) CompositeExtract 73 0
-              75:    6(float) ImageSampleDrefExplicitLod 72 73 74 Lod 22
-                              Store 64(r22) 75
-              80:          77 Load 79(g_tTex2du4)
-              81:          13 Load 15(g_sSamp)
-              84:          83 SampledImage 80 81
-              85:    6(float) CompositeExtract 60 0
-              86:    6(float) CompositeExtract 85 0
-              87:    6(float) ImageSampleDrefExplicitLod 84 85 86 Lod 22
-                              Store 76(r24) 87
-              92:          89 Load 91(g_tTexcdf4)
-              93:          13 Load 15(g_sSamp)
-              96:          95 SampledImage 92 93
-             100:    6(float) CompositeExtract 99 0
-             101:    6(float) CompositeExtract 100 0
-             102:    6(float) ImageSampleDrefExplicitLod 96 100 101 Lod 22
-                              Store 88(r50) 102
-             107:         104 Load 106(g_tTexcdi4)
-             108:          13 Load 15(g_sSamp)
-             111:         110 SampledImage 107 108
-             112:    6(float) CompositeExtract 99 0
-             113:    6(float) CompositeExtract 112 0
-             114:    6(float) ImageSampleDrefExplicitLod 111 112 113 Lod 22
-                              Store 103(r52) 114
-             119:         116 Load 118(g_tTexcdu4)
-             120:          13 Load 15(g_sSamp)
-             123:         122 SampledImage 119 120
-             124:    6(float) CompositeExtract 99 0
-             125:    6(float) CompositeExtract 124 0
-             126:    6(float) ImageSampleDrefExplicitLod 123 124 125 Lod 22
-                              Store 115(r54) 126
-             135:    134(ptr) AccessChain 130(psout) 131
-                              Store 135 133
-             137:      7(ptr) AccessChain 130(psout) 136
-                              Store 137 132
-             140:    134(ptr) AccessChain 130(psout) 131
-             141:  127(fvec4) Load 140
-                              Store 139(Color) 141
-             144:      7(ptr) AccessChain 130(psout) 136
-             145:    6(float) Load 144
-                              Store 143(Depth) 145
+              23:   22(fvec2) CompositeConstruct 20 21
+              25:    6(float) CompositeExtract 23 1
+              26:    6(float) ImageSampleDrefExplicitLod 19 23 25 Lod 24
+                              Store 8(r00) 26
+              32:          29 Load 31(g_tTex1di4)
+              33:          13 Load 15(g_sSamp)
+              36:          35 SampledImage 32 33
+              37:   22(fvec2) CompositeConstruct 20 21
+              38:    6(float) CompositeExtract 37 1
+              39:    6(float) ImageSampleDrefExplicitLod 36 37 38 Lod 24
+                              Store 27(r02) 39
+              45:          42 Load 44(g_tTex1du4)
+              46:          13 Load 15(g_sSamp)
+              49:          48 SampledImage 45 46
+              50:   22(fvec2) CompositeConstruct 20 21
+              51:    6(float) CompositeExtract 50 1
+              52:    6(float) ImageSampleDrefExplicitLod 49 50 51 Lod 24
+                              Store 40(r04) 52
+              57:          54 Load 56(g_tTex2df4)
+              58:          13 Load 15(g_sSamp)
+              61:          60 SampledImage 57 58
+              65:    6(float) CompositeExtract 63 0
+              66:    6(float) CompositeExtract 63 1
+              67:   64(fvec3) CompositeConstruct 65 66 21
+              68:    6(float) CompositeExtract 67 2
+              69:    6(float) ImageSampleDrefExplicitLod 61 67 68 Lod 24
+                              Store 53(r20) 69
+              74:          71 Load 73(g_tTex2di4)
+              75:          13 Load 15(g_sSamp)
+              78:          77 SampledImage 74 75
+              79:    6(float) CompositeExtract 63 0
+              80:    6(float) CompositeExtract 63 1
+              81:   64(fvec3) CompositeConstruct 79 80 21
+              82:    6(float) CompositeExtract 81 2
+              83:    6(float) ImageSampleDrefExplicitLod 78 81 82 Lod 24
+                              Store 70(r22) 83
+              88:          85 Load 87(g_tTex2du4)
+              89:          13 Load 15(g_sSamp)
+              92:          91 SampledImage 88 89
+              93:    6(float) CompositeExtract 63 0
+              94:    6(float) CompositeExtract 63 1
+              95:   64(fvec3) CompositeConstruct 93 94 21
+              96:    6(float) CompositeExtract 95 2
+              97:    6(float) ImageSampleDrefExplicitLod 92 95 96 Lod 24
+                              Store 84(r24) 97
+             102:          99 Load 101(g_tTexcdf4)
+             103:          13 Load 15(g_sSamp)
+             106:         105 SampledImage 102 103
+             110:    6(float) CompositeExtract 108 0
+             111:    6(float) CompositeExtract 108 1
+             112:    6(float) CompositeExtract 108 2
+             113:  109(fvec4) CompositeConstruct 110 111 112 21
+             114:    6(float) CompositeExtract 113 3
+             115:    6(float) ImageSampleDrefExplicitLod 106 113 114 Lod 24
+                              Store 98(r50) 115
+             120:         117 Load 119(g_tTexcdi4)
+             121:          13 Load 15(g_sSamp)
+             124:         123 SampledImage 120 121
+             125:    6(float) CompositeExtract 108 0
+             126:    6(float) CompositeExtract 108 1
+             127:    6(float) CompositeExtract 108 2
+             128:  109(fvec4) CompositeConstruct 125 126 127 21
+             129:    6(float) CompositeExtract 128 3
+             130:    6(float) ImageSampleDrefExplicitLod 124 128 129 Lod 24
+                              Store 116(r52) 130
+             135:         132 Load 134(g_tTexcdu4)
+             136:          13 Load 15(g_sSamp)
+             139:         138 SampledImage 135 136
+             140:    6(float) CompositeExtract 108 0
+             141:    6(float) CompositeExtract 108 1
+             142:    6(float) CompositeExtract 108 2
+             143:  109(fvec4) CompositeConstruct 140 141 142 21
+             144:    6(float) CompositeExtract 143 3
+             145:    6(float) ImageSampleDrefExplicitLod 139 143 144 Lod 24
+                              Store 131(r54) 145
+             153:    152(ptr) AccessChain 148(psout) 149
+                              Store 153 151
+             155:      7(ptr) AccessChain 148(psout) 154
+                              Store 155 150
+             158:    152(ptr) AccessChain 148(psout) 149
+             159:  109(fvec4) Load 158
+                              Store 157(Color) 159
+             162:      7(ptr) AccessChain 148(psout) 154
+             163:    6(float) Load 162
+                              Store 161(Depth) 163
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index ceb1415f8e4d84ad174190d8f3f277c9495a4ec6..216ed41917936c9846d471484526295ebc9ad0eb 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmplevelzero.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -24,11 +24,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -40,11 +40,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -56,11 +56,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -74,11 +74,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -92,11 +92,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -124,8 +124,8 @@ gl_FragCoord origin is upper left
 0:63            1 (const int)
 0:63        Constant:
 0:63          1.000000
-0:?       Sequence
-0:?         Sequence
+0:65      Sequence
+0:65        Sequence
 0:65          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:65            Color: direct index for structure (temp 4-component vector of float)
@@ -140,6 +140,8 @@ gl_FragCoord origin is upper left
 0:65                1 (const int)
 0:65        Branch: Return
 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)
@@ -162,8 +164,6 @@ 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:
@@ -172,17 +172,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -194,11 +194,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -210,11 +210,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -226,11 +226,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -244,11 +244,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -262,11 +262,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -294,8 +294,8 @@ gl_FragCoord origin is upper left
 0:63            1 (const int)
 0:63        Constant:
 0:63          1.000000
-0:?       Sequence
-0:?         Sequence
+0:65      Sequence
+0:65        Sequence
 0:65          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:65            Color: direct index for structure (temp 4-component vector of float)
@@ -310,6 +310,8 @@ gl_FragCoord origin is upper left
 0:65                1 (const int)
 0:65        Branch: Return
 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)
@@ -332,81 +334,79 @@ 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 157
+// Id's are bound by 167
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 104 108
+                              EntryPoint Fragment 4  "main" 114 118
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r01"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 27  "r03"
-                              Name 30  "g_tTex1di4"
-                              Name 38  "r05"
-                              Name 42  "g_tTex1du4"
-                              Name 50  "r21"
-                              Name 53  "g_tTex2df4"
-                              Name 68  "r23"
-                              Name 71  "g_tTex2di4"
-                              Name 80  "r25"
-                              Name 83  "g_tTex2du4"
-                              Name 93  "PS_OUTPUT"
-                              MemberName 93(PS_OUTPUT) 0  "Color"
-                              MemberName 93(PS_OUTPUT) 1  "Depth"
-                              Name 95  "psout"
-                              Name 104  "Color"
-                              Name 108  "Depth"
-                              Name 114  "g_tTex3df4"
-                              Name 117  "g_tTex3di4"
-                              Name 120  "g_tTex3du4"
-                              Name 123  "g_tTexcdf4"
-                              Name 126  "g_tTexcdi4"
-                              Name 129  "g_tTexcdu4"
-                              Name 132  "g_tTex1df4a"
-                              Name 135  "g_tTex1di4a"
-                              Name 138  "g_tTex1du4a"
-                              Name 141  "g_tTex2df4a"
-                              Name 144  "g_tTex2di4a"
-                              Name 147  "g_tTex2du4a"
-                              Name 150  "g_tTexcdf4a"
-                              Name 153  "g_tTexcdi4a"
-                              Name 156  "g_tTexcdu4a"
+                              Name 29  "r03"
+                              Name 32  "g_tTex1di4"
+                              Name 41  "r05"
+                              Name 45  "g_tTex1du4"
+                              Name 54  "r21"
+                              Name 57  "g_tTex2df4"
+                              Name 74  "r23"
+                              Name 77  "g_tTex2di4"
+                              Name 88  "r25"
+                              Name 91  "g_tTex2du4"
+                              Name 103  "PS_OUTPUT"
+                              MemberName 103(PS_OUTPUT) 0  "Color"
+                              MemberName 103(PS_OUTPUT) 1  "Depth"
+                              Name 105  "psout"
+                              Name 114  "Color"
+                              Name 118  "Depth"
+                              Name 124  "g_tTex3df4"
+                              Name 127  "g_tTex3di4"
+                              Name 130  "g_tTex3du4"
+                              Name 133  "g_tTexcdf4"
+                              Name 136  "g_tTexcdi4"
+                              Name 139  "g_tTexcdu4"
+                              Name 142  "g_tTex1df4a"
+                              Name 145  "g_tTex1di4a"
+                              Name 148  "g_tTex1du4a"
+                              Name 151  "g_tTex2df4a"
+                              Name 154  "g_tTex2di4a"
+                              Name 157  "g_tTex2du4a"
+                              Name 160  "g_tTexcdf4a"
+                              Name 163  "g_tTexcdi4a"
+                              Name 166  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 30(g_tTex1di4) DescriptorSet 0
-                              Decorate 42(g_tTex1du4) DescriptorSet 0
-                              Decorate 53(g_tTex2df4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 83(g_tTex2du4) DescriptorSet 0
-                              Decorate 104(Color) Location 0
-                              Decorate 108(Depth) BuiltIn FragDepth
-                              Decorate 114(g_tTex3df4) DescriptorSet 0
-                              Decorate 117(g_tTex3di4) DescriptorSet 0
-                              Decorate 120(g_tTex3du4) DescriptorSet 0
-                              Decorate 123(g_tTexcdf4) DescriptorSet 0
-                              Decorate 126(g_tTexcdi4) DescriptorSet 0
-                              Decorate 129(g_tTexcdu4) DescriptorSet 0
-                              Decorate 132(g_tTex1df4a) DescriptorSet 0
-                              Decorate 135(g_tTex1di4a) DescriptorSet 0
-                              Decorate 138(g_tTex1du4a) DescriptorSet 0
-                              Decorate 141(g_tTex2df4a) DescriptorSet 0
-                              Decorate 144(g_tTex2di4a) DescriptorSet 0
-                              Decorate 147(g_tTex2du4a) DescriptorSet 0
-                              Decorate 150(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 153(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 156(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 32(g_tTex1di4) DescriptorSet 0
+                              Decorate 45(g_tTex1du4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 91(g_tTex2du4) DescriptorSet 0
+                              Decorate 114(Color) Location 0
+                              Decorate 118(Depth) BuiltIn FragDepth
+                              Decorate 124(g_tTex3df4) DescriptorSet 0
+                              Decorate 127(g_tTex3di4) DescriptorSet 0
+                              Decorate 130(g_tTex3du4) DescriptorSet 0
+                              Decorate 133(g_tTexcdf4) DescriptorSet 0
+                              Decorate 136(g_tTexcdi4) DescriptorSet 0
+                              Decorate 139(g_tTexcdu4) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) DescriptorSet 0
+                              Decorate 145(g_tTex1di4a) DescriptorSet 0
+                              Decorate 148(g_tTex1du4a) DescriptorSet 0
+                              Decorate 151(g_tTex2df4a) DescriptorSet 0
+                              Decorate 154(g_tTex2di4a) DescriptorSet 0
+                              Decorate 157(g_tTex2du4a) DescriptorSet 0
+                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -421,155 +421,165 @@ gl_FragCoord origin is upper left
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:    6(float) Constant 0
-              23:             TypeInt 32 1
-              24:     23(int) Constant 2
-              28:             TypeImage 23(int) 1D sampled format:Unknown
-              29:             TypePointer UniformConstant 28
-  30(g_tTex1di4):     29(ptr) Variable UniformConstant
-              33:             TypeImage 23(int) 1D depth sampled format:Unknown
-              34:             TypeSampledImage 33
-              39:             TypeInt 32 0
-              40:             TypeImage 39(int) 1D sampled format:Unknown
-              41:             TypePointer UniformConstant 40
-  42(g_tTex1du4):     41(ptr) Variable UniformConstant
-              45:             TypeImage 39(int) 1D depth sampled format:Unknown
-              46:             TypeSampledImage 45
-              51:             TypeImage 6(float) 2D sampled format:Unknown
-              52:             TypePointer UniformConstant 51
-  53(g_tTex2df4):     52(ptr) Variable UniformConstant
-              56:             TypeImage 6(float) 2D depth sampled format:Unknown
-              57:             TypeSampledImage 56
-              59:             TypeVector 6(float) 2
-              60:    6(float) Constant 1045220557
-              61:   59(fvec2) ConstantComposite 20 60
-              63:             TypeVector 23(int) 2
-              64:     23(int) Constant 3
-              65:   63(ivec2) ConstantComposite 24 64
-              69:             TypeImage 23(int) 2D sampled format:Unknown
-              70:             TypePointer UniformConstant 69
-  71(g_tTex2di4):     70(ptr) Variable UniformConstant
-              74:             TypeImage 23(int) 2D depth sampled format:Unknown
-              75:             TypeSampledImage 74
-              81:             TypeImage 39(int) 2D sampled format:Unknown
-              82:             TypePointer UniformConstant 81
-  83(g_tTex2du4):     82(ptr) Variable UniformConstant
-              86:             TypeImage 39(int) 2D depth sampled format:Unknown
-              87:             TypeSampledImage 86
-              92:             TypeVector 6(float) 4
-   93(PS_OUTPUT):             TypeStruct 92(fvec4) 6(float)
-              94:             TypePointer Function 93(PS_OUTPUT)
-              96:     23(int) Constant 0
-              97:    6(float) Constant 1065353216
-              98:   92(fvec4) ConstantComposite 97 97 97 97
-              99:             TypePointer Function 92(fvec4)
-             101:     23(int) Constant 1
-             103:             TypePointer Output 92(fvec4)
-      104(Color):    103(ptr) Variable Output
-             107:             TypePointer Output 6(float)
-      108(Depth):    107(ptr) Variable Output
-             112:             TypeImage 6(float) 3D sampled format:Unknown
-             113:             TypePointer UniformConstant 112
- 114(g_tTex3df4):    113(ptr) Variable UniformConstant
-             115:             TypeImage 23(int) 3D sampled format:Unknown
-             116:             TypePointer UniformConstant 115
- 117(g_tTex3di4):    116(ptr) Variable UniformConstant
-             118:             TypeImage 39(int) 3D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
- 120(g_tTex3du4):    119(ptr) Variable UniformConstant
-             121:             TypeImage 6(float) Cube sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTexcdf4):    122(ptr) Variable UniformConstant
-             124:             TypeImage 23(int) Cube sampled format:Unknown
-             125:             TypePointer UniformConstant 124
- 126(g_tTexcdi4):    125(ptr) Variable UniformConstant
-             127:             TypeImage 39(int) Cube sampled format:Unknown
-             128:             TypePointer UniformConstant 127
- 129(g_tTexcdu4):    128(ptr) Variable UniformConstant
-             130:             TypeImage 6(float) 1D array sampled format:Unknown
-             131:             TypePointer UniformConstant 130
-132(g_tTex1df4a):    131(ptr) Variable UniformConstant
-             133:             TypeImage 23(int) 1D array sampled format:Unknown
-             134:             TypePointer UniformConstant 133
-135(g_tTex1di4a):    134(ptr) Variable UniformConstant
-             136:             TypeImage 39(int) 1D array sampled format:Unknown
-             137:             TypePointer UniformConstant 136
-138(g_tTex1du4a):    137(ptr) Variable UniformConstant
-             139:             TypeImage 6(float) 2D array sampled format:Unknown
-             140:             TypePointer UniformConstant 139
-141(g_tTex2df4a):    140(ptr) Variable UniformConstant
-             142:             TypeImage 23(int) 2D array sampled format:Unknown
-             143:             TypePointer UniformConstant 142
-144(g_tTex2di4a):    143(ptr) Variable UniformConstant
-             145:             TypeImage 39(int) 2D array sampled format:Unknown
-             146:             TypePointer UniformConstant 145
-147(g_tTex2du4a):    146(ptr) Variable UniformConstant
-             148:             TypeImage 6(float) Cube array sampled format:Unknown
-             149:             TypePointer UniformConstant 148
-150(g_tTexcdf4a):    149(ptr) Variable UniformConstant
-             151:             TypeImage 23(int) Cube array sampled format:Unknown
-             152:             TypePointer UniformConstant 151
-153(g_tTexcdi4a):    152(ptr) Variable UniformConstant
-             154:             TypeImage 39(int) Cube array sampled format:Unknown
-             155:             TypePointer UniformConstant 154
-156(g_tTexcdu4a):    155(ptr) Variable UniformConstant
+              22:             TypeVector 6(float) 2
+              24:    6(float) Constant 0
+              25:             TypeInt 32 1
+              26:     25(int) Constant 2
+              30:             TypeImage 25(int) 1D sampled format:Unknown
+              31:             TypePointer UniformConstant 30
+  32(g_tTex1di4):     31(ptr) Variable UniformConstant
+              35:             TypeImage 25(int) 1D depth sampled format:Unknown
+              36:             TypeSampledImage 35
+              42:             TypeInt 32 0
+              43:             TypeImage 42(int) 1D sampled format:Unknown
+              44:             TypePointer UniformConstant 43
+  45(g_tTex1du4):     44(ptr) Variable UniformConstant
+              48:             TypeImage 42(int) 1D depth sampled format:Unknown
+              49:             TypeSampledImage 48
+              55:             TypeImage 6(float) 2D sampled format:Unknown
+              56:             TypePointer UniformConstant 55
+  57(g_tTex2df4):     56(ptr) Variable UniformConstant
+              60:             TypeImage 6(float) 2D depth sampled format:Unknown
+              61:             TypeSampledImage 60
+              63:    6(float) Constant 1045220557
+              64:   22(fvec2) ConstantComposite 20 63
+              65:             TypeVector 6(float) 3
+              69:             TypeVector 25(int) 2
+              70:     25(int) Constant 3
+              71:   69(ivec2) ConstantComposite 26 70
+              75:             TypeImage 25(int) 2D sampled format:Unknown
+              76:             TypePointer UniformConstant 75
+  77(g_tTex2di4):     76(ptr) Variable UniformConstant
+              80:             TypeImage 25(int) 2D depth sampled format:Unknown
+              81:             TypeSampledImage 80
+              89:             TypeImage 42(int) 2D sampled format:Unknown
+              90:             TypePointer UniformConstant 89
+  91(g_tTex2du4):     90(ptr) Variable UniformConstant
+              94:             TypeImage 42(int) 2D depth sampled format:Unknown
+              95:             TypeSampledImage 94
+             102:             TypeVector 6(float) 4
+  103(PS_OUTPUT):             TypeStruct 102(fvec4) 6(float)
+             104:             TypePointer Function 103(PS_OUTPUT)
+             106:     25(int) Constant 0
+             107:    6(float) Constant 1065353216
+             108:  102(fvec4) ConstantComposite 107 107 107 107
+             109:             TypePointer Function 102(fvec4)
+             111:     25(int) Constant 1
+             113:             TypePointer Output 102(fvec4)
+      114(Color):    113(ptr) Variable Output
+             117:             TypePointer Output 6(float)
+      118(Depth):    117(ptr) Variable Output
+             122:             TypeImage 6(float) 3D sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTex3df4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 25(int) 3D sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+ 127(g_tTex3di4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 42(int) 3D sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+ 130(g_tTex3du4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 6(float) Cube sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+ 133(g_tTexcdf4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 25(int) Cube sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+ 136(g_tTexcdi4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 42(int) Cube sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+ 139(g_tTexcdu4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 6(float) 1D array sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+142(g_tTex1df4a):    141(ptr) Variable UniformConstant
+             143:             TypeImage 25(int) 1D array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTex1di4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 42(int) 1D array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTex1du4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 6(float) 2D array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTex2df4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 25(int) 2D array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTex2di4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 42(int) 2D array sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+157(g_tTex2du4a):    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 25(int) Cube array sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+163(g_tTexcdi4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 42(int) Cube array sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+166(g_tTexcdu4a):    165(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r01):      7(ptr) Variable Function
-         27(r03):      7(ptr) Variable Function
-         38(r05):      7(ptr) Variable Function
-         50(r21):      7(ptr) Variable Function
-         68(r23):      7(ptr) Variable Function
-         80(r25):      7(ptr) Variable Function
-       95(psout):     94(ptr) Variable Function
+         29(r03):      7(ptr) Variable Function
+         41(r05):      7(ptr) Variable Function
+         54(r21):      7(ptr) Variable Function
+         74(r23):      7(ptr) Variable Function
+         88(r25):      7(ptr) Variable Function
+      105(psout):    104(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 20 0
-              26:    6(float) ImageSampleDrefExplicitLod 19 20 25 Lod ConstOffset 22 24
-                              Store 8(r01) 26
-              31:          28 Load 30(g_tTex1di4)
-              32:          13 Load 15(g_sSamp)
-              35:          34 SampledImage 31 32
-              36:    6(float) CompositeExtract 20 0
-              37:    6(float) ImageSampleDrefExplicitLod 35 20 36 Lod ConstOffset 22 24
-                              Store 27(r03) 37
-              43:          40 Load 42(g_tTex1du4)
-              44:          13 Load 15(g_sSamp)
-              47:          46 SampledImage 43 44
-              48:    6(float) CompositeExtract 20 0
-              49:    6(float) ImageSampleDrefExplicitLod 47 20 48 Lod ConstOffset 22 24
-                              Store 38(r05) 49
-              54:          51 Load 53(g_tTex2df4)
-              55:          13 Load 15(g_sSamp)
-              58:          57 SampledImage 54 55
-              62:    6(float) CompositeExtract 61 0
-              66:    6(float) CompositeExtract 62 0
-              67:    6(float) ImageSampleDrefExplicitLod 58 62 66 Lod ConstOffset 22 65
-                              Store 50(r21) 67
-              72:          69 Load 71(g_tTex2di4)
-              73:          13 Load 15(g_sSamp)
-              76:          75 SampledImage 72 73
-              77:    6(float) CompositeExtract 61 0
-              78:    6(float) CompositeExtract 77 0
-              79:    6(float) ImageSampleDrefExplicitLod 76 77 78 Lod ConstOffset 22 65
-                              Store 68(r23) 79
-              84:          81 Load 83(g_tTex2du4)
-              85:          13 Load 15(g_sSamp)
-              88:          87 SampledImage 84 85
-              89:    6(float) CompositeExtract 61 0
-              90:    6(float) CompositeExtract 89 0
-              91:    6(float) ImageSampleDrefExplicitLod 88 89 90 Lod ConstOffset 22 65
-                              Store 80(r25) 91
-             100:     99(ptr) AccessChain 95(psout) 96
-                              Store 100 98
-             102:      7(ptr) AccessChain 95(psout) 101
-                              Store 102 97
-             105:     99(ptr) AccessChain 95(psout) 96
-             106:   92(fvec4) Load 105
-                              Store 104(Color) 106
-             109:      7(ptr) AccessChain 95(psout) 101
-             110:    6(float) Load 109
-                              Store 108(Depth) 110
+              23:   22(fvec2) CompositeConstruct 20 21
+              27:    6(float) CompositeExtract 23 1
+              28:    6(float) ImageSampleDrefExplicitLod 19 23 27 Lod ConstOffset 24 26
+                              Store 8(r01) 28
+              33:          30 Load 32(g_tTex1di4)
+              34:          13 Load 15(g_sSamp)
+              37:          36 SampledImage 33 34
+              38:   22(fvec2) CompositeConstruct 20 21
+              39:    6(float) CompositeExtract 38 1
+              40:    6(float) ImageSampleDrefExplicitLod 37 38 39 Lod ConstOffset 24 26
+                              Store 29(r03) 40
+              46:          43 Load 45(g_tTex1du4)
+              47:          13 Load 15(g_sSamp)
+              50:          49 SampledImage 46 47
+              51:   22(fvec2) CompositeConstruct 20 21
+              52:    6(float) CompositeExtract 51 1
+              53:    6(float) ImageSampleDrefExplicitLod 50 51 52 Lod ConstOffset 24 26
+                              Store 41(r05) 53
+              58:          55 Load 57(g_tTex2df4)
+              59:          13 Load 15(g_sSamp)
+              62:          61 SampledImage 58 59
+              66:    6(float) CompositeExtract 64 0
+              67:    6(float) CompositeExtract 64 1
+              68:   65(fvec3) CompositeConstruct 66 67 21
+              72:    6(float) CompositeExtract 68 2
+              73:    6(float) ImageSampleDrefExplicitLod 62 68 72 Lod ConstOffset 24 71
+                              Store 54(r21) 73
+              78:          75 Load 77(g_tTex2di4)
+              79:          13 Load 15(g_sSamp)
+              82:          81 SampledImage 78 79
+              83:    6(float) CompositeExtract 64 0
+              84:    6(float) CompositeExtract 64 1
+              85:   65(fvec3) CompositeConstruct 83 84 21
+              86:    6(float) CompositeExtract 85 2
+              87:    6(float) ImageSampleDrefExplicitLod 82 85 86 Lod ConstOffset 24 71
+                              Store 74(r23) 87
+              92:          89 Load 91(g_tTex2du4)
+              93:          13 Load 15(g_sSamp)
+              96:          95 SampledImage 92 93
+              97:    6(float) CompositeExtract 64 0
+              98:    6(float) CompositeExtract 64 1
+              99:   65(fvec3) CompositeConstruct 97 98 21
+             100:    6(float) CompositeExtract 99 2
+             101:    6(float) ImageSampleDrefExplicitLod 96 99 100 Lod ConstOffset 24 71
+                              Store 88(r25) 101
+             110:    109(ptr) AccessChain 105(psout) 106
+                              Store 110 108
+             112:      7(ptr) AccessChain 105(psout) 111
+                              Store 112 107
+             115:    109(ptr) AccessChain 105(psout) 106
+             116:  102(fvec4) Load 115
+                              Store 114(Color) 116
+             119:      7(ptr) AccessChain 105(psout) 111
+             120:    6(float) Load 119
+                              Store 118(Depth) 120
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index ea32bceccce9041b330bbd2bfc3ad697991974d0..2e5f3cda46cd6910a956d4c682919bcd4b806d7f 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -2,17 +2,17 @@ hlsl.samplecmplevelzero.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -25,11 +25,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -42,11 +42,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -59,11 +59,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -78,11 +78,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -97,11 +97,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -130,8 +130,8 @@ gl_FragCoord origin is upper left
 0:64            1 (const int)
 0:64        Constant:
 0:64          1.000000
-0:?       Sequence
-0:?         Sequence
+0:66      Sequence
+0:66        Sequence
 0:66          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:66            Color: direct index for structure (temp 4-component vector of float)
@@ -146,6 +146,8 @@ gl_FragCoord origin is upper left
 0:66                1 (const int)
 0:66        Branch: Return
 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)
@@ -168,8 +170,6 @@ 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:
@@ -178,17 +178,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:38  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float Depth})
+0:38  Function Definition: main( (temp structure{temp 4-component vector of float Color, temp float Depth})
 0:38    Function Parameters: 
 0:?     Sequence
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -201,11 +201,11 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -218,11 +218,11 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -235,11 +235,11 @@ gl_FragCoord origin is upper left
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -254,11 +254,11 @@ gl_FragCoord origin is upper left
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -273,11 +273,11 @@ gl_FragCoord origin is upper left
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -306,8 +306,8 @@ gl_FragCoord origin is upper left
 0:64            1 (const int)
 0:64        Constant:
 0:64          1.000000
-0:?       Sequence
-0:?         Sequence
+0:66      Sequence
+0:66        Sequence
 0:66          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:66            Color: direct index for structure (temp 4-component vector of float)
@@ -322,6 +322,8 @@ gl_FragCoord origin is upper left
 0:66                1 (const int)
 0:66        Branch: Return
 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)
@@ -344,81 +346,79 @@ 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 163
+// Id's are bound by 178
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 110 114
+                              EntryPoint Fragment 4  "main" 125 129
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r11"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 31  "r13"
-                              Name 34  "g_tTex1di4a"
-                              Name 43  "r15"
-                              Name 47  "g_tTex1du4a"
-                              Name 56  "r31"
-                              Name 59  "g_tTex2df4a"
-                              Name 74  "r33"
-                              Name 77  "g_tTex2di4a"
-                              Name 86  "r35"
-                              Name 89  "g_tTex2du4a"
-                              Name 99  "PS_OUTPUT"
-                              MemberName 99(PS_OUTPUT) 0  "Color"
-                              MemberName 99(PS_OUTPUT) 1  "Depth"
-                              Name 101  "psout"
-                              Name 110  "Color"
-                              Name 114  "Depth"
-                              Name 120  "g_tTex1df4"
-                              Name 123  "g_tTex1di4"
-                              Name 126  "g_tTex1du4"
-                              Name 129  "g_tTex2df4"
-                              Name 132  "g_tTex2di4"
-                              Name 135  "g_tTex2du4"
-                              Name 138  "g_tTex3df4"
-                              Name 141  "g_tTex3di4"
-                              Name 144  "g_tTex3du4"
-                              Name 147  "g_tTexcdf4"
-                              Name 150  "g_tTexcdi4"
-                              Name 153  "g_tTexcdu4"
-                              Name 156  "g_tTexcdf4a"
-                              Name 159  "g_tTexcdi4a"
-                              Name 162  "g_tTexcdu4a"
+                              Name 34  "r13"
+                              Name 37  "g_tTex1di4a"
+                              Name 48  "r15"
+                              Name 52  "g_tTex1du4a"
+                              Name 63  "r31"
+                              Name 66  "g_tTex2df4a"
+                              Name 84  "r33"
+                              Name 87  "g_tTex2di4a"
+                              Name 99  "r35"
+                              Name 102  "g_tTex2du4a"
+                              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_tTex1df4"
+                              Name 138  "g_tTex1di4"
+                              Name 141  "g_tTex1du4"
+                              Name 144  "g_tTex2df4"
+                              Name 147  "g_tTex2di4"
+                              Name 150  "g_tTex2du4"
+                              Name 153  "g_tTex3df4"
+                              Name 156  "g_tTex3di4"
+                              Name 159  "g_tTex3du4"
+                              Name 162  "g_tTexcdf4"
+                              Name 165  "g_tTexcdi4"
+                              Name 168  "g_tTexcdu4"
+                              Name 171  "g_tTexcdf4a"
+                              Name 174  "g_tTexcdi4a"
+                              Name 177  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4a) DescriptorSet 0
-                              Decorate 47(g_tTex1du4a) DescriptorSet 0
-                              Decorate 59(g_tTex2df4a) DescriptorSet 0
-                              Decorate 77(g_tTex2di4a) DescriptorSet 0
-                              Decorate 89(g_tTex2du4a) DescriptorSet 0
-                              Decorate 110(Color) Location 0
-                              Decorate 114(Depth) BuiltIn FragDepth
-                              Decorate 120(g_tTex1df4) DescriptorSet 0
-                              Decorate 120(g_tTex1df4) Binding 0
-                              Decorate 123(g_tTex1di4) DescriptorSet 0
-                              Decorate 126(g_tTex1du4) DescriptorSet 0
-                              Decorate 129(g_tTex2df4) DescriptorSet 0
-                              Decorate 132(g_tTex2di4) DescriptorSet 0
-                              Decorate 135(g_tTex2du4) DescriptorSet 0
-                              Decorate 138(g_tTex3df4) DescriptorSet 0
-                              Decorate 141(g_tTex3di4) DescriptorSet 0
-                              Decorate 144(g_tTex3du4) DescriptorSet 0
-                              Decorate 147(g_tTexcdf4) DescriptorSet 0
-                              Decorate 150(g_tTexcdi4) DescriptorSet 0
-                              Decorate 153(g_tTexcdu4) DescriptorSet 0
-                              Decorate 156(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 159(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 162(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 37(g_tTex1di4a) DescriptorSet 0
+                              Decorate 52(g_tTex1du4a) DescriptorSet 0
+                              Decorate 66(g_tTex2df4a) DescriptorSet 0
+                              Decorate 87(g_tTex2di4a) DescriptorSet 0
+                              Decorate 102(g_tTex2du4a) DescriptorSet 0
+                              Decorate 125(Color) Location 0
+                              Decorate 129(Depth) BuiltIn FragDepth
+                              Decorate 135(g_tTex1df4) DescriptorSet 0
+                              Decorate 135(g_tTex1df4) Binding 0
+                              Decorate 138(g_tTex1di4) DescriptorSet 0
+                              Decorate 141(g_tTex1du4) DescriptorSet 0
+                              Decorate 144(g_tTex2df4) DescriptorSet 0
+                              Decorate 147(g_tTex2di4) DescriptorSet 0
+                              Decorate 150(g_tTex2du4) DescriptorSet 0
+                              Decorate 153(g_tTex3df4) DescriptorSet 0
+                              Decorate 156(g_tTex3di4) DescriptorSet 0
+                              Decorate 159(g_tTex3du4) DescriptorSet 0
+                              Decorate 162(g_tTexcdf4) DescriptorSet 0
+                              Decorate 165(g_tTexcdi4) DescriptorSet 0
+                              Decorate 168(g_tTexcdu4) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 177(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -436,158 +436,173 @@ gl_FragCoord origin is upper left
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:    6(float) Constant 0
-              27:             TypeInt 32 1
-              28:     27(int) Constant 2
-              32:             TypeImage 27(int) 1D array sampled format:Unknown
-              33:             TypePointer UniformConstant 32
- 34(g_tTex1di4a):     33(ptr) Variable UniformConstant
-              37:             TypeImage 27(int) 1D depth array sampled format:Unknown
-              38:             TypeSampledImage 37
-              44:             TypeInt 32 0
-              45:             TypeImage 44(int) 1D array sampled format:Unknown
-              46:             TypePointer UniformConstant 45
- 47(g_tTex1du4a):     46(ptr) Variable UniformConstant
-              50:             TypeImage 44(int) 1D depth array sampled format:Unknown
-              51:             TypeSampledImage 50
-              57:             TypeImage 6(float) 2D array sampled format:Unknown
-              58:             TypePointer UniformConstant 57
- 59(g_tTex2df4a):     58(ptr) Variable UniformConstant
-              62:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              63:             TypeSampledImage 62
-              65:             TypeVector 6(float) 3
-              66:    6(float) Constant 1050253722
-              67:   65(fvec3) ConstantComposite 21 22 66
-              69:             TypeVector 27(int) 2
-              70:     27(int) Constant 3
-              71:   69(ivec2) ConstantComposite 28 70
-              75:             TypeImage 27(int) 2D array sampled format:Unknown
-              76:             TypePointer UniformConstant 75
- 77(g_tTex2di4a):     76(ptr) Variable UniformConstant
-              80:             TypeImage 27(int) 2D depth array sampled format:Unknown
-              81:             TypeSampledImage 80
-              87:             TypeImage 44(int) 2D array sampled format:Unknown
-              88:             TypePointer UniformConstant 87
- 89(g_tTex2du4a):     88(ptr) Variable UniformConstant
-              92:             TypeImage 44(int) 2D depth array sampled format:Unknown
-              93:             TypeSampledImage 92
-              98:             TypeVector 6(float) 4
-   99(PS_OUTPUT):             TypeStruct 98(fvec4) 6(float)
-             100:             TypePointer Function 99(PS_OUTPUT)
-             102:     27(int) Constant 0
-             103:    6(float) Constant 1065353216
-             104:   98(fvec4) ConstantComposite 103 103 103 103
-             105:             TypePointer Function 98(fvec4)
-             107:     27(int) Constant 1
-             109:             TypePointer Output 98(fvec4)
-      110(Color):    109(ptr) Variable Output
-             113:             TypePointer Output 6(float)
-      114(Depth):    113(ptr) Variable Output
-             118:             TypeImage 6(float) 1D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
- 120(g_tTex1df4):    119(ptr) Variable UniformConstant
-             121:             TypeImage 27(int) 1D sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTex1di4):    122(ptr) Variable UniformConstant
-             124:             TypeImage 44(int) 1D sampled format:Unknown
-             125:             TypePointer UniformConstant 124
- 126(g_tTex1du4):    125(ptr) Variable UniformConstant
-             127:             TypeImage 6(float) 2D sampled format:Unknown
-             128:             TypePointer UniformConstant 127
- 129(g_tTex2df4):    128(ptr) Variable UniformConstant
-             130:             TypeImage 27(int) 2D sampled format:Unknown
-             131:             TypePointer UniformConstant 130
- 132(g_tTex2di4):    131(ptr) Variable UniformConstant
-             133:             TypeImage 44(int) 2D sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:    6(float) Constant 0
+              30:             TypeInt 32 1
+              31:     30(int) Constant 2
+              35:             TypeImage 30(int) 1D array sampled format:Unknown
+              36:             TypePointer UniformConstant 35
+ 37(g_tTex1di4a):     36(ptr) Variable UniformConstant
+              40:             TypeImage 30(int) 1D depth array sampled format:Unknown
+              41:             TypeSampledImage 40
+              49:             TypeInt 32 0
+              50:             TypeImage 49(int) 1D array sampled format:Unknown
+              51:             TypePointer UniformConstant 50
+ 52(g_tTex1du4a):     51(ptr) Variable UniformConstant
+              55:             TypeImage 49(int) 1D depth array sampled format:Unknown
+              56:             TypeSampledImage 55
+              64:             TypeImage 6(float) 2D array sampled format:Unknown
+              65:             TypePointer UniformConstant 64
+ 66(g_tTex2df4a):     65(ptr) Variable UniformConstant
+              69:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              70:             TypeSampledImage 69
+              72:    6(float) Constant 1050253722
+              73:   25(fvec3) ConstantComposite 21 22 72
+              74:             TypeVector 6(float) 4
+              79:             TypeVector 30(int) 2
+              80:     30(int) Constant 3
+              81:   79(ivec2) ConstantComposite 31 80
+              85:             TypeImage 30(int) 2D array sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+ 87(g_tTex2di4a):     86(ptr) Variable UniformConstant
+              90:             TypeImage 30(int) 2D depth array sampled format:Unknown
+              91:             TypeSampledImage 90
+             100:             TypeImage 49(int) 2D array sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+102(g_tTex2du4a):    101(ptr) Variable UniformConstant
+             105:             TypeImage 49(int) 2D depth array sampled format:Unknown
+             106:             TypeSampledImage 105
+  114(PS_OUTPUT):             TypeStruct 74(fvec4) 6(float)
+             115:             TypePointer Function 114(PS_OUTPUT)
+             117:     30(int) Constant 0
+             118:    6(float) Constant 1065353216
+             119:   74(fvec4) ConstantComposite 118 118 118 118
+             120:             TypePointer Function 74(fvec4)
+             122:     30(int) Constant 1
+             124:             TypePointer Output 74(fvec4)
+      125(Color):    124(ptr) Variable Output
+             128:             TypePointer Output 6(float)
+      129(Depth):    128(ptr) Variable Output
+             133:             TypeImage 6(float) 1D sampled format:Unknown
              134:             TypePointer UniformConstant 133
- 135(g_tTex2du4):    134(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) 3D sampled format:Unknown
+ 135(g_tTex1df4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 30(int) 1D sampled format:Unknown
              137:             TypePointer UniformConstant 136
- 138(g_tTex3df4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 27(int) 3D sampled format:Unknown
+ 138(g_tTex1di4):    137(ptr) Variable UniformConstant
+             139:             TypeImage 49(int) 1D sampled format:Unknown
              140:             TypePointer UniformConstant 139
- 141(g_tTex3di4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 44(int) 3D sampled format:Unknown
+ 141(g_tTex1du4):    140(ptr) Variable UniformConstant
+             142:             TypeImage 6(float) 2D sampled format:Unknown
              143:             TypePointer UniformConstant 142
- 144(g_tTex3du4):    143(ptr) Variable UniformConstant
-             145:             TypeImage 6(float) Cube sampled format:Unknown
+ 144(g_tTex2df4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 30(int) 2D sampled format:Unknown
              146:             TypePointer UniformConstant 145
- 147(g_tTexcdf4):    146(ptr) Variable UniformConstant
-             148:             TypeImage 27(int) Cube sampled format:Unknown
+ 147(g_tTex2di4):    146(ptr) Variable UniformConstant
+             148:             TypeImage 49(int) 2D sampled format:Unknown
              149:             TypePointer UniformConstant 148
- 150(g_tTexcdi4):    149(ptr) Variable UniformConstant
-             151:             TypeImage 44(int) Cube sampled format:Unknown
+ 150(g_tTex2du4):    149(ptr) Variable UniformConstant
+             151:             TypeImage 6(float) 3D sampled format:Unknown
              152:             TypePointer UniformConstant 151
- 153(g_tTexcdu4):    152(ptr) Variable UniformConstant
-             154:             TypeImage 6(float) Cube array sampled format:Unknown
+ 153(g_tTex3df4):    152(ptr) Variable UniformConstant
+             154:             TypeImage 30(int) 3D sampled format:Unknown
              155:             TypePointer UniformConstant 154
-156(g_tTexcdf4a):    155(ptr) Variable UniformConstant
-             157:             TypeImage 27(int) Cube array sampled format:Unknown
+ 156(g_tTex3di4):    155(ptr) Variable UniformConstant
+             157:             TypeImage 49(int) 3D sampled format:Unknown
              158:             TypePointer UniformConstant 157
-159(g_tTexcdi4a):    158(ptr) Variable UniformConstant
-             160:             TypeImage 44(int) Cube array sampled format:Unknown
+ 159(g_tTex3du4):    158(ptr) Variable UniformConstant
+             160:             TypeImage 6(float) Cube sampled format:Unknown
              161:             TypePointer UniformConstant 160
-162(g_tTexcdu4a):    161(ptr) Variable UniformConstant
+ 162(g_tTexcdf4):    161(ptr) Variable UniformConstant
+             163:             TypeImage 30(int) Cube sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+ 165(g_tTexcdi4):    164(ptr) Variable UniformConstant
+             166:             TypeImage 49(int) Cube sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+ 168(g_tTexcdu4):    167(ptr) Variable UniformConstant
+             169:             TypeImage 6(float) Cube array sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+171(g_tTexcdf4a):    170(ptr) Variable UniformConstant
+             172:             TypeImage 30(int) Cube array sampled format:Unknown
+             173:             TypePointer UniformConstant 172
+174(g_tTexcdi4a):    173(ptr) Variable UniformConstant
+             175:             TypeImage 49(int) Cube array sampled format:Unknown
+             176:             TypePointer UniformConstant 175
+177(g_tTexcdu4a):    176(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r11):      7(ptr) Variable Function
-         31(r13):      7(ptr) Variable Function
-         43(r15):      7(ptr) Variable Function
-         56(r31):      7(ptr) Variable Function
-         74(r33):      7(ptr) Variable Function
-         86(r35):      7(ptr) Variable Function
-      101(psout):    100(ptr) Variable Function
+         34(r13):      7(ptr) Variable Function
+         48(r15):      7(ptr) Variable Function
+         63(r31):      7(ptr) Variable Function
+         84(r33):      7(ptr) Variable Function
+         99(r35):      7(ptr) Variable Function
+      116(psout):    115(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              29:    6(float) CompositeExtract 25 0
-              30:    6(float) ImageSampleDrefExplicitLod 19 25 29 Lod ConstOffset 26 28
-                              Store 8(r11) 30
-              35:          32 Load 34(g_tTex1di4a)
-              36:          13 Load 15(g_sSamp)
-              39:          38 SampledImage 35 36
-              40:    6(float) CompositeExtract 23 0
-              41:    6(float) CompositeExtract 40 0
-              42:    6(float) ImageSampleDrefExplicitLod 39 40 41 Lod ConstOffset 26 28
-                              Store 31(r13) 42
-              48:          45 Load 47(g_tTex1du4a)
-              49:          13 Load 15(g_sSamp)
-              52:          51 SampledImage 48 49
-              53:    6(float) CompositeExtract 23 0
-              54:    6(float) CompositeExtract 53 0
-              55:    6(float) ImageSampleDrefExplicitLod 52 53 54 Lod ConstOffset 26 28
-                              Store 43(r15) 55
-              60:          57 Load 59(g_tTex2df4a)
-              61:          13 Load 15(g_sSamp)
-              64:          63 SampledImage 60 61
-              68:    6(float) CompositeExtract 67 0
-              72:    6(float) CompositeExtract 68 0
-              73:    6(float) ImageSampleDrefExplicitLod 64 68 72 Lod ConstOffset 26 71
-                              Store 56(r31) 73
-              78:          75 Load 77(g_tTex2di4a)
-              79:          13 Load 15(g_sSamp)
-              82:          81 SampledImage 78 79
-              83:    6(float) CompositeExtract 67 0
-              84:    6(float) CompositeExtract 83 0
-              85:    6(float) ImageSampleDrefExplicitLod 82 83 84 Lod ConstOffset 26 71
-                              Store 74(r33) 85
-              90:          87 Load 89(g_tTex2du4a)
-              91:          13 Load 15(g_sSamp)
-              94:          93 SampledImage 90 91
-              95:    6(float) CompositeExtract 67 0
-              96:    6(float) CompositeExtract 95 0
-              97:    6(float) ImageSampleDrefExplicitLod 94 95 96 Lod ConstOffset 26 71
-                              Store 86(r35) 97
-             106:    105(ptr) AccessChain 101(psout) 102
-                              Store 106 104
-             108:      7(ptr) AccessChain 101(psout) 107
-                              Store 108 103
-             111:    105(ptr) AccessChain 101(psout) 102
-             112:   98(fvec4) Load 111
-                              Store 110(Color) 112
-             115:      7(ptr) AccessChain 101(psout) 107
-             116:    6(float) Load 115
-                              Store 114(Depth) 116
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              32:    6(float) CompositeExtract 28 2
+              33:    6(float) ImageSampleDrefExplicitLod 19 28 32 Lod ConstOffset 29 31
+                              Store 8(r11) 33
+              38:          35 Load 37(g_tTex1di4a)
+              39:          13 Load 15(g_sSamp)
+              42:          41 SampledImage 38 39
+              43:    6(float) CompositeExtract 23 0
+              44:    6(float) CompositeExtract 23 1
+              45:   25(fvec3) CompositeConstruct 43 44 24
+              46:    6(float) CompositeExtract 45 2
+              47:    6(float) ImageSampleDrefExplicitLod 42 45 46 Lod ConstOffset 29 31
+                              Store 34(r13) 47
+              53:          50 Load 52(g_tTex1du4a)
+              54:          13 Load 15(g_sSamp)
+              57:          56 SampledImage 53 54
+              58:    6(float) CompositeExtract 23 0
+              59:    6(float) CompositeExtract 23 1
+              60:   25(fvec3) CompositeConstruct 58 59 24
+              61:    6(float) CompositeExtract 60 2
+              62:    6(float) ImageSampleDrefExplicitLod 57 60 61 Lod ConstOffset 29 31
+                              Store 48(r15) 62
+              67:          64 Load 66(g_tTex2df4a)
+              68:          13 Load 15(g_sSamp)
+              71:          70 SampledImage 67 68
+              75:    6(float) CompositeExtract 73 0
+              76:    6(float) CompositeExtract 73 1
+              77:    6(float) CompositeExtract 73 2
+              78:   74(fvec4) CompositeConstruct 75 76 77 24
+              82:    6(float) CompositeExtract 78 3
+              83:    6(float) ImageSampleDrefExplicitLod 71 78 82 Lod ConstOffset 29 81
+                              Store 63(r31) 83
+              88:          85 Load 87(g_tTex2di4a)
+              89:          13 Load 15(g_sSamp)
+              92:          91 SampledImage 88 89
+              93:    6(float) CompositeExtract 73 0
+              94:    6(float) CompositeExtract 73 1
+              95:    6(float) CompositeExtract 73 2
+              96:   74(fvec4) CompositeConstruct 93 94 95 24
+              97:    6(float) CompositeExtract 96 3
+              98:    6(float) ImageSampleDrefExplicitLod 92 96 97 Lod ConstOffset 29 81
+                              Store 84(r33) 98
+             103:         100 Load 102(g_tTex2du4a)
+             104:          13 Load 15(g_sSamp)
+             107:         106 SampledImage 103 104
+             108:    6(float) CompositeExtract 73 0
+             109:    6(float) CompositeExtract 73 1
+             110:    6(float) CompositeExtract 73 2
+             111:   74(fvec4) CompositeConstruct 108 109 110 24
+             112:    6(float) CompositeExtract 111 3
+             113:    6(float) ImageSampleDrefExplicitLod 107 111 112 Lod ConstOffset 29 81
+                              Store 99(r35) 113
+             121:    120(ptr) AccessChain 116(psout) 117
+                              Store 121 119
+             123:      7(ptr) AccessChain 116(psout) 122
+                              Store 123 118
+             126:    120(ptr) AccessChain 116(psout) 117
+             127:   74(fvec4) Load 126
+                              Store 125(Color) 127
+             130:      7(ptr) AccessChain 116(psout) 122
+             131:    6(float) Load 130
+                              Store 129(Depth) 131
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 16f575af8edd4afd6c133497e6f2346e3f0846d6..2a0d77a0c3abc60602dea6ebc2fd66d244bffb3f 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplegrad.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureGrad (global 4-component vector of float)
+0:27          textureGrad (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureGrad (global 4-component vector of int)
+0:28          textureGrad (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureGrad (global 4-component vector of uint)
+0:29          textureGrad (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureGrad (global 4-component vector of float)
+0:31          textureGrad (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -67,7 +67,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureGrad (global 4-component vector of int)
+0:32          textureGrad (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -84,7 +84,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureGrad (global 4-component vector of uint)
+0:33          textureGrad (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -101,7 +101,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGrad (global 4-component vector of float)
+0:35          textureGrad (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -121,7 +121,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGrad (global 4-component vector of int)
+0:36          textureGrad (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -141,7 +141,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGrad (global 4-component vector of uint)
+0:37          textureGrad (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -175,8 +175,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -191,6 +191,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -202,8 +204,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -212,13 +212,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureGrad (global 4-component vector of float)
+0:27          textureGrad (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -232,7 +232,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureGrad (global 4-component vector of int)
+0:28          textureGrad (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -246,7 +246,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureGrad (global 4-component vector of uint)
+0:29          textureGrad (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -260,7 +260,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureGrad (global 4-component vector of float)
+0:31          textureGrad (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -277,7 +277,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureGrad (global 4-component vector of int)
+0:32          textureGrad (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -294,7 +294,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureGrad (global 4-component vector of uint)
+0:33          textureGrad (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -311,7 +311,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGrad (global 4-component vector of float)
+0:35          textureGrad (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -331,7 +331,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGrad (global 4-component vector of int)
+0:36          textureGrad (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -351,7 +351,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGrad (global 4-component vector of uint)
+0:37          textureGrad (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -385,8 +385,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -401,6 +401,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -412,8 +414,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (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
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index d0d275f13d6e0a4f52bbe769531da06f2577d015..feaba770212e1fc9325270cbb96d68b7eb0cedf3 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplegrad.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureGrad (global 4-component vector of float)
+0:31          textureGrad (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureGrad (global 4-component vector of int)
+0:32          textureGrad (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureGrad (global 4-component vector of uint)
+0:33          textureGrad (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -47,7 +47,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureGrad (global 4-component vector of float)
+0:35          textureGrad (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -63,7 +63,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureGrad (global 4-component vector of int)
+0:36          textureGrad (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -79,7 +79,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureGrad (global 4-component vector of uint)
+0:37          textureGrad (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureGrad (global 4-component vector of float)
+0:39          textureGrad (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -114,7 +114,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureGrad (global 4-component vector of int)
+0:40          textureGrad (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -133,7 +133,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureGrad (global 4-component vector of uint)
+0:41          textureGrad (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -152,7 +152,7 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval40' (temp 4-component vector of float)
-0:43          textureGrad (global 4-component vector of float)
+0:43          textureGrad (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -171,7 +171,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval41' (temp 4-component vector of int)
-0:44          textureGrad (global 4-component vector of int)
+0:44          textureGrad (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -190,7 +190,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval42' (temp 4-component vector of uint)
-0:45          textureGrad (global 4-component vector of uint)
+0:45          textureGrad (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -223,8 +223,8 @@ gl_FragCoord origin is upper left
 0:48            1 (const int)
 0:48        Constant:
 0:48          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -239,6 +239,8 @@ gl_FragCoord origin is upper left
 0:50                1 (const int)
 0:50        Branch: Return
 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)
@@ -253,8 +255,6 @@ 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:
@@ -263,13 +263,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureGrad (global 4-component vector of float)
+0:31          textureGrad (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -282,7 +282,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureGrad (global 4-component vector of int)
+0:32          textureGrad (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -295,7 +295,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureGrad (global 4-component vector of uint)
+0:33          textureGrad (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -308,7 +308,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureGrad (global 4-component vector of float)
+0:35          textureGrad (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -324,7 +324,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureGrad (global 4-component vector of int)
+0:36          textureGrad (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -340,7 +340,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureGrad (global 4-component vector of uint)
+0:37          textureGrad (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -356,7 +356,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureGrad (global 4-component vector of float)
+0:39          textureGrad (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -375,7 +375,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureGrad (global 4-component vector of int)
+0:40          textureGrad (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -394,7 +394,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureGrad (global 4-component vector of uint)
+0:41          textureGrad (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -413,7 +413,7 @@ gl_FragCoord origin is upper left
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval40' (temp 4-component vector of float)
-0:43          textureGrad (global 4-component vector of float)
+0:43          textureGrad (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -432,7 +432,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval41' (temp 4-component vector of int)
-0:44          textureGrad (global 4-component vector of int)
+0:44          textureGrad (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -451,7 +451,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval42' (temp 4-component vector of uint)
-0:45          textureGrad (global 4-component vector of uint)
+0:45          textureGrad (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -484,8 +484,8 @@ gl_FragCoord origin is upper left
 0:48            1 (const int)
 0:48        Constant:
 0:48          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -500,6 +500,8 @@ gl_FragCoord origin is upper left
 0:50                1 (const int)
 0:50        Branch: Return
 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)
@@ -514,8 +516,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 5e95ae0d22d161483cbecdbfaad6c8ce3c7c2d2a..f6d37c3be2e16f5197d8f264fc50deb39f282446 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -1,13 +1,13 @@
 hlsl.samplegrad.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:27  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:27    Function Parameters: 
 0:?     Sequence
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of float)
 0:30          'txval10' (temp 4-component vector of float)
-0:30          textureGrad (global 4-component vector of float)
+0:30          textureGrad (temp 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
 0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -20,7 +20,7 @@ Shader version: 450
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of int)
 0:31          'txval11' (temp 4-component vector of int)
-0:31          textureGrad (global 4-component vector of int)
+0:31          textureGrad (temp 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -33,7 +33,7 @@ Shader version: 450
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of uint)
 0:32          'txval12' (temp 4-component vector of uint)
-0:32          textureGrad (global 4-component vector of uint)
+0:32          textureGrad (temp 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -46,7 +46,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGrad (global 4-component vector of float)
+0:34          textureGrad (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -62,7 +62,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGrad (global 4-component vector of int)
+0:35          textureGrad (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -78,7 +78,7 @@ Shader version: 450
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGrad (global 4-component vector of uint)
+0:36          textureGrad (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -94,7 +94,7 @@ Shader version: 450
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of float)
 0:38          'txval30' (temp 4-component vector of float)
-0:38          textureGrad (global 4-component vector of float)
+0:38          textureGrad (temp 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -113,7 +113,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of int)
 0:39          'txval31' (temp 4-component vector of int)
-0:39          textureGrad (global 4-component vector of int)
+0:39          textureGrad (temp 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -132,7 +132,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of uint)
 0:40          'txval32' (temp 4-component vector of uint)
-0:40          textureGrad (global 4-component vector of uint)
+0:40          textureGrad (temp 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -151,7 +151,7 @@ Shader version: 450
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of float)
 0:42          'txval40' (temp 4-component vector of float)
-0:42          textureGrad (global 4-component vector of float)
+0:42          textureGrad (temp 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -170,7 +170,7 @@ Shader version: 450
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of int)
 0:43          'txval41' (temp 4-component vector of int)
-0:43          textureGrad (global 4-component vector of int)
+0:43          textureGrad (temp 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -189,7 +189,7 @@ Shader version: 450
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of uint)
 0:44          'txval42' (temp 4-component vector of uint)
-0:44          textureGrad (global 4-component vector of uint)
+0:44          textureGrad (temp 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -215,8 +215,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+0:48      Sequence
+0:48        Sequence
 0:48          move second child to first child (temp 4-component vector of float)
 0:?             'Pos' (out 4-component vector of float Position)
 0:48            Pos: direct index for structure (temp 4-component vector of float)
@@ -225,6 +225,7 @@ Shader version: 450
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -239,7 +240,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -247,13 +247,13 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:27  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:27    Function Parameters: 
 0:?     Sequence
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of float)
 0:30          'txval10' (temp 4-component vector of float)
-0:30          textureGrad (global 4-component vector of float)
+0:30          textureGrad (temp 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
 0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -266,7 +266,7 @@ Shader version: 450
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of int)
 0:31          'txval11' (temp 4-component vector of int)
-0:31          textureGrad (global 4-component vector of int)
+0:31          textureGrad (temp 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -279,7 +279,7 @@ Shader version: 450
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of uint)
 0:32          'txval12' (temp 4-component vector of uint)
-0:32          textureGrad (global 4-component vector of uint)
+0:32          textureGrad (temp 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -292,7 +292,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGrad (global 4-component vector of float)
+0:34          textureGrad (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -308,7 +308,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGrad (global 4-component vector of int)
+0:35          textureGrad (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -324,7 +324,7 @@ Shader version: 450
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGrad (global 4-component vector of uint)
+0:36          textureGrad (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -340,7 +340,7 @@ Shader version: 450
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of float)
 0:38          'txval30' (temp 4-component vector of float)
-0:38          textureGrad (global 4-component vector of float)
+0:38          textureGrad (temp 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -359,7 +359,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of int)
 0:39          'txval31' (temp 4-component vector of int)
-0:39          textureGrad (global 4-component vector of int)
+0:39          textureGrad (temp 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -378,7 +378,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of uint)
 0:40          'txval32' (temp 4-component vector of uint)
-0:40          textureGrad (global 4-component vector of uint)
+0:40          textureGrad (temp 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -397,7 +397,7 @@ Shader version: 450
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of float)
 0:42          'txval40' (temp 4-component vector of float)
-0:42          textureGrad (global 4-component vector of float)
+0:42          textureGrad (temp 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -416,7 +416,7 @@ Shader version: 450
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of int)
 0:43          'txval41' (temp 4-component vector of int)
-0:43          textureGrad (global 4-component vector of int)
+0:43          textureGrad (temp 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -435,7 +435,7 @@ Shader version: 450
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of uint)
 0:44          'txval42' (temp 4-component vector of uint)
-0:44          textureGrad (global 4-component vector of uint)
+0:44          textureGrad (temp 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -461,8 +461,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+0:48      Sequence
+0:48        Sequence
 0:48          move second child to first child (temp 4-component vector of float)
 0:?             'Pos' (out 4-component vector of float Position)
 0:48            Pos: direct index for structure (temp 4-component vector of float)
@@ -471,6 +471,7 @@ Shader version: 450
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -485,7 +486,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index ffe88328d32ecdb077a7550db5e13da85a6fdfc0..7938e527561ea0247f988afe2ca51949e2e775bd 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplegrad.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureGradOffset (global 4-component vector of float)
+0:31          textureGradOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -23,7 +23,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureGradOffset (global 4-component vector of int)
+0:32          textureGradOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureGradOffset (global 4-component vector of uint)
+0:33          textureGradOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -53,7 +53,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureGradOffset (global 4-component vector of float)
+0:35          textureGradOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureGradOffset (global 4-component vector of int)
+0:36          textureGradOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -91,7 +91,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureGradOffset (global 4-component vector of uint)
+0:37          textureGradOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -110,7 +110,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureGradOffset (global 4-component vector of float)
+0:39          textureGradOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -133,7 +133,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureGradOffset (global 4-component vector of int)
+0:40          textureGradOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -156,7 +156,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureGradOffset (global 4-component vector of uint)
+0:41          textureGradOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -193,8 +193,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -209,6 +209,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -223,8 +225,6 @@ 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:
@@ -233,13 +233,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureGradOffset (global 4-component vector of float)
+0:31          textureGradOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -254,7 +254,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureGradOffset (global 4-component vector of int)
+0:32          textureGradOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -269,7 +269,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureGradOffset (global 4-component vector of uint)
+0:33          textureGradOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -284,7 +284,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureGradOffset (global 4-component vector of float)
+0:35          textureGradOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -303,7 +303,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureGradOffset (global 4-component vector of int)
+0:36          textureGradOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -322,7 +322,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureGradOffset (global 4-component vector of uint)
+0:37          textureGradOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -341,7 +341,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureGradOffset (global 4-component vector of float)
+0:39          textureGradOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -364,7 +364,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureGradOffset (global 4-component vector of int)
+0:40          textureGradOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -387,7 +387,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureGradOffset (global 4-component vector of uint)
+0:41          textureGradOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -424,8 +424,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -440,6 +440,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -454,8 +456,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 9e1417600fe3747fa4fd9f0ca0fd71fa45d82587..dee78bc48abe9d4df87dfa197038fde1ee1599e9 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplegrad.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureGradOffset (global 4-component vector of float)
+0:27          textureGradOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -24,7 +24,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureGradOffset (global 4-component vector of int)
+0:28          textureGradOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -40,7 +40,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureGradOffset (global 4-component vector of uint)
+0:29          textureGradOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -56,7 +56,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureGradOffset (global 4-component vector of float)
+0:31          textureGradOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -76,7 +76,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureGradOffset (global 4-component vector of int)
+0:32          textureGradOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -96,7 +96,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureGradOffset (global 4-component vector of uint)
+0:33          textureGradOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -130,8 +130,8 @@ gl_FragCoord origin is upper left
 0:36            1 (const int)
 0:36        Constant:
 0:36          1.000000
-0:?       Sequence
-0:?         Sequence
+0:38      Sequence
+0:38        Sequence
 0:38          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:38            Color: direct index for structure (temp 4-component vector of float)
@@ -146,6 +146,8 @@ gl_FragCoord origin is upper left
 0:38                1 (const int)
 0:38        Branch: Return
 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)
@@ -157,8 +159,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -167,13 +167,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureGradOffset (global 4-component vector of float)
+0:27          textureGradOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -189,7 +189,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureGradOffset (global 4-component vector of int)
+0:28          textureGradOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -205,7 +205,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureGradOffset (global 4-component vector of uint)
+0:29          textureGradOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -221,7 +221,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureGradOffset (global 4-component vector of float)
+0:31          textureGradOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -241,7 +241,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureGradOffset (global 4-component vector of int)
+0:32          textureGradOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -261,7 +261,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureGradOffset (global 4-component vector of uint)
+0:33          textureGradOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -295,8 +295,8 @@ gl_FragCoord origin is upper left
 0:36            1 (const int)
 0:36        Constant:
 0:36          1.000000
-0:?       Sequence
-0:?         Sequence
+0:38      Sequence
+0:38        Sequence
 0:38          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:38            Color: direct index for structure (temp 4-component vector of float)
@@ -311,6 +311,8 @@ gl_FragCoord origin is upper left
 0:38                1 (const int)
 0:38        Branch: Return
 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)
@@ -322,8 +324,6 @@ gl_FragCoord origin is upper left
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (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
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 766f6acb9bffd7038d0f1d250904ba686a1cfef9..afdedb7dad11295d70bbac16bed07eeb57536f7f 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplelevel.array.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureLod (global 4-component vector of float)
+0:27          textureLod (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -20,7 +20,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureLod (global 4-component vector of int)
+0:28          textureLod (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4a' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -32,7 +32,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureLod (global 4-component vector of uint)
+0:29          textureLod (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4a' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureLod (global 4-component vector of float)
+0:31          textureLod (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4a' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -57,7 +57,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureLod (global 4-component vector of int)
+0:32          textureLod (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4a' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -70,7 +70,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureLod (global 4-component vector of uint)
+0:33          textureLod (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4a' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -83,7 +83,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureLod (global 4-component vector of float)
+0:35          textureLod (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -97,7 +97,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureLod (global 4-component vector of int)
+0:36          textureLod (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -111,7 +111,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureLod (global 4-component vector of uint)
+0:37          textureLod (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -139,8 +139,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -155,6 +155,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -166,8 +168,6 @@ 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,13 +176,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:24  Function Definition: main( (global 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:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval10' (temp 4-component vector of float)
-0:27          textureLod (global 4-component vector of float)
+0:27          textureLod (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
 0:27              'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -194,7 +194,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval11' (temp 4-component vector of int)
-0:28          textureLod (global 4-component vector of int)
+0:28          textureLod (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4a' (uniform itexture1DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -206,7 +206,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval12' (temp 4-component vector of uint)
-0:29          textureLod (global 4-component vector of uint)
+0:29          textureLod (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4a' (uniform utexture1DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -218,7 +218,7 @@ gl_FragCoord origin is upper left
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval20' (temp 4-component vector of float)
-0:31          textureLod (global 4-component vector of float)
+0:31          textureLod (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4a' (uniform texture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -231,7 +231,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval21' (temp 4-component vector of int)
-0:32          textureLod (global 4-component vector of int)
+0:32          textureLod (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4a' (uniform itexture2DArray)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval22' (temp 4-component vector of uint)
-0:33          textureLod (global 4-component vector of uint)
+0:33          textureLod (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4a' (uniform utexture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -257,7 +257,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureLod (global 4-component vector of float)
+0:35          textureLod (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -271,7 +271,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureLod (global 4-component vector of int)
+0:36          textureLod (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -285,7 +285,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureLod (global 4-component vector of uint)
+0:37          textureLod (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -313,8 +313,8 @@ gl_FragCoord origin is upper left
 0:40            1 (const int)
 0:40        Constant:
 0:40          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -329,6 +329,8 @@ gl_FragCoord origin is upper left
 0:42                1 (const int)
 0:42        Branch: Return
 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)
@@ -340,8 +342,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index ee53339b0b509c9172d8b8f2e04e930fb5d8e794..34a659788348493c74ada69142429c247b5c289a 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplelevel.basic.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (global 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:32      Sequence
 0:32        move second child to first child (temp 4-component vector of float)
 0:32          'txval10' (temp 4-component vector of float)
-0:32          textureLod (global 4-component vector of float)
+0:32          textureLod (temp 4-component vector of float)
 0:32            Construct combined texture-sampler (temp sampler1D)
 0:32              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -19,7 +19,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of int)
 0:33          'txval11' (temp 4-component vector of int)
-0:33          textureLod (global 4-component vector of int)
+0:33          textureLod (temp 4-component vector of int)
 0:33            Construct combined texture-sampler (temp isampler1D)
 0:33              'g_tTex1di4' (uniform itexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -30,7 +30,7 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of uint)
 0:34          'txval12' (temp 4-component vector of uint)
-0:34          textureLod (global 4-component vector of uint)
+0:34          textureLod (temp 4-component vector of uint)
 0:34            Construct combined texture-sampler (temp usampler1D)
 0:34              'g_tTex1du4' (uniform utexture1D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of float)
 0:36          'txval20' (temp 4-component vector of float)
-0:36          textureLod (global 4-component vector of float)
+0:36          textureLod (temp 4-component vector of float)
 0:36            Construct combined texture-sampler (temp sampler2D)
 0:36              'g_tTex2df4' (uniform texture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -53,7 +53,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of int)
 0:37          'txval21' (temp 4-component vector of int)
-0:37          textureLod (global 4-component vector of int)
+0:37          textureLod (temp 4-component vector of int)
 0:37            Construct combined texture-sampler (temp isampler2D)
 0:37              'g_tTex2di4' (uniform itexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of uint)
 0:38          'txval22' (temp 4-component vector of uint)
-0:38          textureLod (global 4-component vector of uint)
+0:38          textureLod (temp 4-component vector of uint)
 0:38            Construct combined texture-sampler (temp usampler2D)
 0:38              'g_tTex2du4' (uniform utexture2D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval30' (temp 4-component vector of float)
-0:40          textureLod (global 4-component vector of float)
+0:40          textureLod (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler3D)
 0:40              'g_tTex3df4' (uniform texture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -90,7 +90,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval31' (temp 4-component vector of int)
-0:41          textureLod (global 4-component vector of int)
+0:41          textureLod (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler3D)
 0:41              'g_tTex3di4' (uniform itexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -103,7 +103,7 @@ gl_FragCoord origin is upper left
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval32' (temp 4-component vector of uint)
-0:42          textureLod (global 4-component vector of uint)
+0:42          textureLod (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler3D)
 0:42              'g_tTex3du4' (uniform utexture3D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -116,7 +116,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval40' (temp 4-component vector of float)
-0:44          textureLod (global 4-component vector of float)
+0:44          textureLod (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp samplerCube)
 0:44              'g_tTexcdf4' (uniform textureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -129,7 +129,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval41' (temp 4-component vector of int)
-0:45          textureLod (global 4-component vector of int)
+0:45          textureLod (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isamplerCube)
 0:45              'g_tTexcdi4' (uniform itextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -142,7 +142,7 @@ gl_FragCoord origin is upper left
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval42' (temp 4-component vector of uint)
-0:46          textureLod (global 4-component vector of uint)
+0:46          textureLod (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usamplerCube)
 0:46              'g_tTexcdu4' (uniform utextureCube)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -169,8 +169,8 @@ gl_FragCoord origin is upper left
 0:49            1 (const int)
 0:49        Constant:
 0:49          1.000000
-0:?       Sequence
-0:?         Sequence
+0:51      Sequence
+0:51        Sequence
 0:51          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:51            Color: direct index for structure (temp 4-component vector of float)
@@ -185,6 +185,8 @@ gl_FragCoord origin is upper left
 0:51                1 (const int)
 0:51        Branch: Return
 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)
@@ -200,8 +202,6 @@ 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:
@@ -210,13 +210,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: main( (global 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:32      Sequence
 0:32        move second child to first child (temp 4-component vector of float)
 0:32          'txval10' (temp 4-component vector of float)
-0:32          textureLod (global 4-component vector of float)
+0:32          textureLod (temp 4-component vector of float)
 0:32            Construct combined texture-sampler (temp sampler1D)
 0:32              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -227,7 +227,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of int)
 0:33          'txval11' (temp 4-component vector of int)
-0:33          textureLod (global 4-component vector of int)
+0:33          textureLod (temp 4-component vector of int)
 0:33            Construct combined texture-sampler (temp isampler1D)
 0:33              'g_tTex1di4' (uniform itexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -238,7 +238,7 @@ gl_FragCoord origin is upper left
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of uint)
 0:34          'txval12' (temp 4-component vector of uint)
-0:34          textureLod (global 4-component vector of uint)
+0:34          textureLod (temp 4-component vector of uint)
 0:34            Construct combined texture-sampler (temp usampler1D)
 0:34              'g_tTex1du4' (uniform utexture1D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -249,7 +249,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of float)
 0:36          'txval20' (temp 4-component vector of float)
-0:36          textureLod (global 4-component vector of float)
+0:36          textureLod (temp 4-component vector of float)
 0:36            Construct combined texture-sampler (temp sampler2D)
 0:36              'g_tTex2df4' (uniform texture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -261,7 +261,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of int)
 0:37          'txval21' (temp 4-component vector of int)
-0:37          textureLod (global 4-component vector of int)
+0:37          textureLod (temp 4-component vector of int)
 0:37            Construct combined texture-sampler (temp isampler2D)
 0:37              'g_tTex2di4' (uniform itexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -273,7 +273,7 @@ gl_FragCoord origin is upper left
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of uint)
 0:38          'txval22' (temp 4-component vector of uint)
-0:38          textureLod (global 4-component vector of uint)
+0:38          textureLod (temp 4-component vector of uint)
 0:38            Construct combined texture-sampler (temp usampler2D)
 0:38              'g_tTex2du4' (uniform utexture2D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -285,7 +285,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval30' (temp 4-component vector of float)
-0:40          textureLod (global 4-component vector of float)
+0:40          textureLod (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler3D)
 0:40              'g_tTex3df4' (uniform texture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -298,7 +298,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval31' (temp 4-component vector of int)
-0:41          textureLod (global 4-component vector of int)
+0:41          textureLod (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler3D)
 0:41              'g_tTex3di4' (uniform itexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -311,7 +311,7 @@ gl_FragCoord origin is upper left
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval32' (temp 4-component vector of uint)
-0:42          textureLod (global 4-component vector of uint)
+0:42          textureLod (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler3D)
 0:42              'g_tTex3du4' (uniform utexture3D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -324,7 +324,7 @@ gl_FragCoord origin is upper left
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval40' (temp 4-component vector of float)
-0:44          textureLod (global 4-component vector of float)
+0:44          textureLod (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp samplerCube)
 0:44              'g_tTexcdf4' (uniform textureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -337,7 +337,7 @@ gl_FragCoord origin is upper left
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval41' (temp 4-component vector of int)
-0:45          textureLod (global 4-component vector of int)
+0:45          textureLod (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isamplerCube)
 0:45              'g_tTexcdi4' (uniform itextureCube)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -350,7 +350,7 @@ gl_FragCoord origin is upper left
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval42' (temp 4-component vector of uint)
-0:46          textureLod (global 4-component vector of uint)
+0:46          textureLod (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usamplerCube)
 0:46              'g_tTexcdu4' (uniform utextureCube)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -377,8 +377,8 @@ gl_FragCoord origin is upper left
 0:49            1 (const int)
 0:49        Constant:
 0:49          1.000000
-0:?       Sequence
-0:?         Sequence
+0:51      Sequence
+0:51        Sequence
 0:51          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:51            Color: direct index for structure (temp 4-component vector of float)
@@ -393,6 +393,8 @@ gl_FragCoord origin is upper left
 0:51                1 (const int)
 0:51        Branch: Return
 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)
@@ -408,8 +410,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 9af7a9fcd984fc238489bf27e524da9776134775..04d0870e27522447dd5b6e6b9e69b160ded4e534 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -1,13 +1,13 @@
 hlsl.samplelevel.basic.dx10.vert
 Shader version: 450
 0:? Sequence
-0:27  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:27    Function Parameters: 
 0:?     Sequence
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of float)
 0:30          'txval10' (temp 4-component vector of float)
-0:30          textureLod (global 4-component vector of float)
+0:30          textureLod (temp 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
 0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -18,7 +18,7 @@ Shader version: 450
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of int)
 0:31          'txval11' (temp 4-component vector of int)
-0:31          textureLod (global 4-component vector of int)
+0:31          textureLod (temp 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -29,7 +29,7 @@ Shader version: 450
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of uint)
 0:32          'txval12' (temp 4-component vector of uint)
-0:32          textureLod (global 4-component vector of uint)
+0:32          textureLod (temp 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -40,7 +40,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureLod (global 4-component vector of float)
+0:34          textureLod (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -52,7 +52,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureLod (global 4-component vector of int)
+0:35          textureLod (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -64,7 +64,7 @@ Shader version: 450
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureLod (global 4-component vector of uint)
+0:36          textureLod (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -76,7 +76,7 @@ Shader version: 450
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of float)
 0:38          'txval30' (temp 4-component vector of float)
-0:38          textureLod (global 4-component vector of float)
+0:38          textureLod (temp 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -89,7 +89,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of int)
 0:39          'txval31' (temp 4-component vector of int)
-0:39          textureLod (global 4-component vector of int)
+0:39          textureLod (temp 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -102,7 +102,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of uint)
 0:40          'txval32' (temp 4-component vector of uint)
-0:40          textureLod (global 4-component vector of uint)
+0:40          textureLod (temp 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -115,7 +115,7 @@ Shader version: 450
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of float)
 0:42          'txval40' (temp 4-component vector of float)
-0:42          textureLod (global 4-component vector of float)
+0:42          textureLod (temp 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -128,7 +128,7 @@ Shader version: 450
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of int)
 0:43          'txval41' (temp 4-component vector of int)
-0:43          textureLod (global 4-component vector of int)
+0:43          textureLod (temp 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -141,7 +141,7 @@ Shader version: 450
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of uint)
 0:44          'txval42' (temp 4-component vector of uint)
-0:44          textureLod (global 4-component vector of uint)
+0:44          textureLod (temp 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -161,8 +161,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+0:48      Sequence
+0:48        Sequence
 0:48          move second child to first child (temp 4-component vector of float)
 0:?             'Pos' (out 4-component vector of float Position)
 0:48            Pos: direct index for structure (temp 4-component vector of float)
@@ -171,6 +171,7 @@ Shader version: 450
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -185,7 +186,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -193,13 +193,13 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:27  Function Definition: main( (global structure{temp 4-component vector of float Pos})
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float Pos})
 0:27    Function Parameters: 
 0:?     Sequence
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of float)
 0:30          'txval10' (temp 4-component vector of float)
-0:30          textureLod (global 4-component vector of float)
+0:30          textureLod (temp 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
 0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -210,7 +210,7 @@ Shader version: 450
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of int)
 0:31          'txval11' (temp 4-component vector of int)
-0:31          textureLod (global 4-component vector of int)
+0:31          textureLod (temp 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -221,7 +221,7 @@ Shader version: 450
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of uint)
 0:32          'txval12' (temp 4-component vector of uint)
-0:32          textureLod (global 4-component vector of uint)
+0:32          textureLod (temp 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -232,7 +232,7 @@ Shader version: 450
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureLod (global 4-component vector of float)
+0:34          textureLod (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -244,7 +244,7 @@ Shader version: 450
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureLod (global 4-component vector of int)
+0:35          textureLod (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -256,7 +256,7 @@ Shader version: 450
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureLod (global 4-component vector of uint)
+0:36          textureLod (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -268,7 +268,7 @@ Shader version: 450
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of float)
 0:38          'txval30' (temp 4-component vector of float)
-0:38          textureLod (global 4-component vector of float)
+0:38          textureLod (temp 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -281,7 +281,7 @@ Shader version: 450
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of int)
 0:39          'txval31' (temp 4-component vector of int)
-0:39          textureLod (global 4-component vector of int)
+0:39          textureLod (temp 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -294,7 +294,7 @@ Shader version: 450
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of uint)
 0:40          'txval32' (temp 4-component vector of uint)
-0:40          textureLod (global 4-component vector of uint)
+0:40          textureLod (temp 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -307,7 +307,7 @@ Shader version: 450
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of float)
 0:42          'txval40' (temp 4-component vector of float)
-0:42          textureLod (global 4-component vector of float)
+0:42          textureLod (temp 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -320,7 +320,7 @@ Shader version: 450
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of int)
 0:43          'txval41' (temp 4-component vector of int)
-0:43          textureLod (global 4-component vector of int)
+0:43          textureLod (temp 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -333,7 +333,7 @@ Shader version: 450
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of uint)
 0:44          'txval42' (temp 4-component vector of uint)
-0:44          textureLod (global 4-component vector of uint)
+0:44          textureLod (temp 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -353,8 +353,8 @@ Shader version: 450
 0:?           0.000000
 0:?           0.000000
 0:?           0.000000
-0:?       Sequence
-0:?         Sequence
+0:48      Sequence
+0:48        Sequence
 0:48          move second child to first child (temp 4-component vector of float)
 0:?             'Pos' (out 4-component vector of float Position)
 0:48            Pos: direct index for structure (temp 4-component vector of float)
@@ -363,6 +363,7 @@ Shader version: 450
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -377,7 +378,6 @@ Shader version: 450
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index d669a9991312b95e9dfe4dfa0bd344e47a11d382..aa77961067174508d37dbdab49b90dcb8b8b1afe 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplelevel.offset.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureLodOffset (global 4-component vector of float)
+0:31          textureLodOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureLodOffset (global 4-component vector of int)
+0:32          textureLodOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureLodOffset (global 4-component vector of uint)
+0:33          textureLodOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -47,7 +47,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureLodOffset (global 4-component vector of float)
+0:35          textureLodOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -62,7 +62,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureLodOffset (global 4-component vector of int)
+0:36          textureLodOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureLodOffset (global 4-component vector of uint)
+0:37          textureLodOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -92,7 +92,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureLodOffset (global 4-component vector of float)
+0:39          textureLodOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -109,7 +109,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureLodOffset (global 4-component vector of int)
+0:40          textureLodOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -126,7 +126,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureLodOffset (global 4-component vector of uint)
+0:41          textureLodOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -157,8 +157,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -173,6 +173,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -187,8 +189,6 @@ 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:
@@ -197,13 +197,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:28  Function Definition: main( (global 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:31      Sequence
 0:31        move second child to first child (temp 4-component vector of float)
 0:31          'txval10' (temp 4-component vector of float)
-0:31          textureLodOffset (global 4-component vector of float)
+0:31          textureLodOffset (temp 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
 0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -216,7 +216,7 @@ gl_FragCoord origin is upper left
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of int)
 0:32          'txval11' (temp 4-component vector of int)
-0:32          textureLodOffset (global 4-component vector of int)
+0:32          textureLodOffset (temp 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
 0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -229,7 +229,7 @@ gl_FragCoord origin is upper left
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of uint)
 0:33          'txval12' (temp 4-component vector of uint)
-0:33          textureLodOffset (global 4-component vector of uint)
+0:33          textureLodOffset (temp 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -242,7 +242,7 @@ gl_FragCoord origin is upper left
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval20' (temp 4-component vector of float)
-0:35          textureLodOffset (global 4-component vector of float)
+0:35          textureLodOffset (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -257,7 +257,7 @@ gl_FragCoord origin is upper left
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval21' (temp 4-component vector of int)
-0:36          textureLodOffset (global 4-component vector of int)
+0:36          textureLodOffset (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -272,7 +272,7 @@ gl_FragCoord origin is upper left
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval22' (temp 4-component vector of uint)
-0:37          textureLodOffset (global 4-component vector of uint)
+0:37          textureLodOffset (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -287,7 +287,7 @@ gl_FragCoord origin is upper left
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval30' (temp 4-component vector of float)
-0:39          textureLodOffset (global 4-component vector of float)
+0:39          textureLodOffset (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -304,7 +304,7 @@ gl_FragCoord origin is upper left
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval31' (temp 4-component vector of int)
-0:40          textureLodOffset (global 4-component vector of int)
+0:40          textureLodOffset (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -321,7 +321,7 @@ gl_FragCoord origin is upper left
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval32' (temp 4-component vector of uint)
-0:41          textureLodOffset (global 4-component vector of uint)
+0:41          textureLodOffset (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -352,8 +352,8 @@ gl_FragCoord origin is upper left
 0:46            1 (const int)
 0:46        Constant:
 0:46          1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -368,6 +368,8 @@ gl_FragCoord origin is upper left
 0:48                1 (const int)
 0:48        Branch: Return
 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)
@@ -382,8 +384,6 @@ 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
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index fd2673b6a88bdfa8453de5df452f9a4181b5e905..056a4f13c8fe343c3313b31fb83e49d94f105dee 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -2,13 +2,13 @@ hlsl.samplelevel.offsetarray.dx10.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureLodOffset (global 4-component vector of float)
+0:23          textureLodOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureLodOffset (global 4-component vector of int)
+0:24          textureLodOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureLodOffset (global 4-component vector of uint)
+0:25          textureLodOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureLodOffset (global 4-component vector of float)
+0:27          textureLodOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -66,7 +66,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureLodOffset (global 4-component vector of int)
+0:28          textureLodOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -82,7 +82,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureLodOffset (global 4-component vector of uint)
+0:29          textureLodOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -128,6 +128,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -136,8 +138,6 @@ 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:
@@ -146,13 +146,13 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:20  Function Definition: main( (global 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:23      Sequence
 0:23        move second child to first child (temp 4-component vector of float)
 0:23          'txval10' (temp 4-component vector of float)
-0:23          textureLodOffset (global 4-component vector of float)
+0:23          textureLodOffset (temp 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
 0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -166,7 +166,7 @@ gl_FragCoord origin is upper left
 0:24      Sequence
 0:24        move second child to first child (temp 4-component vector of int)
 0:24          'txval11' (temp 4-component vector of int)
-0:24          textureLodOffset (global 4-component vector of int)
+0:24          textureLodOffset (temp 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
 0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -180,7 +180,7 @@ gl_FragCoord origin is upper left
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of uint)
 0:25          'txval12' (temp 4-component vector of uint)
-0:25          textureLodOffset (global 4-component vector of uint)
+0:25          textureLodOffset (temp 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -194,7 +194,7 @@ gl_FragCoord origin is upper left
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of float)
 0:27          'txval20' (temp 4-component vector of float)
-0:27          textureLodOffset (global 4-component vector of float)
+0:27          textureLodOffset (temp 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -210,7 +210,7 @@ gl_FragCoord origin is upper left
 0:28      Sequence
 0:28        move second child to first child (temp 4-component vector of int)
 0:28          'txval21' (temp 4-component vector of int)
-0:28          textureLodOffset (global 4-component vector of int)
+0:28          textureLodOffset (temp 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
 0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -226,7 +226,7 @@ gl_FragCoord origin is upper left
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of uint)
 0:29          'txval22' (temp 4-component vector of uint)
-0:29          textureLodOffset (global 4-component vector of uint)
+0:29          textureLodOffset (temp 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -256,8 +256,8 @@ gl_FragCoord origin is upper left
 0:34            1 (const int)
 0:34        Constant:
 0:34          1.000000
-0:?       Sequence
-0:?         Sequence
+0:36      Sequence
+0:36        Sequence
 0:36          move second child to first child (temp 4-component vector of float)
 0:?             'Color' (layout(location=0 ) out 4-component vector of float)
 0:36            Color: direct index for structure (temp 4-component vector of float)
@@ -272,6 +272,8 @@ gl_FragCoord origin is upper left
 0:36                1 (const int)
 0:36        Branch: Return
 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)
@@ -280,8 +282,6 @@ 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
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
index 4218c4fb861883abfef0122438506228eed6cdd4..81c1a8442f5c04b51508eb0f8dd78eee3b5fdaa6 100755
--- a/Test/baseResults/hlsl.scope.frag.out
+++ b/Test/baseResults/hlsl.scope.frag.out
@@ -2,7 +2,7 @@ hlsl.scope.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
@@ -47,7 +47,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
index a37991d8494c6a44f2f18ea54c0032d32345e230..a9f927687c6004dda6cc6ad2b20747bf907753ae 100644
--- a/Test/baseResults/hlsl.semicolons.frag.out
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -2,11 +2,11 @@ hlsl.semicolons.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: MyFunc( (global void)
+0:2  Function Definition: MyFunc( (temp void)
 0:2    Function Parameters: 
-0:8  Function Definition: MyFunc2( (global void)
+0:8  Function Definition: MyFunc2( (temp void)
 0:8    Function Parameters: 
-0:13  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:13  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:13    Function Parameters: 
 0:?     Sequence
 0:16      move second child to first child (temp 4-component vector of float)
@@ -19,8 +19,8 @@ gl_FragCoord origin is upper left
 0:16          1.000000
 0:16          1.000000
 0:16          1.000000
-0:?       Sequence
-0:?         Sequence
+0:17      Sequence
+0:17        Sequence
 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)
@@ -38,11 +38,11 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: MyFunc( (global void)
+0:2  Function Definition: MyFunc( (temp void)
 0:2    Function Parameters: 
-0:8  Function Definition: MyFunc2( (global void)
+0:8  Function Definition: MyFunc2( (temp void)
 0:8    Function Parameters: 
-0:13  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:13  Function Definition: main( (temp structure{temp 4-component vector of float color})
 0:13    Function Parameters: 
 0:?     Sequence
 0:16      move second child to first child (temp 4-component vector of float)
@@ -55,8 +55,8 @@ gl_FragCoord origin is upper left
 0:16          1.000000
 0:16          1.000000
 0:16          1.000000
-0:?       Sequence
-0:?         Sequence
+0:17      Sequence
+0:17        Sequence
 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)
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index c7fdf8d02b6a73b4f2ce320d9a8f3dfb012408cf..a15caac5b3f11c510983efcdf3632ad08cbc5e16 100755
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -2,7 +2,7 @@ hlsl.shapeConv.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;f1; (global 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction(vf4;f1; (temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:2      'f' (in float)
@@ -58,41 +58,43 @@ gl_FragCoord origin is upper left
 0:13          'MyVal' (temp 3-component vector of float)
 0:13          Construct vec3 (temp 3-component vector of float)
 0:13            'V' (temp float)
-0:16      Compare Greater Than (temp bool)
+0:16      Compare Greater Than (temp 3-component vector of bool)
 0:16        'foo' (temp 3-component vector of float)
 0:16        Constant:
 0:16          4.000000
 0:16          4.000000
 0:16          4.000000
-0:17      Compare Greater Than or Equal (temp bool)
+0:17      Compare Greater Than or Equal (temp 3-component vector of bool)
 0:17        'foo' (temp 3-component vector of float)
 0:17        Constant:
 0:17          5.000000
 0:17          5.000000
 0:17          5.000000
-0:18      Compare Less Than (temp bool)
+0:18      Compare Less Than (temp 3-component vector of bool)
 0:18        Constant:
 0:18          6.000000
 0:18          6.000000
 0:18          6.000000
 0:18        'foo' (temp 3-component vector of float)
-0:19      Compare Less Than or Equal (temp bool)
+0:19      Compare Less Than or Equal (temp 3-component vector of bool)
 0:19        Constant:
 0:19          7.000000
 0:19          7.000000
 0:19          7.000000
 0:19        'foo' (temp 3-component vector of float)
-0:21      Compare Equal (temp bool)
-0:21        Construct vec4 (temp 4-component vector of float)
-0:21          direct index (temp float)
-0:21            'v' (temp 4-component vector of float)
-0:21            Constant:
-0:21              0 (const int)
-0:21        'v' (temp 4-component vector of float)
-0:22      Compare Not Equal (temp bool)
-0:22        Construct vec4 (temp 4-component vector of float)
-0:22          'f' (in float)
-0:22        'v' (temp 4-component vector of float)
+0:21      all (temp bool)
+0:21        Equal (temp 4-component vector of bool)
+0:21          Construct vec4 (temp 4-component vector of float)
+0:21            direct index (temp float)
+0:21              'v' (temp 4-component vector of float)
+0:21              Constant:
+0:21                0 (const int)
+0:21          'v' (temp 4-component vector of float)
+0:22      any (temp bool)
+0:22        NotEqual (temp 4-component vector of bool)
+0:22          Construct vec4 (temp 4-component vector of float)
+0:22            'f' (in float)
+0:22          'v' (temp 4-component vector of float)
 0:26      Compare Equal (temp bool)
 0:26        'f1' (temp 1-component vector of float)
 0:26        Construct float (temp 1-component vector of float)
@@ -113,11 +115,12 @@ gl_FragCoord origin is upper left
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;f1; (global 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction(vf4;f1; (temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:2      'f' (in float)
@@ -173,41 +176,43 @@ gl_FragCoord origin is upper left
 0:13          'MyVal' (temp 3-component vector of float)
 0:13          Construct vec3 (temp 3-component vector of float)
 0:13            'V' (temp float)
-0:16      Compare Greater Than (temp bool)
+0:16      Compare Greater Than (temp 3-component vector of bool)
 0:16        'foo' (temp 3-component vector of float)
 0:16        Constant:
 0:16          4.000000
 0:16          4.000000
 0:16          4.000000
-0:17      Compare Greater Than or Equal (temp bool)
+0:17      Compare Greater Than or Equal (temp 3-component vector of bool)
 0:17        'foo' (temp 3-component vector of float)
 0:17        Constant:
 0:17          5.000000
 0:17          5.000000
 0:17          5.000000
-0:18      Compare Less Than (temp bool)
+0:18      Compare Less Than (temp 3-component vector of bool)
 0:18        Constant:
 0:18          6.000000
 0:18          6.000000
 0:18          6.000000
 0:18        'foo' (temp 3-component vector of float)
-0:19      Compare Less Than or Equal (temp bool)
+0:19      Compare Less Than or Equal (temp 3-component vector of bool)
 0:19        Constant:
 0:19          7.000000
 0:19          7.000000
 0:19          7.000000
 0:19        'foo' (temp 3-component vector of float)
-0:21      Compare Equal (temp bool)
-0:21        Construct vec4 (temp 4-component vector of float)
-0:21          direct index (temp float)
-0:21            'v' (temp 4-component vector of float)
-0:21            Constant:
-0:21              0 (const int)
-0:21        'v' (temp 4-component vector of float)
-0:22      Compare Not Equal (temp bool)
-0:22        Construct vec4 (temp 4-component vector of float)
-0:22          'f' (in float)
-0:22        'v' (temp 4-component vector of float)
+0:21      all (temp bool)
+0:21        Equal (temp 4-component vector of bool)
+0:21          Construct vec4 (temp 4-component vector of float)
+0:21            direct index (temp float)
+0:21              'v' (temp 4-component vector of float)
+0:21              Constant:
+0:21                0 (const int)
+0:21          'v' (temp 4-component vector of float)
+0:22      any (temp bool)
+0:22        NotEqual (temp 4-component vector of bool)
+0:22          Construct vec4 (temp 4-component vector of float)
+0:22            'f' (in float)
+0:22          'v' (temp 4-component vector of float)
 0:26      Compare Equal (temp bool)
 0:26        'f1' (temp 1-component vector of float)
 0:26        Construct float (temp 1-component vector of float)
@@ -227,7 +232,7 @@ gl_FragCoord origin is upper left
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 84
+// Id's are bound by 85
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -244,7 +249,7 @@ gl_FragCoord origin is upper left
                               Name 33  "V"
                               Name 34  "MyVal"
                               Name 37  "foo"
-                              Name 69  "f1"
+                              Name 70  "f1"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -266,17 +271,19 @@ gl_FragCoord origin is upper left
               39:    6(float) Constant 1082130432
               40:   22(fvec3) ConstantComposite 39 39 39
               41:             TypeBool
-              44:    6(float) Constant 1084227584
-              45:   22(fvec3) ConstantComposite 44 44 44
-              47:    6(float) Constant 1086324736
-              48:   22(fvec3) ConstantComposite 47 47 47
-              51:    6(float) Constant 1088421888
-              52:   22(fvec3) ConstantComposite 51 51 51
-              55:             TypeInt 32 0
-              56:     55(int) Constant 0
-              61:             TypeVector 41(bool) 4
+              42:             TypeVector 41(bool) 3
+              45:    6(float) Constant 1084227584
+              46:   22(fvec3) ConstantComposite 45 45 45
+              48:    6(float) Constant 1086324736
+              49:   22(fvec3) ConstantComposite 48 48 48
+              52:    6(float) Constant 1088421888
+              53:   22(fvec3) ConstantComposite 52 52 52
+              56:             TypeInt 32 0
+              57:     56(int) Constant 0
+              62:             TypeVector 41(bool) 4
          4(main):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 13(PixelShaderFunction(vf4;f1;):    7(fvec4) Function None 10
        11(input):      8(ptr) FunctionParameter
@@ -288,7 +295,7 @@ gl_FragCoord origin is upper left
            33(V):      9(ptr) Variable Function
        34(MyVal):     23(ptr) Variable Function
          37(foo):     23(ptr) Variable Function
-          69(f1):      9(ptr) Variable Function
+          70(f1):      9(ptr) Variable Function
                               Store 15(v) 17
                               Store 15(v) 19
               20:    6(float) Load 12(f)
@@ -305,35 +312,35 @@ gl_FragCoord origin is upper left
               36:   22(fvec3) CompositeConstruct 35 35 35
                               Store 34(MyVal) 36
               38:   22(fvec3) Load 37(foo)
-              42:    41(bool) FOrdGreaterThan 38 40
-              43:   22(fvec3) Load 37(foo)
-              46:    41(bool) FOrdGreaterThanEqual 43 45
-              49:   22(fvec3) Load 37(foo)
-              50:    41(bool) FOrdLessThan 48 49
-              53:   22(fvec3) Load 37(foo)
-              54:    41(bool) FOrdLessThanEqual 52 53
-              57:      9(ptr) AccessChain 15(v) 56
-              58:    6(float) Load 57
-              59:    7(fvec4) CompositeConstruct 58 58 58 58
-              60:    7(fvec4) Load 15(v)
-              62:   61(bvec4) FOrdEqual 59 60
-              63:    41(bool) All 62
-              64:    6(float) Load 12(f)
-              65:    7(fvec4) CompositeConstruct 64 64 64 64
-              66:    7(fvec4) Load 15(v)
-              67:   61(bvec4) FOrdNotEqual 65 66
-              68:    41(bool) Any 67
-              70:    6(float) Load 69(f1)
-              71:    7(fvec4) Load 15(v)
-              72:    6(float) CompositeExtract 71 0
-              73:    41(bool) FOrdEqual 70 72
-              74:    7(fvec4) Load 15(v)
-              75:    6(float) CompositeExtract 74 0
-              76:    6(float) Load 69(f1)
-              77:    41(bool) FOrdLessThan 75 76
-              78:    6(float) Load 69(f1)
-              79:    6(float) Load 69(f1)
-              80:   22(fvec3) CompositeConstruct 79 79 79
-              81:    7(fvec4) Load 11(input)
-                              ReturnValue 81
+              43:   42(bvec3) FOrdGreaterThan 38 40
+              44:   22(fvec3) Load 37(foo)
+              47:   42(bvec3) FOrdGreaterThanEqual 44 46
+              50:   22(fvec3) Load 37(foo)
+              51:   42(bvec3) FOrdLessThan 49 50
+              54:   22(fvec3) Load 37(foo)
+              55:   42(bvec3) FOrdLessThanEqual 53 54
+              58:      9(ptr) AccessChain 15(v) 57
+              59:    6(float) Load 58
+              60:    7(fvec4) CompositeConstruct 59 59 59 59
+              61:    7(fvec4) Load 15(v)
+              63:   62(bvec4) FOrdEqual 60 61
+              64:    41(bool) All 63
+              65:    6(float) Load 12(f)
+              66:    7(fvec4) CompositeConstruct 65 65 65 65
+              67:    7(fvec4) Load 15(v)
+              68:   62(bvec4) FOrdNotEqual 66 67
+              69:    41(bool) Any 68
+              71:    6(float) Load 70(f1)
+              72:    7(fvec4) Load 15(v)
+              73:    6(float) CompositeExtract 72 0
+              74:    41(bool) FOrdEqual 71 73
+              75:    7(fvec4) Load 15(v)
+              76:    6(float) CompositeExtract 75 0
+              77:    6(float) Load 70(f1)
+              78:    41(bool) FOrdLessThan 76 77
+              79:    6(float) Load 70(f1)
+              80:    6(float) Load 70(f1)
+              81:   22(fvec3) CompositeConstruct 80 80 80
+              82:    7(fvec4) Load 11(input)
+                              ReturnValue 82
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
new file mode 100755
index 0000000000000000000000000000000000000000..c21378703cbbf9c16858f0e430b35f04d6b87ef7
--- /dev/null
+++ b/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -0,0 +1,94 @@
+hlsl.shapeConvRet.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: foo( (temp 3-component vector of int)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          13 (const int)
+0:3          13 (const int)
+0:3          13 (const int)
+0:7  Function Definition: main(f1; (temp 4-component vector of float)
+0:7    Function Parameters: 
+0:7      'f' (layout(location=0 ) in 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          Construct vec4 (temp 4-component vector of float)
+0:8            'f' (layout(location=0 ) in float)
+0:8        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'f' (layout(location=0 ) in float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: foo( (temp 3-component vector of int)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          13 (const int)
+0:3          13 (const int)
+0:3          13 (const int)
+0:7  Function Definition: main(f1; (temp 4-component vector of float)
+0:7    Function Parameters: 
+0:7      'f' (layout(location=0 ) in 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          Construct vec4 (temp 4-component vector of float)
+0:8            'f' (layout(location=0 ) in float)
+0:8        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'f' (layout(location=0 ) in float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 24
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 18 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "foo("
+                              Name 18  "@entryPointOutput"
+                              Name 20  "f"
+                              Decorate 18(@entryPointOutput) Location 0
+                              Decorate 20(f) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeVector 6(int) 3
+               8:             TypeFunction 7(ivec3)
+              11:      6(int) Constant 13
+              12:    7(ivec3) ConstantComposite 11 11 11
+              15:             TypeFloat 32
+              16:             TypeVector 15(float) 4
+              17:             TypePointer Output 16(fvec4)
+18(@entryPointOutput):     17(ptr) Variable Output
+              19:             TypePointer Input 15(float)
+           20(f):     19(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              21:   15(float) Load 20(f)
+              22:   16(fvec4) CompositeConstruct 21 21 21 21
+                              Store 18(@entryPointOutput) 22
+                              Return
+                              FunctionEnd
+         9(foo():    7(ivec3) Function None 8
+              10:             Label
+                              ReturnValue 12
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index e4940ae6008d9606825d5aad093465edaa93efd7..629668ac78ab188bd9ceb54dba032593d28ff0c5 100755
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -2,14 +2,14 @@ hlsl.sin.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     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          sine (global 4-component vector of float)
+0:3          sine (temp 4-component vector of float)
 0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Branch: Return
 0:?   Linker Objects
@@ -23,14 +23,14 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     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          sine (global 4-component vector of float)
+0:3          sine (temp 4-component vector of float)
 0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Branch: Return
 0:?   Linker Objects
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 6016f52ee19c2f8b51c9bc1eb10e417eebb6d40d..3d80ce53542e4bda92f59aa41c69d29e6fd08f71 100755
--- a/Test/baseResults/hlsl.string.frag.out
+++ b/Test/baseResults/hlsl.string.frag.out
@@ -2,7 +2,7 @@ hlsl.string.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main(f1; (global float)
+0:10  Function Definition: main(f1; (temp float)
 0:10    Function Parameters: 
 0:10      'f' (layout(location=0 ) in float)
 0:?     Sequence
@@ -22,7 +22,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: main(f1; (global float)
+0:10  Function Definition: main(f1; (temp float)
 0:10    Function Parameters: 
 0:10      'f' (layout(location=0 ) in float)
 0:?     Sequence
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index 42885bcf2469213d520db196efa2b1692e71b27c..94c1b2ad3455606213bd9b192076911f05b96a3e 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -2,7 +2,7 @@ hlsl.stringtoken.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:16  Function Definition: main( (global structure{temp 4-component vector of float Color})
+0:16  Function Definition: main( (temp structure{temp 4-component vector of float Color})
 0:16    Function Parameters: 
 0:?     Sequence
 0:18      move second child to first child (temp 4-component vector of float)
@@ -15,8 +15,8 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -25,9 +25,9 @@ gl_FragCoord origin is upper left
 0:19                0 (const int)
 0:19        Branch: Return
 0:?   Linker Objects
-0:?     'TestTexture' (uniform texture2D)
-0:?     'TestUF' (uniform 4-component vector of float)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'TestTexture' (uniform texture2D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
 
 
 Linked fragment stage:
@@ -36,7 +36,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:16  Function Definition: main( (global structure{temp 4-component vector of float Color})
+0:16  Function Definition: main( (temp structure{temp 4-component vector of float Color})
 0:16    Function Parameters: 
 0:?     Sequence
 0:18      move second child to first child (temp 4-component vector of float)
@@ -49,8 +49,8 @@ gl_FragCoord origin is upper left
 0:?           0.000000
 0:?           0.000000
 0:?           1.000000
-0:?       Sequence
-0:?         Sequence
+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)
@@ -59,13 +59,13 @@ gl_FragCoord origin is upper left
 0:19                0 (const int)
 0:19        Branch: Return
 0:?   Linker Objects
-0:?     'TestTexture' (uniform texture2D)
-0:?     'TestUF' (uniform 4-component vector of float)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'TestTexture' (uniform texture2D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 28
+// Id's are bound by 29
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -78,9 +78,14 @@ gl_FragCoord origin is upper left
                               Name 10  "psout"
                               Name 19  "Color"
                               Name 25  "TestTexture"
-                              Name 27  "TestUF"
+                              Name 26  "$Global"
+                              MemberName 26($Global) 0  "TestUF"
+                              Name 28  ""
                               Decorate 19(Color) Location 0
                               Decorate 25(TestTexture) DescriptorSet 0
+                              MemberDecorate 26($Global) 0 Offset 0
+                              Decorate 26($Global) Block
+                              Decorate 28 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -98,8 +103,9 @@ gl_FragCoord origin is upper left
               23:             TypeImage 6(float) 2D sampled format:Unknown
               24:             TypePointer UniformConstant 23
  25(TestTexture):     24(ptr) Variable UniformConstant
-              26:             TypePointer UniformConstant 7(fvec4)
-      27(TestUF):     26(ptr) Variable UniformConstant
+     26($Global):             TypeStruct 7(fvec4)
+              27:             TypePointer Uniform 26($Global)
+              28:     27(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
        10(psout):      9(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 3a4449533745e78eae4e3d0c511b6e9ceef50675..c14018ea232cc6d27c134b1cc20d29c67c5ebf63 100755
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -6,7 +6,7 @@ WARNING: 0:30: 'register' : ignoring shader_profile
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (global 4-component vector of float)
+0:34  Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
 0:34    Function Parameters: 
 0:34      'input' (layout(location=0 ) in 4-component vector of float)
 0:34      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
@@ -26,10 +26,6 @@ gl_FragCoord origin is upper left
 0:42          'input' (layout(location=0 ) in 4-component vector of float)
 0:42        Branch: Return
 0:?   Linker Objects
-0:?     's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
-0:?     's2' (global structure{temp 4-component vector of float i})
-0:?     'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
-0:?     'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a' (layout(location=1 ) smooth in 4-component vector of float)
@@ -40,6 +36,8 @@ gl_FragCoord origin is upper left
 0:?     'ff2' (layout(location=5 offset=4 ) in bool)
 0:?     'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
 0:?     'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 
 
 Linked fragment stage:
@@ -48,7 +46,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (global 4-component vector of float)
+0:34  Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
 0:34    Function Parameters: 
 0:34      'input' (layout(location=0 ) in 4-component vector of float)
 0:34      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
@@ -68,10 +66,6 @@ gl_FragCoord origin is upper left
 0:42          'input' (layout(location=0 ) in 4-component vector of float)
 0:42        Branch: Return
 0:?   Linker Objects
-0:?     's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
-0:?     's2' (global structure{temp 4-component vector of float i})
-0:?     'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
-0:?     'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a' (layout(location=1 ) smooth in 4-component vector of float)
@@ -82,15 +76,17 @@ gl_FragCoord origin is upper left
 0:?     'ff2' (layout(location=5 offset=4 ) in bool)
 0:?     'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
 0:?     'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 52
+// Id's are bound by 50
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 25 30 31 41 43 45 48 49 50 51
+                              EntryPoint Fragment 4  "PixelShaderFunction" 25 30 31 34 36 38 41 42 43 44
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 8  "FS"
@@ -102,44 +98,51 @@ gl_FragCoord origin is upper left
                               Name 25  "ff4"
                               Name 30  "@entryPointOutput"
                               Name 31  "input"
-                              Name 34  "myS"
-                              MemberName 34(myS) 0  "b"
-                              MemberName 34(myS) 1  "c"
-                              MemberName 34(myS) 2  "a"
-                              MemberName 34(myS) 3  "d"
-                              Name 36  "s1"
-                              Name 39  "ff5"
-                              Name 40  "ff6"
-                              Name 41  "a"
-                              Name 43  "b"
-                              Name 45  "c"
-                              Name 48  "d"
-                              Name 49  "ff1"
-                              Name 50  "ff2"
-                              Name 51  "ff3"
+                              Name 34  "a"
+                              Name 36  "b"
+                              Name 38  "c"
+                              Name 41  "d"
+                              Name 42  "ff1"
+                              Name 43  "ff2"
+                              Name 44  "ff3"
+                              Name 46  "myS"
+                              MemberName 46(myS) 0  "b"
+                              MemberName 46(myS) 1  "c"
+                              MemberName 46(myS) 2  "a"
+                              MemberName 46(myS) 3  "d"
+                              Name 47  "$Global"
+                              MemberName 47($Global) 0  "s1"
+                              MemberName 47($Global) 1  "ff5"
+                              MemberName 47($Global) 2  "ff6"
+                              Name 49  ""
                               Decorate 25(ff4) Offset 4
                               Decorate 25(ff4) Location 7
                               Decorate 25(ff4) Binding 0
                               Decorate 30(@entryPointOutput) Location 0
                               Decorate 31(input) Location 0
-                              Decorate 39(ff5) Offset 20
-                              Decorate 39(ff5) Binding 5
-                              Decorate 40(ff6) Offset 36
-                              Decorate 40(ff6) Binding 8
-                              Decorate 41(a) Location 1
-                              Decorate 43(b) Flat
-                              Decorate 43(b) Location 2
-                              Decorate 45(c) NoPerspective
-                              Decorate 45(c) Centroid
-                              Decorate 45(c) Location 3
-                              Decorate 48(d) Centroid
-                              Decorate 48(d) Location 4
-                              Decorate 49(ff1) BuiltIn FrontFacing
-                              Decorate 50(ff2) Offset 4
-                              Decorate 50(ff2) Location 5
-                              Decorate 51(ff3) Offset 4
-                              Decorate 51(ff3) Location 6
-                              Decorate 51(ff3) Binding 0
+                              Decorate 34(a) Location 1
+                              Decorate 36(b) Flat
+                              Decorate 36(b) Location 2
+                              Decorate 38(c) NoPerspective
+                              Decorate 38(c) Centroid
+                              Decorate 38(c) Location 3
+                              Decorate 41(d) Centroid
+                              Decorate 41(d) Location 4
+                              Decorate 42(ff1) BuiltIn FrontFacing
+                              Decorate 43(ff2) Offset 4
+                              Decorate 43(ff2) Location 5
+                              Decorate 44(ff3) Offset 4
+                              Decorate 44(ff3) Location 6
+                              Decorate 44(ff3) Binding 0
+                              MemberDecorate 46(myS) 0 Offset 0
+                              MemberDecorate 46(myS) 1 Offset 4
+                              MemberDecorate 46(myS) 2 Offset 16
+                              MemberDecorate 46(myS) 3 Offset 32
+                              MemberDecorate 47($Global) 0 Offset 0
+                              MemberDecorate 47($Global) 1 Offset 1620
+                              MemberDecorate 47($Global) 2 Offset 1636
+                              Decorate 47($Global) Block
+                              Decorate 49 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -159,24 +162,22 @@ gl_FragCoord origin is upper left
               29:             TypePointer Output 18(fvec4)
 30(@entryPointOutput):     29(ptr) Variable Output
        31(input):     24(ptr) Variable Input
-         34(myS):             TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
-              35:             TypePointer Private 34(myS)
-          36(s1):     35(ptr) Variable Private
-              37:             TypeVector 17(float) 3
-              38:             TypePointer Private 37(fvec3)
-         39(ff5):     38(ptr) Variable Private
-         40(ff6):     38(ptr) Variable Private
-           41(a):     24(ptr) Variable Input
-              42:             TypePointer Input 6(bool)
-           43(b):     42(ptr) Variable Input
-              44:             TypePointer Input 17(float)
-           45(c):     44(ptr) Variable Input
-              46:             TypeVector 17(float) 2
-              47:             TypePointer Input 46(fvec2)
-           48(d):     47(ptr) Variable Input
-         49(ff1):     42(ptr) Variable Input
-         50(ff2):     42(ptr) Variable Input
-         51(ff3):     42(ptr) Variable Input
+           34(a):     24(ptr) Variable Input
+              35:             TypePointer Input 6(bool)
+           36(b):     35(ptr) Variable Input
+              37:             TypePointer Input 17(float)
+           38(c):     37(ptr) Variable Input
+              39:             TypeVector 17(float) 2
+              40:             TypePointer Input 39(fvec2)
+           41(d):     40(ptr) Variable Input
+         42(ff1):     35(ptr) Variable Input
+         43(ff2):     35(ptr) Variable Input
+         44(ff3):     35(ptr) Variable Input
+              45:             TypeInt 32 0
+         46(myS):             TypeStruct 45(int) 45(int) 18(fvec4) 18(fvec4)
+     47($Global):             TypeStruct 46(myS) 17(float) 17(float)
+              48:             TypePointer Uniform 47($Global)
+              49:     48(ptr) Variable Uniform
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
           10(s3):      9(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..6b22d6638a0c4f538d81abec63bebab38a5fd8fa
--- /dev/null
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -0,0 +1,197 @@
+hlsl.structarray.flatten.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:23    Function Parameters: 
+0:23      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     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:26        add (temp 4-component vector of float)
+0:25          add (temp 4-component vector of float)
+0:25            texture (temp 4-component vector of float)
+0:25              Construct combined texture-sampler (temp sampler1D)
+0:?                 'tex' (uniform texture1D)
+0:?                 'samp' (uniform sampler)
+0:25              Constant:
+0:25                0.500000
+0:26            texture (temp 4-component vector of float)
+0:26              Construct combined texture-sampler (temp sampler1D)
+0:?                 'g_texdata_array[1].tex' (uniform texture1D)
+0:?                 'g_texdata_array[1].samp' (uniform sampler)
+0:26              Constant:
+0:26                0.400000
+0:27          texture (temp 4-component vector of float)
+0:27            Construct combined texture-sampler (temp sampler1D)
+0:?               'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?               'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:27            Constant:
+0:27              0.300000
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_samp' (uniform sampler)
+0:?     'g_tex' (uniform texture1D)
+0:?     'g_texdata_array2[0].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[0].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[0].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[0].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[1].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[1].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[2].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[2].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[2].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[2].tex[1]' (uniform texture1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: main(struct-PS_OUTPUT-vf41; (temp void)
+0:23    Function Parameters: 
+0:23      'ps_output' (out structure{temp 4-component vector of float color})
+0:?     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:26        add (temp 4-component vector of float)
+0:25          add (temp 4-component vector of float)
+0:25            texture (temp 4-component vector of float)
+0:25              Construct combined texture-sampler (temp sampler1D)
+0:?                 'tex' (uniform texture1D)
+0:?                 'samp' (uniform sampler)
+0:25              Constant:
+0:25                0.500000
+0:26            texture (temp 4-component vector of float)
+0:26              Construct combined texture-sampler (temp sampler1D)
+0:?                 'g_texdata_array[1].tex' (uniform texture1D)
+0:?                 'g_texdata_array[1].samp' (uniform sampler)
+0:26              Constant:
+0:26                0.400000
+0:27          texture (temp 4-component vector of float)
+0:27            Construct combined texture-sampler (temp sampler1D)
+0:?               'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?               'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:27            Constant:
+0:27              0.300000
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_samp' (uniform sampler)
+0:?     'g_tex' (uniform texture1D)
+0:?     'g_texdata_array2[0].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[0].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[0].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[0].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[1].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[1].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[1].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[1].tex[1]' (uniform texture1D)
+0:?     'g_texdata_array2[2].samp[0]' (uniform sampler)
+0:?     'g_texdata_array2[2].samp[1]' (uniform sampler)
+0:?     'g_texdata_array2[2].tex[0]' (uniform texture1D)
+0:?     'g_texdata_array2[2].tex[1]' (uniform texture1D)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 50
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 12  "tex"
+                              Name 16  "samp"
+                              Name 22  "g_texdata_array[1].tex"
+                              Name 24  "g_texdata_array[1].samp"
+                              Name 30  "g_texdata_array2[1].tex[0]"
+                              Name 32  "g_texdata_array2[1].samp[0]"
+                              Name 38  "g_samp"
+                              Name 39  "g_tex"
+                              Name 40  "g_texdata_array2[0].samp[0]"
+                              Name 41  "g_texdata_array2[0].samp[1]"
+                              Name 42  "g_texdata_array2[0].tex[0]"
+                              Name 43  "g_texdata_array2[0].tex[1]"
+                              Name 44  "g_texdata_array2[1].samp[1]"
+                              Name 45  "g_texdata_array2[1].tex[1]"
+                              Name 46  "g_texdata_array2[2].samp[0]"
+                              Name 47  "g_texdata_array2[2].samp[1]"
+                              Name 48  "g_texdata_array2[2].tex[0]"
+                              Name 49  "g_texdata_array2[2].tex[1]"
+                              Decorate 9(color) Location 0
+                              Decorate 12(tex) DescriptorSet 0
+                              Decorate 16(samp) DescriptorSet 0
+                              Decorate 22(g_texdata_array[1].tex) DescriptorSet 0
+                              Decorate 24(g_texdata_array[1].samp) DescriptorSet 0
+                              Decorate 30(g_texdata_array2[1].tex[0]) DescriptorSet 0
+                              Decorate 32(g_texdata_array2[1].samp[0]) DescriptorSet 0
+                              Decorate 38(g_samp) DescriptorSet 0
+                              Decorate 39(g_tex) DescriptorSet 0
+                              Decorate 40(g_texdata_array2[0].samp[0]) DescriptorSet 0
+                              Decorate 41(g_texdata_array2[0].samp[1]) DescriptorSet 0
+                              Decorate 42(g_texdata_array2[0].tex[0]) DescriptorSet 0
+                              Decorate 43(g_texdata_array2[0].tex[1]) DescriptorSet 0
+                              Decorate 44(g_texdata_array2[1].samp[1]) DescriptorSet 0
+                              Decorate 45(g_texdata_array2[1].tex[1]) DescriptorSet 0
+                              Decorate 46(g_texdata_array2[2].samp[0]) DescriptorSet 0
+                              Decorate 47(g_texdata_array2[2].samp[1]) DescriptorSet 0
+                              Decorate 48(g_texdata_array2[2].tex[0]) DescriptorSet 0
+                              Decorate 49(g_texdata_array2[2].tex[1]) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+         12(tex):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+        16(samp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:    6(float) Constant 1056964608
+22(g_texdata_array[1].tex):     11(ptr) Variable UniformConstant
+24(g_texdata_array[1].samp):     15(ptr) Variable UniformConstant
+              27:    6(float) Constant 1053609165
+30(g_texdata_array2[1].tex[0]):     11(ptr) Variable UniformConstant
+32(g_texdata_array2[1].samp[0]):     15(ptr) Variable UniformConstant
+              35:    6(float) Constant 1050253722
+      38(g_samp):     15(ptr) Variable UniformConstant
+       39(g_tex):     11(ptr) Variable UniformConstant
+40(g_texdata_array2[0].samp[0]):     15(ptr) Variable UniformConstant
+41(g_texdata_array2[0].samp[1]):     15(ptr) Variable UniformConstant
+42(g_texdata_array2[0].tex[0]):     11(ptr) Variable UniformConstant
+43(g_texdata_array2[0].tex[1]):     11(ptr) Variable UniformConstant
+44(g_texdata_array2[1].samp[1]):     15(ptr) Variable UniformConstant
+45(g_texdata_array2[1].tex[1]):     11(ptr) Variable UniformConstant
+46(g_texdata_array2[2].samp[0]):     15(ptr) Variable UniformConstant
+47(g_texdata_array2[2].samp[1]):     15(ptr) Variable UniformConstant
+48(g_texdata_array2[2].tex[0]):     11(ptr) Variable UniformConstant
+49(g_texdata_array2[2].tex[1]):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+              13:          10 Load 12(tex)
+              17:          14 Load 16(samp)
+              19:          18 SampledImage 13 17
+              21:    7(fvec4) ImageSampleImplicitLod 19 20
+              23:          10 Load 22(g_texdata_array[1].tex)
+              25:          14 Load 24(g_texdata_array[1].samp)
+              26:          18 SampledImage 23 25
+              28:    7(fvec4) ImageSampleImplicitLod 26 27
+              29:    7(fvec4) FAdd 21 28
+              31:          10 Load 30(g_texdata_array2[1].tex[0])
+              33:          14 Load 32(g_texdata_array2[1].samp[0])
+              34:          18 SampledImage 31 33
+              36:    7(fvec4) ImageSampleImplicitLod 34 35
+              37:    7(fvec4) FAdd 29 36
+                              Store 9(color) 37
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
new file mode 100644
index 0000000000000000000000000000000000000000..0994af84f6aee2d4c47a55955d9abb6d45d86c5c
--- /dev/null
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -0,0 +1,100 @@
+hlsl.structarray.flatten.geom
+ERROR: 0:10: 'vin' : recursive type not yet supported in GS input 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+invocations = -1
+max_vertices = 4
+input primitive = lines
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:10  Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-VertexData-vf4-vf4-vf21; (temp void)
+0:10    Function Parameters: 
+0:10      'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:10      'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        color: direct index for structure (temp 4-component vector of float)
+0:13          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:13          Constant:
+0:13            1 (const int)
+0:?         'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:14      move second child to first child (temp 2-component vector of float)
+0:14        uv: direct index for structure (temp 2-component vector of float)
+0:14          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:14          Constant:
+0:14            2 (const int)
+0:?         'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        position: direct index for structure (temp 4-component vector of float)
+0:15          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:15          Constant:
+0:15            0 (const int)
+0:?         'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16        EmitVertex (temp void)
+0:?   Linker Objects
+0:?     'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:?     'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:?     'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:?     'vin[1].position' (layout(location=3 ) in 4-component vector of float)
+0:?     'vin[1].color' (layout(location=4 ) in 4-component vector of float)
+0:?     'vin[1].uv' (layout(location=5 ) in 2-component vector of float)
+0:?     'position' (layout(location=0 ) out 4-component vector of float)
+0:?     'color' (layout(location=1 ) out 4-component vector of float)
+0:?     'uv' (layout(location=2 ) out 2-component vector of float)
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+invocations = 1
+max_vertices = 4
+input primitive = lines
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:10  Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-VertexData-vf4-vf4-vf21; (temp void)
+0:10    Function Parameters: 
+0:10      'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:10      'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:?     Sequence
+0:13      move second child to first child (temp 4-component vector of float)
+0:13        color: direct index for structure (temp 4-component vector of float)
+0:13          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:13          Constant:
+0:13            1 (const int)
+0:?         'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:14      move second child to first child (temp 2-component vector of float)
+0:14        uv: direct index for structure (temp 2-component vector of float)
+0:14          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:14          Constant:
+0:14            2 (const int)
+0:?         'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        position: direct index for structure (temp 4-component vector of float)
+0:15          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:15          Constant:
+0:15            0 (const int)
+0:?         'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'outStream' (out structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16          'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:16        EmitVertex (temp void)
+0:?   Linker Objects
+0:?     'vin[0].position' (layout(location=0 ) in 4-component vector of float)
+0:?     'vin[0].color' (layout(location=1 ) in 4-component vector of float)
+0:?     'vin[0].uv' (layout(location=2 ) in 2-component vector of float)
+0:?     'vin[1].position' (layout(location=3 ) in 4-component vector of float)
+0:?     'vin[1].color' (layout(location=4 ) in 4-component vector of float)
+0:?     'vin[1].uv' (layout(location=5 ) in 2-component vector of float)
+0:?     'position' (layout(location=0 ) out 4-component vector of float)
+0:?     'color' (layout(location=1 ) out 4-component vector of float)
+0:?     'uv' (layout(location=2 ) out 2-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index b27f210b130f461a5acf4ee35bd754ed76508f25..a5feea8aa9a31168fb008723f0105543b5df3633 100755
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -1,7 +1,7 @@
 hlsl.structin.vert
 Shader version: 450
 0:? Sequence
-0:8  Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (global structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8  Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (temp structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
 0:8    Function Parameters: 
 0:8      'd' (layout(location=0 ) in 4-component vector of float)
 0:8      'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
@@ -16,14 +16,8 @@ Shader version: 450
 0:11          add (temp 4-component vector of float)
 0:11            add (temp 4-component vector of float)
 0:11              add (temp 4-component vector of float)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    1 (const int)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    0 (const int)
+0:?                 'm[1]' (layout(location=2 ) in 4-component vector of float)
+0:?                 'm[0]' (layout(location=1 ) in 4-component vector of float)
 0:11              Construct vec4 (temp 4-component vector of float)
 0:11                Convert uint to float (temp float)
 0:11                  direct index (temp uint)
@@ -32,14 +26,26 @@ Shader version: 450
 0:11                      0 (const int)
 0:11            'd' (layout(location=0 ) in 4-component vector of float)
 0:11          'e' (layout(location=5 ) in 4-component vector of float)
-0:?       Sequence
-0:?         Sequence
-0:13          move second child to first child (temp 2-element array of 4-component vector of float)
-0:?             'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
-0:13            m: direct index for structure (temp 2-element array of 4-component vector of float)
-0:13              'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13      Sequence
+0:13        Sequence
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
 0:13              Constant:
 0:13                0 (const int)
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
+0:13              Constant:
+0:13                1 (const int)
 0:13          move second child to first child (temp 2-component vector of uint)
 0:?             'coord' (layout(location=2 ) out 2-component vector of uint)
 0:13            coord: direct index for structure (temp 2-component vector of uint)
@@ -54,14 +60,20 @@ Shader version: 450
 0:13                2 (const int)
 0:13        Branch: Return
 0:?   Linker Objects
-0:?     'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
 0:?     'coord' (layout(location=2 ) out 2-component vector of uint)
 0:?     'b' (layout(location=3 ) smooth out 4-component vector of float)
 0:?     'd' (layout(location=0 ) in 4-component vector of float)
-0:?     'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 0:?     'coord' (layout(location=3 ) in 2-component vector of uint)
 0:?     'b' (layout(location=4 ) in 4-component vector of float)
 0:?     'e' (layout(location=5 ) in 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 
 
 Linked vertex stage:
@@ -69,7 +81,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:8  Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (global structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8  Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (temp structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
 0:8    Function Parameters: 
 0:8      'd' (layout(location=0 ) in 4-component vector of float)
 0:8      'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
@@ -84,14 +96,8 @@ Shader version: 450
 0:11          add (temp 4-component vector of float)
 0:11            add (temp 4-component vector of float)
 0:11              add (temp 4-component vector of float)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    1 (const int)
-0:11                direct index (layout(location=1 ) temp 4-component vector of float)
-0:?                   'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
-0:11                  Constant:
-0:11                    0 (const int)
+0:?                 'm[1]' (layout(location=2 ) in 4-component vector of float)
+0:?                 'm[0]' (layout(location=1 ) in 4-component vector of float)
 0:11              Construct vec4 (temp 4-component vector of float)
 0:11                Convert uint to float (temp float)
 0:11                  direct index (temp uint)
@@ -100,14 +106,26 @@ Shader version: 450
 0:11                      0 (const int)
 0:11            'd' (layout(location=0 ) in 4-component vector of float)
 0:11          'e' (layout(location=5 ) in 4-component vector of float)
-0:?       Sequence
-0:?         Sequence
-0:13          move second child to first child (temp 2-element array of 4-component vector of float)
-0:?             'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
-0:13            m: direct index for structure (temp 2-element array of 4-component vector of float)
-0:13              'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13      Sequence
+0:13        Sequence
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
 0:13              Constant:
 0:13                0 (const int)
+0:13          move second child to first child (temp 4-component vector of float)
+0:?             'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:13            direct index (temp 4-component vector of float)
+0:13              m: direct index for structure (temp 2-element array of 4-component vector of float)
+0:13                'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:13                Constant:
+0:13                  0 (const int)
+0:13              Constant:
+0:13                1 (const int)
 0:13          move second child to first child (temp 2-component vector of uint)
 0:?             'coord' (layout(location=2 ) out 2-component vector of uint)
 0:13            coord: direct index for structure (temp 2-component vector of uint)
@@ -122,45 +140,55 @@ Shader version: 450
 0:13                2 (const int)
 0:13        Branch: Return
 0:?   Linker Objects
-0:?     'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
 0:?     'coord' (layout(location=2 ) out 2-component vector of uint)
 0:?     'b' (layout(location=3 ) smooth out 4-component vector of float)
 0:?     'd' (layout(location=0 ) in 4-component vector of float)
-0:?     'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 0:?     'coord' (layout(location=3 ) in 2-component vector of uint)
 0:?     'b' (layout(location=4 ) in 4-component vector of float)
 0:?     'e' (layout(location=5 ) in 4-component vector of float)
+0:?     'm[0]' (layout(location=0 ) out 4-component vector of float)
+0:?     'm[1]' (layout(location=1 ) out 4-component vector of float)
+0:?     'm[0]' (layout(location=1 ) in 4-component vector of float)
+0:?     'm[1]' (layout(location=2 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 60
+// Id's are bound by 59
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 18 28 36 39 45 50 55 59
+                              EntryPoint Vertex 4  "main" 18 20 24 32 35 41 45 50 54 58
                               Name 4  "main"
                               Name 12  "VI"
                               MemberName 12(VI) 0  "m"
                               MemberName 12(VI) 1  "coord"
                               MemberName 12(VI) 2  "b"
                               Name 14  "local"
-                              Name 18  "m"
-                              Name 28  "coord"
-                              Name 36  "d"
-                              Name 39  "e"
-                              Name 45  "m"
+                              Name 18  "m[1]"
+                              Name 20  "m[0]"
+                              Name 24  "coord"
+                              Name 32  "d"
+                              Name 35  "e"
+                              Name 41  "m[0]"
+                              Name 45  "m[1]"
                               Name 50  "coord"
-                              Name 55  "b"
-                              Name 59  "b"
-                              Decorate 18(m) Location 1
-                              Decorate 28(coord) Location 3
-                              Decorate 36(d) Location 0
-                              Decorate 39(e) Location 5
-                              Decorate 45(m) Location 0
+                              Name 54  "b"
+                              Name 58  "b"
+                              Decorate 18(m[1]) Location 2
+                              Decorate 20(m[0]) Location 1
+                              Decorate 24(coord) Location 3
+                              Decorate 32(d) Location 0
+                              Decorate 35(e) Location 5
+                              Decorate 41(m[0]) Location 0
+                              Decorate 45(m[1]) Location 1
                               Decorate 50(coord) Location 2
-                              Decorate 55(b) Location 3
-                              Decorate 59(b) Location 4
+                              Decorate 54(b) Location 3
+                              Decorate 58(b) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -173,54 +201,54 @@ Shader version: 450
               13:             TypePointer Function 12(VI)
               15:             TypeInt 32 1
               16:     15(int) Constant 2
-              17:             TypePointer Input 10
-           18(m):     17(ptr) Variable Input
-              19:     15(int) Constant 1
-              20:             TypePointer Input 7(fvec4)
-              23:     15(int) Constant 0
-              27:             TypePointer Input 11(ivec2)
-       28(coord):     27(ptr) Variable Input
-              29:      8(int) Constant 0
-              30:             TypePointer Input 8(int)
-           36(d):     20(ptr) Variable Input
-           39(e):     20(ptr) Variable Input
-              42:             TypePointer Function 7(fvec4)
-              44:             TypePointer Output 10
-           45(m):     44(ptr) Variable Output
-              46:             TypePointer Function 10
+              17:             TypePointer Input 7(fvec4)
+        18(m[1]):     17(ptr) Variable Input
+        20(m[0]):     17(ptr) Variable Input
+              23:             TypePointer Input 11(ivec2)
+       24(coord):     23(ptr) Variable Input
+              25:      8(int) Constant 0
+              26:             TypePointer Input 8(int)
+           32(d):     17(ptr) Variable Input
+           35(e):     17(ptr) Variable Input
+              38:             TypePointer Function 7(fvec4)
+              40:             TypePointer Output 7(fvec4)
+        41(m[0]):     40(ptr) Variable Output
+              42:     15(int) Constant 0
+        45(m[1]):     40(ptr) Variable Output
+              46:     15(int) Constant 1
               49:             TypePointer Output 11(ivec2)
        50(coord):     49(ptr) Variable Output
               51:             TypePointer Function 11(ivec2)
-              54:             TypePointer Output 7(fvec4)
-           55(b):     54(ptr) Variable Output
-           59(b):     20(ptr) Variable Input
+           54(b):     40(ptr) Variable Output
+           58(b):     17(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
        14(local):     13(ptr) Variable Function
-              21:     20(ptr) AccessChain 18(m) 19
-              22:    7(fvec4) Load 21
-              24:     20(ptr) AccessChain 18(m) 23
-              25:    7(fvec4) Load 24
-              26:    7(fvec4) FAdd 22 25
-              31:     30(ptr) AccessChain 28(coord) 29
-              32:      8(int) Load 31
-              33:    6(float) ConvertUToF 32
-              34:    7(fvec4) CompositeConstruct 33 33 33 33
-              35:    7(fvec4) FAdd 26 34
-              37:    7(fvec4) Load 36(d)
-              38:    7(fvec4) FAdd 35 37
-              40:    7(fvec4) Load 39(e)
-              41:    7(fvec4) FAdd 38 40
-              43:     42(ptr) AccessChain 14(local) 16
-                              Store 43 41
-              47:     46(ptr) AccessChain 14(local) 23
-              48:          10 Load 47
-                              Store 45(m) 48
-              52:     51(ptr) AccessChain 14(local) 19
+              19:    7(fvec4) Load 18(m[1])
+              21:    7(fvec4) Load 20(m[0])
+              22:    7(fvec4) FAdd 19 21
+              27:     26(ptr) AccessChain 24(coord) 25
+              28:      8(int) Load 27
+              29:    6(float) ConvertUToF 28
+              30:    7(fvec4) CompositeConstruct 29 29 29 29
+              31:    7(fvec4) FAdd 22 30
+              33:    7(fvec4) Load 32(d)
+              34:    7(fvec4) FAdd 31 33
+              36:    7(fvec4) Load 35(e)
+              37:    7(fvec4) FAdd 34 36
+              39:     38(ptr) AccessChain 14(local) 16
+                              Store 39 37
+              43:     38(ptr) AccessChain 14(local) 42 42
+              44:    7(fvec4) Load 43
+                              Store 41(m[0]) 44
+              47:     38(ptr) AccessChain 14(local) 42 46
+              48:    7(fvec4) Load 47
+                              Store 45(m[1]) 48
+              52:     51(ptr) AccessChain 14(local) 46
               53:   11(ivec2) Load 52
                               Store 50(coord) 53
-              56:     42(ptr) AccessChain 14(local) 16
-              57:    7(fvec4) Load 56
-                              Store 55(b) 57
+              55:     38(ptr) AccessChain 14(local) 16
+              56:    7(fvec4) Load 55
+                              Store 54(b) 56
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index abf777ab6d71ed24b19b4c0b6084e8f2fb1591d2..af516e2c92c0856cd18fa37a9a12258ed9a37aea 100755
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -2,7 +2,7 @@ hlsl.switch.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;i1;i1; (global 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction(vf4;i1;i1; (temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (layout(location=0 ) in 4-component vector of float)
 0:2      'c' (layout(location=1 ) in int)
@@ -137,7 +137,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4;i1;i1; (global 4-component vector of float)
+0:2  Function Definition: PixelShaderFunction(vf4;i1;i1; (temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (layout(location=0 ) in 4-component vector of float)
 0:2      'c' (layout(location=1 ) in int)
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index 0bc4bd069b2aff841c27a7eaa7f7b59ee7660fc1..54fc662e0479d9884d23c577abeee671ab902c56 100755
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
 0:?         0.500000
 0:?         0.000000
 0:?         1.000000
-0:4  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:4  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -38,6 +38,7 @@ gl_FragCoord origin is upper left
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -50,7 +51,7 @@ gl_FragCoord origin is upper left
 0:?         0.500000
 0:?         0.000000
 0:?         1.000000
-0:4  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:4  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -106,6 +107,7 @@ gl_FragCoord origin is upper left
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
                               Store 14(AmbientColor) 18
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
index f5260869e901dacbda81299815c2cf1f8aefcffe..c5c73ecb454c4b47b9d9da5ed29b0ebc1c435d89 100644
--- a/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/Test/baseResults/hlsl.templatetypes.frag.out
@@ -2,7 +2,7 @@ hlsl.templatetypes.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: PixelShaderFunction( (global float)
+0:3  Function Definition: PixelShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      Sequence
@@ -255,7 +255,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:3  Function Definition: PixelShaderFunction( (global float)
+0:3  Function Definition: PixelShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      Sequence
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..d000257e16358500e2fe7ae1c4b462bbb049ff7d
--- /dev/null
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -0,0 +1,702 @@
+hlsl.tx.bracket.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38  Function Definition: Fn1(vi4; (temp 4-component vector of int)
+0:38    Function Parameters: 
+0:38      'x' (in 4-component vector of int)
+0:?     Sequence
+0:38      Branch: Return with expression
+0:38        'x' (in 4-component vector of int)
+0:39  Function Definition: Fn1(vu4; (temp 4-component vector of uint)
+0:39    Function Parameters: 
+0:39      'x' (in 4-component vector of uint)
+0:?     Sequence
+0:39      Branch: Return with expression
+0:39        'x' (in 4-component vector of uint)
+0:40  Function Definition: Fn1(vf4; (temp 4-component vector of float)
+0:40    Function Parameters: 
+0:40      'x' (in 4-component vector of float)
+0:?     Sequence
+0:40      Branch: Return with expression
+0:40        'x' (in 4-component vector of float)
+0:42  Function Definition: SomeValue( (temp 4-component vector of float)
+0:42    Function Parameters: 
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        Convert int to float (temp 4-component vector of float)
+0:42          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:42            '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:42            Constant:
+0:42              3 (const uint)
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:49      textureFetch (temp 4-component vector of float)
+0:49        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:49        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:49          '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:49          Constant:
+0:49            0 (const uint)
+0:49        Constant:
+0:49          0 (const int)
+0:51      Sequence
+0:51        move second child to first child (temp 4-component vector of float)
+0:51          'r00' (temp 4-component vector of float)
+0:51          textureFetch (temp 4-component vector of float)
+0:51            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:51            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:51              '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:51              Constant:
+0:51                0 (const uint)
+0:51            Constant:
+0:51              0 (const int)
+0:52      Sequence
+0:52        move second child to first child (temp 4-component vector of int)
+0:52          'r01' (temp 4-component vector of int)
+0:52          textureFetch (temp 4-component vector of int)
+0:52            'g_tTex1di4' (uniform itexture1D)
+0:52            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:52              '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:52              Constant:
+0:52                0 (const uint)
+0:52            Constant:
+0:52              0 (const int)
+0:53      Sequence
+0:53        move second child to first child (temp 4-component vector of uint)
+0:53          'r02' (temp 4-component vector of uint)
+0:53          textureFetch (temp 4-component vector of uint)
+0:53            'g_tTex1du4' (uniform utexture1D)
+0:53            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:53              '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:53              Constant:
+0:53                0 (const uint)
+0:53            Constant:
+0:53              0 (const int)
+0:56      Sequence
+0:56        move second child to first child (temp 4-component vector of float)
+0:56          'r10' (temp 4-component vector of float)
+0:56          textureFetch (temp 4-component vector of float)
+0:56            'g_tTex2df4' (uniform texture2D)
+0:56            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:56              '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:56              Constant:
+0:56                1 (const uint)
+0:56            Constant:
+0:56              0 (const int)
+0:57      Sequence
+0:57        move second child to first child (temp 4-component vector of int)
+0:57          'r11' (temp 4-component vector of int)
+0:57          textureFetch (temp 4-component vector of int)
+0:57            'g_tTex2di4' (uniform itexture2D)
+0:57            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:57              '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:57              Constant:
+0:57                1 (const uint)
+0:57            Constant:
+0:57              0 (const int)
+0:58      Sequence
+0:58        move second child to first child (temp 4-component vector of uint)
+0:58          'r12' (temp 4-component vector of uint)
+0:58          textureFetch (temp 4-component vector of uint)
+0:58            'g_tTex2du4' (uniform utexture2D)
+0:58            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:58              '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:58              Constant:
+0:58                1 (const uint)
+0:58            Constant:
+0:58              0 (const int)
+0:61      Sequence
+0:61        move second child to first child (temp 4-component vector of float)
+0:61          'r20' (temp 4-component vector of float)
+0:61          textureFetch (temp 4-component vector of float)
+0:61            'g_tTex3df4' (uniform texture3D)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:61              '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:61              Constant:
+0:61                2 (const uint)
+0:61            Constant:
+0:61              0 (const int)
+0:62      Sequence
+0:62        move second child to first child (temp 4-component vector of int)
+0:62          'r21' (temp 4-component vector of int)
+0:62          textureFetch (temp 4-component vector of int)
+0:62            'g_tTex3di4' (uniform itexture3D)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:62              '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:62              Constant:
+0:62                2 (const uint)
+0:62            Constant:
+0:62              0 (const int)
+0:63      Sequence
+0:63        move second child to first child (temp 4-component vector of uint)
+0:63          'r22' (temp 4-component vector of uint)
+0:63          textureFetch (temp 4-component vector of uint)
+0:63            'g_tTex3du4' (uniform utexture3D)
+0:63            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:63              '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:63              Constant:
+0:63                2 (const uint)
+0:63            Constant:
+0:63              0 (const int)
+0:66      Function Call: Fn1(vf4; (temp 4-component vector of float)
+0:66        textureFetch (temp 4-component vector of float)
+0:66          'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:66          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:66            '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:66            Constant:
+0:66              0 (const uint)
+0:66          Constant:
+0:66            0 (const int)
+0:67      Function Call: Fn1(vi4; (temp 4-component vector of int)
+0:67        textureFetch (temp 4-component vector of int)
+0:67          'g_tTex1di4' (uniform itexture1D)
+0:67          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:67            '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:67            Constant:
+0:67              0 (const uint)
+0:67          Constant:
+0:67            0 (const int)
+0:68      Function Call: Fn1(vu4; (temp 4-component vector of uint)
+0:68        textureFetch (temp 4-component vector of uint)
+0:68          'g_tTex1du4' (uniform utexture1D)
+0:68          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:68            '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:68            Constant:
+0:68              0 (const uint)
+0:68          Constant:
+0:68            0 (const int)
+0:70      move second child to first child (temp 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})
+0:70          Constant:
+0:70            0 (const int)
+0:70        Constant:
+0:70          1.000000
+0:70          1.000000
+0:70          1.000000
+0:70          1.000000
+0:72      Sequence
+0:72        Sequence
+0:72          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:72            Color: direct index for structure (temp 4-component vector of float)
+0:72              'psout' (temp structure{temp 4-component vector of float Color})
+0:72              Constant:
+0:72                0 (const int)
+0:72        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:?     'g_tTex1di4' (uniform itexture1D)
+0:?     'g_tTex1du4' (uniform utexture1D)
+0:?     'g_tTex2df4' (uniform texture2D)
+0:?     'g_tTex2di4' (uniform itexture2D)
+0:?     'g_tTex2du4' (uniform utexture2D)
+0:?     'g_tTex3df4' (uniform texture3D)
+0:?     'g_tTex3di4' (uniform itexture3D)
+0:?     'g_tTex3du4' (uniform utexture3D)
+0:?     'g_tTex1df4a' (uniform texture1DArray)
+0:?     'g_tTex1di4a' (uniform itexture1DArray)
+0:?     'g_tTex1du4a' (uniform utexture1DArray)
+0:?     'g_tTex2df4a' (uniform texture2DArray)
+0:?     'g_tTex2di4a' (uniform itexture2DArray)
+0:?     'g_tTex2du4a' (uniform utexture2DArray)
+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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38  Function Definition: Fn1(vi4; (temp 4-component vector of int)
+0:38    Function Parameters: 
+0:38      'x' (in 4-component vector of int)
+0:?     Sequence
+0:38      Branch: Return with expression
+0:38        'x' (in 4-component vector of int)
+0:39  Function Definition: Fn1(vu4; (temp 4-component vector of uint)
+0:39    Function Parameters: 
+0:39      'x' (in 4-component vector of uint)
+0:?     Sequence
+0:39      Branch: Return with expression
+0:39        'x' (in 4-component vector of uint)
+0:40  Function Definition: Fn1(vf4; (temp 4-component vector of float)
+0:40    Function Parameters: 
+0:40      'x' (in 4-component vector of float)
+0:?     Sequence
+0:40      Branch: Return with expression
+0:40        'x' (in 4-component vector of float)
+0:42  Function Definition: SomeValue( (temp 4-component vector of float)
+0:42    Function Parameters: 
+0:?     Sequence
+0:42      Branch: Return with expression
+0:42        Convert int to float (temp 4-component vector of float)
+0:42          c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int)
+0:42            '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:42            Constant:
+0:42              3 (const uint)
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:49      textureFetch (temp 4-component vector of float)
+0:49        'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:49        c1: direct index for structure (layout(offset=0 ) uniform int)
+0:49          '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:49          Constant:
+0:49            0 (const uint)
+0:49        Constant:
+0:49          0 (const int)
+0:51      Sequence
+0:51        move second child to first child (temp 4-component vector of float)
+0:51          'r00' (temp 4-component vector of float)
+0:51          textureFetch (temp 4-component vector of float)
+0:51            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:51            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:51              '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:51              Constant:
+0:51                0 (const uint)
+0:51            Constant:
+0:51              0 (const int)
+0:52      Sequence
+0:52        move second child to first child (temp 4-component vector of int)
+0:52          'r01' (temp 4-component vector of int)
+0:52          textureFetch (temp 4-component vector of int)
+0:52            'g_tTex1di4' (uniform itexture1D)
+0:52            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:52              '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:52              Constant:
+0:52                0 (const uint)
+0:52            Constant:
+0:52              0 (const int)
+0:53      Sequence
+0:53        move second child to first child (temp 4-component vector of uint)
+0:53          'r02' (temp 4-component vector of uint)
+0:53          textureFetch (temp 4-component vector of uint)
+0:53            'g_tTex1du4' (uniform utexture1D)
+0:53            c1: direct index for structure (layout(offset=0 ) uniform int)
+0:53              '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:53              Constant:
+0:53                0 (const uint)
+0:53            Constant:
+0:53              0 (const int)
+0:56      Sequence
+0:56        move second child to first child (temp 4-component vector of float)
+0:56          'r10' (temp 4-component vector of float)
+0:56          textureFetch (temp 4-component vector of float)
+0:56            'g_tTex2df4' (uniform texture2D)
+0:56            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:56              '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:56              Constant:
+0:56                1 (const uint)
+0:56            Constant:
+0:56              0 (const int)
+0:57      Sequence
+0:57        move second child to first child (temp 4-component vector of int)
+0:57          'r11' (temp 4-component vector of int)
+0:57          textureFetch (temp 4-component vector of int)
+0:57            'g_tTex2di4' (uniform itexture2D)
+0:57            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:57              '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:57              Constant:
+0:57                1 (const uint)
+0:57            Constant:
+0:57              0 (const int)
+0:58      Sequence
+0:58        move second child to first child (temp 4-component vector of uint)
+0:58          'r12' (temp 4-component vector of uint)
+0:58          textureFetch (temp 4-component vector of uint)
+0:58            'g_tTex2du4' (uniform utexture2D)
+0:58            c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int)
+0:58              '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:58              Constant:
+0:58                1 (const uint)
+0:58            Constant:
+0:58              0 (const int)
+0:61      Sequence
+0:61        move second child to first child (temp 4-component vector of float)
+0:61          'r20' (temp 4-component vector of float)
+0:61          textureFetch (temp 4-component vector of float)
+0:61            'g_tTex3df4' (uniform texture3D)
+0:61            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:61              '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:61              Constant:
+0:61                2 (const uint)
+0:61            Constant:
+0:61              0 (const int)
+0:62      Sequence
+0:62        move second child to first child (temp 4-component vector of int)
+0:62          'r21' (temp 4-component vector of int)
+0:62          textureFetch (temp 4-component vector of int)
+0:62            'g_tTex3di4' (uniform itexture3D)
+0:62            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:62              '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:62              Constant:
+0:62                2 (const uint)
+0:62            Constant:
+0:62              0 (const int)
+0:63      Sequence
+0:63        move second child to first child (temp 4-component vector of uint)
+0:63          'r22' (temp 4-component vector of uint)
+0:63          textureFetch (temp 4-component vector of uint)
+0:63            'g_tTex3du4' (uniform utexture3D)
+0:63            c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int)
+0:63              '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:63              Constant:
+0:63                2 (const uint)
+0:63            Constant:
+0:63              0 (const int)
+0:66      Function Call: Fn1(vf4; (temp 4-component vector of float)
+0:66        textureFetch (temp 4-component vector of float)
+0:66          'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:66          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:66            '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:66            Constant:
+0:66              0 (const uint)
+0:66          Constant:
+0:66            0 (const int)
+0:67      Function Call: Fn1(vi4; (temp 4-component vector of int)
+0:67        textureFetch (temp 4-component vector of int)
+0:67          'g_tTex1di4' (uniform itexture1D)
+0:67          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:67            '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:67            Constant:
+0:67              0 (const uint)
+0:67          Constant:
+0:67            0 (const int)
+0:68      Function Call: Fn1(vu4; (temp 4-component vector of uint)
+0:68        textureFetch (temp 4-component vector of uint)
+0:68          'g_tTex1du4' (uniform utexture1D)
+0:68          c1: direct index for structure (layout(offset=0 ) uniform int)
+0:68            '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:68            Constant:
+0:68              0 (const uint)
+0:68          Constant:
+0:68            0 (const int)
+0:70      move second child to first child (temp 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})
+0:70          Constant:
+0:70            0 (const int)
+0:70        Constant:
+0:70          1.000000
+0:70          1.000000
+0:70          1.000000
+0:70          1.000000
+0:72      Sequence
+0:72        Sequence
+0:72          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:72            Color: direct index for structure (temp 4-component vector of float)
+0:72              'psout' (temp structure{temp 4-component vector of float Color})
+0:72              Constant:
+0:72                0 (const int)
+0:72        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:?     'g_tTex1di4' (uniform itexture1D)
+0:?     'g_tTex1du4' (uniform utexture1D)
+0:?     'g_tTex2df4' (uniform texture2D)
+0:?     'g_tTex2di4' (uniform itexture2D)
+0:?     'g_tTex2du4' (uniform utexture2D)
+0:?     'g_tTex3df4' (uniform texture3D)
+0:?     'g_tTex3di4' (uniform itexture3D)
+0:?     'g_tTex3du4' (uniform utexture3D)
+0:?     'g_tTex1df4a' (uniform texture1DArray)
+0:?     'g_tTex1di4a' (uniform itexture1DArray)
+0:?     'g_tTex1du4a' (uniform utexture1DArray)
+0:?     'g_tTex2df4a' (uniform texture2DArray)
+0:?     'g_tTex2di4a' (uniform itexture2DArray)
+0:?     'g_tTex2du4a' (uniform utexture2DArray)
+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 183
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 158
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 11  "Fn1(vi4;"
+                              Name 10  "x"
+                              Name 18  "Fn1(vu4;"
+                              Name 17  "x"
+                              Name 25  "Fn1(vf4;"
+                              Name 24  "x"
+                              Name 28  "SomeValue("
+                              Name 41  "$Global"
+                              MemberName 41($Global) 0  "c1"
+                              MemberName 41($Global) 1  "c2"
+                              MemberName 41($Global) 2  "c3"
+                              MemberName 41($Global) 3  "c4"
+                              MemberName 41($Global) 4  "o1"
+                              MemberName 41($Global) 5  "o2"
+                              MemberName 41($Global) 6  "o3"
+                              MemberName 41($Global) 7  "o4"
+                              Name 43  ""
+                              Name 53  "g_tTex1df4"
+                              Name 60  "r00"
+                              Name 65  "r01"
+                              Name 68  "g_tTex1di4"
+                              Name 73  "r02"
+                              Name 76  "g_tTex1du4"
+                              Name 81  "r10"
+                              Name 84  "g_tTex2df4"
+                              Name 91  "r11"
+                              Name 94  "g_tTex2di4"
+                              Name 99  "r12"
+                              Name 102  "g_tTex2du4"
+                              Name 107  "r20"
+                              Name 110  "g_tTex3df4"
+                              Name 117  "r21"
+                              Name 120  "g_tTex3di4"
+                              Name 125  "r22"
+                              Name 128  "g_tTex3du4"
+                              Name 137  "param"
+                              Name 143  "param"
+                              Name 149  "param"
+                              Name 151  "PS_OUTPUT"
+                              MemberName 151(PS_OUTPUT) 0  "Color"
+                              Name 153  "psout"
+                              Name 158  "Color"
+                              Name 164  "g_sSamp"
+                              Name 167  "g_tTex1df4a"
+                              Name 170  "g_tTex1di4a"
+                              Name 173  "g_tTex1du4a"
+                              Name 176  "g_tTex2df4a"
+                              Name 179  "g_tTex2di4a"
+                              Name 182  "g_tTex2du4a"
+                              MemberDecorate 41($Global) 0 Offset 0
+                              MemberDecorate 41($Global) 1 Offset 8
+                              MemberDecorate 41($Global) 2 Offset 16
+                              MemberDecorate 41($Global) 3 Offset 32
+                              MemberDecorate 41($Global) 4 Offset 48
+                              MemberDecorate 41($Global) 5 Offset 56
+                              MemberDecorate 41($Global) 6 Offset 64
+                              MemberDecorate 41($Global) 7 Offset 80
+                              Decorate 41($Global) Block
+                              Decorate 43 DescriptorSet 0
+                              Decorate 53(g_tTex1df4) DescriptorSet 0
+                              Decorate 53(g_tTex1df4) Binding 0
+                              Decorate 68(g_tTex1di4) DescriptorSet 0
+                              Decorate 76(g_tTex1du4) DescriptorSet 0
+                              Decorate 84(g_tTex2df4) DescriptorSet 0
+                              Decorate 94(g_tTex2di4) DescriptorSet 0
+                              Decorate 102(g_tTex2du4) DescriptorSet 0
+                              Decorate 110(g_tTex3df4) DescriptorSet 0
+                              Decorate 120(g_tTex3di4) DescriptorSet 0
+                              Decorate 128(g_tTex3du4) DescriptorSet 0
+                              Decorate 158(Color) Location 0
+                              Decorate 164(g_sSamp) DescriptorSet 0
+                              Decorate 164(g_sSamp) Binding 0
+                              Decorate 167(g_tTex1df4a) DescriptorSet 0
+                              Decorate 170(g_tTex1di4a) DescriptorSet 0
+                              Decorate 173(g_tTex1du4a) DescriptorSet 0
+                              Decorate 176(g_tTex2df4a) DescriptorSet 0
+                              Decorate 179(g_tTex2di4a) DescriptorSet 0
+                              Decorate 182(g_tTex2du4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeVector 6(int) 4
+               8:             TypePointer Function 7(ivec4)
+               9:             TypeFunction 7(ivec4) 8(ptr)
+              13:             TypeInt 32 0
+              14:             TypeVector 13(int) 4
+              15:             TypePointer Function 14(ivec4)
+              16:             TypeFunction 14(ivec4) 15(ptr)
+              20:             TypeFloat 32
+              21:             TypeVector 20(float) 4
+              22:             TypePointer Function 21(fvec4)
+              23:             TypeFunction 21(fvec4) 22(ptr)
+              27:             TypeFunction 21(fvec4)
+              39:             TypeVector 6(int) 2
+              40:             TypeVector 6(int) 3
+     41($Global):             TypeStruct 6(int) 39(ivec2) 40(ivec3) 7(ivec4) 6(int) 39(ivec2) 40(ivec3) 7(ivec4)
+              42:             TypePointer Uniform 41($Global)
+              43:     42(ptr) Variable Uniform
+              44:      6(int) Constant 3
+              45:             TypePointer Uniform 7(ivec4)
+              51:             TypeImage 20(float) 1D sampled format:Unknown
+              52:             TypePointer UniformConstant 51
+  53(g_tTex1df4):     52(ptr) Variable UniformConstant
+              55:      6(int) Constant 0
+              56:             TypePointer Uniform 6(int)
+              66:             TypeImage 6(int) 1D sampled format:Unknown
+              67:             TypePointer UniformConstant 66
+  68(g_tTex1di4):     67(ptr) Variable UniformConstant
+              74:             TypeImage 13(int) 1D sampled format:Unknown
+              75:             TypePointer UniformConstant 74
+  76(g_tTex1du4):     75(ptr) Variable UniformConstant
+              82:             TypeImage 20(float) 2D sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+  84(g_tTex2df4):     83(ptr) Variable UniformConstant
+              86:      6(int) Constant 1
+              87:             TypePointer Uniform 39(ivec2)
+              92:             TypeImage 6(int) 2D sampled format:Unknown
+              93:             TypePointer UniformConstant 92
+  94(g_tTex2di4):     93(ptr) Variable UniformConstant
+             100:             TypeImage 13(int) 2D sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+ 102(g_tTex2du4):    101(ptr) Variable UniformConstant
+             108:             TypeImage 20(float) 3D sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+ 110(g_tTex3df4):    109(ptr) Variable UniformConstant
+             112:      6(int) Constant 2
+             113:             TypePointer Uniform 40(ivec3)
+             118:             TypeImage 6(int) 3D sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTex3di4):    119(ptr) Variable UniformConstant
+             126:             TypeImage 13(int) 3D sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+ 128(g_tTex3du4):    127(ptr) Variable UniformConstant
+  151(PS_OUTPUT):             TypeStruct 21(fvec4)
+             152:             TypePointer Function 151(PS_OUTPUT)
+             154:   20(float) Constant 1065353216
+             155:   21(fvec4) ConstantComposite 154 154 154 154
+             157:             TypePointer Output 21(fvec4)
+      158(Color):    157(ptr) Variable Output
+             162:             TypeSampler
+             163:             TypePointer UniformConstant 162
+    164(g_sSamp):    163(ptr) Variable UniformConstant
+             165:             TypeImage 20(float) 1D array sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+167(g_tTex1df4a):    166(ptr) Variable UniformConstant
+             168:             TypeImage 6(int) 1D array sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+170(g_tTex1di4a):    169(ptr) Variable UniformConstant
+             171:             TypeImage 13(int) 1D array sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+173(g_tTex1du4a):    172(ptr) Variable UniformConstant
+             174:             TypeImage 20(float) 2D array sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+176(g_tTex2df4a):    175(ptr) Variable UniformConstant
+             177:             TypeImage 6(int) 2D array sampled format:Unknown
+             178:             TypePointer UniformConstant 177
+179(g_tTex2di4a):    178(ptr) Variable UniformConstant
+             180:             TypeImage 13(int) 2D array sampled format:Unknown
+             181:             TypePointer UniformConstant 180
+182(g_tTex2du4a):    181(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+         60(r00):     22(ptr) Variable Function
+         65(r01):      8(ptr) Variable Function
+         73(r02):     15(ptr) Variable Function
+         81(r10):     22(ptr) Variable Function
+         91(r11):      8(ptr) Variable Function
+         99(r12):     15(ptr) Variable Function
+        107(r20):     22(ptr) Variable Function
+        117(r21):      8(ptr) Variable Function
+        125(r22):     15(ptr) Variable Function
+      137(param):     22(ptr) Variable Function
+      143(param):      8(ptr) Variable Function
+      149(param):     15(ptr) Variable Function
+      153(psout):    152(ptr) Variable Function
+              54:          51 Load 53(g_tTex1df4)
+              57:     56(ptr) AccessChain 43 55
+              58:      6(int) Load 57
+              59:   21(fvec4) ImageFetch 54 58 Lod 55
+              61:          51 Load 53(g_tTex1df4)
+              62:     56(ptr) AccessChain 43 55
+              63:      6(int) Load 62
+              64:   21(fvec4) ImageFetch 61 63 Lod 55
+                              Store 60(r00) 64
+              69:          66 Load 68(g_tTex1di4)
+              70:     56(ptr) AccessChain 43 55
+              71:      6(int) Load 70
+              72:    7(ivec4) ImageFetch 69 71 Lod 55
+                              Store 65(r01) 72
+              77:          74 Load 76(g_tTex1du4)
+              78:     56(ptr) AccessChain 43 55
+              79:      6(int) Load 78
+              80:   14(ivec4) ImageFetch 77 79 Lod 55
+                              Store 73(r02) 80
+              85:          82 Load 84(g_tTex2df4)
+              88:     87(ptr) AccessChain 43 86
+              89:   39(ivec2) Load 88
+              90:   21(fvec4) ImageFetch 85 89 Lod 55
+                              Store 81(r10) 90
+              95:          92 Load 94(g_tTex2di4)
+              96:     87(ptr) AccessChain 43 86
+              97:   39(ivec2) Load 96
+              98:    7(ivec4) ImageFetch 95 97 Lod 55
+                              Store 91(r11) 98
+             103:         100 Load 102(g_tTex2du4)
+             104:     87(ptr) AccessChain 43 86
+             105:   39(ivec2) Load 104
+             106:   14(ivec4) ImageFetch 103 105 Lod 55
+                              Store 99(r12) 106
+             111:         108 Load 110(g_tTex3df4)
+             114:    113(ptr) AccessChain 43 112
+             115:   40(ivec3) Load 114
+             116:   21(fvec4) ImageFetch 111 115 Lod 55
+                              Store 107(r20) 116
+             121:         118 Load 120(g_tTex3di4)
+             122:    113(ptr) AccessChain 43 112
+             123:   40(ivec3) Load 122
+             124:    7(ivec4) ImageFetch 121 123 Lod 55
+                              Store 117(r21) 124
+             129:         126 Load 128(g_tTex3du4)
+             130:    113(ptr) AccessChain 43 112
+             131:   40(ivec3) Load 130
+             132:   14(ivec4) ImageFetch 129 131 Lod 55
+                              Store 125(r22) 132
+             133:          51 Load 53(g_tTex1df4)
+             134:     56(ptr) AccessChain 43 55
+             135:      6(int) Load 134
+             136:   21(fvec4) ImageFetch 133 135 Lod 55
+                              Store 137(param) 136
+             138:   21(fvec4) FunctionCall 25(Fn1(vf4;) 137(param)
+             139:          66 Load 68(g_tTex1di4)
+             140:     56(ptr) AccessChain 43 55
+             141:      6(int) Load 140
+             142:    7(ivec4) ImageFetch 139 141 Lod 55
+                              Store 143(param) 142
+             144:    7(ivec4) FunctionCall 11(Fn1(vi4;) 143(param)
+             145:          74 Load 76(g_tTex1du4)
+             146:     56(ptr) AccessChain 43 55
+             147:      6(int) Load 146
+             148:   14(ivec4) ImageFetch 145 147 Lod 55
+                              Store 149(param) 148
+             150:   14(ivec4) FunctionCall 18(Fn1(vu4;) 149(param)
+             156:     22(ptr) AccessChain 153(psout) 55
+                              Store 156 155
+             159:     22(ptr) AccessChain 153(psout) 55
+             160:   21(fvec4) Load 159
+                              Store 158(Color) 160
+                              Return
+                              FunctionEnd
+    11(Fn1(vi4;):    7(ivec4) Function None 9
+           10(x):      8(ptr) FunctionParameter
+              12:             Label
+              30:    7(ivec4) Load 10(x)
+                              ReturnValue 30
+                              FunctionEnd
+    18(Fn1(vu4;):   14(ivec4) Function None 16
+           17(x):     15(ptr) FunctionParameter
+              19:             Label
+              33:   14(ivec4) Load 17(x)
+                              ReturnValue 33
+                              FunctionEnd
+    25(Fn1(vf4;):   21(fvec4) Function None 23
+           24(x):     22(ptr) FunctionParameter
+              26:             Label
+              36:   21(fvec4) Load 24(x)
+                              ReturnValue 36
+                              FunctionEnd
+  28(SomeValue():   21(fvec4) Function None 27
+              29:             Label
+              46:     45(ptr) AccessChain 43 44
+              47:    7(ivec4) Load 46
+              48:   21(fvec4) ConvertSToF 47
+                              ReturnValue 48
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index 0600873f509d9f7ff571ae7479d4b80f66acaebd..565f45fd5b86bbf0afc41d4a7c9bd3ddf958f3a5 100755
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -2,7 +2,7 @@ hlsl.typedef.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: ShaderFunction(vf4;i1; (global 4-component vector of float)
+0:4  Function Definition: ShaderFunction(vf4;i1; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:4      'ii' (in int)
@@ -29,7 +29,7 @@ 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            'a1' (temp 4-component vector of float)
-0:10          Construct vec4 (global 4-component vector of float)
+0:10          Construct vec4 (uniform 4-component vector of float)
 0:10            Convert int to float (temp float)
 0:10              add (temp int)
 0:10                'i' (temp int)
@@ -39,11 +39,12 @@ gl_FragCoord origin is upper left
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:4  Function Definition: ShaderFunction(vf4;i1; (global 4-component vector of float)
+0:4  Function Definition: ShaderFunction(vf4;i1; (temp 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:4      'ii' (in int)
@@ -70,7 +71,7 @@ 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            'a1' (temp 4-component vector of float)
-0:10          Construct vec4 (global 4-component vector of float)
+0:10          Construct vec4 (uniform 4-component vector of float)
 0:10            Convert int to float (temp float)
 0:10              add (temp int)
 0:10                'i' (temp int)
@@ -106,6 +107,7 @@ gl_FragCoord origin is upper left
               20:      9(int) Constant 2
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 14(ShaderFunction(vf4;i1;):    7(fvec4) Function None 11
        12(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
index 3715166f22a198e54b5e676d4830b5d6db1784bc..6faa388a3a84cdcf483a59edf4dab2871d1f249a 100755
--- a/Test/baseResults/hlsl.void.frag.out
+++ b/Test/baseResults/hlsl.void.frag.out
@@ -2,16 +2,16 @@ hlsl.void.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Function Definition: foo1( (global void)
+0:1  Function Definition: foo1( (temp void)
 0:1    Function Parameters: 
-0:2  Function Definition: foo2( (global void)
+0:2  Function Definition: foo2( (temp void)
 0:2    Function Parameters: 
-0:5  Function Definition: PixelShaderFunction(vf4; (global void)
+0:5  Function Definition: PixelShaderFunction(vf4; (temp void)
 0:5    Function Parameters: 
 0:5      'input' (layout(location=0 ) in 4-component vector of float)
 0:?     Sequence
-0:6      Function Call: foo1( (global void)
-0:7      Function Call: foo2( (global void)
+0:6      Function Call: foo1( (temp void)
+0:7      Function Call: foo2( (temp void)
 0:8      Branch: Return
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
@@ -23,16 +23,16 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  Function Definition: foo1( (global void)
+0:1  Function Definition: foo1( (temp void)
 0:1    Function Parameters: 
-0:2  Function Definition: foo2( (global void)
+0:2  Function Definition: foo2( (temp void)
 0:2    Function Parameters: 
-0:5  Function Definition: PixelShaderFunction(vf4; (global void)
+0:5  Function Definition: PixelShaderFunction(vf4; (temp void)
 0:5    Function Parameters: 
 0:5      'input' (layout(location=0 ) in 4-component vector of float)
 0:?     Sequence
-0:6      Function Call: foo1( (global void)
-0:7      Function Call: foo2( (global void)
+0:6      Function Call: foo1( (temp void)
+0:7      Function Call: foo2( (temp void)
 0:8      Branch: Return
 0:?   Linker Objects
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index 63e14dcc69369174608abd42fd2cfb9e4c953043..699364ff0dacb15797655d5df31067a848b0bdcc 100755
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -2,15 +2,16 @@ hlsl.whileLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:3      Loop with condition tested first
 0:3        Loop Condition
-0:3        Compare Not Equal (temp 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        any (temp bool)
+0:3          NotEqual (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        Loop Body
 0:?         Sequence
 0:3          Sequence
@@ -44,15 +45,16 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: PixelShaderFunction(vf4; (global 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:?     Sequence
 0:3      Loop with condition tested first
 0:3        Loop Condition
-0:3        Compare Not Equal (temp 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        any (temp bool)
+0:3          NotEqual (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        Loop Body
 0:?         Sequence
 0:3          Sequence
diff --git a/Test/baseResults/lineContinuation.vert.out b/Test/baseResults/lineContinuation.vert.out
index 78e5c0722d7dd3a3ebe9ff888360f391abb737a9..d91ffa31ac1df15b8f97ec69bfb5cdf8a05a10aa 100644
--- a/Test/baseResults/lineContinuation.vert.out
+++ b/Test/baseResults/lineContinuation.vert.out
@@ -176,16 +176,6 @@ ERROR: node is still EOpNull!
 0:20        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:20        Construct vec4 (temp highp 4-component vector of float)
 0:20          'foo' (global highp float)
-0:22  Function Definition: foo2(vf4; (global highp 4-component vector of float)
-0:22    Function Parameters: 
-0:22      'a' (in highp 4-component vector of float)
-0:24    Sequence
-0:24      Sequence
-0:24        move second child to first child (temp highp 4-component vector of float)
-0:24          'b' (temp highp 4-component vector of float)
-0:24          'a' (in highp 4-component vector of float)
-0:25      Branch: Return with expression
-0:25        'b' (temp highp 4-component vector of float)
 0:47  Sequence
 0:47    move second child to first child (temp highp int)
 0:47      'q1' (global highp int)
@@ -256,25 +246,6 @@ ERROR: node is still EOpNull!
 0:123      'bar107' (global highp int)
 0:128      Constant:
 0:128        5 (const int)
-0:131  Function Definition: foo203209409( (global void)
-0:131    Function Parameters: 
-0:134    Sequence
-0:134      add second child into first child (temp highp int)
-0:133        'bar107' (global highp int)
-0:134        Constant:
-0:134          37 (const int)
-0:135      multiply second child into first child (temp highp int)
-0:135        'bar107' (global highp int)
-0:136        Constant:
-0:136          38 (const int)
-0:137      divide second child into first child (temp highp int)
-0:137        'bar107' (global highp int)
-0:138        Constant:
-0:138          39 (const int)
-0:139      add (temp highp int)
-0:139        'bar107' (global highp int)
-0:140        Constant:
-0:140          41 (const int)
 0:?   Linker Objects
 0:?     'foo' (global highp float)
 0:?     'goodDecl' (global highp int)
diff --git a/Test/baseResults/lineContinuation100.vert.out b/Test/baseResults/lineContinuation100.vert.out
index 003637d039fc0e6510a8ee369558513c92123a8b..1fb309b3c9beab9c29b7c207fb5f8bc7981819a1 100644
--- a/Test/baseResults/lineContinuation100.vert.out
+++ b/Test/baseResults/lineContinuation100.vert.out
@@ -90,16 +90,6 @@ ERROR: node is still EOpNull!
 0:20        'gl_Position' (gl_Position highp 4-component vector of float Position)
 0:20        Construct vec4 (temp highp 4-component vector of float)
 0:20          'foo' (global highp float)
-0:22  Function Definition: foo2(vf4; (global highp 4-component vector of float)
-0:22    Function Parameters: 
-0:22      'a' (in highp 4-component vector of float)
-0:24    Sequence
-0:24      Sequence
-0:24        move second child to first child (temp highp 4-component vector of float)
-0:24          'b' (temp highp 4-component vector of float)
-0:24          'a' (in highp 4-component vector of float)
-0:25      Branch: Return with expression
-0:25        'b' (temp highp 4-component vector of float)
 0:45  Sequence
 0:45    move second child to first child (temp highp int)
 0:45      'q1' (global highp int)
diff --git a/Test/baseResults/mains1.frag.out b/Test/baseResults/mains1.frag.out
index 0b5c2b784d36fce366e1947222b7db9e74ac9df4..95e98e40ba94e1721bb1e7e5df1304c81b93f133 100644
--- a/Test/baseResults/mains1.frag.out
+++ b/Test/baseResults/mains1.frag.out
@@ -48,6 +48,7 @@ ERROR: Linking geometry stage: At least one shader must specify a layout(max_ver
 
 Linked fragment stage:
 
+ERROR: Linking fragment stage: can't handle multiple entry points per stage
 ERROR: Linking fragment stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 
@@ -57,10 +58,6 @@ max_vertices = -1
 input primitive = none
 output primitive = points
 ERROR: node is still EOpNull!
-0:3  Function Definition: foo( (global void)
-0:3    Function Parameters: 
-0:3  Function Definition: bar( (global void)
-0:3    Function Parameters: 
 0:?   Linker Objects
 Shader version: 110
 0:? Sequence
diff --git a/Test/baseResults/maxClipDistances.vert.out b/Test/baseResults/maxClipDistances.vert.out
index 5d44a663176c5aa0bc16fe50b43ec13991ea3080..4ad4ef15b8bab61136164752ef094e8e1d7980db 100644
--- a/Test/baseResults/maxClipDistances.vert.out
+++ b/Test/baseResults/maxClipDistances.vert.out
@@ -5,7 +5,6 @@ Shader version: 130
 0:5    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
 
@@ -18,6 +17,5 @@ Shader version: 130
 0:5    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
diff --git a/Test/baseResults/missingBodies.vert.out b/Test/baseResults/missingBodies.vert.out
new file mode 100755
index 0000000000000000000000000000000000000000..6d77e0933ef315d1db6e3cf619859da39c216d9f
--- /dev/null
+++ b/Test/baseResults/missingBodies.vert.out
@@ -0,0 +1,98 @@
+missingBodies.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+Shader version: 450
+0:? Sequence
+0:4  Function Definition: foo( (global void)
+0:4    Function Parameters: 
+0:4    Sequence
+0:4      Function Call: bar( (global void)
+0:8  Function Definition: C(i1;i1; (global void)
+0:8    Function Parameters: 
+0:8      '' (in int)
+0:8      '' (in int)
+0:10  Function Definition: A( (global void)
+0:10    Function Parameters: 
+0:10    Sequence
+0:10      Function Call: B( (global void)
+0:10      Function Call: C(i1; (global void)
+0:10        Constant:
+0:10          1 (const int)
+0:10      Function Call: C(b1; (global void)
+0:10        Constant:
+0:10          true (const bool)
+0:10      Function Call: C(i1;i1; (global void)
+0:10        Constant:
+0:10          1 (const int)
+0:10        Constant:
+0:10          2 (const int)
+0:12  Function Definition: main( (global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Function Call: foo( (global void)
+0:15      Function Call: C(b1; (global void)
+0:15        Constant:
+0:15          true (const bool)
+0:20  Sequence
+0:20    move second child to first child (temp int)
+0:20      'f1' (global int)
+0:20      Function Call: ret1( (global int)
+0:22  Function Definition: ret2( (global int)
+0:22    Function Parameters: 
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Constant:
+0:22          3 (const int)
+0:24  Sequence
+0:24    move second child to first child (temp int)
+0:24      'f2' (global int)
+0:24      Function Call: ret2( (global int)
+0:?   Linker Objects
+0:?     'f1' (global int)
+0:?     'f2' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: No function definition (body) found: 
+    ret1(
+ERROR: Linking vertex stage: No function definition (body) found: 
+    C(b1;
+ERROR: Linking vertex stage: No function definition (body) found: 
+    bar(
+
+Shader version: 450
+0:? Sequence
+0:4  Function Definition: foo( (global void)
+0:4    Function Parameters: 
+0:4    Sequence
+0:4      Function Call: bar( (global void)
+0:12  Function Definition: main( (global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Function Call: foo( (global void)
+0:15      Function Call: C(b1; (global void)
+0:15        Constant:
+0:15          true (const bool)
+0:20  Sequence
+0:20    move second child to first child (temp int)
+0:20      'f1' (global int)
+0:20      Function Call: ret1( (global int)
+0:22  Function Definition: ret2( (global int)
+0:22    Function Parameters: 
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Constant:
+0:22          3 (const int)
+0:24  Sequence
+0:24    move second child to first child (temp int)
+0:24      'f2' (global int)
+0:24      Function Call: ret2( (global int)
+0:?   Linker Objects
+0:?     'f1' (global int)
+0:?     'f2' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/noMain.vert.out b/Test/baseResults/noMain.vert.out
index 80a322552855cb8020d599725c1be2605fceaf99..60ac3a3a5bfe9fbf865edac154b9c0612c2a26fa 100644
--- a/Test/baseResults/noMain.vert.out
+++ b/Test/baseResults/noMain.vert.out
@@ -30,8 +30,6 @@ Linked fragment stage:
 
 Shader version: 300
 0:? Sequence
-0:3  Function Definition: foo( (global void)
-0:3    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
diff --git a/Test/baseResults/precise.tesc.out b/Test/baseResults/precise.tesc.out
index 962a3c98b7422f7fd128562073f950059c7ee870..17c7d53f705f60ef172b112faf4a002275077a30 100644
--- a/Test/baseResults/precise.tesc.out
+++ b/Test/baseResults/precise.tesc.out
@@ -392,376 +392,6 @@ Requested GL_EXT_shader_io_blocks
 Requested GL_EXT_tessellation_shader
 vertices = -1
 0:? Sequence
-0:5  Function Definition: minimal( (global float)
-0:5    Function Parameters: 
-0:6    Sequence
-0:6      Sequence
-0:6        move second child to first child (temp float)
-0:6          'result' (noContraction temp float)
-0:6          Constant:
-0:6            5.000000
-0:7      Sequence
-0:7        move second child to first child (temp float)
-0:7          'a' (noContraction temp float)
-0:7          Constant:
-0:7            10.000000
-0:8      Sequence
-0:8        move second child to first child (temp float)
-0:8          'b' (noContraction temp float)
-0:8          Constant:
-0:8            20.000000
-0:9      Sequence
-0:9        move second child to first child (temp float)
-0:9          'c' (noContraction temp float)
-0:9          Constant:
-0:9            30.000000
-0:10      Sequence
-0:10        move second child to first child (temp float)
-0:10          'd' (noContraction temp float)
-0:10          Constant:
-0:10            40.000000
-0:11      move second child to first child (temp float)
-0:11        'result' (noContraction temp float)
-0:11        add (noContraction temp float)
-0:11          component-wise multiply (noContraction temp float)
-0:11            'a' (noContraction temp float)
-0:11            'b' (noContraction temp float)
-0:11          component-wise multiply (noContraction temp float)
-0:11            'c' (noContraction temp float)
-0:11            'd' (noContraction temp float)
-0:12      Branch: Return with expression
-0:12        'result' (noContraction temp float)
-0:15  Function Definition: continuous_assignment( (global void)
-0:15    Function Parameters: 
-0:16    Sequence
-0:16      Sequence
-0:16        move second child to first child (temp float)
-0:16          'result' (noContraction temp float)
-0:16          Constant:
-0:16            5.000000
-0:17      Sequence
-0:17        move second child to first child (temp float)
-0:17          'a' (noContraction temp float)
-0:17          Constant:
-0:17            10.000000
-0:18      Sequence
-0:18        move second child to first child (temp float)
-0:18          'b' (noContraction temp float)
-0:18          Constant:
-0:18            20.000000
-0:19      move second child to first child (temp float)
-0:19        'result' (noContraction temp float)
-0:19        move second child to first child (temp float)
-0:19          'a' (noContraction temp float)
-0:19          add (noContraction temp float)
-0:19            'b' (noContraction temp float)
-0:19            Constant:
-0:19              4.000000
-0:22  Function Definition: convert( (global void)
-0:22    Function Parameters: 
-0:?     Sequence
-0:24      Sequence
-0:24        move second child to first child (temp float)
-0:24          'a' (noContraction temp float)
-0:24          Constant:
-0:24            10.000000
-0:25      Sequence
-0:25        move second child to first child (temp float)
-0:25          'b' (noContraction temp float)
-0:25          Constant:
-0:25            20.000000
-0:26      move second child to first child (temp float)
-0:26        'b' (noContraction temp float)
-0:26        add (noContraction temp float)
-0:26          'a' (noContraction temp float)
-0:26          'b' (noContraction temp float)
-0:27      move second child to first child (temp double)
-0:27        'result' (noContraction temp double)
-0:27        Convert float to double (temp double)
-0:27          'b' (noContraction temp float)
-0:30  Function Definition: loop_for( (global float)
-0:30    Function Parameters: 
-0:31    Sequence
-0:31      Sequence
-0:31        move second child to first child (temp float)
-0:31          'r1' (noContraction temp float)
-0:31          Constant:
-0:31            5.000000
-0:32      Sequence
-0:32        move second child to first child (temp float)
-0:32          'r2' (noContraction temp float)
-0:32          Constant:
-0:32            10.000000
-0:33      Sequence
-0:33        move second child to first child (temp int)
-0:33          'a' (temp int)
-0:33          Constant:
-0:33            10 (const int)
-0:34      Sequence
-0:34        move second child to first child (temp int)
-0:34          'b' (noContraction temp int)
-0:34          Constant:
-0:34            20 (const int)
-0:35      Sequence
-0:35        move second child to first child (temp int)
-0:35          'c' (noContraction temp int)
-0:35          Constant:
-0:35            30 (const int)
-0:36      Sequence
-0:36        Sequence
-0:36          move second child to first child (temp int)
-0:36            'i' (noContraction temp int)
-0:36            Constant:
-0:36              0 (const int)
-0:36        Loop with condition tested first
-0:36          Loop Condition
-0:36          Compare Less Than (temp bool)
-0:36            'i' (temp int)
-0:36            'a' (temp int)
-0:36          Loop Body
-0:37          Sequence
-0:37            add second child into first child (noContraction temp float)
-0:37              'r1' (noContraction temp float)
-0:37              add (noContraction temp float)
-0:37                add (noContraction temp float)
-0:37                  Constant:
-0:37                    3.120000
-0:37                  Convert int to float (temp float)
-0:37                    'b' (noContraction temp int)
-0:37                Convert int to float (temp float)
-0:37                  'i' (noContraction temp int)
-0:38            add second child into first child (noContraction temp int)
-0:38              'c' (noContraction temp int)
-0:38              Constant:
-0:38                1 (const int)
-0:36          Loop Terminal Expression
-0:36          Post-Increment (noContraction temp int)
-0:36            'i' (noContraction temp int)
-0:40      add second child into first child (temp int)
-0:40        'a' (temp int)
-0:40        Constant:
-0:40          1 (const int)
-0:41      move second child to first child (temp float)
-0:41        'r2' (noContraction temp float)
-0:41        Convert int to float (temp float)
-0:41          'c' (noContraction temp int)
-0:42      Branch: Return with expression
-0:42        Construct float (temp float)
-0:42          add (temp float)
-0:42            'r1' (noContraction temp float)
-0:42            'r2' (noContraction temp float)
-0:45  Function Definition: loop_array( (global void)
-0:45    Function Parameters: 
-0:?     Sequence
-0:48      Sequence
-0:48        move second child to first child (temp int)
-0:48          'x' (noContraction temp int)
-0:48          Constant:
-0:48            22 (const int)
-0:49      Sequence
-0:49        move second child to first child (temp int)
-0:49          'y' (noContraction temp int)
-0:49          Constant:
-0:49            33 (const int)
-0:52      add second child into first child (noContraction temp float)
-0:52        'result' (noContraction temp float)
-0:52        add (noContraction temp float)
-0:52          Convert int to float (temp float)
-0:52            'x' (noContraction temp int)
-0:52          Convert int to float (temp float)
-0:52            'y' (noContraction temp int)
-0:54      Sequence
-0:54        Sequence
-0:54          move second child to first child (temp int)
-0:54            'i' (temp int)
-0:54            Constant:
-0:54              0 (const int)
-0:54        Loop with condition tested first
-0:54          Loop Condition
-0:54          Compare Less Than (temp bool)
-0:54            'i' (temp int)
-0:54            Constant:
-0:54              3 (const int)
-0:54          Loop Body
-0:56          Sequence
-0:56            add second child into first child (noContraction temp float)
-0:56              'result' (noContraction temp float)
-0:56              add (noContraction temp float)
-0:56                indirect index (noContraction temp float)
-0:56                  'a0' (temp 3-element array of float)
-0:56                  'i' (temp int)
-0:56                Constant:
-0:56                  2.000000
-0:58            move second child to first child (temp float)
-0:58              indirect index (noContraction temp float)
-0:58                'a0' (noContraction temp 3-element array of float)
-0:58                'i' (temp int)
-0:58              subtract (noContraction temp float)
-0:58                Constant:
-0:58                  3.000000
-0:58                Post-Increment (noContraction temp float)
-0:58                  'result' (noContraction temp float)
-0:54          Loop Terminal Expression
-0:54          Pre-Increment (temp int)
-0:54            'i' (temp int)
-0:62  Function Definition: loop_while( (global void)
-0:62    Function Parameters: 
-0:63    Sequence
-0:63      Sequence
-0:63        move second child to first child (temp float)
-0:63          'result' (noContraction temp float)
-0:63          Constant:
-0:63            5.000000
-0:64      Sequence
-0:64        move second child to first child (temp int)
-0:64          'a' (noContraction temp int)
-0:64          Constant:
-0:64            10 (const int)
-0:65      Sequence
-0:65        move second child to first child (temp int)
-0:65          'b' (noContraction temp int)
-0:65          Constant:
-0:65            20 (const int)
-0:66      Loop with condition tested first
-0:66        Loop Condition
-0:66        Compare Less Than (temp bool)
-0:66          'result' (noContraction temp float)
-0:66          Constant:
-0:66            10.000000
-0:66        Loop Body
-0:67        Sequence
-0:67          add second child into first child (noContraction temp float)
-0:67            'result' (noContraction temp float)
-0:67            add (noContraction temp float)
-0:67              Constant:
-0:67                3.120000
-0:67              Convert int to float (temp float)
-0:67                'b' (noContraction temp int)
-0:69      move second child to first child (temp float)
-0:69        'result' (noContraction temp float)
-0:69        Convert int to float (temp float)
-0:69          add (temp int)
-0:69            add (temp int)
-0:69              'a' (noContraction temp int)
-0:69              'b' (noContraction temp int)
-0:69            Constant:
-0:69              5 (const int)
-0:70      move second child to first child (temp float)
-0:70        'result' (noContraction temp float)
-0:70        Constant:
-0:70          11.100000
-0:73  Function Definition: fma_not_decorated( (global float)
-0:73    Function Parameters: 
-0:?     Sequence
-0:75      Sequence
-0:75        move second child to first child (temp float)
-0:75          'a' (noContraction temp float)
-0:75          Constant:
-0:75            1.000000
-0:76      Sequence
-0:76        move second child to first child (temp float)
-0:76          'b' (noContraction temp float)
-0:76          Constant:
-0:76            2.000000
-0:77      Sequence
-0:77        move second child to first child (temp float)
-0:77          'c' (noContraction temp float)
-0:77          Constant:
-0:77            3.000000
-0:78      move second child to first child (temp float)
-0:78        'b' (noContraction temp float)
-0:78        add (noContraction temp float)
-0:78          'b' (noContraction temp float)
-0:78          'c' (noContraction temp float)
-0:79      move second child to first child (temp float)
-0:79        'result' (noContraction temp float)
-0:79        fma (global float)
-0:79          'a' (noContraction temp float)
-0:79          'b' (noContraction temp float)
-0:79          'c' (noContraction temp float)
-0:80      Branch: Return with expression
-0:80        'result' (noContraction temp float)
-0:83  Function Definition: precise_return_exp_func( (noContraction temp float)
-0:83    Function Parameters: 
-0:84    Sequence
-0:84      Sequence
-0:84        move second child to first child (temp float)
-0:84          'a' (noContraction temp float)
-0:84          Constant:
-0:84            1.000000
-0:85      Sequence
-0:85        move second child to first child (temp float)
-0:85          'b' (noContraction temp float)
-0:85          Constant:
-0:85            2.000000
-0:86      Branch: Return with expression
-0:86        add (noContraction temp float)
-0:86          'a' (noContraction temp float)
-0:86          'b' (noContraction temp float)
-0:89  Function Definition: precise_return_val_func( (noContraction temp float)
-0:89    Function Parameters: 
-0:90    Sequence
-0:90      Sequence
-0:90        move second child to first child (temp float)
-0:90          'a' (noContraction temp float)
-0:90          Constant:
-0:90            1.000000
-0:91      Sequence
-0:91        move second child to first child (temp float)
-0:91          'b' (noContraction temp float)
-0:91          Constant:
-0:91            2.000000
-0:92      Sequence
-0:92        move second child to first child (temp float)
-0:92          'result' (noContraction temp float)
-0:92          add (noContraction temp float)
-0:92            'a' (noContraction temp float)
-0:92            'b' (noContraction temp float)
-0:93      Branch: Return with expression
-0:93        'result' (noContraction temp float)
-0:96  Function Definition: precise_func_parameter(f1;f1; (global float)
-0:96    Function Parameters: 
-0:96      'b' (in float)
-0:96      'c' (noContraction out float)
-0:97    Sequence
-0:97      Sequence
-0:97        move second child to first child (temp float)
-0:97          'a' (noContraction temp float)
-0:97          Constant:
-0:97            0.500000
-0:98      move second child to first child (temp float)
-0:98        'c' (noContraction out float)
-0:98        add (noContraction temp float)
-0:98          'a' (noContraction temp float)
-0:98          'b' (noContraction in float)
-0:99      Branch: Return with expression
-0:99        subtract (temp float)
-0:99          'a' (temp float)
-0:99          'b' (in float)
-0:102  Function Definition: matrix(mf23;mf32; (global 3X3 matrix of float)
-0:102    Function Parameters: 
-0:102      'a' (in 2X3 matrix of float)
-0:102      'b' (in 3X2 matrix of float)
-0:103    Sequence
-0:103      Sequence
-0:103        move second child to first child (temp 2X3 matrix of float)
-0:103          'c' (noContraction temp 2X3 matrix of float)
-0:103          Constant:
-0:103            1.000000
-0:103            2.000000
-0:103            3.000000
-0:103            4.000000
-0:103            5.000000
-0:103            6.000000
-0:105      move second child to first child (temp 3X3 matrix of float)
-0:105        'result' (noContraction temp 3X3 matrix of float)
-0:105        matrix-multiply (noContraction temp 3X3 matrix of float)
-0:105          add (noContraction temp 2X3 matrix of float)
-0:105            'a' (noContraction in 2X3 matrix of float)
-0:105            'c' (noContraction temp 2X3 matrix of float)
-0:105          'b' (noContraction in 3X2 matrix of float)
-0:106      Branch: Return with expression
-0:106        'result' (noContraction temp 3X3 matrix of float)
 0:109  Function Definition: main( (global void)
 0:109    Function Parameters: 
 0:?   Linker Objects
diff --git a/Test/baseResults/precise_struct_block.vert.out b/Test/baseResults/precise_struct_block.vert.out
index 9d726d65af3b77693ae28b5ef29c87eb430ebe42..e40fd0cd602fb2c2798c639aecde60f56e2a66b8 100644
--- a/Test/baseResults/precise_struct_block.vert.out
+++ b/Test/baseResults/precise_struct_block.vert.out
@@ -526,515 +526,6 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:11  Function Definition: struct_member( (global float)
-0:11    Function Parameters: 
-0:12    Sequence
-0:12      Sequence
-0:12        move second child to first child (temp float)
-0:12          'a' (noContraction temp float)
-0:12          Constant:
-0:12            1.000000
-0:13      Sequence
-0:13        move second child to first child (temp float)
-0:13          'b' (temp float)
-0:13          Constant:
-0:13            2.000000
-0:14      Sequence
-0:14        move second child to first child (temp float)
-0:14          'c' (temp float)
-0:14          Constant:
-0:14            3.000000
-0:15      Sequence
-0:15        move second child to first child (temp float)
-0:15          'd' (temp float)
-0:15          Constant:
-0:15            4.000000
-0:21      move second child to first child (temp float)
-0:21        f1: direct index for structure (noContraction global float)
-0:21          'S2' (temp structure{global float f1, global float f2})
-0:21          Constant:
-0:21            0 (const int)
-0:21        add (noContraction temp float)
-0:21          'a' (noContraction temp float)
-0:21          Constant:
-0:21            0.200000
-0:22      move second child to first child (temp float)
-0:22        f2: direct index for structure (global float)
-0:22          'S2' (temp structure{global float f1, global float f2})
-0:22          Constant:
-0:22            1 (const int)
-0:22        add (temp float)
-0:22          'b' (temp float)
-0:22          Constant:
-0:22            0.200000
-0:23      move second child to first child (temp float)
-0:23        f1: direct index for structure (global float)
-0:23          'S3' (temp structure{global float f1, global float f2})
-0:23          Constant:
-0:23            0 (const int)
-0:23        add (temp float)
-0:23          'a' (temp float)
-0:23          'b' (temp float)
-0:24      move second child to first child (temp structure{global float f1, global float f2})
-0:24        'S' (temp structure{global float f1, global float f2})
-0:24        'S2' (temp structure{global float f1, global float f2})
-0:25      move second child to first child (temp float)
-0:25        'result' (noContraction temp float)
-0:25        add (noContraction temp float)
-0:25          f1: direct index for structure (noContraction global float)
-0:25            'S' (temp structure{global float f1, global float f2})
-0:25            Constant:
-0:25              0 (const int)
-0:25          Constant:
-0:25            0.100000
-0:27      Branch: Return with expression
-0:27        'result' (noContraction temp float)
-0:30  Function Definition: complex_array_struct( (global float)
-0:30    Function Parameters: 
-0:?     Sequence
-0:43      Sequence
-0:43        Sequence
-0:43          move second child to first child (temp int)
-0:43            'i' (noContraction temp int)
-0:43            Constant:
-0:43              0 (const int)
-0:43        Loop with condition tested first
-0:43          Loop Condition
-0:43          Compare Less Than (temp bool)
-0:43            'i' (temp int)
-0:43            Constant:
-0:43              10 (const int)
-0:43          Loop Body
-0:44          Sequence
-0:44            move second child to first child (temp float)
-0:44              f: direct index for structure (temp float)
-0:44                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:44                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:44                  'i' (temp int)
-0:44                Constant:
-0:44                  0 (const int)
-0:44              divide (temp float)
-0:44                Convert int to float (temp float)
-0:44                  'i' (temp int)
-0:44                Constant:
-0:44                  3.000000
-0:45            move second child to first child (temp 4-component vector of float)
-0:45              v: direct index for structure (noContraction temp 4-component vector of float)
-0:45                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:45                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:45                  'i' (temp int)
-0:45                Constant:
-0:45                  2 (const int)
-0:45              Construct vec4 (temp 4-component vector of float)
-0:45                component-wise multiply (noContraction temp float)
-0:45                  Convert int to float (temp float)
-0:45                    'i' (noContraction temp int)
-0:45                  Constant:
-0:45                    1.500000
-0:46            move second child to first child (temp int)
-0:46              p: direct index for structure (temp int)
-0:46                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:46                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:46                  'i' (temp int)
-0:46                Constant:
-0:46                  3 (const int)
-0:46              add (temp int)
-0:46                'i' (temp int)
-0:46                Constant:
-0:46                  1 (const int)
-0:47            Sequence
-0:47              Sequence
-0:47                move second child to first child (temp int)
-0:47                  'j' (temp int)
-0:47                  Constant:
-0:47                    0 (const int)
-0:47              Loop with condition tested first
-0:47                Loop Condition
-0:47                Compare Less Than (temp bool)
-0:47                  'j' (temp int)
-0:47                  Constant:
-0:47                    5 (const int)
-0:47                Loop Body
-0:48                Sequence
-0:48                  Sequence
-0:48                    Sequence
-0:48                      move second child to first child (temp int)
-0:48                        'k' (temp int)
-0:48                        Constant:
-0:48                          0 (const int)
-0:48                    Loop with condition tested first
-0:48                      Loop Condition
-0:48                      Compare Less Than (temp bool)
-0:48                        'k' (temp int)
-0:48                        Constant:
-0:48                          3 (const int)
-0:48                      Loop Body
-0:49                      Sequence
-0:49                        move second child to first child (temp float)
-0:49                          indirect index (temp float)
-0:49                            t1_array: direct index for structure (temp 3-element array of float)
-0:49                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:49                                t1a: direct index for structure (temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:49                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:49                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:49                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:49                                      'i' (temp int)
-0:49                                    Constant:
-0:49                                      1 (const int)
-0:49                                  Constant:
-0:49                                    0 (const int)
-0:49                                'j' (temp int)
-0:49                              Constant:
-0:49                                0 (const int)
-0:49                            'k' (temp int)
-0:49                          Convert int to float (temp float)
-0:49                            add (temp int)
-0:49                              component-wise multiply (temp int)
-0:49                                'i' (temp int)
-0:49                                'j' (temp int)
-0:49                              'k' (temp int)
-0:48                      Loop Terminal Expression
-0:48                      Post-Increment (temp int)
-0:48                        'k' (temp int)
-0:51                  move second child to first child (temp float)
-0:51                    t1_scalar: direct index for structure (temp float)
-0:51                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:51                        t1a: direct index for structure (temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:51                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:51                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:51                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:51                              'i' (temp int)
-0:51                            Constant:
-0:51                              1 (const int)
-0:51                          Constant:
-0:51                            0 (const int)
-0:51                        'j' (temp int)
-0:51                      Constant:
-0:51                        1 (const int)
-0:51                    divide (temp float)
-0:51                      component-wise multiply (temp float)
-0:51                        Convert int to float (temp float)
-0:51                          'j' (temp int)
-0:51                        Constant:
-0:51                          2.000000
-0:51                      Convert int to float (temp float)
-0:51                        'i' (temp int)
-0:47                Loop Terminal Expression
-0:47                Post-Increment (temp int)
-0:47                  'j' (temp int)
-0:54            Sequence
-0:54              Sequence
-0:54                move second child to first child (temp int)
-0:54                  'j' (noContraction temp int)
-0:54                  Constant:
-0:54                    0 (const int)
-0:54              Loop with condition tested first
-0:54                Loop Condition
-0:54                Compare Less Than (temp bool)
-0:54                  'j' (temp int)
-0:54                  Constant:
-0:54                    6 (const int)
-0:54                Loop Body
-0:55                Sequence
-0:55                  Sequence
-0:55                    Sequence
-0:55                      move second child to first child (temp int)
-0:55                        'k' (temp int)
-0:55                        Constant:
-0:55                          0 (const int)
-0:55                    Loop with condition tested first
-0:55                      Loop Condition
-0:55                      Compare Less Than (temp bool)
-0:55                        'k' (temp int)
-0:55                        Constant:
-0:55                          3 (const int)
-0:55                      Loop Body
-0:56                      Sequence
-0:56                        move second child to first child (temp float)
-0:56                          indirect index (temp float)
-0:56                            t1_array: direct index for structure (temp 3-element array of float)
-0:56                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:56                                t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:56                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:56                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:56                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:56                                      'i' (temp int)
-0:56                                    Constant:
-0:56                                      1 (const int)
-0:56                                  Constant:
-0:56                                    1 (const int)
-0:56                                'j' (temp int)
-0:56                              Constant:
-0:56                                0 (const int)
-0:56                            'k' (temp int)
-0:56                          Convert int to float (temp float)
-0:56                            add (temp int)
-0:56                              component-wise multiply (temp int)
-0:56                                'i' (temp int)
-0:56                                'j' (temp int)
-0:56                              'k' (temp int)
-0:55                      Loop Terminal Expression
-0:55                      Post-Increment (temp int)
-0:55                        'k' (temp int)
-0:58                  move second child to first child (temp float)
-0:58                    t1_scalar: direct index for structure (noContraction temp float)
-0:58                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:58                        t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:58                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:58                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:58                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:58                              'i' (temp int)
-0:58                            Constant:
-0:58                              1 (const int)
-0:58                          Constant:
-0:58                            1 (const int)
-0:58                        'j' (temp int)
-0:58                      Constant:
-0:58                        1 (const int)
-0:58                    divide (noContraction temp float)
-0:58                      component-wise multiply (noContraction temp float)
-0:58                        Convert int to float (temp float)
-0:58                          'j' (noContraction temp int)
-0:58                        Constant:
-0:58                          2.000000
-0:58                      Convert int to float (temp float)
-0:58                        'i' (noContraction temp int)
-0:54                Loop Terminal Expression
-0:54                Post-Increment (noContraction temp int)
-0:54                  'j' (noContraction temp int)
-0:61            Sequence
-0:61              Sequence
-0:61                move second child to first child (temp int)
-0:61                  'j' (noContraction temp int)
-0:61                  Constant:
-0:61                    0 (const int)
-0:61              Loop with condition tested first
-0:61                Loop Condition
-0:61                Compare Less Than (temp bool)
-0:61                  'j' (temp int)
-0:61                  Constant:
-0:61                    6 (const int)
-0:61                Loop Body
-0:62                Sequence
-0:62                  Sequence
-0:62                    Sequence
-0:62                      move second child to first child (temp int)
-0:62                        'k' (noContraction temp int)
-0:62                        Constant:
-0:62                          0 (const int)
-0:62                    Loop with condition tested first
-0:62                      Loop Condition
-0:62                      Compare Less Than (temp bool)
-0:62                        'k' (temp int)
-0:62                        Constant:
-0:62                          3 (const int)
-0:62                      Loop Body
-0:63                      Sequence
-0:63                        move second child to first child (temp float)
-0:63                          indirect index (noContraction temp float)
-0:63                            t1_array: direct index for structure (noContraction temp 3-element array of float)
-0:63                              indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:63                                t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:63                                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:63                                    indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:63                                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:63                                      'i' (temp int)
-0:63                                    Constant:
-0:63                                      1 (const int)
-0:63                                  Constant:
-0:63                                    2 (const int)
-0:63                                'j' (temp int)
-0:63                              Constant:
-0:63                                0 (const int)
-0:63                            'k' (temp int)
-0:63                          Convert int to float (temp float)
-0:63                            add (temp int)
-0:63                              component-wise multiply (temp int)
-0:63                                'i' (noContraction temp int)
-0:63                                'j' (noContraction temp int)
-0:63                              'k' (noContraction temp int)
-0:62                      Loop Terminal Expression
-0:62                      Post-Increment (noContraction temp int)
-0:62                        'k' (noContraction temp int)
-0:65                  move second child to first child (temp float)
-0:65                    t1_scalar: direct index for structure (temp float)
-0:65                      indirect index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:65                        t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:65                          t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:65                            indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:65                              't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:65                              'i' (temp int)
-0:65                            Constant:
-0:65                              1 (const int)
-0:65                          Constant:
-0:65                            2 (const int)
-0:65                        'j' (temp int)
-0:65                      Constant:
-0:65                        1 (const int)
-0:65                    divide (temp float)
-0:65                      component-wise multiply (temp float)
-0:65                        Convert int to float (temp float)
-0:65                          'j' (temp int)
-0:65                        Constant:
-0:65                          2.000000
-0:65                      Convert int to float (temp float)
-0:65                        'i' (temp int)
-0:61                Loop Terminal Expression
-0:61                Post-Increment (noContraction temp int)
-0:61                  'j' (noContraction temp int)
-0:43          Loop Terminal Expression
-0:43          Post-Increment (noContraction temp int)
-0:43            'i' (noContraction temp int)
-0:68      Sequence
-0:68        move second child to first child (temp int)
-0:68          'i' (temp int)
-0:68          Constant:
-0:68            2 (const int)
-0:69      move second child to first child (temp float)
-0:69        'result' (noContraction temp float)
-0:71        add (noContraction temp float)
-0:70          add (noContraction temp float)
-0:69            direct index (noContraction temp float)
-0:69              t1_array: direct index for structure (temp 3-element array of float)
-0:69                direct index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:69                  t1c: direct index for structure (temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:69                    t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:69                      direct index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:69                        't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:69                        Constant:
-0:69                          5 (const int)
-0:69                      Constant:
-0:69                        1 (const int)
-0:69                    Constant:
-0:69                      2 (const int)
-0:69                  Constant:
-0:69                    6 (const int)
-0:69                Constant:
-0:69                  0 (const int)
-0:69              Constant:
-0:69                1 (const int)
-0:70            t1_scalar: direct index for structure (noContraction temp float)
-0:70              direct index (temp structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:70                t1b: direct index for structure (temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar})
-0:70                  t2: direct index for structure (temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c})
-0:70                    direct index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:70                      't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:70                      Constant:
-0:70                        2 (const int)
-0:70                    Constant:
-0:70                      1 (const int)
-0:70                  Constant:
-0:70                    1 (const int)
-0:70                Constant:
-0:70                  1 (const int)
-0:70              Constant:
-0:70                1 (const int)
-0:71          direct index (noContraction temp float)
-0:71            vector swizzle (temp 2-component vector of float)
-0:71              v: direct index for structure (temp 4-component vector of float)
-0:71                indirect index (temp structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:71                  't3' (temp 10-element array of structure{temp float f, temp structure{temp 5-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1a, temp 6-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1b, temp 7-element array of structure{temp 3-element array of float t1_array, temp float t1_scalar} t1c} t2, temp 4-component vector of float v, temp int p})
-0:71                  subtract (temp int)
-0:71                    'i' (temp int)
-0:71                    Constant:
-0:71                      1 (const int)
-0:71                Constant:
-0:71                  2 (const int)
-0:71              Sequence
-0:71                Constant:
-0:71                  0 (const int)
-0:71                Constant:
-0:71                  1 (const int)
-0:71            Constant:
-0:71              0 (const int)
-0:72      Branch: Return with expression
-0:72        'result' (noContraction temp float)
-0:75  Function Definition: out_block( (global float)
-0:75    Function Parameters: 
-0:76    Sequence
-0:76      Sequence
-0:76        move second child to first child (temp float)
-0:76          'a' (noContraction temp float)
-0:76          Constant:
-0:76            0.100000
-0:77      Sequence
-0:77        move second child to first child (temp float)
-0:77          'b' (noContraction temp float)
-0:77          Constant:
-0:77            0.200000
-0:78      move second child to first child (temp float)
-0:78        f1: direct index for structure (noContraction global float)
-0:78          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:78            'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:78            Constant:
-0:78              0 (const int)
-0:78          Constant:
-0:78            0 (const int)
-0:78        add (noContraction temp float)
-0:78          'a' (noContraction temp float)
-0:78          'b' (noContraction temp float)
-0:79      move second child to first child (temp float)
-0:79        f2: direct index for structure (noContraction global float)
-0:79          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:79            'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:79            Constant:
-0:79              0 (const int)
-0:79          Constant:
-0:79            1 (const int)
-0:79        subtract (noContraction temp float)
-0:79          'a' (noContraction temp float)
-0:79          'b' (noContraction temp float)
-0:80      move second child to first child (temp float)
-0:80        x: direct index for structure (out float)
-0:80          'partial_precise_block' (out block{noContraction out structure{global float f1, global float f2} s, out float x})
-0:80          Constant:
-0:80            1 (const int)
-0:80        component-wise multiply (temp float)
-0:80          'a' (temp float)
-0:80          'b' (temp float)
-0:82      move second child to first child (temp float)
-0:82        f1: direct index for structure (noContraction global float)
-0:82          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:82            'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:82            Constant:
-0:82              0 (const int)
-0:82          Constant:
-0:82            0 (const int)
-0:82        add (noContraction temp float)
-0:82          add (noContraction temp float)
-0:82            'a' (noContraction temp float)
-0:82            'b' (noContraction temp float)
-0:82          Constant:
-0:82            1.000000
-0:83      move second child to first child (temp float)
-0:83        f2: direct index for structure (noContraction global float)
-0:83          s: direct index for structure (noContraction out structure{global float f1, global float f2})
-0:83            'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:83            Constant:
-0:83              0 (const int)
-0:83          Constant:
-0:83            1 (const int)
-0:83        subtract (noContraction temp float)
-0:83          subtract (noContraction temp float)
-0:83            'a' (noContraction temp float)
-0:83            'b' (noContraction temp float)
-0:83          Constant:
-0:83            1.000000
-0:84      move second child to first child (temp float)
-0:84        x: direct index for structure (noContraction out float)
-0:84          'all_precise_block' (noContraction out block{out structure{global float f1, global float f2} s, out float x})
-0:84          Constant:
-0:84            1 (const int)
-0:84        component-wise multiply (noContraction temp float)
-0:84          component-wise multiply (noContraction temp float)
-0:84            'a' (noContraction temp float)
-0:84            'b' (noContraction temp float)
-0:84          Constant:
-0:84            2.000000
-0:86      Branch: Return with expression
-0:86        add (temp float)
-0:86          'a' (temp float)
-0:86          'b' (temp float)
 0:89  Function Definition: main( (global void)
 0:89    Function Parameters: 
 0:?   Linker Objects
diff --git a/Test/baseResults/precision.frag.out b/Test/baseResults/precision.frag.out
index 79485b48c6ebea6a9e0a2cf321d86077b2ea7314..5ab99e99a31933bbc6687b6d8df50233fc6aa275 100644
--- a/Test/baseResults/precision.frag.out
+++ b/Test/baseResults/precision.frag.out
@@ -130,18 +130,6 @@ Linked fragment stage:
 
 Shader version: 100
 ERROR: node is still EOpNull!
-0:5  Function Definition: foo(vf3; (global lowp 2-component vector of float)
-0:5    Function Parameters: 
-0:5      'mv3' (in mediump 3-component vector of float)
-0:?     Sequence
-0:8      Branch: Return with expression
-0:8        vector swizzle (temp highp 2-component vector of float)
-0:8          'hv4' (temp highp 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:25  Function Definition: main( (global void)
 0:25    Function Parameters: 
 0:27    Sequence
diff --git a/Test/baseResults/recurse1.vert.out b/Test/baseResults/recurse1.vert.out
index c2ae0140c3619d680f6b7c5b53fd5d40613bf9c0..4274eb3849e661bbe3f55c1b73f109ca7b2ea90d 100644
--- a/Test/baseResults/recurse1.vert.out
+++ b/Test/baseResults/recurse1.vert.out
@@ -218,66 +218,6 @@ Shader version: 330
 0:? Sequence
 0:3  Function Definition: main( (global void)
 0:3    Function Parameters: 
-0:9  Function Definition: self( (global void)
-0:9    Function Parameters: 
-0:11    Sequence
-0:11      Function Call: self( (global void)
-0:16  Function Definition: foo(f1; (global void)
-0:16    Function Parameters: 
-0:16      '' (in float)
-0:18    Sequence
-0:18      Function Call: bar(i1; (global float)
-0:18        Constant:
-0:18          2 (const int)
-0:21  Function Definition: bar(i1; (global float)
-0:21    Function Parameters: 
-0:21      '' (in int)
-0:23    Sequence
-0:23      Function Call: foo(f1; (global void)
-0:23        Constant:
-0:23          4.200000
-0:25      Branch: Return with expression
-0:25        Constant:
-0:25          3.200000
-0:32  Function Definition: A( (global void)
-0:32    Function Parameters: 
-0:32    Sequence
-0:32      Function Call: B( (global void)
-0:33  Function Definition: C( (global void)
-0:33    Function Parameters: 
-0:33    Sequence
-0:33      Function Call: D( (global void)
-0:34  Function Definition: B( (global void)
-0:34    Function Parameters: 
-0:34    Sequence
-0:34      Function Call: C( (global void)
-0:35  Function Definition: D( (global void)
-0:35    Function Parameters: 
-0:35    Sequence
-0:35      Function Call: A( (global void)
-0:41  Function Definition: AT( (global void)
-0:41    Function Parameters: 
-0:41    Sequence
-0:41      Function Call: BT( (global void)
-0:41      Function Call: BT( (global void)
-0:41      Function Call: BT( (global void)
-0:42  Function Definition: CT( (global void)
-0:42    Function Parameters: 
-0:42    Sequence
-0:42      Function Call: DT( (global void)
-0:42      Function Call: AT( (global void)
-0:42      Function Call: DT( (global void)
-0:42      Function Call: BT( (global void)
-0:43  Function Definition: BT( (global void)
-0:43    Function Parameters: 
-0:43    Sequence
-0:43      Function Call: CT( (global void)
-0:43      Function Call: CT( (global void)
-0:43      Function Call: CT( (global void)
-0:44  Function Definition: DT( (global void)
-0:44    Function Parameters: 
-0:44    Sequence
-0:44      Function Call: AT( (global void)
 0:?   Linker Objects
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
@@ -285,113 +225,5 @@ Shader version: 330
 0:? Sequence
 0:5  Function Definition: main( (global void)
 0:5    Function Parameters: 
-0:11  Function Definition: cfoo(f1; (global void)
-0:11    Function Parameters: 
-0:11      '' (in float)
-0:13    Sequence
-0:13      Function Call: cbar(i1; (global float)
-0:13        Constant:
-0:13          2 (const int)
-0:20  Function Definition: CA( (global void)
-0:20    Function Parameters: 
-0:20    Sequence
-0:20      Function Call: CB( (global void)
-0:21  Function Definition: CC( (global void)
-0:21    Function Parameters: 
-0:21    Sequence
-0:21      Function Call: CD( (global void)
-0:27  Function Definition: CAT( (global void)
-0:27    Function Parameters: 
-0:27    Sequence
-0:27      Function Call: CBT( (global void)
-0:27      Function Call: CBT( (global void)
-0:27      Function Call: CBT( (global void)
-0:28  Function Definition: CCT( (global void)
-0:28    Function Parameters: 
-0:28    Sequence
-0:28      Function Call: CDT( (global void)
-0:28      Function Call: CDT( (global void)
-0:28      Function Call: CBT( (global void)
-0:32  Function Definition: norA( (global void)
-0:32    Function Parameters: 
-0:33  Function Definition: norB( (global void)
-0:33    Function Parameters: 
-0:33    Sequence
-0:33      Function Call: norA( (global void)
-0:34  Function Definition: norC( (global void)
-0:34    Function Parameters: 
-0:34    Sequence
-0:34      Function Call: norA( (global void)
-0:35  Function Definition: norD( (global void)
-0:35    Function Parameters: 
-0:35    Sequence
-0:35      Function Call: norA( (global void)
-0:36  Function Definition: norE( (global void)
-0:36    Function Parameters: 
-0:36    Sequence
-0:36      Function Call: norB( (global void)
-0:37  Function Definition: norF( (global void)
-0:37    Function Parameters: 
-0:37    Sequence
-0:37      Function Call: norB( (global void)
-0:38  Function Definition: norG( (global void)
-0:38    Function Parameters: 
-0:38    Sequence
-0:38      Function Call: norE( (global void)
-0:39  Function Definition: norH( (global void)
-0:39    Function Parameters: 
-0:39    Sequence
-0:39      Function Call: norE( (global void)
-0:40  Function Definition: norI( (global void)
-0:40    Function Parameters: 
-0:40    Sequence
-0:40      Function Call: norE( (global void)
-0:44  Function Definition: norcA( (global void)
-0:44    Function Parameters: 
-0:45  Function Definition: norcB( (global void)
-0:45    Function Parameters: 
-0:45    Sequence
-0:45      Function Call: norcA( (global void)
-0:46  Function Definition: norcC( (global void)
-0:46    Function Parameters: 
-0:46    Sequence
-0:46      Function Call: norcB( (global void)
-0:47  Function Definition: norcD( (global void)
-0:47    Function Parameters: 
-0:47    Sequence
-0:47      Function Call: norcC( (global void)
-0:47      Function Call: norcB( (global void)
-0:48  Function Definition: norcE( (global void)
-0:48    Function Parameters: 
-0:48    Sequence
-0:48      Function Call: norcD( (global void)
-0:9  Function Definition: cbar(i1; (global float)
-0:9    Function Parameters: 
-0:9      '' (in int)
-0:11    Sequence
-0:11      Function Call: cfoo(f1; (global void)
-0:11        Constant:
-0:11          4.200000
-0:13      Branch: Return with expression
-0:13        Constant:
-0:13          3.200000
-0:20  Function Definition: CB( (global void)
-0:20    Function Parameters: 
-0:20    Sequence
-0:20      Function Call: CC( (global void)
-0:21  Function Definition: CD( (global void)
-0:21    Function Parameters: 
-0:21    Sequence
-0:21      Function Call: CA( (global void)
-0:27  Function Definition: CBT( (global void)
-0:27    Function Parameters: 
-0:27    Sequence
-0:27      Function Call: CCT( (global void)
-0:27      Function Call: CCT( (global void)
-0:27      Function Call: CCT( (global void)
-0:28  Function Definition: CDT( (global void)
-0:28    Function Parameters: 
-0:28    Sequence
-0:28      Function Call: CAT( (global void)
 0:?   Linker Objects
 
diff --git a/Test/baseResults/reflection.vert.out b/Test/baseResults/reflection.vert.out
index 24ee780900ab9bdb0e62275d121a3b188e9173fb..ba3e0e698a0cfaea4e058c049daf8a95abf946f9 100644
--- a/Test/baseResults/reflection.vert.out
+++ b/Test/baseResults/reflection.vert.out
@@ -1,104 +1,100 @@
 reflection.vert
 Warning, version 440 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 Uniform reflection:
-image_ui2D: offset -1, type 9063, size 1, index -1
-sampler_2D: offset -1, type 8b5e, size 1, index -1
-sampler_2DMSArray: offset -1, type 910b, size 1, index -1
-anonMember3: offset 80, type 8b52, size 1, index 0
-s.a: offset -1, type 1404, size 1, index -1
-named.scalar: offset 12, type 1404, size 1, index 1
-m23: offset 16, type 8b67, size 1, index 0
-scalarAfterm23: offset 48, type 1404, size 1, index 0
-c_m23: offset 16, type 8b67, size 1, index 2
-c_scalarAfterm23: offset 64, type 1404, size 1, index 2
-scalarBeforeArray: offset 96, type 1404, size 1, index 0
-floatArray: offset 112, type 1406, size 5, index 0
-scalarAfterArray: offset 192, type 1404, size 1, index 0
-named.memvec2: offset 48, type 8b50, size 1, index 1
-named.memf1: offset 56, type 1406, size 1, index 1
-named.memf2: offset 60, type 8b56, size 1, index 1
-named.memf3: offset 64, type 1404, size 1, index 1
-named.memvec2a: offset 72, type 8b50, size 1, index 1
-named.m22: offset 80, type 8b5a, size 7, index 1
-dm22: offset -1, type 8b5a, size 4, index -1
-m22: offset 208, type 8b5a, size 3, index 0
-nested.foo.n1.a: offset 0, type 1406, size 1, index 3
-nested.foo.n2.b: offset 16, type 1406, size 1, index 3
-nested.foo.n2.c: offset 20, type 1406, size 1, index 3
-nested.foo.n2.d: offset 24, type 1406, size 1, index 3
-deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1
-deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1
-deepC[1].iv4: offset -1, type 8b52, size 1, index -1
-deepC[1].d2.i: offset -1, type 1404, size 1, index -1
-deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepC[1].v3: offset -1, type 8b54, size 1, index -1
-deepD[0].iv4: offset -1, type 8b52, size 1, index -1
-deepD[0].d2.i: offset -1, type 1404, size 1, index -1
-deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepD[0].v3: offset -1, type 8b54, size 1, index -1
-deepD[1].iv4: offset -1, type 8b52, size 1, index -1
-deepD[1].d2.i: offset -1, type 1404, size 1, index -1
-deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1
-deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1
-deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1
-deepD[1].v3: offset -1, type 8b54, size 1, index -1
-abl.foo: offset 0, type 1406, size 1, index 7
-abl2.foo: offset 0, type 1406, size 1, index 11
-anonMember1: offset 0, type 8b51, size 1, index 0
-uf1: offset -1, type 1406, size 1, index -1
-uf2: offset -1, type 1406, size 1, index -1
-named.member3: offset 32, type 8b52, size 1, index 1
+image_ui2D: offset -1, type 9063, size 1, index -1, binding -1
+sampler_2D: offset -1, type 8b5e, size 1, index -1, binding -1
+sampler_2DMSArray: offset -1, type 910b, size 1, index -1, binding -1
+anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
+s.a: offset -1, type 1404, size 1, index -1, binding -1
+named.scalar: offset 12, type 1404, size 1, index 1, binding -1
+m23: offset 16, type 8b67, size 1, index 0, binding -1
+scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1
+c_m23: offset 16, type 8b67, size 1, index 2, binding -1
+c_scalarAfterm23: offset 64, type 1404, size 1, index 2, binding -1
+scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1
+scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
+named.memvec2: offset 48, type 8b50, size 1, index 1, binding -1
+named.memf1: offset 56, type 1406, size 1, index 1, binding -1
+named.memf2: offset 60, type 8b56, size 1, index 1, binding -1
+named.memf3: offset 64, type 1404, size 1, index 1, binding -1
+named.memvec2a: offset 72, type 8b50, size 1, index 1, binding -1
+named.m22: offset 80, type 8b5a, size 7, index 1, binding -1
+dm22: offset -1, type 8b5a, size 4, index -1, binding -1
+m22: offset 208, type 8b5a, size 3, index 0, binding -1
+nested.foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1
+nested.foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1
+nested.foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1
+nested.foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1
+deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1
+deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1
+deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1
+deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1
+deepD[0].iv4: offset -1, type 8b52, size 1, index -1, binding -1
+deepD[0].d2.i: offset -1, type 1404, size 1, index -1, binding -1
+deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[0].v3: offset -1, type 8b54, size 1, index -1, binding -1
+deepD[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1
+deepD[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1
+deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1
+deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1
+deepD[1].v3: offset -1, type 8b54, size 1, index -1, binding -1
+abl.foo: offset 0, type 1406, size 1, index 7, binding -1
+abl2.foo: offset 0, type 1406, size 1, index 11, binding -1
+anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
+uf1: offset -1, type 1406, size 1, index -1, binding -1
+uf2: offset -1, type 1406, size 1, index -1, binding -1
+named.member3: offset 32, type 8b52, size 1, index 1, binding -1
 
 Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1
-named: offset -1, type ffffffff, size 304, index -1
-c_nameless: offset -1, type ffffffff, size 112, index -1
-nested: offset -1, type ffffffff, size 32, index -1
-abl[0]: offset -1, type ffffffff, size 4, index -1
-abl[1]: offset -1, type ffffffff, size 4, index -1
-abl[2]: offset -1, type ffffffff, size 4, index -1
-abl[3]: offset -1, type ffffffff, size 4, index -1
-abl2[0]: offset -1, type ffffffff, size 4, index -1
-abl2[1]: offset -1, type ffffffff, size 4, index -1
-abl2[2]: offset -1, type ffffffff, size 4, index -1
-abl2[3]: offset -1, type ffffffff, size 4, index -1
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1
+named: offset -1, type ffffffff, size 304, index -1, binding -1
+c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1
+nested: offset -1, type ffffffff, size 32, index -1, binding -1
+abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1
 
 Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0
+attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
+attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1
+attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1
+attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1
+attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1
 
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index 0f367c96787f673a96c17e7b910dc0521d9f4c14..c28d90a39578d34e4170acbb2c8e627b674486ff 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,40 +1,35 @@
 remap.basic.dcefunc.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 19
+// Id's are bound by 22
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 14 16
+                              EntryPoint Fragment 4  "main" 17 19
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
-                              Name 9  "dead_fn("
-                              Name 14  "outf4"
-                              Name 16  "inf"
+                              Name 17  "outf4"
+                              Name 19  "inf"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 3
                8:             TypeFunction 7(fvec3)
-              10:    6(float) Constant 0
-              11:    7(fvec3) ConstantComposite 10 10 10
-              12:             TypeVector 6(float) 4
-              13:             TypePointer Output 12(fvec4)
-       14(outf4):     13(ptr) Variable Output
-              15:             TypePointer Input 6(float)
-         16(inf):     15(ptr) Variable Input
+              11:    6(float) Constant 0
+              12:    7(fvec3) ConstantComposite 11 11 11
+              15:             TypeVector 6(float) 4
+              16:             TypePointer Output 15(fvec4)
+       17(outf4):     16(ptr) Variable Output
+              18:             TypePointer Input 6(float)
+         19(inf):     18(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-              17:    6(float) Load 16(inf)
-              18:   12(fvec4) CompositeConstruct 17 17 17 17
-                              Store 14(outf4) 18
+              20:    6(float) Load 19(inf)
+              21:   15(fvec4) CompositeConstruct 20 20 20 20
+                              Store 17(outf4) 21
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index f6d6ed448b457f8882657163fa21312a8b11852e..357a8d2be5a26b7e30f629324676fd96a8528617 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,10 +1,6 @@
 remap.basic.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24969
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 3632309a24f477ed734a87990e367ca69ca2a20d..44f5747bf1364330c52f7d86576820811f4507ce 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,24 +1,20 @@
 remap.basic.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 20
+// Id's are bound by 22
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 15 17
+                              EntryPoint Fragment 4  "main" 17 19
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
                               Name 9  "dead_fn("
-                              Name 15  "outf4"
-                              Name 17  "inf"
+                              Name 17  "outf4"
+                              Name 19  "inf"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -26,16 +22,16 @@ Linked fragment stage:
                8:             TypeFunction 7(fvec3)
               11:    6(float) Constant 0
               12:    7(fvec3) ConstantComposite 11 11 11
-              13:             TypeVector 6(float) 4
-              14:             TypePointer Output 13(fvec4)
-       15(outf4):     14(ptr) Variable Output
-              16:             TypePointer Input 6(float)
-         17(inf):     16(ptr) Variable Input
+              15:             TypeVector 6(float) 4
+              16:             TypePointer Output 15(fvec4)
+       17(outf4):     16(ptr) Variable Output
+              18:             TypePointer Input 6(float)
+         19(inf):     18(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-              18:    6(float) Load 17(inf)
-              19:   13(fvec4) CompositeConstruct 18 18 18 18
-                              Store 15(outf4) 19
+              20:    6(float) Load 19(inf)
+              21:   15(fvec4) CompositeConstruct 20 20 20 20
+                              Store 17(outf4) 21
                               Return
                               FunctionEnd
      9(dead_fn():    7(fvec3) Function None 8
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index d34ce8ff3a06df636be4753d347013269bc830be..ab1a003af32ff929fdbd44622fbfc7c68ade684e 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,18 +1,14 @@
 remap.basic.strip.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 20
+// Id's are bound by 22
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 15 17
+                              EntryPoint Fragment 4  "main" 17 19
                               ExecutionMode 4 OriginUpperLeft
                2:             TypeVoid
                3:             TypeFunction 2
@@ -21,16 +17,16 @@ Linked fragment stage:
                8:             TypeFunction 7(fvec3)
               11:    6(float) Constant 0
               12:    7(fvec3) ConstantComposite 11 11 11
-              13:             TypeVector 6(float) 4
-              14:             TypePointer Output 13(fvec4)
-              15:     14(ptr) Variable Output
-              16:             TypePointer Input 6(float)
-              17:     16(ptr) Variable Input
+              15:             TypeVector 6(float) 4
+              16:             TypePointer Output 15(fvec4)
+              17:     16(ptr) Variable Output
+              18:             TypePointer Input 6(float)
+              19:     18(ptr) Variable Input
                4:           2 Function None 3
                5:             Label
-              18:    6(float) Load 17
-              19:   13(fvec4) CompositeConstruct 18 18 18 18
-                              Store 15 19
+              20:    6(float) Load 19
+              21:   15(fvec4) CompositeConstruct 20 20 20 20
+                              Store 17 21
                               Return
                               FunctionEnd
                9:    7(fvec3) Function None 8
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index bd1fa7e4c0bce34c20d7895497c777660762a4f3..b49a10ba610baee82e240f49011b0c9e4634492e 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -1,10 +1,6 @@
 remap.hlsl.sample.basic.everything.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index b149718f42cf78157ddd4342fda54a7cf6e88203..51ad1a8bf964d5f9bcc98664558b46401fb6a091 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -1,13 +1,9 @@
 remap.hlsl.sample.basic.none.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 190
+// Id's are bound by 191
 
                               Capability Shader
                               Capability Sampled1D
@@ -61,9 +57,9 @@ Linked fragment stage:
                               Name 173  "psout"
                               Name 180  "Color"
                               Name 184  "Depth"
-                              Name 187  "g_sSamp2d"
-                              Name 188  "g_sSamp2D_b"
-                              Name 189  "g_tTex1df4a"
+                              Name 188  "g_sSamp2d"
+                              Name 189  "g_sSamp2D_b"
+                              Name 190  "g_tTex1df4a"
                               Decorate 41(g_tTex1df4) DescriptorSet 0
                               Decorate 41(g_tTex1df4) Binding 0
                               Decorate 45(g_sSamp) DescriptorSet 0
@@ -81,10 +77,10 @@ Linked fragment stage:
                               Decorate 165(g_tTexcdu4) DescriptorSet 0
                               Decorate 180(Color) Location 0
                               Decorate 184(Depth) BuiltIn FragDepth
-                              Decorate 187(g_sSamp2d) DescriptorSet 0
-                              Decorate 188(g_sSamp2D_b) DescriptorSet 0
-                              Decorate 189(g_tTex1df4a) DescriptorSet 0
-                              Decorate 189(g_tTex1df4a) Binding 1
+                              Decorate 188(g_sSamp2d) DescriptorSet 0
+                              Decorate 189(g_sSamp2D_b) DescriptorSet 0
+                              Decorate 190(g_tTex1df4a) DescriptorSet 0
+                              Decorate 190(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -188,9 +184,9 @@ Linked fragment stage:
       180(Color):    179(ptr) Variable Output
              183:             TypePointer Output 35(float)
       184(Depth):    183(ptr) Variable Output
-  187(g_sSamp2d):     44(ptr) Variable UniformConstant
-188(g_sSamp2D_b):     44(ptr) Variable UniformConstant
-189(g_tTex1df4a):     40(ptr) Variable UniformConstant
+  188(g_sSamp2d):     44(ptr) Variable UniformConstant
+189(g_sSamp2D_b):     44(ptr) Variable UniformConstant
+190(g_tTex1df4a):     40(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
         9(mtest):      8(ptr) Variable Function
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index 534076788b6492515e608155c4dec4ab0a342815..f95d7effbbc912e4ec26bb2c309216d2db7d685e 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -1,13 +1,9 @@
 remap.hlsl.sample.basic.strip.frag
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 190
+// Id's are bound by 191
 
                               Capability Shader
                               Capability Sampled1D
@@ -32,10 +28,10 @@ Linked fragment stage:
                               Decorate 165 DescriptorSet 0
                               Decorate 180 Location 0
                               Decorate 184 BuiltIn FragDepth
-                              Decorate 187 DescriptorSet 0
                               Decorate 188 DescriptorSet 0
                               Decorate 189 DescriptorSet 0
-                              Decorate 189 Binding 1
+                              Decorate 190 DescriptorSet 0
+                              Decorate 190 Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -139,9 +135,9 @@ Linked fragment stage:
              180:    179(ptr) Variable Output
              183:             TypePointer Output 35(float)
              184:    183(ptr) Variable Output
-             187:     44(ptr) Variable UniformConstant
              188:     44(ptr) Variable UniformConstant
-             189:     40(ptr) Variable UniformConstant
+             189:     44(ptr) Variable UniformConstant
+             190:     40(ptr) Variable UniformConstant
                4:           2 Function None 3
                5:             Label
                9:      8(ptr) Variable Function
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index 7a40f944bcffba81943e5077bcf7001193eea12b..c42a037bb3fab87f661339a619dae335c60204c4 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,11 +1,7 @@
 remap.hlsl.templatetypes.everything.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 16123
+// Id's are bound by 9012
 
                               Capability Shader
                               Capability Float64
@@ -20,11 +16,12 @@ Linked fragment stage:
               13:             TypeFloat 32
               29:             TypeVector 13(float) 4
             2572:   13(float) Constant 0
-             666:             TypePointer Output 29(fvec4)
-            4045:    666(ptr) Variable Output
-             667:             TypePointer Input 29(fvec4)
-            4872:    667(ptr) Variable Input
+             650:             TypePointer Output 13(float)
+            4045:    650(ptr) Variable Output
+             666:             TypePointer Input 29(fvec4)
+            4872:    666(ptr) Variable Input
             5663:           8 Function None 1282
-           16122:             Label
-                              ReturnValue 2572
+            9011:             Label
+                              Store 4045 2572
+                              Return
                               FunctionEnd
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index 340198b3aae035fa204b8f8036c00221d8ed923c..027f020776560e8b78ae35c33d2f5304b0a7c467 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,17 +1,13 @@
 remap.hlsl.templatetypes.none.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 149
+// Id's are bound by 150
 
                               Capability Shader
                               Capability Float64
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 146 148
+                              EntryPoint Fragment 4  "main" 146 149
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 9  "r00"
@@ -43,9 +39,9 @@ Linked fragment stage:
                               Name 136  "r65"
                               Name 141  "r66"
                               Name 146  "@entryPointOutput"
-                              Name 148  "input"
+                              Name 149  "input"
                               Decorate 146(@entryPointOutput) Location 0
-                              Decorate 148(input) Location 0
+                              Decorate 149(input) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -159,10 +155,10 @@ Linked fragment stage:
              142:   69(fvec3) ConstantComposite 109 111 112
              143:   69(fvec3) ConstantComposite 113 114 116
              144:         139 ConstantComposite 72 126 142 143
-             145:             TypePointer Output 7(fvec4)
+             145:             TypePointer Output 6(float)
 146(@entryPointOutput):    145(ptr) Variable Output
-             147:             TypePointer Input 7(fvec4)
-      148(input):    147(ptr) Variable Input
+             148:             TypePointer Input 7(fvec4)
+      149(input):    148(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
           9(r00):      8(ptr) Variable Function
@@ -221,5 +217,6 @@ Linked fragment stage:
                               Store 130(r62) 133
                               Store 136(r65) 138
                               Store 141(r66) 144
-                              ReturnValue 106
+                              Store 146(@entryPointOutput) 106
+                              Return
                               FunctionEnd
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index 9f98c1843818cdb199544fd9a5bb6bbff51a60c6..d20564c5dd53d43186a36f27f4522f1d7dd86f75 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,10 +1,6 @@
 remap.if.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22855
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index f3113a36a7d39f4cbe48577a16a921f2822af086..081d5cdd699dc9e5d4ad5e1ff4de953de8c9b457 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,10 +1,6 @@
 remap.if.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 09589f57f305cd2dd63a440e97991bb2636262e5..384b8e8619bb2ac93bfb977c9d7c9886c47381cd 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1a.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index 17484512270b3e02edf801fd536955164e23112e..910ef424a44513f89ebd28ada6db10d471b8cb28 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,18 +1,14 @@
 remap.similar_1a.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 82
+// Id's are bound by 86
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 50 69 71
+                              EntryPoint Fragment 4  "main" 53 73 75
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -22,13 +18,13 @@ Linked fragment stage:
                               Name 13  "bound"
                               Name 17  "r"
                               Name 19  "x"
-                              Name 42  "param"
-                              Name 50  "ini4"
-                              Name 69  "outf4"
-                              Name 71  "inf"
-                              Name 74  "param"
+                              Name 44  "param"
+                              Name 53  "ini4"
+                              Name 73  "outf4"
+                              Name 75  "inf"
                               Name 78  "param"
-                              Decorate 50(ini4) Flat
+                              Name 82  "param"
+                              Decorate 53(ini4) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -41,35 +37,35 @@ Linked fragment stage:
               28:             TypeBool
               30:    8(float) Constant 1056964608
               34:      6(int) Constant 1
-              38:      6(int) Constant 2
-              48:             TypeVector 6(int) 4
-              49:             TypePointer Input 48(ivec4)
-        50(ini4):     49(ptr) Variable Input
-              51:             TypeInt 32 0
-              52:     51(int) Constant 1
-              53:             TypePointer Input 6(int)
-              56:     51(int) Constant 2
-              61:     51(int) Constant 0
-              67:             TypeVector 8(float) 4
-              68:             TypePointer Output 67(fvec4)
-       69(outf4):     68(ptr) Variable Output
-              70:             TypePointer Input 8(float)
-         71(inf):     70(ptr) Variable Input
+              40:      6(int) Constant 2
+              51:             TypeVector 6(int) 4
+              52:             TypePointer Input 51(ivec4)
+        53(ini4):     52(ptr) Variable Input
+              54:             TypeInt 32 0
+              55:     54(int) Constant 1
+              56:             TypePointer Input 6(int)
+              59:     54(int) Constant 2
+              64:     54(int) Constant 0
+              71:             TypeVector 8(float) 4
+              72:             TypePointer Output 71(fvec4)
+       73(outf4):     72(ptr) Variable Output
+              74:             TypePointer Input 8(float)
+         75(inf):     74(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-       74(param):      7(ptr) Variable Function
        78(param):      7(ptr) Variable Function
-              72:    8(float) Load 71(inf)
-              73:      6(int) ConvertFToS 72
-                              Store 74(param) 73
-              75:    8(float) FunctionCall 11(Test1(i1;) 74(param)
-              76:    8(float) Load 71(inf)
+       82(param):      7(ptr) Variable Function
+              76:    8(float) Load 75(inf)
               77:      6(int) ConvertFToS 76
                               Store 78(param) 77
-              79:    8(float) FunctionCall 14(Test2(i1;) 78(param)
-              80:    8(float) FAdd 75 79
-              81:   67(fvec4) CompositeConstruct 80 80 80 80
-                              Store 69(outf4) 81
+              79:    8(float) FunctionCall 11(Test1(i1;) 78(param)
+              80:    8(float) Load 75(inf)
+              81:      6(int) ConvertFToS 80
+                              Store 82(param) 81
+              83:    8(float) FunctionCall 14(Test2(i1;) 82(param)
+              84:    8(float) FAdd 79 83
+              85:   71(fvec4) CompositeConstruct 84 84 84 84
+                              Store 73(outf4) 85
                               Return
                               FunctionEnd
    11(Test1(i1;):    8(float) Function None 9
@@ -105,31 +101,31 @@ Linked fragment stage:
    14(Test2(i1;):    8(float) Function None 9
        13(bound):      7(ptr) FunctionParameter
               15:             Label
-       42(param):      7(ptr) Variable Function
-              37:      6(int) Load 13(bound)
-              39:    28(bool) SGreaterThan 37 38
-                              SelectionMerge 41 None
-                              BranchConditional 39 40 45
-              40:               Label
-              43:      6(int)   Load 13(bound)
-                                Store 42(param) 43
-              44:    8(float)   FunctionCall 11(Test1(i1;) 42(param)
-                                ReturnValue 44
-              45:               Label
-              46:      6(int)   Load 13(bound)
-              47:      6(int)   IMul 46 38
-              54:     53(ptr)   AccessChain 50(ini4) 52
-              55:      6(int)   Load 54
-              57:     53(ptr)   AccessChain 50(ini4) 56
+       44(param):      7(ptr) Variable Function
+              39:      6(int) Load 13(bound)
+              41:    28(bool) SGreaterThan 39 40
+                              SelectionMerge 43 None
+                              BranchConditional 41 42 48
+              42:               Label
+              45:      6(int)   Load 13(bound)
+                                Store 44(param) 45
+              46:    8(float)   FunctionCall 11(Test1(i1;) 44(param)
+                                ReturnValue 46
+              48:               Label
+              49:      6(int)   Load 13(bound)
+              50:      6(int)   IMul 49 40
+              57:     56(ptr)   AccessChain 53(ini4) 55
               58:      6(int)   Load 57
-              59:      6(int)   IMul 55 58
-              60:      6(int)   IAdd 47 59
-              62:     53(ptr)   AccessChain 50(ini4) 61
-              63:      6(int)   Load 62
-              64:      6(int)   IAdd 60 63
-              65:    8(float)   ConvertSToF 64
-                                ReturnValue 65
-              41:             Label
-              66:    8(float) Undef
-                              ReturnValue 66
+              60:     56(ptr)   AccessChain 53(ini4) 59
+              61:      6(int)   Load 60
+              62:      6(int)   IMul 58 61
+              63:      6(int)   IAdd 50 62
+              65:     56(ptr)   AccessChain 53(ini4) 64
+              66:      6(int)   Load 65
+              67:      6(int)   IAdd 63 66
+              68:    8(float)   ConvertSToF 67
+                                ReturnValue 68
+              43:             Label
+              70:    8(float) Undef
+                              ReturnValue 70
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index d05be1172909ac3bb97722f1d93e222271f668db..0ce4544c9633961933556bb02f1812a44b64df05 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,10 +1,6 @@
 remap.similar_1b.everything.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24916
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index f9bf0847b03a75b59b676da73c4e2b32a6b57a10..ce79e00beffe95435a49265324aadb0e159795aa 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,18 +1,14 @@
 remap.similar_1b.none.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 87
+// Id's are bound by 91
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 55 74 76
+                              EntryPoint Fragment 4  "main" 58 78 80
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -22,13 +18,13 @@ Linked fragment stage:
                               Name 13  "bound"
                               Name 17  "r"
                               Name 19  "x"
-                              Name 47  "param"
-                              Name 55  "ini4"
-                              Name 74  "outf4"
-                              Name 76  "inf"
-                              Name 79  "param"
+                              Name 49  "param"
+                              Name 58  "ini4"
+                              Name 78  "outf4"
+                              Name 80  "inf"
                               Name 83  "param"
-                              Decorate 55(ini4) Flat
+                              Name 87  "param"
+                              Decorate 58(ini4) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -42,36 +38,36 @@ Linked fragment stage:
               30:    8(float) Constant 1056964608
               34:      6(int) Constant 1
               36:    8(float) Constant 1045220557
-              41:      6(int) Constant 2
-              51:      6(int) Constant 4
-              53:             TypeVector 6(int) 4
-              54:             TypePointer Input 53(ivec4)
-        55(ini4):     54(ptr) Variable Input
-              56:             TypeInt 32 0
-              57:     56(int) Constant 1
-              58:             TypePointer Input 6(int)
-              61:     56(int) Constant 2
-              66:     56(int) Constant 0
-              72:             TypeVector 8(float) 4
-              73:             TypePointer Output 72(fvec4)
-       74(outf4):     73(ptr) Variable Output
-              75:             TypePointer Input 8(float)
-         76(inf):     75(ptr) Variable Input
+              43:      6(int) Constant 2
+              54:      6(int) Constant 4
+              56:             TypeVector 6(int) 4
+              57:             TypePointer Input 56(ivec4)
+        58(ini4):     57(ptr) Variable Input
+              59:             TypeInt 32 0
+              60:     59(int) Constant 1
+              61:             TypePointer Input 6(int)
+              64:     59(int) Constant 2
+              69:     59(int) Constant 0
+              76:             TypeVector 8(float) 4
+              77:             TypePointer Output 76(fvec4)
+       78(outf4):     77(ptr) Variable Output
+              79:             TypePointer Input 8(float)
+         80(inf):     79(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-       79(param):      7(ptr) Variable Function
        83(param):      7(ptr) Variable Function
-              77:    8(float) Load 76(inf)
-              78:      6(int) ConvertFToS 77
-                              Store 79(param) 78
-              80:    8(float) FunctionCall 11(Test1(i1;) 79(param)
-              81:    8(float) Load 76(inf)
+       87(param):      7(ptr) Variable Function
+              81:    8(float) Load 80(inf)
               82:      6(int) ConvertFToS 81
                               Store 83(param) 82
-              84:    8(float) FunctionCall 14(Test2(i1;) 83(param)
-              85:    8(float) FAdd 80 84
-              86:   72(fvec4) CompositeConstruct 85 85 85 85
-                              Store 74(outf4) 86
+              84:    8(float) FunctionCall 11(Test1(i1;) 83(param)
+              85:    8(float) Load 80(inf)
+              86:      6(int) ConvertFToS 85
+                              Store 87(param) 86
+              88:    8(float) FunctionCall 14(Test2(i1;) 87(param)
+              89:    8(float) FAdd 84 88
+              90:   76(fvec4) CompositeConstruct 89 89 89 89
+                              Store 78(outf4) 90
                               Return
                               FunctionEnd
    11(Test1(i1;):    8(float) Function None 9
@@ -110,32 +106,32 @@ Linked fragment stage:
    14(Test2(i1;):    8(float) Function None 9
        13(bound):      7(ptr) FunctionParameter
               15:             Label
-       47(param):      7(ptr) Variable Function
-              40:      6(int) Load 13(bound)
-              42:    28(bool) SGreaterThan 40 41
-                              SelectionMerge 44 None
-                              BranchConditional 42 43 49
-              43:               Label
-              45:      6(int)   Load 13(bound)
-              46:      6(int)   IMul 45 41
-                                Store 47(param) 46
-              48:    8(float)   FunctionCall 11(Test1(i1;) 47(param)
-                                ReturnValue 48
-              49:               Label
-              50:      6(int)   Load 13(bound)
-              52:      6(int)   IMul 50 51
-              59:     58(ptr)   AccessChain 55(ini4) 57
-              60:      6(int)   Load 59
-              62:     58(ptr)   AccessChain 55(ini4) 61
+       49(param):      7(ptr) Variable Function
+              42:      6(int) Load 13(bound)
+              44:    28(bool) SGreaterThan 42 43
+                              SelectionMerge 46 None
+                              BranchConditional 44 45 52
+              45:               Label
+              47:      6(int)   Load 13(bound)
+              48:      6(int)   IMul 47 43
+                                Store 49(param) 48
+              50:    8(float)   FunctionCall 11(Test1(i1;) 49(param)
+                                ReturnValue 50
+              52:               Label
+              53:      6(int)   Load 13(bound)
+              55:      6(int)   IMul 53 54
+              62:     61(ptr)   AccessChain 58(ini4) 60
               63:      6(int)   Load 62
-              64:      6(int)   IMul 60 63
-              65:      6(int)   IAdd 52 64
-              67:     58(ptr)   AccessChain 55(ini4) 66
-              68:      6(int)   Load 67
-              69:      6(int)   IAdd 65 68
-              70:    8(float)   ConvertSToF 69
-                                ReturnValue 70
-              44:             Label
-              71:    8(float) Undef
-                              ReturnValue 71
+              65:     61(ptr)   AccessChain 58(ini4) 64
+              66:      6(int)   Load 65
+              67:      6(int)   IMul 63 66
+              68:      6(int)   IAdd 55 67
+              70:     61(ptr)   AccessChain 58(ini4) 69
+              71:      6(int)   Load 70
+              72:      6(int)   IAdd 68 71
+              73:    8(float)   ConvertSToF 72
+                                ReturnValue 73
+              46:             Label
+              75:    8(float) Undef
+                              ReturnValue 75
                               FunctionEnd
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index a1d9b0d921311e83b6f18b084d1e9e0ae6e72413..e5a7ef75977994ca4ae424ea9dc1d97e1e334a09 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,10 +3,6 @@ Warning, version 450 is not yet complete; most version-specific features are pre
 WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 23990
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 7fc8f04b1e6dc7d057646589bacc9e37aee8d21a..68d075b2579b52f1488c6bae0b8c849845cfd6cf 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,13 +3,9 @@ Warning, version 450 is not yet complete; most version-specific features are pre
 WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 44
+// Id's are bound by 48
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -24,8 +20,8 @@ Linked fragment stage:
                               Decorate 23(FragColor) RelaxedPrecision
                               Decorate 23(FragColor) Location 0
                               Decorate 29 RelaxedPrecision
-                              Decorate 35 RelaxedPrecision
-                              Decorate 41 RelaxedPrecision
+                              Decorate 36 RelaxedPrecision
+                              Decorate 43 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -40,12 +36,12 @@ Linked fragment stage:
    23(FragColor):     22(ptr) Variable Output
               24:     10(int) Constant 0
               27:    6(float) Constant 0
-              30:     10(int) Constant 1
-              33:    6(float) Constant 1065353216
-              36:     10(int) Constant 2
-              39:    6(float) Constant 1073741824
-              42:    6(float) Constant 3212836864
-              43:    7(fvec4) ConstantComposite 42 42 42 42
+              31:     10(int) Constant 1
+              34:    6(float) Constant 1065353216
+              38:     10(int) Constant 2
+              41:    6(float) Constant 1073741824
+              45:    6(float) Constant 3212836864
+              46:    7(fvec4) ConstantComposite 45 45 45 45
          4(main):           2 Function None 3
                5:             Label
               13:     12(ptr) AccessChain 9(in0) 11
@@ -57,7 +53,7 @@ Linked fragment stage:
                                      case 1: 18
                                      case 2: 19
               20:               Label
-                                Store 23(FragColor) 43
+                                Store 23(FragColor) 46
                                 Branch 21
               17:               Label
               25:     12(ptr)   AccessChain 9(in0) 24
@@ -67,18 +63,18 @@ Linked fragment stage:
                                 Store 23(FragColor) 29
                                 Branch 21
               18:               Label
-              31:     12(ptr)   AccessChain 9(in0) 30
-              32:    6(float)   Load 31
-              34:    6(float)   FAdd 32 33
-              35:    7(fvec4)   CompositeConstruct 34 34 34 34
-                                Store 23(FragColor) 35
+              32:     12(ptr)   AccessChain 9(in0) 31
+              33:    6(float)   Load 32
+              35:    6(float)   FAdd 33 34
+              36:    7(fvec4)   CompositeConstruct 35 35 35 35
+                                Store 23(FragColor) 36
                                 Branch 21
               19:               Label
-              37:     12(ptr)   AccessChain 9(in0) 36
-              38:    6(float)   Load 37
-              40:    6(float)   FAdd 38 39
-              41:    7(fvec4)   CompositeConstruct 40 40 40 40
-                                Store 23(FragColor) 41
+              39:     12(ptr)   AccessChain 9(in0) 38
+              40:    6(float)   Load 39
+              42:    6(float)   FAdd 40 41
+              43:    7(fvec4)   CompositeConstruct 42 42 42 42
+                                Store 23(FragColor) 43
                                 Branch 21
               21:             Label
                               Return
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index 18defecbc408d991081fbb9614d5b67ab1029e35..ed906d535a03f7f2ac0b68dd3062e7e79bd0cc8f 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,8 +1,4 @@
 remap.uniformarray.everything.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25030
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index ff2489e36694c13c84a20edddfdb51a4a76a8087..526b9e4969850a5071bca543b9fa2dde9f54354f 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,8 +1,4 @@
 remap.uniformarray.none.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 53
diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out
index 848839c65d52429dfc5dc3f0014e378321b3bad3..a66144a7c556d7e60c23edc2cdde1b0c6ba82055 100644
--- a/Test/baseResults/specExamples.frag.out
+++ b/Test/baseResults/specExamples.frag.out
@@ -318,12 +318,9 @@ ERROR: node is still EOpNull!
 0:?     'anon@1' (in block{in 4-component vector of float LightPos, in 3-component vector of float LightColor})
 0:?     'Materiala' (in block{in 4-component vector of float Color, in 2-component vector of float TexCoord})
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'factor' (layout(location=3 index=1 ) out 4-component vector of float)
 0:?     'colors' (layout(location=2 ) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
 
@@ -402,17 +399,6 @@ ERROR: node is still EOpNull!
 0:26      'fd' (global double)
 0:26      Constant:
 0:26        2.000000
-0:127  Function Definition: foo(f1[5]; (global 5-element array of float)
-0:127    Function Parameters: 
-0:127      '' (in 5-element array of float)
-0:129    Sequence
-0:129      Branch: Return with expression
-0:129        Constant:
-0:129          3.400000
-0:129          4.200000
-0:129          5.000000
-0:129          5.200000
-0:129          1.100000
 0:137  Function Definition: main( (global void)
 0:137    Function Parameters: 
 0:140    Sequence
@@ -607,11 +593,8 @@ ERROR: node is still EOpNull!
 0:?     'anon@1' (in block{in 4-component vector of float LightPos, in 3-component vector of float LightColor})
 0:?     'Materiala' (in block{in 4-component vector of float Color, in 2-component vector of float TexCoord})
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'factor' (layout(location=3 index=1 ) out 4-component vector of float)
 0:?     'colors' (layout(location=2 ) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out
index ef9a122512f823a5b0b8ec455b29981fa7f8c963..d7de758c18fa47895b5c1ac7351a8b46326de78e 100644
--- a/Test/baseResults/specExamples.vert.out
+++ b/Test/baseResults/specExamples.vert.out
@@ -298,11 +298,10 @@ ERROR: node is still EOpNull!
 0:?     'c2' (layout(binding=3 ) uniform atomic_uint)
 0:?     'd2' (layout(binding=2 ) uniform atomic_uint)
 0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
 0:?     'ColorInv' (smooth out 3-component vector of float)
 0:?     'Color4' (invariant centroid smooth out 3-component vector of float)
 0:?     'position' (noContraction smooth out 4-component vector of float)
-0:?     'Color5' (smooth out 3-component vector of float)
+0:?     'Color5' (noContraction smooth out 3-component vector of float)
 0:?     'a' (in 4-component vector of float)
 0:?     'b' (in 4-component vector of float)
 0:?     'c' (in 4-component vector of float)
@@ -582,11 +581,10 @@ ERROR: node is still EOpNull!
 0:?     'c2' (layout(binding=3 ) uniform atomic_uint)
 0:?     'd2' (layout(binding=2 ) uniform atomic_uint)
 0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
 0:?     'ColorInv' (smooth out 3-component vector of float)
 0:?     'Color4' (invariant centroid smooth out 3-component vector of float)
 0:?     'position' (noContraction smooth out 4-component vector of float)
-0:?     'Color5' (smooth out 3-component vector of float)
+0:?     'Color5' (noContraction smooth out 3-component vector of float)
 0:?     'a' (in 4-component vector of float)
 0:?     'b' (in 4-component vector of float)
 0:?     'c' (in 4-component vector of float)
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 9b40c920eb25c3b9c0454d0f5547223315159ed9..efd82012b023c919c7d5c8f0b4db83abb085a320 100755
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,10 +1,6 @@
 spv.100ops.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 49
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 8d881f505020b7d205d63fb176426244377582d2..19c6db0df2e4096d286239a861397d8bf4807701 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -1,10 +1,6 @@
 spv.130.frag
 WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 205
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index f302478c532d6210bd525f68b2cbb3f8864ddf17..f8e75ebdacfbb3689f3be762763cca6b90eba503 100755
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,8 +1,4 @@
 spv.140.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 101
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 8b021ff91d6a83aff76bdf0d6af2a994d376f805..1c98c70e72ac885a8e2b0ad9f8c5ff1f9807ed15 100755
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,8 +1,4 @@
 spv.150.geom
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 71
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 5ccf1a812b658359fd3113f814763627ce21fd26..28431397210b27e81a73b3eb10cb4c747e8a6849 100755
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,8 +1,4 @@
 spv.150.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 63
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index ab07f4a86adeb76e5dcc758ca99db8e24a97b695..7dc949dcaf91d622641856c8a9eda17accf2b12a 100755
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,10 +1,6 @@
 spv.300BuiltIns.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 42
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index e340c1b22ae4b35999f8826962dffcb1ccf916d3..7ce08d86891463d7bd5fc1e7f5b2b8facdf87346 100755
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,10 +1,6 @@
 spv.300layout.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 859794a32877cfbcce4ad81cc56bf1d12b01b3f9..20eb8e7d5714f278b554953cf1fa090a3e03c085 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,10 +1,6 @@
 spv.300layout.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 163
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index ebad96358f65d9fcb651a0ad9072e8aa5a217381..5924137cdca8c2bed4cc5416a00c84a9c13ac5e2 100755
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,10 +1,6 @@
 spv.300layoutp.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 115
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index 80df3b1a7ace79f5b65d835de7a57729bee342ea..14e184a47dcb368dc336ff85033eb4727cf308f2 100755
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,10 +1,6 @@
 spv.310.bitcast.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 153
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
old mode 100755
new mode 100644
index 3eafc2b58e8143a4cb3d8f33069515de71902ba3..095bf39fc97e5bea1efe9352de64129d050e976f
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,127 +1,124 @@
 spv.310.comp
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 66
+// Id's are bound by 67
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 52
+                              EntryPoint GLCompute 4  "main" 53
                               ExecutionMode 4 LocalSize 16 32 4
                               Source ESSL 310
                               Name 4  "main"
-                              Name 12  "outb"
-                              MemberName 12(outb) 0  "f"
-                              MemberName 12(outb) 1  "g"
-                              MemberName 12(outb) 2  "h"
-                              MemberName 12(outb) 3  "uns"
-                              Name 14  "outbname"
-                              Name 18  "s"
-                              Name 23  "outbna"
-                              MemberName 23(outbna) 0  "k"
-                              MemberName 23(outbna) 1  "na"
-                              Name 25  "outbnamena"
-                              Name 41  "i"
-                              Name 47  "outs"
-                              MemberName 47(outs) 0  "s"
-                              MemberName 47(outs) 1  "va"
-                              Name 49  "outnames"
-                              Name 52  "gl_LocalInvocationID"
-                              Decorate 11 ArrayStride 16
-                              MemberDecorate 12(outb) 0 Offset 0
-                              MemberDecorate 12(outb) 1 Offset 4
-                              MemberDecorate 12(outb) 2 Offset 8
-                              MemberDecorate 12(outb) 3 Offset 16
-                              Decorate 12(outb) BufferBlock
-                              Decorate 14(outbname) DescriptorSet 0
-                              MemberDecorate 23(outbna) 0 Offset 0
-                              MemberDecorate 23(outbna) 1 Offset 16
-                              Decorate 23(outbna) BufferBlock
-                              Decorate 25(outbnamena) DescriptorSet 0
-                              Decorate 46 ArrayStride 16
-                              MemberDecorate 47(outs) 0 Offset 0
-                              MemberDecorate 47(outs) 1 Offset 16
-                              Decorate 47(outs) BufferBlock
-                              Decorate 49(outnames) DescriptorSet 0
-                              Decorate 52(gl_LocalInvocationID) BuiltIn LocalInvocationId
-                              Decorate 65 BuiltIn WorkgroupSize
+                              Name 13  "outb"
+                              MemberName 13(outb) 0  "f"
+                              MemberName 13(outb) 1  "g"
+                              MemberName 13(outb) 2  "h"
+                              MemberName 13(outb) 3  "uns"
+                              Name 15  "outbname"
+                              Name 19  "s"
+                              Name 24  "outbna"
+                              MemberName 24(outbna) 0  "k"
+                              MemberName 24(outbna) 1  "na"
+                              Name 26  "outbnamena"
+                              Name 42  "i"
+                              Name 48  "outs"
+                              MemberName 48(outs) 0  "s"
+                              MemberName 48(outs) 1  "va"
+                              Name 50  "outnames"
+                              Name 53  "gl_LocalInvocationID"
+                              Decorate 12 ArrayStride 16
+                              MemberDecorate 13(outb) 0 Offset 0
+                              MemberDecorate 13(outb) 1 Offset 4
+                              MemberDecorate 13(outb) 2 Offset 8
+                              MemberDecorate 13(outb) 3 Offset 16
+                              Decorate 13(outb) BufferBlock
+                              Decorate 15(outbname) DescriptorSet 0
+                              MemberDecorate 24(outbna) 0 Offset 0
+                              MemberDecorate 24(outbna) 1 Offset 16
+                              Decorate 24(outbna) BufferBlock
+                              Decorate 26(outbnamena) DescriptorSet 0
+                              Decorate 47 ArrayStride 16
+                              MemberDecorate 48(outs) 0 Offset 0
+                              MemberDecorate 48(outs) 1 Offset 16
+                              Decorate 48(outs) BufferBlock
+                              Decorate 50(outnames) DescriptorSet 0
+                              Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 66 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeFloat 32
-              10:             TypeVector 9(float) 3
-              11:             TypeRuntimeArray 10(fvec3)
-        12(outb):             TypeStruct 9(float) 9(float) 9(float) 11
-              13:             TypePointer Uniform 12(outb)
-    14(outbname):     13(ptr) Variable Uniform
-              15:             TypeInt 32 1
-              16:     15(int) Constant 0
-              17:             TypePointer Workgroup 9(float)
-           18(s):     17(ptr) Variable Workgroup
-              20:             TypePointer Uniform 9(float)
-              22:             TypeVector 9(float) 4
-      23(outbna):             TypeStruct 15(int) 22(fvec4)
-              24:             TypePointer Uniform 23(outbna)
-  25(outbnamena):     24(ptr) Variable Uniform
-              26:     15(int) Constant 1
-              29:             TypePointer Uniform 22(fvec4)
-              31:     15(int) Constant 3
-              32:     15(int) Constant 18
-              35:     15(int) Constant 17
-              36:    9(float) Constant 1077936128
-              37:   10(fvec3) ConstantComposite 36 36 36
-              38:             TypePointer Uniform 10(fvec3)
-              40:             TypePointer Workgroup 15(int)
-           41(i):     40(ptr) Variable Workgroup
-              46:             TypeRuntimeArray 22(fvec4)
-        47(outs):             TypeStruct 15(int) 46
-              48:             TypePointer Uniform 47(outs)
-    49(outnames):     48(ptr) Variable Uniform
-              50:             TypeVector 6(int) 3
-              51:             TypePointer Input 50(ivec3)
-52(gl_LocalInvocationID):     51(ptr) Variable Input
-              53:             TypePointer Input 6(int)
-              60:             TypePointer Uniform 15(int)
-              62:      6(int) Constant 16
-              63:      6(int) Constant 32
-              64:      6(int) Constant 4
-              65:   50(ivec3) ConstantComposite 62 63 64
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 3
+              12:             TypeRuntimeArray 11(fvec3)
+        13(outb):             TypeStruct 10(float) 10(float) 10(float) 12
+              14:             TypePointer Uniform 13(outb)
+    15(outbname):     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Workgroup 10(float)
+           19(s):     18(ptr) Variable Workgroup
+              21:             TypePointer Uniform 10(float)
+              23:             TypeVector 10(float) 4
+      24(outbna):             TypeStruct 16(int) 23(fvec4)
+              25:             TypePointer Uniform 24(outbna)
+  26(outbnamena):     25(ptr) Variable Uniform
+              27:     16(int) Constant 1
+              30:             TypePointer Uniform 23(fvec4)
+              32:     16(int) Constant 3
+              33:     16(int) Constant 18
+              36:     16(int) Constant 17
+              37:   10(float) Constant 1077936128
+              38:   11(fvec3) ConstantComposite 37 37 37
+              39:             TypePointer Uniform 11(fvec3)
+              41:             TypePointer Workgroup 16(int)
+           42(i):     41(ptr) Variable Workgroup
+              47:             TypeRuntimeArray 23(fvec4)
+        48(outs):             TypeStruct 16(int) 47
+              49:             TypePointer Uniform 48(outs)
+    50(outnames):     49(ptr) Variable Uniform
+              51:             TypeVector 6(int) 3
+              52:             TypePointer Input 51(ivec3)
+53(gl_LocalInvocationID):     52(ptr) Variable Input
+              54:             TypePointer Input 6(int)
+              61:             TypePointer Uniform 16(int)
+              63:      6(int) Constant 16
+              64:      6(int) Constant 32
+              65:      6(int) Constant 4
+              66:   51(ivec3) ConstantComposite 63 64 65
          4(main):           2 Function None 3
                5:             Label
-                              ControlBarrier 7 7 8
-              19:    9(float) Load 18(s)
-              21:     20(ptr) AccessChain 14(outbname) 16
-                              Store 21 19
-              27:    9(float) Load 18(s)
-              28:   22(fvec4) CompositeConstruct 27 27 27 27
-              30:     29(ptr) AccessChain 25(outbnamena) 26
-                              Store 30 28
-              33:     20(ptr) AccessChain 14(outbname) 31 32 8
-              34:    9(float) Load 33
-                              Store 18(s) 34
-              39:     38(ptr) AccessChain 14(outbname) 31 35
-                              Store 39 37
-              42:     15(int) Load 41(i)
-              43:    9(float) Load 18(s)
-              44:   10(fvec3) CompositeConstruct 43 43 43
-              45:     38(ptr) AccessChain 14(outbname) 31 42
-                              Store 45 44
-              54:     53(ptr) AccessChain 52(gl_LocalInvocationID) 8
-              55:      6(int) Load 54
-              56:    9(float) Load 18(s)
-              57:   22(fvec4) CompositeConstruct 56 56 56 56
-              58:     29(ptr) AccessChain 49(outnames) 26 55
-                              Store 58 57
-              59:     15(int) ArrayLength 14(outbname) 3
-              61:     60(ptr) AccessChain 49(outnames) 16
-                              Store 61 59
+                              ControlBarrier 7 8 9
+              20:   10(float) Load 19(s)
+              22:     21(ptr) AccessChain 15(outbname) 17
+                              Store 22 20
+              28:   10(float) Load 19(s)
+              29:   23(fvec4) CompositeConstruct 28 28 28 28
+              31:     30(ptr) AccessChain 26(outbnamena) 27
+                              Store 31 29
+              34:     21(ptr) AccessChain 15(outbname) 32 33 9
+              35:   10(float) Load 34
+                              Store 19(s) 35
+              40:     39(ptr) AccessChain 15(outbname) 32 36
+                              Store 40 38
+              43:     16(int) Load 42(i)
+              44:   10(float) Load 19(s)
+              45:   11(fvec3) CompositeConstruct 44 44 44
+              46:     39(ptr) AccessChain 15(outbname) 32 43
+                              Store 46 45
+              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 9
+              56:      6(int) Load 55
+              57:   10(float) Load 19(s)
+              58:   23(fvec4) CompositeConstruct 57 57 57 57
+              59:     30(ptr) AccessChain 50(outnames) 27 56
+                              Store 59 58
+              60:     16(int) ArrayLength 15(outbname) 3
+              62:     61(ptr) AccessChain 50(outnames) 17
+                              Store 62 60
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 3077769a5087275e4e76e8e4cf39ffc431507b0d..3e81dcbc79bb73972a4e3f6e76c50ab533c1aeda 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,8 +1,4 @@
 spv.330.geom
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 32
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index f06b0fcdc3bee7cd96794dfe48223fc232042a47..cb2de968711c692cd31058efdd7a19d86204c2d1 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,22 +1,19 @@
 spv.400.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1114
+// Id's are bound by 1118
 
                               Capability Shader
+                              Capability Geometry
                               Capability Float64
                               Capability ImageGatherExtended
                               Capability ClipDistance
                               Capability SampledRect
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107
+                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -55,6 +52,8 @@ Linked fragment stage:
                               Name 1099  "vl2"
                               Name 1105  "uo"
                               Name 1107  "u"
+                              Name 1115  "id"
+                              Name 1116  "gl_PrimitiveID"
                               Decorate 17(u2drs) DescriptorSet 0
                               Decorate 1025(arrayedSampler) DescriptorSet 0
                               Decorate 1027(i) Flat
@@ -64,6 +63,8 @@ Linked fragment stage:
                               Decorate 1097(gl_FragCoord) BuiltIn FragCoord
                               Decorate 1099(vl2) Location 6
                               Decorate 1107(u) Flat
+                              Decorate 1116(gl_PrimitiveID) Flat
+                              Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
@@ -185,9 +186,12 @@ Linked fragment stage:
         1105(uo):   1104(ptr) Variable Output
             1106:             TypePointer Input 32(int)
          1107(u):   1106(ptr) Variable Input
+            1114:             TypePointer Function 23(int)
+1116(gl_PrimitiveID):   1026(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
          1019(v):   1018(ptr) Variable Function
+        1115(id):   1114(ptr) Variable Function
             1028:     23(int) Load 1027(i)
             1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
             1031:        1021 Load 1030
@@ -242,6 +246,8 @@ Linked fragment stage:
                               Store 1105(uo) 1111
             1112:           2 FunctionCall 6(foo23()
             1113:           2 FunctionCall 8(doubles()
+            1117:     23(int) Load 1116(gl_PrimitiveID)
+                              Store 1115(id) 1117
                               Return
                               FunctionEnd
        6(foo23():           2 Function None 3
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
old mode 100755
new mode 100644
index bcfd963e753ab9c1862e1cb4563a5e7eca858bd4..68b142e5af05d4d9d0859fd66ed1a4da72eb3d72
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,10 +1,6 @@
 spv.400.tesc
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 93
@@ -14,26 +10,26 @@ Linked tessellation control stage:
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 23 40 43 46 54 68 73 79 83 84 87 88 91 92
+                              EntryPoint TessellationControl 4  "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
                               Name 4  "main"
-                              Name 11  "a"
-                              Name 16  "p"
-                              Name 19  "gl_PerVertex"
-                              MemberName 19(gl_PerVertex) 0  "gl_Position"
-                              MemberName 19(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 19(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 23  "gl_in"
-                              Name 30  "ps"
-                              Name 34  "cd"
-                              Name 38  "pvi"
-                              Name 40  "gl_PatchVerticesIn"
-                              Name 42  "pid"
-                              Name 43  "gl_PrimitiveID"
-                              Name 45  "iid"
-                              Name 46  "gl_InvocationID"
+                              Name 12  "a"
+                              Name 17  "p"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 24  "gl_in"
+                              Name 31  "ps"
+                              Name 35  "cd"
+                              Name 39  "pvi"
+                              Name 41  "gl_PatchVerticesIn"
+                              Name 43  "pid"
+                              Name 44  "gl_PrimitiveID"
+                              Name 46  "iid"
+                              Name 47  "gl_InvocationID"
                               Name 50  "gl_PerVertex"
                               MemberName 50(gl_PerVertex) 0  "gl_Position"
                               MemberName 50(gl_PerVertex) 1  "gl_PointSize"
@@ -49,13 +45,13 @@ Linked tessellation control stage:
                               Name 88  "ivlb"
                               Name 91  "ovla"
                               Name 92  "ovlb"
-                              MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 19(gl_PerVertex) Block
-                              Decorate 40(gl_PatchVerticesIn) BuiltIn PatchVertices
-                              Decorate 43(gl_PrimitiveID) BuiltIn PrimitiveId
-                              Decorate 46(gl_InvocationID) BuiltIn InvocationId
+                              MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 20(gl_PerVertex) Block
+                              Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices
+                              Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 47(gl_InvocationID) BuiltIn InvocationId
                               MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -72,106 +68,106 @@ Linked tessellation control stage:
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeInt 32 1
-              10:             TypePointer Function 9(int)
-              12:      9(int) Constant 5392
-              13:             TypeFloat 32
-              14:             TypeVector 13(float) 4
-              15:             TypePointer Function 14(fvec4)
-              17:      6(int) Constant 3
-              18:             TypeArray 13(float) 17
-19(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 18
-              20:      6(int) Constant 32
-              21:             TypeArray 19(gl_PerVertex) 20
-              22:             TypePointer Input 21
-       23(gl_in):     22(ptr) Variable Input
-              24:      9(int) Constant 1
-              25:      9(int) Constant 0
-              26:             TypePointer Input 14(fvec4)
-              29:             TypePointer Function 13(float)
-              31:             TypePointer Input 13(float)
-              35:      9(int) Constant 2
-              39:             TypePointer Input 9(int)
-40(gl_PatchVerticesIn):     39(ptr) Variable Input
-43(gl_PrimitiveID):     39(ptr) Variable Input
-46(gl_InvocationID):     39(ptr) Variable Input
-              48:      6(int) Constant 2
-              49:             TypeArray 13(float) 48
-50(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 49
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 5392
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 4
+              16:             TypePointer Function 15(fvec4)
+              18:      6(int) Constant 3
+              19:             TypeArray 14(float) 18
+20(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 19
+              21:      6(int) Constant 32
+              22:             TypeArray 20(gl_PerVertex) 21
+              23:             TypePointer Input 22
+       24(gl_in):     23(ptr) Variable Input
+              25:     10(int) Constant 1
+              26:     10(int) Constant 0
+              27:             TypePointer Input 15(fvec4)
+              30:             TypePointer Function 14(float)
+              32:             TypePointer Input 14(float)
+              36:     10(int) Constant 2
+              40:             TypePointer Input 10(int)
+41(gl_PatchVerticesIn):     40(ptr) Variable Input
+44(gl_PrimitiveID):     40(ptr) Variable Input
+47(gl_InvocationID):     40(ptr) Variable Input
+              49:             TypeArray 14(float) 7
+50(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 49
               51:      6(int) Constant 4
               52:             TypeArray 50(gl_PerVertex) 51
               53:             TypePointer Output 52
       54(gl_out):     53(ptr) Variable Output
-              57:             TypePointer Output 14(fvec4)
-              61:             TypePointer Output 13(float)
-              66:             TypeArray 13(float) 51
+              57:             TypePointer Output 15(fvec4)
+              61:             TypePointer Output 14(float)
+              66:             TypeArray 14(float) 51
               67:             TypePointer Output 66
 68(gl_TessLevelOuter):     67(ptr) Variable Output
-              69:      9(int) Constant 3
-              70:   13(float) Constant 1078774989
+              69:     10(int) Constant 3
+              70:   14(float) Constant 1078774989
               72:             TypePointer Output 49
 73(gl_TessLevelInner):     72(ptr) Variable Output
-              74:   13(float) Constant 1067869798
-              76:             TypeArray 9(int) 51
+              74:   14(float) Constant 1067869798
+              76:             TypeArray 10(int) 51
               77:             TypePointer Private 76
         78(outa):     77(ptr) Variable Private
     79(patchOut):     57(ptr) Variable Output
-              80:             TypeVector 13(float) 2
-              81:             TypeArray 80(fvec2) 20
+              80:             TypeVector 14(float) 2
+              81:             TypeArray 80(fvec2) 21
               82:             TypePointer Input 81
          83(inb):     82(ptr) Variable Input
          84(ind):     82(ptr) Variable Input
-              85:             TypeArray 14(fvec4) 20
+              85:             TypeArray 15(fvec4) 21
               86:             TypePointer Input 85
         87(ivla):     86(ptr) Variable Input
         88(ivlb):     86(ptr) Variable Input
-              89:             TypeArray 14(fvec4) 51
+              89:             TypeArray 15(fvec4) 51
               90:             TypePointer Output 89
         91(ovla):     90(ptr) Variable Output
         92(ovlb):     90(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-           11(a):     10(ptr) Variable Function
-           16(p):     15(ptr) Variable Function
-          30(ps):     29(ptr) Variable Function
-          34(cd):     29(ptr) Variable Function
-         38(pvi):     10(ptr) Variable Function
-         42(pid):     10(ptr) Variable Function
-         45(iid):     10(ptr) Variable Function
-                              ControlBarrier 7 7 8
-                              Store 11(a) 12
-              27:     26(ptr) AccessChain 23(gl_in) 24 25
-              28:   14(fvec4) Load 27
-                              Store 16(p) 28
-              32:     31(ptr) AccessChain 23(gl_in) 24 24
-              33:   13(float) Load 32
-                              Store 30(ps) 33
-              36:     31(ptr) AccessChain 23(gl_in) 24 35 35
-              37:   13(float) Load 36
-                              Store 34(cd) 37
-              41:      9(int) Load 40(gl_PatchVerticesIn)
-                              Store 38(pvi) 41
-              44:      9(int) Load 43(gl_PrimitiveID)
-                              Store 42(pid) 44
-              47:      9(int) Load 46(gl_InvocationID)
-                              Store 45(iid) 47
-              55:      9(int) Load 46(gl_InvocationID)
-              56:   14(fvec4) Load 16(p)
-              58:     57(ptr) AccessChain 54(gl_out) 55 25
+           12(a):     11(ptr) Variable Function
+           17(p):     16(ptr) Variable Function
+          31(ps):     30(ptr) Variable Function
+          35(cd):     30(ptr) Variable Function
+         39(pvi):     11(ptr) Variable Function
+         43(pid):     11(ptr) Variable Function
+         46(iid):     11(ptr) Variable Function
+                              ControlBarrier 7 8 9
+                              Store 12(a) 13
+              28:     27(ptr) AccessChain 24(gl_in) 25 26
+              29:   15(fvec4) Load 28
+                              Store 17(p) 29
+              33:     32(ptr) AccessChain 24(gl_in) 25 25
+              34:   14(float) Load 33
+                              Store 31(ps) 34
+              37:     32(ptr) AccessChain 24(gl_in) 25 36 36
+              38:   14(float) Load 37
+                              Store 35(cd) 38
+              42:     10(int) Load 41(gl_PatchVerticesIn)
+                              Store 39(pvi) 42
+              45:     10(int) Load 44(gl_PrimitiveID)
+                              Store 43(pid) 45
+              48:     10(int) Load 47(gl_InvocationID)
+                              Store 46(iid) 48
+              55:     10(int) Load 47(gl_InvocationID)
+              56:   15(fvec4) Load 17(p)
+              58:     57(ptr) AccessChain 54(gl_out) 55 26
                               Store 58 56
-              59:      9(int) Load 46(gl_InvocationID)
-              60:   13(float) Load 30(ps)
-              62:     61(ptr) AccessChain 54(gl_out) 59 24
+              59:     10(int) Load 47(gl_InvocationID)
+              60:   14(float) Load 31(ps)
+              62:     61(ptr) AccessChain 54(gl_out) 59 25
                               Store 62 60
-              63:      9(int) Load 46(gl_InvocationID)
-              64:   13(float) Load 34(cd)
-              65:     61(ptr) AccessChain 54(gl_out) 63 35 24
+              63:     10(int) Load 47(gl_InvocationID)
+              64:   14(float) Load 35(cd)
+              65:     61(ptr) AccessChain 54(gl_out) 63 36 25
                               Store 65 64
               71:     61(ptr) AccessChain 68(gl_TessLevelOuter) 69
                               Store 71 70
-              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 24
+              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 25
                               Store 75 74
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 51534b122feab8dcba1afdb403a6dc0f316cd103..0c62bed6d2934734f663880ad4c85ba7c3f1528e 100755
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,10 +1,6 @@
 spv.400.tese
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation evaluation stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 96
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 78e3aaa284735d4a021f32f3a832c9b85b8e5837..6413d5a4521ecfebb7dd0511778553d87ffa7f19 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,10 +1,6 @@
 spv.420.geom
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked geometry stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 72
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 0058e9c810e7b7c9917ed2dd66d882460b371e26..abe2a58a0eaa05065cbfeb582891252e6c43340a 100755
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,10 +1,6 @@
 spv.430.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index c3ad2b9286614c790b37c6023ff89958bb21805a..8ea95d1a73ee92b4bc5e6af591a1767bb18c21fb 100755
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,10 +1,6 @@
 spv.430.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 66
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 2900fdfc65a272c393da26394a6a51f1c6388432..a0bf3dd3babcf4fb3c399d320a77b281ca51e041 100755
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,10 +1,6 @@
 spv.450.tesc
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 23
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 0dbf69ceda26eb7e37388ba34afe995674e4cd91..4eb756301b557a0821951b150adeeeb191255777 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -1,10 +1,6 @@
 spv.AofA.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 104
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index f8b666d5377cd2ef85e09958d79f3f60f9bb46e3..1a74192ee513a1b380807d0f50a5e7840b036cf6 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,10 +1,6 @@
 spv.Operations.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 509
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index 3d391c312ce19120379759497f5ca5050db8eade..b319cfd13ddf9d7718b94e817ed81a9870c7195e 100755
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,10 +1,6 @@
 spv.accessChain.frag
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 206
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index 5a19d2f4475313026b5fee3c030cef834e0f08aa..c3ceb9a67b297b5305b68067dd757ad61cd0205c 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,10 +3,6 @@ Warning, version 450 is not yet complete; most version-specific features are pre
 WARNING: 0:4: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 215
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 9102b3bb527d3ea6e4a8420316e334c18cd4715d..652d45c846edaf44d0fd1fd973b9b72ae915c008 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,8 +1,4 @@
 spv.always-discard.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 84
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index 7984c8322fd616af41088760567d8ad6f6cc9e07..0bbb9eee8906c60d185e01cf6c9c7e31f8952910 100755
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,8 +1,4 @@
 spv.always-discard2.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 40
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index 01e09323b9208af27fd37edf2e9fb351bd32945f..97c7f6e3ab4a9f0be1262cce93a254d215b8a2e4 100755
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,10 +1,6 @@
 spv.atomic.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 73
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index b0dc810494348a682b2f9e841c1c3772135c2267..07dd729e6d5e68228f10032468241fa5478fb4ef 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,10 +1,6 @@
 spv.bitCast.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 172
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 49a69a0eb8807099f16f39a8bf212b84dc56b780..f84687a5bc0eaf5c507d168224031f70b92af1be 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,10 +1,6 @@
 spv.bool.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 49
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 6e7cf40eed23e6ae95bdf3836926e432d04ed7d3..2181f26d686e834c0c1a1a4397effea282275d91 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,10 +1,6 @@
 spv.boolInBlock.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 107
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index 217a863fc9f1c12352df874005ccc8a2e9056d8e..9093135b9544ca574ff489640e3c0531b34152c3 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,10 +1,6 @@
 spv.branch-return.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..f2c8d6d9239917518c61494d5b238f856cfab3a9
--- /dev/null
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -0,0 +1,85 @@
+spv.buffer.autoassign.frag
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 45
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 10  "psout"
+                              Name 13  "MyUB1"
+                              MemberName 13(MyUB1) 0  "g_a"
+                              MemberName 13(MyUB1) 1  "g_b"
+                              Name 15  ""
+                              Name 25  "MyUB2"
+                              MemberName 25(MyUB2) 0  "g_c"
+                              Name 27  ""
+                              Name 31  "MyUB3"
+                              MemberName 31(MyUB3) 0  "g_d"
+                              Name 33  ""
+                              Name 41  "Color"
+                              MemberDecorate 13(MyUB1) 0 Offset 0
+                              MemberDecorate 13(MyUB1) 1 Offset 4
+                              Decorate 13(MyUB1) Block
+                              Decorate 15 DescriptorSet 0
+                              Decorate 15 Binding 20
+                              MemberDecorate 25(MyUB2) 0 Offset 0
+                              Decorate 25(MyUB2) Block
+                              Decorate 27 DescriptorSet 0
+                              Decorate 27 Binding 15
+                              MemberDecorate 31(MyUB3) 0 Offset 0
+                              Decorate 31(MyUB3) Block
+                              Decorate 33 DescriptorSet 0
+                              Decorate 33 Binding 16
+                              Decorate 41(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypePointer Function 8(PS_OUTPUT)
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+       13(MyUB1):             TypeStruct 6(float) 11(int)
+              14:             TypePointer Uniform 13(MyUB1)
+              15:     14(ptr) Variable Uniform
+              16:             TypePointer Uniform 6(float)
+              19:     11(int) Constant 1
+              20:             TypePointer Uniform 11(int)
+       25(MyUB2):             TypeStruct 6(float)
+              26:             TypePointer Uniform 25(MyUB2)
+              27:     26(ptr) Variable Uniform
+       31(MyUB3):             TypeStruct 6(float)
+              32:             TypePointer Uniform 31(MyUB3)
+              33:     32(ptr) Variable Uniform
+              38:             TypePointer Function 7(fvec4)
+              40:             TypePointer Output 7(fvec4)
+       41(Color):     40(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       10(psout):      9(ptr) Variable Function
+              17:     16(ptr) AccessChain 15 12
+              18:    6(float) Load 17
+              21:     20(ptr) AccessChain 15 19
+              22:     11(int) Load 21
+              23:    6(float) ConvertSToF 22
+              24:    6(float) FAdd 18 23
+              28:     16(ptr) AccessChain 27 12
+              29:    6(float) Load 28
+              30:    6(float) FAdd 24 29
+              34:     16(ptr) AccessChain 33 12
+              35:    6(float) Load 34
+              36:    6(float) FAdd 30 35
+              37:    7(fvec4) CompositeConstruct 36 36 36 36
+              39:     38(ptr) AccessChain 10(psout) 12
+                              Store 39 37
+              42:     38(ptr) AccessChain 10(psout) 12
+              43:    7(fvec4) Load 42
+                              Store 41(Color) 43
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index ef7e3b4cf91523c4d7496eb8ad6f120183f8ce59..b3cb8e866a7d0838dc173a9caf0751c8d779cad9 100755
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,10 +1,6 @@
 spv.conditionalDiscard.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 36
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index bc91569857ccec998c82f9f73c635ba1f873c208..b38d84e8266bed00a4f7e2a9d3f41e7b7cc8c63a 100755
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,8 +1,4 @@
 spv.conversion.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 455
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index 651c96e3d157d290106d159fe3bf53f48509dcf1..9dbe5d124b315463ed3d8f94f8280e2155f1f5d0 100755
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,8 +1,4 @@
 spv.dataOut.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index d1227a5bba015ee5775245e4b84948da1936aa4c..663092fd32436880809c7363a12daf40d58628c3 100755
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,8 +1,4 @@
 spv.dataOutIndirect.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 26
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 797c65180b7658ede2aee075389f7424c4cac4bb..1523fab59e84cb1d84c70a782606600202df0636 100755
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -1,10 +1,6 @@
 spv.dataOutIndirect.vert
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index b4894383e5cc1644c4d6cc0969f1faa776a5c6f7..29cf848873af4c1703636bd56dbf90f50651b49c 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,8 +1,4 @@
 spv.deepRvalue.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 155
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index 6242391fd3a65629490add2a7ad3ce16506741f4..247b2f3d084ce192aa5918b587ebad59ff3a4ea9 100755
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,10 +1,6 @@
 spv.depthOut.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 15
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 7668233ba20e563845b07bf5643ebc7ee99a89ba..173ea260ae94d5c2168b863b2d74f623edc47dc7 100755
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,8 +1,4 @@
 spv.discard-dce.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 84
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index c0862d1e199a9c784b66fda2b307399a6b6adc83..d6d4c28f338354e4b2c5059817376057fb4fd868 100755
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,10 +1,6 @@
 spv.do-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 21
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index ebfe85d0e6b1d9809d2df30004b78f4f6c7a2453..d1d0c85c98a027008005abba5770317f9f4f6ac3 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.do-while-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index 1d12af108d4dcd4f6b8e415fa451266ee384a19a..9b8cee7013fa98f64047f56c2b162a034ad92826 100755
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,8 +1,4 @@
 spv.doWhileLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 34
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 766f839a0bcf0462c4c2faab7b12d1373521d84c..3b1bdc89ca8763c4bdd5743ecff4dd7644bd136b 100755
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,10 +1,6 @@
 spv.double.comp
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 7e6409e63fa2367f012e4448e0e89a6ce0f08a1f..41441b7f6f3a4ea6a19ea4ce44560064ed235fd8 100755
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,8 +1,4 @@
 spv.earlyReturnDiscard.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 110
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..5499b7e8e856a9baaa89773bf4b4db317c7ad2fa
--- /dev/null
+++ b/Test/baseResults/spv.float16.frag.out
@@ -0,0 +1,832 @@
+spv.float16.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 534
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 465
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinAngleTrigFuncs("
+                              Name 14  "builtinExpFuncs("
+                              Name 16  "builtinCommonFuncs("
+                              Name 18  "builtinPackUnpackFuncs("
+                              Name 20  "builtinGeometryFuncs("
+                              Name 22  "builtinMatrixFuncs("
+                              Name 24  "builtinVecRelFuncs("
+                              Name 26  "builtinFragProcFuncs("
+                              Name 31  "f16v"
+                              Name 42  "f16v"
+                              Name 64  "f16m"
+                              Name 87  "f16"
+                              Name 111  "b"
+                              Name 153  "f16v"
+                              Name 156  "bv"
+                              Name 167  "fv"
+                              Name 175  "dv"
+                              Name 186  "iv"
+                              Name 193  "uv"
+                              Name 201  "i64v"
+                              Name 209  "u64v"
+                              Name 216  "f16v2"
+                              Name 217  "f16v1"
+                              Name 249  "f16v2"
+                              Name 250  "f16v1"
+                              Name 266  "f16v2"
+                              Name 267  "f16v1"
+                              Name 288  "f16"
+                              Name 292  "f16v3"
+                              Name 332  "bv"
+                              Name 353  "b"
+                              Name 363  "iv"
+                              Name 364  "ResType"
+                              Name 372  "u"
+                              Name 373  "f16v"
+                              Name 378  "f16"
+                              Name 379  "f16v1"
+                              Name 383  "f16v2"
+                              Name 389  "f16v3"
+                              Name 408  "f16m3"
+                              Name 409  "f16m1"
+                              Name 411  "f16m2"
+                              Name 420  "f16v1"
+                              Name 422  "f16v2"
+                              Name 427  "f16m4"
+                              Name 430  "f16"
+                              Name 433  "f16m5"
+                              Name 438  "f16m6"
+                              Name 439  "f16m7"
+                              Name 442  "bv"
+                              Name 443  "f16v1"
+                              Name 445  "f16v2"
+                              Name 463  "f16v"
+                              Name 465  "if16v"
+                              Name 514  "S"
+                              MemberName 514(S) 0  "x"
+                              MemberName 514(S) 1  "y"
+                              MemberName 514(S) 2  "z"
+                              Name 516  "B1"
+                              MemberName 516(B1) 0  "a"
+                              MemberName 516(B1) 1  "b"
+                              MemberName 516(B1) 2  "c"
+                              MemberName 516(B1) 3  "d"
+                              MemberName 516(B1) 4  "e"
+                              MemberName 516(B1) 5  "f"
+                              MemberName 516(B1) 6  "g"
+                              MemberName 516(B1) 7  "h"
+                              Name 518  ""
+                              Name 521  "S"
+                              MemberName 521(S) 0  "x"
+                              MemberName 521(S) 1  "y"
+                              MemberName 521(S) 2  "z"
+                              Name 523  "B2"
+                              MemberName 523(B2) 0  "o"
+                              MemberName 523(B2) 1  "p"
+                              MemberName 523(B2) 2  "q"
+                              MemberName 523(B2) 3  "r"
+                              MemberName 523(B2) 4  "s"
+                              MemberName 523(B2) 5  "t"
+                              MemberName 523(B2) 6  "u"
+                              MemberName 523(B2) 7  "v"
+                              Name 525  ""
+                              Decorate 512 ArrayStride 16
+                              Decorate 513 ArrayStride 32
+                              MemberDecorate 514(S) 0 Offset 0
+                              MemberDecorate 514(S) 1 Offset 4
+                              MemberDecorate 514(S) 2 Offset 8
+                              Decorate 515 ArrayStride 16
+                              MemberDecorate 516(B1) 0 Offset 0
+                              MemberDecorate 516(B1) 1 Offset 4
+                              MemberDecorate 516(B1) 2 Offset 8
+                              MemberDecorate 516(B1) 3 Offset 16
+                              MemberDecorate 516(B1) 4 ColMajor
+                              MemberDecorate 516(B1) 4 Offset 48
+                              MemberDecorate 516(B1) 4 MatrixStride 16
+                              MemberDecorate 516(B1) 5 ColMajor
+                              MemberDecorate 516(B1) 5 Offset 80
+                              MemberDecorate 516(B1) 5 MatrixStride 16
+                              MemberDecorate 516(B1) 6 Offset 144
+                              MemberDecorate 516(B1) 7 Offset 160
+                              Decorate 516(B1) Block
+                              Decorate 518 DescriptorSet 0
+                              Decorate 519 ArrayStride 2
+                              Decorate 520 ArrayStride 12
+                              MemberDecorate 521(S) 0 Offset 0
+                              MemberDecorate 521(S) 1 Offset 4
+                              MemberDecorate 521(S) 2 Offset 8
+                              Decorate 522 ArrayStride 16
+                              MemberDecorate 523(B2) 0 Offset 0
+                              MemberDecorate 523(B2) 1 Offset 4
+                              MemberDecorate 523(B2) 2 Offset 8
+                              MemberDecorate 523(B2) 3 Offset 14
+                              MemberDecorate 523(B2) 4 RowMajor
+                              MemberDecorate 523(B2) 4 Offset 20
+                              MemberDecorate 523(B2) 4 MatrixStride 4
+                              MemberDecorate 523(B2) 5 RowMajor
+                              MemberDecorate 523(B2) 5 Offset 32
+                              MemberDecorate 523(B2) 5 MatrixStride 4
+                              MemberDecorate 523(B2) 6 Offset 56
+                              MemberDecorate 523(B2) 7 Offset 72
+                              Decorate 523(B2) BufferBlock
+                              Decorate 525 DescriptorSet 0
+                              Decorate 526 SpecId 100
+                              Decorate 527 SpecId 101
+                              Decorate 528 SpecId 102
+               2:             TypeVoid
+               3:             TypeFunction 2
+              28:             TypeFloat 16
+              29:             TypeVector 28(float) 2
+              30:             TypePointer Function 29(fvec2)
+              32:   28(float) Constant 16
+              33:             TypeInt 32 0
+              34:     33(int) Constant 0
+              35:             TypePointer Function 28(float)
+              37:   28(float) Constant 46080
+              38:   28(float) Constant 10158
+              39:   29(fvec2) ConstantComposite 37 38
+              56:   28(float) Constant 15360
+              62:             TypeMatrix 29(fvec2) 2
+              63:             TypePointer Function 62
+              90:     33(int) Constant 1
+             109:             TypeBool
+             110:             TypePointer Function 109(bool)
+             151:             TypeVector 28(float) 3
+             152:             TypePointer Function 151(fvec3)
+             154:             TypeVector 109(bool) 3
+             155:             TypePointer Function 154(bvec3)
+             158:   28(float) Constant 0
+             159:  151(fvec3) ConstantComposite 158 158 158
+             160:  151(fvec3) ConstantComposite 56 56 56
+             164:             TypeFloat 32
+             165:             TypeVector 164(float) 3
+             166:             TypePointer Function 165(fvec3)
+             172:             TypeFloat 64
+             173:             TypeVector 172(float) 3
+             174:             TypePointer Function 173(fvec3)
+             183:             TypeInt 32 1
+             184:             TypeVector 183(int) 3
+             185:             TypePointer Function 184(ivec3)
+             191:             TypeVector 33(int) 3
+             192:             TypePointer Function 191(ivec3)
+             198:             TypeInt 64 1
+             199:             TypeVector 198(int) 3
+             200:             TypePointer Function 199(ivec3)
+             206:             TypeInt 64 0
+             207:             TypeVector 206(int) 3
+             208:             TypePointer Function 207(ivec3)
+             214:             TypeVector 28(float) 4
+             215:             TypePointer Function 214(fvec4)
+    364(ResType):             TypeStruct 151(fvec3) 184(ivec3)
+             371:             TypePointer Function 33(int)
+             406:             TypeMatrix 151(fvec3) 2
+             407:             TypePointer Function 406
+             425:             TypeMatrix 29(fvec2) 3
+             426:             TypePointer Function 425
+             431:             TypeMatrix 151(fvec3) 3
+             432:             TypePointer Function 431
+             436:             TypeMatrix 214(fvec4) 4
+             437:             TypePointer Function 436
+             464:             TypePointer Input 151(fvec3)
+      465(if16v):    464(ptr) Variable Input
+             466:             TypePointer Input 28(float)
+             503:    183(int) Constant 1
+             508:   28(float) Constant 14336
+             509:   29(fvec2) ConstantComposite 508 508
+             511:     33(int) Constant 2
+             512:             TypeArray 28(float) 511
+             513:             TypeArray 406 511
+          514(S):             TypeStruct 28(float) 29(fvec2) 151(fvec3)
+             515:             TypeArray 514(S) 511
+         516(B1):             TypeStruct 28(float) 29(fvec2) 151(fvec3) 512 406 513 514(S) 515
+             517:             TypePointer Uniform 516(B1)
+             518:    517(ptr) Variable Uniform
+             519:             TypeArray 28(float) 511
+             520:             TypeArray 406 511
+          521(S):             TypeStruct 28(float) 29(fvec2) 151(fvec3)
+             522:             TypeArray 521(S) 511
+         523(B2):             TypeStruct 28(float) 29(fvec2) 151(fvec3) 519 406 520 521(S) 522
+             524:             TypePointer Uniform 523(B2)
+             525:    524(ptr) Variable Uniform
+             526:   28(float) SpecConstant 12288
+             527:  164(float) SpecConstant 1048576000
+             528:  172(float) SpecConstant 0 1071644672
+             529:  164(float) SpecConstantOp 115 526
+             530:  164(float) SpecConstantOp 115 526
+             531:  172(float) SpecConstantOp 115 530
+             532:   28(float) SpecConstantOp 115 527
+             533:   28(float) SpecConstantOp 115 528
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+        31(f16v):     30(ptr) Variable Function
+              36:     35(ptr) AccessChain 31(f16v) 34
+                              Store 36 32
+              40:   29(fvec2) Load 31(f16v)
+              41:   29(fvec2) FAdd 40 39
+                              Store 31(f16v) 41
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        42(f16v):     30(ptr) Variable Function
+        64(f16m):     63(ptr) Variable Function
+         87(f16):     35(ptr) Variable Function
+          111(b):    110(ptr) Variable Function
+              43:   29(fvec2) Load 42(f16v)
+              44:   29(fvec2) Load 42(f16v)
+              45:   29(fvec2) FAdd 44 43
+                              Store 42(f16v) 45
+              46:   29(fvec2) Load 42(f16v)
+              47:   29(fvec2) Load 42(f16v)
+              48:   29(fvec2) FSub 47 46
+                              Store 42(f16v) 48
+              49:   29(fvec2) Load 42(f16v)
+              50:   29(fvec2) Load 42(f16v)
+              51:   29(fvec2) FMul 50 49
+                              Store 42(f16v) 51
+              52:   29(fvec2) Load 42(f16v)
+              53:   29(fvec2) Load 42(f16v)
+              54:   29(fvec2) FDiv 53 52
+                              Store 42(f16v) 54
+              55:   29(fvec2) Load 42(f16v)
+              57:   29(fvec2) CompositeConstruct 56 56
+              58:   29(fvec2) FAdd 55 57
+                              Store 42(f16v) 58
+              59:   29(fvec2) Load 42(f16v)
+              60:   29(fvec2) CompositeConstruct 56 56
+              61:   29(fvec2) FSub 59 60
+                              Store 42(f16v) 61
+              65:          62 Load 64(f16m)
+              66:   29(fvec2) CompositeConstruct 56 56
+              67:   29(fvec2) CompositeExtract 65 0
+              68:   29(fvec2) FAdd 67 66
+              69:   29(fvec2) CompositeExtract 65 1
+              70:   29(fvec2) FAdd 69 66
+              71:          62 CompositeConstruct 68 70
+                              Store 64(f16m) 71
+              72:          62 Load 64(f16m)
+              73:   29(fvec2) CompositeConstruct 56 56
+              74:   29(fvec2) CompositeExtract 72 0
+              75:   29(fvec2) FSub 74 73
+              76:   29(fvec2) CompositeExtract 72 1
+              77:   29(fvec2) FSub 76 73
+              78:          62 CompositeConstruct 75 77
+                              Store 64(f16m) 78
+              79:   29(fvec2) Load 42(f16v)
+              80:   29(fvec2) FNegate 79
+                              Store 42(f16v) 80
+              81:          62 Load 64(f16m)
+              82:   29(fvec2) CompositeExtract 81 0
+              83:   29(fvec2) FNegate 82
+              84:   29(fvec2) CompositeExtract 81 1
+              85:   29(fvec2) FNegate 84
+              86:          62 CompositeConstruct 83 85
+                              Store 64(f16m) 86
+              88:     35(ptr) AccessChain 42(f16v) 34
+              89:   28(float) Load 88
+              91:     35(ptr) AccessChain 42(f16v) 90
+              92:   28(float) Load 91
+              93:   28(float) FAdd 89 92
+                              Store 87(f16) 93
+              94:     35(ptr) AccessChain 42(f16v) 34
+              95:   28(float) Load 94
+              96:     35(ptr) AccessChain 42(f16v) 90
+              97:   28(float) Load 96
+              98:   28(float) FSub 95 97
+                              Store 87(f16) 98
+              99:     35(ptr) AccessChain 42(f16v) 34
+             100:   28(float) Load 99
+             101:     35(ptr) AccessChain 42(f16v) 90
+             102:   28(float) Load 101
+             103:   28(float) FMul 100 102
+                              Store 87(f16) 103
+             104:     35(ptr) AccessChain 42(f16v) 34
+             105:   28(float) Load 104
+             106:     35(ptr) AccessChain 42(f16v) 90
+             107:   28(float) Load 106
+             108:   28(float) FDiv 105 107
+                              Store 87(f16) 108
+             112:     35(ptr) AccessChain 42(f16v) 34
+             113:   28(float) Load 112
+             114:   28(float) Load 87(f16)
+             115:   109(bool) FOrdNotEqual 113 114
+                              Store 111(b) 115
+             116:     35(ptr) AccessChain 42(f16v) 90
+             117:   28(float) Load 116
+             118:   28(float) Load 87(f16)
+             119:   109(bool) FOrdEqual 117 118
+                              Store 111(b) 119
+             120:     35(ptr) AccessChain 42(f16v) 34
+             121:   28(float) Load 120
+             122:   28(float) Load 87(f16)
+             123:   109(bool) FOrdGreaterThan 121 122
+                              Store 111(b) 123
+             124:     35(ptr) AccessChain 42(f16v) 90
+             125:   28(float) Load 124
+             126:   28(float) Load 87(f16)
+             127:   109(bool) FOrdLessThan 125 126
+                              Store 111(b) 127
+             128:     35(ptr) AccessChain 42(f16v) 34
+             129:   28(float) Load 128
+             130:   28(float) Load 87(f16)
+             131:   109(bool) FOrdGreaterThanEqual 129 130
+                              Store 111(b) 131
+             132:     35(ptr) AccessChain 42(f16v) 90
+             133:   28(float) Load 132
+             134:   28(float) Load 87(f16)
+             135:   109(bool) FOrdLessThanEqual 133 134
+                              Store 111(b) 135
+             136:   29(fvec2) Load 42(f16v)
+             137:   28(float) Load 87(f16)
+             138:   29(fvec2) VectorTimesScalar 136 137
+                              Store 42(f16v) 138
+             139:          62 Load 64(f16m)
+             140:   28(float) Load 87(f16)
+             141:          62 MatrixTimesScalar 139 140
+                              Store 64(f16m) 141
+             142:          62 Load 64(f16m)
+             143:   29(fvec2) Load 42(f16v)
+             144:   29(fvec2) MatrixTimesVector 142 143
+                              Store 42(f16v) 144
+             145:   29(fvec2) Load 42(f16v)
+             146:          62 Load 64(f16m)
+             147:   29(fvec2) VectorTimesMatrix 145 146
+                              Store 42(f16v) 147
+             148:          62 Load 64(f16m)
+             149:          62 Load 64(f16m)
+             150:          62 MatrixTimesMatrix 148 149
+                              Store 64(f16m) 150
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       153(f16v):    152(ptr) Variable Function
+         156(bv):    155(ptr) Variable Function
+         167(fv):    166(ptr) Variable Function
+         175(dv):    174(ptr) Variable Function
+         186(iv):    185(ptr) Variable Function
+         193(uv):    192(ptr) Variable Function
+       201(i64v):    200(ptr) Variable Function
+       209(u64v):    208(ptr) Variable Function
+             157:  154(bvec3) Load 156(bv)
+             161:  151(fvec3) Select 157 160 159
+                              Store 153(f16v) 161
+             162:  151(fvec3) Load 153(f16v)
+             163:  154(bvec3) FOrdNotEqual 162 159
+                              Store 156(bv) 163
+             168:  165(fvec3) Load 167(fv)
+             169:  151(fvec3) FConvert 168
+                              Store 153(f16v) 169
+             170:  151(fvec3) Load 153(f16v)
+             171:  165(fvec3) FConvert 170
+                              Store 167(fv) 171
+             176:  173(fvec3) Load 175(dv)
+             177:  151(fvec3) FConvert 176
+                              Store 153(f16v) 177
+             178:  173(fvec3) Load 175(dv)
+             179:  172(float) CompositeExtract 178 0
+             180:  172(float) CompositeExtract 178 1
+             181:  172(float) CompositeExtract 178 2
+             182:  173(fvec3) CompositeConstruct 179 180 181
+                              Store 175(dv) 182
+             187:  184(ivec3) Load 186(iv)
+             188:  151(fvec3) ConvertSToF 187
+                              Store 153(f16v) 188
+             189:  151(fvec3) Load 153(f16v)
+             190:  184(ivec3) ConvertFToS 189
+                              Store 186(iv) 190
+             194:  191(ivec3) Load 193(uv)
+             195:  151(fvec3) ConvertUToF 194
+                              Store 153(f16v) 195
+             196:  151(fvec3) Load 153(f16v)
+             197:  191(ivec3) ConvertFToU 196
+                              Store 193(uv) 197
+             202:  199(ivec3) Load 201(i64v)
+             203:  151(fvec3) ConvertSToF 202
+                              Store 153(f16v) 203
+             204:  151(fvec3) Load 153(f16v)
+             205:  199(ivec3) ConvertFToS 204
+                              Store 201(i64v) 205
+             210:  207(ivec3) Load 209(u64v)
+             211:  151(fvec3) ConvertUToF 210
+                              Store 153(f16v) 211
+             212:  151(fvec3) Load 153(f16v)
+             213:  207(ivec3) ConvertFToU 212
+                              Store 209(u64v) 213
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      216(f16v2):    215(ptr) Variable Function
+      217(f16v1):    215(ptr) Variable Function
+             218:  214(fvec4) Load 217(f16v1)
+             219:  214(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
+                              Store 216(f16v2) 219
+             220:  214(fvec4) Load 217(f16v1)
+             221:  214(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
+                              Store 216(f16v2) 221
+             222:  214(fvec4) Load 217(f16v1)
+             223:  214(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
+                              Store 216(f16v2) 223
+             224:  214(fvec4) Load 217(f16v1)
+             225:  214(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
+                              Store 216(f16v2) 225
+             226:  214(fvec4) Load 217(f16v1)
+             227:  214(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
+                              Store 216(f16v2) 227
+             228:  214(fvec4) Load 217(f16v1)
+             229:  214(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
+                              Store 216(f16v2) 229
+             230:  214(fvec4) Load 217(f16v1)
+             231:  214(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
+                              Store 216(f16v2) 231
+             232:  214(fvec4) Load 217(f16v1)
+             233:  214(fvec4) Load 216(f16v2)
+             234:  214(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
+                              Store 216(f16v2) 234
+             235:  214(fvec4) Load 217(f16v1)
+             236:  214(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
+                              Store 216(f16v2) 236
+             237:  214(fvec4) Load 217(f16v1)
+             238:  214(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
+                              Store 216(f16v2) 238
+             239:  214(fvec4) Load 217(f16v1)
+             240:  214(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
+                              Store 216(f16v2) 240
+             241:  214(fvec4) Load 217(f16v1)
+             242:  214(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
+                              Store 216(f16v2) 242
+             243:  214(fvec4) Load 217(f16v1)
+             244:  214(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
+                              Store 216(f16v2) 244
+             245:  214(fvec4) Load 217(f16v1)
+             246:  214(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
+                              Store 216(f16v2) 246
+             247:  214(fvec4) Load 217(f16v1)
+             248:  214(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
+                              Store 216(f16v2) 248
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      249(f16v2):     30(ptr) Variable Function
+      250(f16v1):     30(ptr) Variable Function
+             251:   29(fvec2) Load 250(f16v1)
+             252:   29(fvec2) Load 249(f16v2)
+             253:   29(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
+                              Store 249(f16v2) 253
+             254:   29(fvec2) Load 250(f16v1)
+             255:   29(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
+                              Store 249(f16v2) 255
+             256:   29(fvec2) Load 250(f16v1)
+             257:   29(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 256
+                              Store 249(f16v2) 257
+             258:   29(fvec2) Load 250(f16v1)
+             259:   29(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
+                              Store 249(f16v2) 259
+             260:   29(fvec2) Load 250(f16v1)
+             261:   29(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
+                              Store 249(f16v2) 261
+             262:   29(fvec2) Load 250(f16v1)
+             263:   29(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
+                              Store 249(f16v2) 263
+             264:   29(fvec2) Load 250(f16v1)
+             265:   29(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
+                              Store 249(f16v2) 265
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      266(f16v2):    152(ptr) Variable Function
+      267(f16v1):    152(ptr) Variable Function
+        288(f16):     35(ptr) Variable Function
+      292(f16v3):    152(ptr) Variable Function
+         332(bv):    155(ptr) Variable Function
+          353(b):    110(ptr) Variable Function
+         363(iv):    185(ptr) Variable Function
+             268:  151(fvec3) Load 267(f16v1)
+             269:  151(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
+                              Store 266(f16v2) 269
+             270:  151(fvec3) Load 267(f16v1)
+             271:  151(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
+                              Store 266(f16v2) 271
+             272:  151(fvec3) Load 267(f16v1)
+             273:  151(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
+                              Store 266(f16v2) 273
+             274:  151(fvec3) Load 267(f16v1)
+             275:  151(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
+                              Store 266(f16v2) 275
+             276:  151(fvec3) Load 267(f16v1)
+             277:  151(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 276
+                              Store 266(f16v2) 277
+             278:  151(fvec3) Load 267(f16v1)
+             279:  151(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
+                              Store 266(f16v2) 279
+             280:  151(fvec3) Load 267(f16v1)
+             281:  151(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
+                              Store 266(f16v2) 281
+             282:  151(fvec3) Load 267(f16v1)
+             283:  151(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
+                              Store 266(f16v2) 283
+             284:  151(fvec3) Load 267(f16v1)
+             285:  151(fvec3) Load 266(f16v2)
+             286:  151(fvec3) FMod 284 285
+                              Store 266(f16v2) 286
+             287:  151(fvec3) Load 267(f16v1)
+             289:   28(float) Load 288(f16)
+             290:  151(fvec3) CompositeConstruct 289 289 289
+             291:  151(fvec3) FMod 287 290
+                              Store 266(f16v2) 291
+             293:  151(fvec3) Load 267(f16v1)
+             294:  151(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f16v2)
+                              Store 292(f16v3) 294
+             295:  151(fvec3) Load 267(f16v1)
+             296:  151(fvec3) Load 266(f16v2)
+             297:  151(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
+                              Store 292(f16v3) 297
+             298:  151(fvec3) Load 267(f16v1)
+             299:   28(float) Load 288(f16)
+             300:  151(fvec3) CompositeConstruct 299 299 299
+             301:  151(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
+                              Store 292(f16v3) 301
+             302:  151(fvec3) Load 267(f16v1)
+             303:  151(fvec3) Load 266(f16v2)
+             304:  151(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
+                              Store 292(f16v3) 304
+             305:  151(fvec3) Load 267(f16v1)
+             306:   28(float) Load 288(f16)
+             307:  151(fvec3) CompositeConstruct 306 306 306
+             308:  151(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
+                              Store 292(f16v3) 308
+             309:  151(fvec3) Load 267(f16v1)
+             310:   28(float) Load 288(f16)
+             311:     35(ptr) AccessChain 266(f16v2) 34
+             312:   28(float) Load 311
+             313:  151(fvec3) CompositeConstruct 310 310 310
+             314:  151(fvec3) CompositeConstruct 312 312 312
+             315:  151(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
+                              Store 292(f16v3) 315
+             316:  151(fvec3) Load 267(f16v1)
+             317:  151(fvec3) Load 266(f16v2)
+             318:   28(float) Load 288(f16)
+             319:  151(fvec3) CompositeConstruct 318 318 318
+             320:  151(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
+                              Store 292(f16v3) 320
+             321:  151(fvec3) Load 267(f16v1)
+             322:  151(fvec3) Load 266(f16v2)
+             323:   28(float) Load 288(f16)
+             324:  151(fvec3) CompositeConstruct 323 323 323
+             325:  151(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
+                              Store 292(f16v3) 325
+             326:  151(fvec3) Load 267(f16v1)
+             327:  151(fvec3) Load 266(f16v2)
+             328:  151(fvec3) Load 292(f16v3)
+             329:  151(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
+                              Store 292(f16v3) 329
+             330:  151(fvec3) Load 267(f16v1)
+             331:  151(fvec3) Load 266(f16v2)
+             333:  154(bvec3) Load 332(bv)
+             334:  151(fvec3) Select 333 331 330
+                              Store 292(f16v3) 334
+             335:  151(fvec3) Load 267(f16v1)
+             336:  151(fvec3) Load 266(f16v2)
+             337:  151(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
+                              Store 292(f16v3) 337
+             338:   28(float) Load 288(f16)
+             339:  151(fvec3) Load 292(f16v3)
+             340:  151(fvec3) CompositeConstruct 338 338 338
+             341:  151(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
+                              Store 292(f16v3) 341
+             342:  151(fvec3) Load 267(f16v1)
+             343:  151(fvec3) Load 266(f16v2)
+             344:  151(fvec3) Load 292(f16v3)
+             345:  151(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
+                              Store 292(f16v3) 345
+             346:   28(float) Load 288(f16)
+             347:     35(ptr) AccessChain 267(f16v1) 34
+             348:   28(float) Load 347
+             349:  151(fvec3) Load 266(f16v2)
+             350:  151(fvec3) CompositeConstruct 346 346 346
+             351:  151(fvec3) CompositeConstruct 348 348 348
+             352:  151(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
+                              Store 292(f16v3) 352
+             354:   28(float) Load 288(f16)
+             355:   109(bool) IsNan 354
+                              Store 353(b) 355
+             356:  151(fvec3) Load 267(f16v1)
+             357:  154(bvec3) IsInf 356
+                              Store 332(bv) 357
+             358:  151(fvec3) Load 267(f16v1)
+             359:  151(fvec3) Load 266(f16v2)
+             360:  151(fvec3) Load 292(f16v3)
+             361:  151(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
+                              Store 292(f16v3) 361
+             362:  151(fvec3) Load 267(f16v1)
+             365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
+             366:  184(ivec3) CompositeExtract 365 1
+                              Store 363(iv) 366
+             367:  151(fvec3) CompositeExtract 365 0
+                              Store 266(f16v2) 367
+             368:  151(fvec3) Load 267(f16v1)
+             369:  184(ivec3) Load 363(iv)
+             370:  151(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
+                              Store 266(f16v2) 370
+                              Return
+                              FunctionEnd
+18(builtinPackUnpackFuncs():           2 Function None 3
+              19:             Label
+          372(u):    371(ptr) Variable Function
+       373(f16v):     30(ptr) Variable Function
+             374:   29(fvec2) Load 373(f16v)
+             375:     33(int) Bitcast 374
+                              Store 372(u) 375
+             376:     33(int) Load 372(u)
+             377:   29(fvec2) Bitcast 376
+                              Store 373(f16v) 377
+                              Return
+                              FunctionEnd
+20(builtinGeometryFuncs():           2 Function None 3
+              21:             Label
+        378(f16):     35(ptr) Variable Function
+      379(f16v1):    152(ptr) Variable Function
+      383(f16v2):    152(ptr) Variable Function
+      389(f16v3):    152(ptr) Variable Function
+             380:  151(fvec3) Load 379(f16v1)
+             381:   28(float) ExtInst 1(GLSL.std.450) 66(Length) 380
+                              Store 378(f16) 381
+             382:  151(fvec3) Load 379(f16v1)
+             384:  151(fvec3) Load 383(f16v2)
+             385:   28(float) ExtInst 1(GLSL.std.450) 67(Distance) 382 384
+                              Store 378(f16) 385
+             386:  151(fvec3) Load 379(f16v1)
+             387:  151(fvec3) Load 383(f16v2)
+             388:   28(float) Dot 386 387
+                              Store 378(f16) 388
+             390:  151(fvec3) Load 379(f16v1)
+             391:  151(fvec3) Load 383(f16v2)
+             392:  151(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 390 391
+                              Store 389(f16v3) 392
+             393:  151(fvec3) Load 379(f16v1)
+             394:  151(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 393
+                              Store 383(f16v2) 394
+             395:  151(fvec3) Load 379(f16v1)
+             396:  151(fvec3) Load 383(f16v2)
+             397:  151(fvec3) Load 389(f16v3)
+             398:  151(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 395 396 397
+                              Store 389(f16v3) 398
+             399:  151(fvec3) Load 379(f16v1)
+             400:  151(fvec3) Load 383(f16v2)
+             401:  151(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 399 400
+                              Store 389(f16v3) 401
+             402:  151(fvec3) Load 379(f16v1)
+             403:  151(fvec3) Load 383(f16v2)
+             404:   28(float) Load 378(f16)
+             405:  151(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 402 403 404
+                              Store 389(f16v3) 405
+                              Return
+                              FunctionEnd
+22(builtinMatrixFuncs():           2 Function None 3
+              23:             Label
+      408(f16m3):    407(ptr) Variable Function
+      409(f16m1):    407(ptr) Variable Function
+      411(f16m2):    407(ptr) Variable Function
+      420(f16v1):    152(ptr) Variable Function
+      422(f16v2):     30(ptr) Variable Function
+      427(f16m4):    426(ptr) Variable Function
+        430(f16):     35(ptr) Variable Function
+      433(f16m5):    432(ptr) Variable Function
+      438(f16m6):    437(ptr) Variable Function
+      439(f16m7):    437(ptr) Variable Function
+             410:         406 Load 409(f16m1)
+             412:         406 Load 411(f16m2)
+             413:  151(fvec3) CompositeExtract 410 0
+             414:  151(fvec3) CompositeExtract 412 0
+             415:  151(fvec3) FMul 413 414
+             416:  151(fvec3) CompositeExtract 410 1
+             417:  151(fvec3) CompositeExtract 412 1
+             418:  151(fvec3) FMul 416 417
+             419:         406 CompositeConstruct 415 418
+                              Store 408(f16m3) 419
+             421:  151(fvec3) Load 420(f16v1)
+             423:   29(fvec2) Load 422(f16v2)
+             424:         406 OuterProduct 421 423
+                              Store 409(f16m1) 424
+             428:         406 Load 409(f16m1)
+             429:         425 Transpose 428
+                              Store 427(f16m4) 429
+             434:         431 Load 433(f16m5)
+             435:   28(float) ExtInst 1(GLSL.std.450) 33(Determinant) 434
+                              Store 430(f16) 435
+             440:         436 Load 439(f16m7)
+             441:         436 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 440
+                              Store 438(f16m6) 441
+                              Return
+                              FunctionEnd
+24(builtinVecRelFuncs():           2 Function None 3
+              25:             Label
+         442(bv):    155(ptr) Variable Function
+      443(f16v1):    152(ptr) Variable Function
+      445(f16v2):    152(ptr) Variable Function
+             444:  151(fvec3) Load 443(f16v1)
+             446:  151(fvec3) Load 445(f16v2)
+             447:  154(bvec3) FOrdLessThan 444 446
+                              Store 442(bv) 447
+             448:  151(fvec3) Load 443(f16v1)
+             449:  151(fvec3) Load 445(f16v2)
+             450:  154(bvec3) FOrdLessThanEqual 448 449
+                              Store 442(bv) 450
+             451:  151(fvec3) Load 443(f16v1)
+             452:  151(fvec3) Load 445(f16v2)
+             453:  154(bvec3) FOrdGreaterThan 451 452
+                              Store 442(bv) 453
+             454:  151(fvec3) Load 443(f16v1)
+             455:  151(fvec3) Load 445(f16v2)
+             456:  154(bvec3) FOrdGreaterThanEqual 454 455
+                              Store 442(bv) 456
+             457:  151(fvec3) Load 443(f16v1)
+             458:  151(fvec3) Load 445(f16v2)
+             459:  154(bvec3) FOrdEqual 457 458
+                              Store 442(bv) 459
+             460:  151(fvec3) Load 443(f16v1)
+             461:  151(fvec3) Load 445(f16v2)
+             462:  154(bvec3) FOrdNotEqual 460 461
+                              Store 442(bv) 462
+                              Return
+                              FunctionEnd
+26(builtinFragProcFuncs():           2 Function None 3
+              27:             Label
+       463(f16v):    152(ptr) Variable Function
+             467:    466(ptr) AccessChain 465(if16v) 34
+             468:   28(float) Load 467
+             469:   28(float) DPdx 468
+             470:     35(ptr) AccessChain 463(f16v) 34
+                              Store 470 469
+             471:    466(ptr) AccessChain 465(if16v) 90
+             472:   28(float) Load 471
+             473:   28(float) DPdy 472
+             474:     35(ptr) AccessChain 463(f16v) 90
+                              Store 474 473
+             475:  151(fvec3) Load 465(if16v)
+             476:   29(fvec2) VectorShuffle 475 475 0 1
+             477:   29(fvec2) DPdxFine 476
+             478:  151(fvec3) Load 463(f16v)
+             479:  151(fvec3) VectorShuffle 478 477 3 4 2
+                              Store 463(f16v) 479
+             480:  151(fvec3) Load 465(if16v)
+             481:   29(fvec2) VectorShuffle 480 480 0 1
+             482:   29(fvec2) DPdyFine 481
+             483:  151(fvec3) Load 463(f16v)
+             484:  151(fvec3) VectorShuffle 483 482 3 4 2
+                              Store 463(f16v) 484
+             485:  151(fvec3) Load 465(if16v)
+             486:  151(fvec3) DPdxCoarse 485
+                              Store 463(f16v) 486
+             487:  151(fvec3) Load 465(if16v)
+             488:  151(fvec3) DPdxCoarse 487
+                              Store 463(f16v) 488
+             489:    466(ptr) AccessChain 465(if16v) 34
+             490:   28(float) Load 489
+             491:   28(float) Fwidth 490
+             492:     35(ptr) AccessChain 463(f16v) 34
+                              Store 492 491
+             493:  151(fvec3) Load 465(if16v)
+             494:   29(fvec2) VectorShuffle 493 493 0 1
+             495:   29(fvec2) FwidthFine 494
+             496:  151(fvec3) Load 463(f16v)
+             497:  151(fvec3) VectorShuffle 496 495 3 4 2
+                              Store 463(f16v) 497
+             498:  151(fvec3) Load 465(if16v)
+             499:  151(fvec3) FwidthCoarse 498
+                              Store 463(f16v) 499
+             500:    466(ptr) AccessChain 465(if16v) 34
+             501:   28(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 500
+             502:     35(ptr) AccessChain 463(f16v) 34
+                              Store 502 501
+             504:  151(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 503
+             505:   29(fvec2) VectorShuffle 504 504 0 1
+             506:  151(fvec3) Load 463(f16v)
+             507:  151(fvec3) VectorShuffle 506 505 3 4 2
+                              Store 463(f16v) 507
+             510:  151(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 509
+                              Store 463(f16v) 510
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index 7ca61b7a9c5b39c494287eb9db1d572bac35c97c..274cb74612e48554f5619916b95f821245a3f936 100755
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,8 +1,4 @@
 spv.flowControl.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 39
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index c5fe4389aec4cfe18d973f711d9a5af23c8ca0e2..bb3bc2a1cc60a3767fae275fe59a1d7286d4780e 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,10 +1,6 @@
 spv.for-complex-condition.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index 0ea2f143901ff2b182218dafc6ab2f53cbf55fd1..764001dbe37750db961f27f5341727df34dc7b72 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.for-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 45
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index a127b7099c1c19f270a8dda762b32f51e15a0c47..0ec3584da801a88455384a37aa82946c33a736f7 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,10 +1,6 @@
 spv.for-nobody.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index 67706701ea103ca1ae0ce1b0ae666c4af7b549d2..c7346f9df8c0117c35daa0330897a54614d1ad32 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,10 +1,6 @@
 spv.for-notest.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 20
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index 52a047ff09954bff1ea7cfd7497e376c8993dbfe..996b65a4af04b9e5cd8405bf57c356fbfd1712be 100755
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,10 +1,6 @@
 spv.for-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index e606f9ccb941fa5b4497b3bcd2584c01323bc388..628c791f67fb24d655c802101a07367d388553cd 100755
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,8 +1,4 @@
 spv.forLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 131
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index a804e1df6f0b8f9fae80cad0cfd7229300c813dd..65759531edbdd7f5b74e6f050ee671e17934e207 100755
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,8 +1,4 @@
 spv.forwardFun.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index db40dd51ae4898f18e1043ebcbd5be180dda1736..69a525f7912930d4b05313ce2a790577c389c468 100755
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -3,10 +3,6 @@ WARNING: 0:3: varying deprecated in version 130; may be removed in future releas
 WARNING: 0:4: varying deprecated in version 130; may be removed in future release
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 76
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index aa2abd847c193853e4d381cd828a7748c88d6b4f..005a315bb1efd8efa5d0e5647ece58d6a86b3445 100755
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,10 +1,6 @@
 spv.functionSemantics.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 156
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index df825a09f1088ca2615ab86d63708dfba3932137..febbdf46981d5fe09e43da8ba492565d3cdd874d 100755
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,8 +1,4 @@
 spv.glFragColor.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 12
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..11818f6473b605a71a352b126475f8dccdffc089
--- /dev/null
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -0,0 +1,224 @@
+spv.glsl.register.autoassign.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 142
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 137
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "Func1("
+                              Name 11  "Func2("
+                              Name 13  "Func2_unused("
+                              Name 17  "g_tTex1"
+                              Name 21  "g_sSamp1"
+                              Name 27  "g_tTex2"
+                              Name 29  "g_sSamp2"
+                              Name 39  "g_tTex3"
+                              Name 46  "g_sSamp3"
+                              Name 64  "g_tTex4"
+                              Name 69  "g_sSamp4"
+                              Name 84  "g_tTex5"
+                              Name 86  "g_sSamp5"
+                              Name 93  "MyStruct_t"
+                              MemberName 93(MyStruct_t) 0  "a"
+                              MemberName 93(MyStruct_t) 1  "b"
+                              MemberName 93(MyStruct_t) 2  "c"
+                              Name 95  "myblock"
+                              MemberName 95(myblock) 0  "mystruct"
+                              MemberName 95(myblock) 1  "myvec4_a"
+                              MemberName 95(myblock) 2  "myvec4_b"
+                              MemberName 95(myblock) 3  "myint4_a"
+                              Name 97  ""
+                              Name 119  "g_tTex_unused1"
+                              Name 121  "g_sSamp_unused1"
+                              Name 126  "g_tTex_unused2"
+                              Name 128  "g_sSamp_unused2"
+                              Name 137  "FragColor"
+                              Name 141  "g_tTex_unused3"
+                              Decorate 17(g_tTex1) DescriptorSet 0
+                              Decorate 17(g_tTex1) Binding 11
+                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_sSamp1) Binding 5
+                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 27(g_tTex2) Binding 14
+                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 29(g_sSamp2) Binding 6
+                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 39(g_tTex3) Binding 13
+                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 46(g_sSamp3) Binding 7
+                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 64(g_tTex4) Binding 15
+                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 69(g_sSamp4) Binding 8
+                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 84(g_tTex5) Binding 16
+                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              Decorate 86(g_sSamp5) Binding 9
+                              MemberDecorate 93(MyStruct_t) 0 Offset 0
+                              MemberDecorate 93(MyStruct_t) 1 Offset 4
+                              MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              MemberDecorate 95(myblock) 0 Offset 0
+                              MemberDecorate 95(myblock) 1 Offset 32
+                              MemberDecorate 95(myblock) 2 Offset 48
+                              MemberDecorate 95(myblock) 3 Offset 64
+                              Decorate 95(myblock) Block
+                              Decorate 97 DescriptorSet 0
+                              Decorate 97 Binding 24
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) Binding 10
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) Binding 12
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 141(g_tTex_unused3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+     17(g_tTex1):     16(ptr) Variable UniformConstant
+              19:             TypeSampler
+              20:             TypePointer UniformConstant 19
+    21(g_sSamp1):     20(ptr) Variable UniformConstant
+              23:             TypeSampledImage 15
+              25:    6(float) Constant 1036831949
+     27(g_tTex2):     16(ptr) Variable UniformConstant
+    29(g_sSamp2):     20(ptr) Variable UniformConstant
+              32:    6(float) Constant 1045220557
+              35:             TypeInt 32 0
+              36:     35(int) Constant 2
+              37:             TypeArray 15 36
+              38:             TypePointer UniformConstant 37
+     39(g_tTex3):     38(ptr) Variable UniformConstant
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              44:             TypeArray 19 36
+              45:             TypePointer UniformConstant 44
+    46(g_sSamp3):     45(ptr) Variable UniformConstant
+              50:    6(float) Constant 1050253722
+              53:     40(int) Constant 1
+              61:     35(int) Constant 3
+              62:             TypeArray 15 61
+              63:             TypePointer UniformConstant 62
+     64(g_tTex4):     63(ptr) Variable UniformConstant
+              67:             TypeArray 19 61
+              68:             TypePointer UniformConstant 67
+    69(g_sSamp4):     68(ptr) Variable UniformConstant
+              73:    6(float) Constant 1053609165
+              76:     40(int) Constant 2
+     84(g_tTex5):     16(ptr) Variable UniformConstant
+    86(g_sSamp5):     20(ptr) Variable UniformConstant
+              89:    6(float) Constant 1056964608
+              92:             TypeVector 6(float) 3
+  93(MyStruct_t):             TypeStruct 40(int) 6(float) 92(fvec3)
+              94:             TypeVector 40(int) 4
+     95(myblock):             TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4)
+              96:             TypePointer Uniform 95(myblock)
+              97:     96(ptr) Variable Uniform
+              98:     35(int) Constant 1
+              99:             TypePointer Uniform 6(float)
+119(g_tTex_unused1):     16(ptr) Variable UniformConstant
+121(g_sSamp_unused1):     20(ptr) Variable UniformConstant
+             124:    6(float) Constant 1066192077
+126(g_tTex_unused2):     16(ptr) Variable UniformConstant
+128(g_sSamp_unused2):     20(ptr) Variable UniformConstant
+             131:    6(float) Constant 1067030938
+             136:             TypePointer Output 7(fvec4)
+  137(FragColor):    136(ptr) Variable Output
+141(g_tTex_unused3):     16(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+             138:    7(fvec4) FunctionCall 9(Func1()
+             139:    7(fvec4) FunctionCall 11(Func2()
+             140:    7(fvec4) FAdd 138 139
+                              Store 137(FragColor) 140
+                              Return
+                              FunctionEnd
+       9(Func1():    7(fvec4) Function None 8
+              10:             Label
+              18:          15 Load 17(g_tTex1)
+              22:          19 Load 21(g_sSamp1)
+              24:          23 SampledImage 18 22
+              26:    7(fvec4) ImageSampleImplicitLod 24 25
+              28:          15 Load 27(g_tTex2)
+              30:          19 Load 29(g_sSamp2)
+              31:          23 SampledImage 28 30
+              33:    7(fvec4) ImageSampleImplicitLod 31 32
+              34:    7(fvec4) FAdd 26 33
+              42:     16(ptr) AccessChain 39(g_tTex3) 41
+              43:          15 Load 42
+              47:     20(ptr) AccessChain 46(g_sSamp3) 41
+              48:          19 Load 47
+              49:          23 SampledImage 43 48
+              51:    7(fvec4) ImageSampleImplicitLod 49 50
+              52:    7(fvec4) FAdd 34 51
+              54:     16(ptr) AccessChain 39(g_tTex3) 53
+              55:          15 Load 54
+              56:     20(ptr) AccessChain 46(g_sSamp3) 53
+              57:          19 Load 56
+              58:          23 SampledImage 55 57
+              59:    7(fvec4) ImageSampleImplicitLod 58 50
+              60:    7(fvec4) FAdd 52 59
+              65:     16(ptr) AccessChain 64(g_tTex4) 53
+              66:          15 Load 65
+              70:     20(ptr) AccessChain 69(g_sSamp4) 53
+              71:          19 Load 70
+              72:          23 SampledImage 66 71
+              74:    7(fvec4) ImageSampleImplicitLod 72 73
+              75:    7(fvec4) FAdd 60 74
+              77:     16(ptr) AccessChain 64(g_tTex4) 76
+              78:          15 Load 77
+              79:     20(ptr) AccessChain 69(g_sSamp4) 76
+              80:          19 Load 79
+              81:          23 SampledImage 78 80
+              82:    7(fvec4) ImageSampleImplicitLod 81 73
+              83:    7(fvec4) FAdd 75 82
+              85:          15 Load 84(g_tTex5)
+              87:          19 Load 86(g_sSamp5)
+              88:          23 SampledImage 85 87
+              90:    7(fvec4) ImageSampleImplicitLod 88 89
+              91:    7(fvec4) FAdd 83 90
+             100:     99(ptr) AccessChain 97 41 76 98
+             101:    6(float) Load 100
+             102:    7(fvec4) CompositeConstruct 101 101 101 101
+             103:    7(fvec4) FAdd 91 102
+                              ReturnValue 103
+                              FunctionEnd
+      11(Func2():    7(fvec4) Function None 8
+              12:             Label
+             106:          15 Load 17(g_tTex1)
+             107:          19 Load 21(g_sSamp1)
+             108:          23 SampledImage 106 107
+             109:    7(fvec4) ImageSampleImplicitLod 108 25
+             110:     16(ptr) AccessChain 39(g_tTex3) 53
+             111:          15 Load 110
+             112:     20(ptr) AccessChain 46(g_sSamp3) 53
+             113:          19 Load 112
+             114:          23 SampledImage 111 113
+             115:    7(fvec4) ImageSampleImplicitLod 114 50
+             116:    7(fvec4) FAdd 109 115
+                              ReturnValue 116
+                              FunctionEnd
+13(Func2_unused():    7(fvec4) Function None 8
+              14:             Label
+             120:          15 Load 119(g_tTex_unused1)
+             122:          19 Load 121(g_sSamp_unused1)
+             123:          23 SampledImage 120 122
+             125:    7(fvec4) ImageSampleImplicitLod 123 124
+             127:          15 Load 126(g_tTex_unused2)
+             129:          19 Load 128(g_sSamp_unused2)
+             130:          23 SampledImage 127 129
+             132:    7(fvec4) ImageSampleImplicitLod 130 131
+             133:    7(fvec4) FAdd 125 132
+                              ReturnValue 133
+                              FunctionEnd
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..327ac04aea56da219ce67a0bbef58624c8bbec66
--- /dev/null
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -0,0 +1,218 @@
+spv.glsl.register.noautoassign.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 142
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 137
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "Func1("
+                              Name 11  "Func2("
+                              Name 13  "Func2_unused("
+                              Name 17  "g_tTex1"
+                              Name 21  "g_sSamp1"
+                              Name 27  "g_tTex2"
+                              Name 29  "g_sSamp2"
+                              Name 39  "g_tTex3"
+                              Name 46  "g_sSamp3"
+                              Name 64  "g_tTex4"
+                              Name 69  "g_sSamp4"
+                              Name 84  "g_tTex5"
+                              Name 86  "g_sSamp5"
+                              Name 93  "MyStruct_t"
+                              MemberName 93(MyStruct_t) 0  "a"
+                              MemberName 93(MyStruct_t) 1  "b"
+                              MemberName 93(MyStruct_t) 2  "c"
+                              Name 95  "myblock"
+                              MemberName 95(myblock) 0  "mystruct"
+                              MemberName 95(myblock) 1  "myvec4_a"
+                              MemberName 95(myblock) 2  "myvec4_b"
+                              MemberName 95(myblock) 3  "myint4_a"
+                              Name 97  ""
+                              Name 119  "g_tTex_unused1"
+                              Name 121  "g_sSamp_unused1"
+                              Name 126  "g_tTex_unused2"
+                              Name 128  "g_sSamp_unused2"
+                              Name 137  "FragColor"
+                              Name 141  "g_tTex_unused3"
+                              Decorate 17(g_tTex1) DescriptorSet 0
+                              Decorate 17(g_tTex1) Binding 11
+                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_sSamp1) Binding 5
+                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 39(g_tTex3) Binding 13
+                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 46(g_sSamp3) Binding 7
+                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              MemberDecorate 93(MyStruct_t) 0 Offset 0
+                              MemberDecorate 93(MyStruct_t) 1 Offset 4
+                              MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              MemberDecorate 95(myblock) 0 Offset 0
+                              MemberDecorate 95(myblock) 1 Offset 32
+                              MemberDecorate 95(myblock) 2 Offset 48
+                              MemberDecorate 95(myblock) 3 Offset 64
+                              Decorate 95(myblock) Block
+                              Decorate 97 DescriptorSet 0
+                              Decorate 97 Binding 19
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) Binding 10
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) Binding 12
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 141(g_tTex_unused3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+     17(g_tTex1):     16(ptr) Variable UniformConstant
+              19:             TypeSampler
+              20:             TypePointer UniformConstant 19
+    21(g_sSamp1):     20(ptr) Variable UniformConstant
+              23:             TypeSampledImage 15
+              25:    6(float) Constant 1036831949
+     27(g_tTex2):     16(ptr) Variable UniformConstant
+    29(g_sSamp2):     20(ptr) Variable UniformConstant
+              32:    6(float) Constant 1045220557
+              35:             TypeInt 32 0
+              36:     35(int) Constant 2
+              37:             TypeArray 15 36
+              38:             TypePointer UniformConstant 37
+     39(g_tTex3):     38(ptr) Variable UniformConstant
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              44:             TypeArray 19 36
+              45:             TypePointer UniformConstant 44
+    46(g_sSamp3):     45(ptr) Variable UniformConstant
+              50:    6(float) Constant 1050253722
+              53:     40(int) Constant 1
+              61:     35(int) Constant 3
+              62:             TypeArray 15 61
+              63:             TypePointer UniformConstant 62
+     64(g_tTex4):     63(ptr) Variable UniformConstant
+              67:             TypeArray 19 61
+              68:             TypePointer UniformConstant 67
+    69(g_sSamp4):     68(ptr) Variable UniformConstant
+              73:    6(float) Constant 1053609165
+              76:     40(int) Constant 2
+     84(g_tTex5):     16(ptr) Variable UniformConstant
+    86(g_sSamp5):     20(ptr) Variable UniformConstant
+              89:    6(float) Constant 1056964608
+              92:             TypeVector 6(float) 3
+  93(MyStruct_t):             TypeStruct 40(int) 6(float) 92(fvec3)
+              94:             TypeVector 40(int) 4
+     95(myblock):             TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4)
+              96:             TypePointer Uniform 95(myblock)
+              97:     96(ptr) Variable Uniform
+              98:     35(int) Constant 1
+              99:             TypePointer Uniform 6(float)
+119(g_tTex_unused1):     16(ptr) Variable UniformConstant
+121(g_sSamp_unused1):     20(ptr) Variable UniformConstant
+             124:    6(float) Constant 1066192077
+126(g_tTex_unused2):     16(ptr) Variable UniformConstant
+128(g_sSamp_unused2):     20(ptr) Variable UniformConstant
+             131:    6(float) Constant 1067030938
+             136:             TypePointer Output 7(fvec4)
+  137(FragColor):    136(ptr) Variable Output
+141(g_tTex_unused3):     16(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+             138:    7(fvec4) FunctionCall 9(Func1()
+             139:    7(fvec4) FunctionCall 11(Func2()
+             140:    7(fvec4) FAdd 138 139
+                              Store 137(FragColor) 140
+                              Return
+                              FunctionEnd
+       9(Func1():    7(fvec4) Function None 8
+              10:             Label
+              18:          15 Load 17(g_tTex1)
+              22:          19 Load 21(g_sSamp1)
+              24:          23 SampledImage 18 22
+              26:    7(fvec4) ImageSampleImplicitLod 24 25
+              28:          15 Load 27(g_tTex2)
+              30:          19 Load 29(g_sSamp2)
+              31:          23 SampledImage 28 30
+              33:    7(fvec4) ImageSampleImplicitLod 31 32
+              34:    7(fvec4) FAdd 26 33
+              42:     16(ptr) AccessChain 39(g_tTex3) 41
+              43:          15 Load 42
+              47:     20(ptr) AccessChain 46(g_sSamp3) 41
+              48:          19 Load 47
+              49:          23 SampledImage 43 48
+              51:    7(fvec4) ImageSampleImplicitLod 49 50
+              52:    7(fvec4) FAdd 34 51
+              54:     16(ptr) AccessChain 39(g_tTex3) 53
+              55:          15 Load 54
+              56:     20(ptr) AccessChain 46(g_sSamp3) 53
+              57:          19 Load 56
+              58:          23 SampledImage 55 57
+              59:    7(fvec4) ImageSampleImplicitLod 58 50
+              60:    7(fvec4) FAdd 52 59
+              65:     16(ptr) AccessChain 64(g_tTex4) 53
+              66:          15 Load 65
+              70:     20(ptr) AccessChain 69(g_sSamp4) 53
+              71:          19 Load 70
+              72:          23 SampledImage 66 71
+              74:    7(fvec4) ImageSampleImplicitLod 72 73
+              75:    7(fvec4) FAdd 60 74
+              77:     16(ptr) AccessChain 64(g_tTex4) 76
+              78:          15 Load 77
+              79:     20(ptr) AccessChain 69(g_sSamp4) 76
+              80:          19 Load 79
+              81:          23 SampledImage 78 80
+              82:    7(fvec4) ImageSampleImplicitLod 81 73
+              83:    7(fvec4) FAdd 75 82
+              85:          15 Load 84(g_tTex5)
+              87:          19 Load 86(g_sSamp5)
+              88:          23 SampledImage 85 87
+              90:    7(fvec4) ImageSampleImplicitLod 88 89
+              91:    7(fvec4) FAdd 83 90
+             100:     99(ptr) AccessChain 97 41 76 98
+             101:    6(float) Load 100
+             102:    7(fvec4) CompositeConstruct 101 101 101 101
+             103:    7(fvec4) FAdd 91 102
+                              ReturnValue 103
+                              FunctionEnd
+      11(Func2():    7(fvec4) Function None 8
+              12:             Label
+             106:          15 Load 17(g_tTex1)
+             107:          19 Load 21(g_sSamp1)
+             108:          23 SampledImage 106 107
+             109:    7(fvec4) ImageSampleImplicitLod 108 25
+             110:     16(ptr) AccessChain 39(g_tTex3) 53
+             111:          15 Load 110
+             112:     20(ptr) AccessChain 46(g_sSamp3) 53
+             113:          19 Load 112
+             114:          23 SampledImage 111 113
+             115:    7(fvec4) ImageSampleImplicitLod 114 50
+             116:    7(fvec4) FAdd 109 115
+                              ReturnValue 116
+                              FunctionEnd
+13(Func2_unused():    7(fvec4) Function None 8
+              14:             Label
+             120:          15 Load 119(g_tTex_unused1)
+             122:          19 Load 121(g_sSamp_unused1)
+             123:          23 SampledImage 120 122
+             125:    7(fvec4) ImageSampleImplicitLod 123 124
+             127:          15 Load 126(g_tTex_unused2)
+             129:          19 Load 128(g_sSamp_unused2)
+             130:          23 SampledImage 127 129
+             132:    7(fvec4) ImageSampleImplicitLod 130 131
+             133:    7(fvec4) FAdd 125 132
+                              ReturnValue 133
+                              FunctionEnd
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 2bd26f79bbbaea097ec98d0ed3dee51cbdcc89a8..2dd7d4b3f4a0a9c84aa51dbca28f192ee9e8aa18 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,10 +1,6 @@
 spv.image.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 378
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index acfee730053a678c686caa90a43f8d8ca5bc6414..cb5433ec6a679cb62a3621f9f3b98649caf05289 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,10 +1,6 @@
 spv.int64.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 480
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 22451b9ffa4b41729ae7a4c0ecac0eb8ac6fa939..93d2dfdae19a52910218d77328c780316ded1177 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,10 +1,6 @@
 spv.intOps.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 268
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index a5076421ba9dc06a7ec66247b227a249ca73ea39..88d8e53cfd6bbbb4488d80339a158cb489ec6f35 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,10 +1,6 @@
 spv.interpOps.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 100
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index fd785ab42770d097dd329ec14864eee1b3fe0e6c..0d0b28bbec6193db3dd22f4882caefba947d04fe 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,10 +1,6 @@
 spv.layoutNested.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 66
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 81f98a61c2ba1aafbfdc92d74a902eb6b60f1c84..76f6ca63d60ce425a1b668a78b50b8047a77a6db 100755
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,8 +1,4 @@
 spv.length.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 33
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index 21c389a0bd31ca6698fdeeefc499c0ba93fe0ba9..7ffa874171c0e7d46e535cc74f0cf48926009117 100755
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,10 +1,6 @@
 spv.localAggregates.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 136
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 952f7941790f9c5ca0a9a5a2bf3580c5839f9a98..8b1b48076d7a1feb9f653dcbd242fe41e24067f0 100755
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,8 +1,4 @@
 spv.loops.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 725
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 5f10bd35901cfdc46683b016f6c2ad45b2abc533..707a78df0e8cd6914467224537d618adf2dff2b0 100755
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,8 +1,4 @@
 spv.loopsArtificial.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 158
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 0aa0a52da90337c3202fbd67d4c767dfb00172a0..38d9d2cf1fcadfec9dd96897ced2ead65334fa3a 100755
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,10 +1,6 @@
 spv.matFun.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 103
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index 7b34fca4dece6828b2aa01000994733a85c114d0..700e90ebcdc2e98425138d594d4edf8b1ba0900b 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,10 +1,6 @@
 spv.matrix.frag
 Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 261
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index e0497b09d3c25683cd6b03bd4bc081fd7d5d8df5..78facff346c359b2813fcdc9de46207aaa4b7f83 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,8 +1,4 @@
 spv.matrix2.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 221
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index e2bfb392948683b6173f83425d269459d6af7d6f..a990e47594a5f60d66e167f6d043e8bd527e765d 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,10 +1,6 @@
 spv.memoryQualifier.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 97
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 6e326187b2126affed540be4b4c7f6f8a1190e97..58bbb0627af97d71aa33c6c22792df6f85f32fb6 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,10 +1,6 @@
 spv.merge-unreachable.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 25
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 28402ce24bf0c543f7d89fbb7164095aa77f2368..f8c0eead85baa5611c098008a52b9957b12ea3b2 100755
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,10 +1,6 @@
 spv.multiStruct.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 157
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index dcbcfa001963e4ab43ce829cd16a157342a81149..b9b0cb2cb669628797e10c357c38e0a41caafaca 100755
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,10 +1,6 @@
 spv.multiStructFuncall.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 63
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 3206faa314d84c272b2750d0a7111bc1db0da7d7..ea694eeafb23edbc96eb1b413e9d06d999c144b2 100755
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,10 +1,6 @@
 spv.newTexture.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 284
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index e9b23566a4b9ceff6325be61398c4d9f7d546afd..41d2a43147aa17a17340dc1e172fc645dc1813a0 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,10 +1,6 @@
 spv.noDeadDecorations.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 32
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
new file mode 100755
index 0000000000000000000000000000000000000000..0f88436c5a9df2e4aab9a9650997e2ca4094e7c0
--- /dev/null
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -0,0 +1,30 @@
+spv.noWorkgroup.comp
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 12
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Decorate 7 SpecId 18
+                              Decorate 8 SpecId 10
+                              Decorate 9 SpecId 19
+                              Decorate 11 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) SpecConstant 1
+               8:      6(int) SpecConstant 1
+               9:      6(int) SpecConstant 1
+              10:             TypeVector 6(int) 3
+              11:   10(ivec3) SpecConstantComposite 7 8 9
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 329a71cb299dfb75eed18d099453efccb2395af3..684d4f16b3128d7f0987aeb812bd4fe69e932c7e 100755
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,8 +1,4 @@
 spv.nonSquare.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 90
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
new file mode 100755
index 0000000000000000000000000000000000000000..ea4be8f4c66792a844f00072794dd73e99e24bda
--- /dev/null
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -0,0 +1,55 @@
+spv.offsets.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 7  "n1"
+                              MemberName 7(n1) 0  "a"
+                              MemberName 7(n1) 1  "b"
+                              MemberName 7(n1) 2  "c"
+                              MemberName 7(n1) 3  "d"
+                              Name 9  "i1"
+                              Name 12  "n2"
+                              MemberName 12(n2) 0  "e"
+                              MemberName 12(n2) 1  "f"
+                              MemberName 12(n2) 2  "g"
+                              MemberName 12(n2) 3  "h"
+                              Name 14  "i2"
+                              MemberDecorate 7(n1) 0 Offset 8
+                              MemberDecorate 7(n1) 1 Offset 4
+                              MemberDecorate 7(n1) 2 Offset 0
+                              MemberDecorate 7(n1) 3 Offset 12
+                              Decorate 7(n1) Block
+                              Decorate 9(i1) DescriptorSet 0
+                              Decorate 9(i1) Binding 0
+                              MemberDecorate 12(n2) 0 Offset 32
+                              MemberDecorate 12(n2) 1 Offset 48
+                              MemberDecorate 12(n2) 2 Offset 16
+                              MemberDecorate 12(n2) 3 Offset 0
+                              Decorate 12(n2) BufferBlock
+                              Decorate 14(i2) DescriptorSet 0
+                              Decorate 14(i2) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+           7(n1):             TypeStruct 6(int) 6(int) 6(int) 6(int)
+               8:             TypePointer Uniform 7(n1)
+           9(i1):      8(ptr) Variable Uniform
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 3
+          12(n2):             TypeStruct 11(fvec3) 11(fvec3) 11(fvec3) 11(fvec3)
+              13:             TypePointer Uniform 12(n2)
+          14(i2):     13(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 0331a14ac00e5987a703e140b53e577cea967062..4bae395a8aa3a7fcdee20b147777185dcd1cf0b2 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,10 +1,6 @@
 spv.precise.tesc
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation control stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 72
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index 4033981228300dbcb203cc9bb109f263480c981b..4f1839c7752e80df6b265b7efa20c5cc189a0d5f 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,10 +1,6 @@
 spv.precise.tese
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked tessellation evaluation stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 119
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 33e4fb204ad7d29dabd3ad2c0b92d29ac8544464..f49b35663818be180e9925734b9e1cb326795775 100755
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,10 +1,6 @@
 spv.precision.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 127
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 9581267ba71c2416c3d63e59ba37961918617729..410286cad0fb036ad4b0958f5b07f47c4a60c35e 100755
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,8 +1,4 @@
 spv.prepost.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 94
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index 6b314e082ec3b5d4fe93f7fb0e67471b5324d3f8..bdefd63de6d1cb9f6f5ff10ede171d7909113745 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,10 +1,6 @@
 spv.pushConstant.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index d2baf7229ffc037e7f7f029bdaba8c389b7d2532..37f474cca54a8b6499170d9aaf15798bcc63b81b 100755
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,10 +1,6 @@
 spv.qualifiers.vert
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 21
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 6d2b2b97d269ae23f9ac2fa01853efd4d4a7ac08..fbdcbc8130f132513bd96017eed1abf390cd552f 100755
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,13 +1,9 @@
 spv.queryL.frag
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 237
+// Id's are bound by 224
 
                               Capability Shader
                               Capability SampledRect
@@ -24,48 +20,48 @@ Linked fragment stage:
                               Name 9  "lod"
                               Name 13  "samp1D"
                               Name 16  "pf"
-                              Name 24  "isamp2D"
-                              Name 26  "pf2"
-                              Name 36  "usamp3D"
-                              Name 40  "pf3"
-                              Name 49  "sampCube"
-                              Name 59  "isamp1DA"
-                              Name 69  "usamp2DA"
-                              Name 79  "isampCubeA"
-                              Name 89  "samp1Ds"
-                              Name 99  "samp2Ds"
-                              Name 109  "sampCubes"
-                              Name 119  "samp1DAs"
-                              Name 129  "samp2DAs"
-                              Name 139  "sampCubeAs"
-                              Name 147  "levels"
-                              Name 154  "usamp2D"
-                              Name 163  "isamp3D"
-                              Name 172  "isampCube"
-                              Name 186  "samp2DA"
-                              Name 195  "usampCubeA"
-                              Name 232  "sampBuf"
-                              Name 236  "sampRect"
+                              Name 23  "isamp2D"
+                              Name 25  "pf2"
+                              Name 34  "usamp3D"
+                              Name 38  "pf3"
+                              Name 46  "sampCube"
+                              Name 55  "isamp1DA"
+                              Name 64  "usamp2DA"
+                              Name 73  "isampCubeA"
+                              Name 82  "samp1Ds"
+                              Name 91  "samp2Ds"
+                              Name 100  "sampCubes"
+                              Name 109  "samp1DAs"
+                              Name 118  "samp2DAs"
+                              Name 127  "sampCubeAs"
+                              Name 134  "levels"
+                              Name 141  "usamp2D"
+                              Name 150  "isamp3D"
+                              Name 159  "isampCube"
+                              Name 173  "samp2DA"
+                              Name 182  "usampCubeA"
+                              Name 219  "sampBuf"
+                              Name 223  "sampRect"
                               Decorate 13(samp1D) DescriptorSet 0
-                              Decorate 24(isamp2D) DescriptorSet 0
-                              Decorate 36(usamp3D) DescriptorSet 0
-                              Decorate 49(sampCube) DescriptorSet 0
-                              Decorate 59(isamp1DA) DescriptorSet 0
-                              Decorate 69(usamp2DA) DescriptorSet 0
-                              Decorate 79(isampCubeA) DescriptorSet 0
-                              Decorate 89(samp1Ds) DescriptorSet 0
-                              Decorate 99(samp2Ds) DescriptorSet 0
-                              Decorate 109(sampCubes) DescriptorSet 0
-                              Decorate 119(samp1DAs) DescriptorSet 0
-                              Decorate 129(samp2DAs) DescriptorSet 0
-                              Decorate 139(sampCubeAs) DescriptorSet 0
-                              Decorate 154(usamp2D) DescriptorSet 0
-                              Decorate 163(isamp3D) DescriptorSet 0
-                              Decorate 172(isampCube) DescriptorSet 0
-                              Decorate 186(samp2DA) DescriptorSet 0
-                              Decorate 195(usampCubeA) DescriptorSet 0
-                              Decorate 232(sampBuf) DescriptorSet 0
-                              Decorate 236(sampRect) DescriptorSet 0
+                              Decorate 23(isamp2D) DescriptorSet 0
+                              Decorate 34(usamp3D) DescriptorSet 0
+                              Decorate 46(sampCube) DescriptorSet 0
+                              Decorate 55(isamp1DA) DescriptorSet 0
+                              Decorate 64(usamp2DA) DescriptorSet 0
+                              Decorate 73(isampCubeA) DescriptorSet 0
+                              Decorate 82(samp1Ds) DescriptorSet 0
+                              Decorate 91(samp2Ds) DescriptorSet 0
+                              Decorate 100(sampCubes) DescriptorSet 0
+                              Decorate 109(samp1DAs) DescriptorSet 0
+                              Decorate 118(samp2DAs) DescriptorSet 0
+                              Decorate 127(sampCubeAs) DescriptorSet 0
+                              Decorate 141(usamp2D) DescriptorSet 0
+                              Decorate 150(isamp3D) DescriptorSet 0
+                              Decorate 159(isampCube) DescriptorSet 0
+                              Decorate 173(samp2DA) DescriptorSet 0
+                              Decorate 182(usampCubeA) DescriptorSet 0
+                              Decorate 219(sampBuf) DescriptorSet 0
+                              Decorate 223(sampRect) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -76,256 +72,243 @@ Linked fragment stage:
               12:             TypePointer UniformConstant 11
       13(samp1D):     12(ptr) Variable UniformConstant
               15:             TypePointer Function 6(float)
-              20:             TypeInt 32 1
-              21:             TypeImage 20(int) 2D sampled format:Unknown
-              22:             TypeSampledImage 21
-              23:             TypePointer UniformConstant 22
-     24(isamp2D):     23(ptr) Variable UniformConstant
-              32:             TypeInt 32 0
-              33:             TypeImage 32(int) 3D sampled format:Unknown
-              34:             TypeSampledImage 33
-              35:             TypePointer UniformConstant 34
-     36(usamp3D):     35(ptr) Variable UniformConstant
-              38:             TypeVector 6(float) 3
-              39:             TypePointer Function 38(fvec3)
-              46:             TypeImage 6(float) Cube sampled format:Unknown
-              47:             TypeSampledImage 46
-              48:             TypePointer UniformConstant 47
-    49(sampCube):     48(ptr) Variable UniformConstant
-              56:             TypeImage 20(int) 1D array sampled format:Unknown
-              57:             TypeSampledImage 56
-              58:             TypePointer UniformConstant 57
-    59(isamp1DA):     58(ptr) Variable UniformConstant
-              66:             TypeImage 32(int) 2D array sampled format:Unknown
-              67:             TypeSampledImage 66
-              68:             TypePointer UniformConstant 67
-    69(usamp2DA):     68(ptr) Variable UniformConstant
-              76:             TypeImage 20(int) Cube array sampled format:Unknown
-              77:             TypeSampledImage 76
-              78:             TypePointer UniformConstant 77
-  79(isampCubeA):     78(ptr) Variable UniformConstant
-              86:             TypeImage 6(float) 1D depth sampled format:Unknown
-              87:             TypeSampledImage 86
-              88:             TypePointer UniformConstant 87
-     89(samp1Ds):     88(ptr) Variable UniformConstant
-              96:             TypeImage 6(float) 2D depth sampled format:Unknown
-              97:             TypeSampledImage 96
-              98:             TypePointer UniformConstant 97
-     99(samp2Ds):     98(ptr) Variable UniformConstant
-             106:             TypeImage 6(float) Cube depth sampled format:Unknown
+              19:             TypeInt 32 1
+              20:             TypeImage 19(int) 2D sampled format:Unknown
+              21:             TypeSampledImage 20
+              22:             TypePointer UniformConstant 21
+     23(isamp2D):     22(ptr) Variable UniformConstant
+              30:             TypeInt 32 0
+              31:             TypeImage 30(int) 3D sampled format:Unknown
+              32:             TypeSampledImage 31
+              33:             TypePointer UniformConstant 32
+     34(usamp3D):     33(ptr) Variable UniformConstant
+              36:             TypeVector 6(float) 3
+              37:             TypePointer Function 36(fvec3)
+              43:             TypeImage 6(float) Cube sampled format:Unknown
+              44:             TypeSampledImage 43
+              45:             TypePointer UniformConstant 44
+    46(sampCube):     45(ptr) Variable UniformConstant
+              52:             TypeImage 19(int) 1D array sampled format:Unknown
+              53:             TypeSampledImage 52
+              54:             TypePointer UniformConstant 53
+    55(isamp1DA):     54(ptr) Variable UniformConstant
+              61:             TypeImage 30(int) 2D array sampled format:Unknown
+              62:             TypeSampledImage 61
+              63:             TypePointer UniformConstant 62
+    64(usamp2DA):     63(ptr) Variable UniformConstant
+              70:             TypeImage 19(int) Cube array sampled format:Unknown
+              71:             TypeSampledImage 70
+              72:             TypePointer UniformConstant 71
+  73(isampCubeA):     72(ptr) Variable UniformConstant
+              79:             TypeImage 6(float) 1D depth sampled format:Unknown
+              80:             TypeSampledImage 79
+              81:             TypePointer UniformConstant 80
+     82(samp1Ds):     81(ptr) Variable UniformConstant
+              88:             TypeImage 6(float) 2D depth sampled format:Unknown
+              89:             TypeSampledImage 88
+              90:             TypePointer UniformConstant 89
+     91(samp2Ds):     90(ptr) Variable UniformConstant
+              97:             TypeImage 6(float) Cube depth sampled format:Unknown
+              98:             TypeSampledImage 97
+              99:             TypePointer UniformConstant 98
+  100(sampCubes):     99(ptr) Variable UniformConstant
+             106:             TypeImage 6(float) 1D depth array sampled format:Unknown
              107:             TypeSampledImage 106
              108:             TypePointer UniformConstant 107
-  109(sampCubes):    108(ptr) Variable UniformConstant
-             116:             TypeImage 6(float) 1D depth array sampled format:Unknown
-             117:             TypeSampledImage 116
-             118:             TypePointer UniformConstant 117
-   119(samp1DAs):    118(ptr) Variable UniformConstant
-             126:             TypeImage 6(float) 2D depth array sampled format:Unknown
-             127:             TypeSampledImage 126
-             128:             TypePointer UniformConstant 127
-   129(samp2DAs):    128(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             137:             TypeSampledImage 136
-             138:             TypePointer UniformConstant 137
- 139(sampCubeAs):    138(ptr) Variable UniformConstant
-             146:             TypePointer Function 20(int)
-             151:             TypeImage 32(int) 2D sampled format:Unknown
-             152:             TypeSampledImage 151
-             153:             TypePointer UniformConstant 152
-    154(usamp2D):    153(ptr) Variable UniformConstant
-             160:             TypeImage 20(int) 3D sampled format:Unknown
-             161:             TypeSampledImage 160
-             162:             TypePointer UniformConstant 161
-    163(isamp3D):    162(ptr) Variable UniformConstant
-             169:             TypeImage 20(int) Cube sampled format:Unknown
-             170:             TypeSampledImage 169
-             171:             TypePointer UniformConstant 170
-  172(isampCube):    171(ptr) Variable UniformConstant
-             183:             TypeImage 6(float) 2D array sampled format:Unknown
-             184:             TypeSampledImage 183
-             185:             TypePointer UniformConstant 184
-    186(samp2DA):    185(ptr) Variable UniformConstant
-             192:             TypeImage 32(int) Cube array sampled format:Unknown
-             193:             TypeSampledImage 192
-             194:             TypePointer UniformConstant 193
- 195(usampCubeA):    194(ptr) Variable UniformConstant
-             229:             TypeImage 6(float) Buffer sampled format:Unknown
-             230:             TypeSampledImage 229
-             231:             TypePointer UniformConstant 230
-    232(sampBuf):    231(ptr) Variable UniformConstant
-             233:             TypeImage 6(float) Rect sampled format:Unknown
-             234:             TypeSampledImage 233
-             235:             TypePointer UniformConstant 234
-   236(sampRect):    235(ptr) Variable UniformConstant
+   109(samp1DAs):    108(ptr) Variable UniformConstant
+             115:             TypeImage 6(float) 2D depth array sampled format:Unknown
+             116:             TypeSampledImage 115
+             117:             TypePointer UniformConstant 116
+   118(samp2DAs):    117(ptr) Variable UniformConstant
+             124:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             125:             TypeSampledImage 124
+             126:             TypePointer UniformConstant 125
+ 127(sampCubeAs):    126(ptr) Variable UniformConstant
+             133:             TypePointer Function 19(int)
+             138:             TypeImage 30(int) 2D sampled format:Unknown
+             139:             TypeSampledImage 138
+             140:             TypePointer UniformConstant 139
+    141(usamp2D):    140(ptr) Variable UniformConstant
+             147:             TypeImage 19(int) 3D sampled format:Unknown
+             148:             TypeSampledImage 147
+             149:             TypePointer UniformConstant 148
+    150(isamp3D):    149(ptr) Variable UniformConstant
+             156:             TypeImage 19(int) Cube sampled format:Unknown
+             157:             TypeSampledImage 156
+             158:             TypePointer UniformConstant 157
+  159(isampCube):    158(ptr) Variable UniformConstant
+             170:             TypeImage 6(float) 2D array sampled format:Unknown
+             171:             TypeSampledImage 170
+             172:             TypePointer UniformConstant 171
+    173(samp2DA):    172(ptr) Variable UniformConstant
+             179:             TypeImage 30(int) Cube array sampled format:Unknown
+             180:             TypeSampledImage 179
+             181:             TypePointer UniformConstant 180
+ 182(usampCubeA):    181(ptr) Variable UniformConstant
+             216:             TypeImage 6(float) Buffer sampled format:Unknown
+             217:             TypeSampledImage 216
+             218:             TypePointer UniformConstant 217
+    219(sampBuf):    218(ptr) Variable UniformConstant
+             220:             TypeImage 6(float) Rect sampled format:Unknown
+             221:             TypeSampledImage 220
+             222:             TypePointer UniformConstant 221
+   223(sampRect):    222(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           9(lod):      8(ptr) Variable Function
           16(pf):     15(ptr) Variable Function
-         26(pf2):      8(ptr) Variable Function
-         40(pf3):     39(ptr) Variable Function
-     147(levels):    146(ptr) Variable Function
+         25(pf2):      8(ptr) Variable Function
+         38(pf3):     37(ptr) Variable Function
+     134(levels):    133(ptr) Variable Function
               14:          11 Load 13(samp1D)
               17:    6(float) Load 16(pf)
-              18:          10 Image 14
-              19:    7(fvec2) ImageQueryLod 18 17
-                              Store 9(lod) 19
-              25:          22 Load 24(isamp2D)
-              27:    7(fvec2) Load 26(pf2)
-              28:          21 Image 25
-              29:    7(fvec2) ImageQueryLod 28 27
-              30:    7(fvec2) Load 9(lod)
-              31:    7(fvec2) FAdd 30 29
-                              Store 9(lod) 31
-              37:          34 Load 36(usamp3D)
-              41:   38(fvec3) Load 40(pf3)
-              42:          33 Image 37
-              43:    7(fvec2) ImageQueryLod 42 41
-              44:    7(fvec2) Load 9(lod)
-              45:    7(fvec2) FAdd 44 43
-                              Store 9(lod) 45
-              50:          47 Load 49(sampCube)
-              51:   38(fvec3) Load 40(pf3)
-              52:          46 Image 50
-              53:    7(fvec2) ImageQueryLod 52 51
-              54:    7(fvec2) Load 9(lod)
-              55:    7(fvec2) FAdd 54 53
-                              Store 9(lod) 55
-              60:          57 Load 59(isamp1DA)
-              61:    6(float) Load 16(pf)
-              62:          56 Image 60
-              63:    7(fvec2) ImageQueryLod 62 61
-              64:    7(fvec2) Load 9(lod)
-              65:    7(fvec2) FAdd 64 63
-                              Store 9(lod) 65
-              70:          67 Load 69(usamp2DA)
-              71:    7(fvec2) Load 26(pf2)
-              72:          66 Image 70
-              73:    7(fvec2) ImageQueryLod 72 71
-              74:    7(fvec2) Load 9(lod)
-              75:    7(fvec2) FAdd 74 73
-                              Store 9(lod) 75
-              80:          77 Load 79(isampCubeA)
-              81:   38(fvec3) Load 40(pf3)
-              82:          76 Image 80
-              83:    7(fvec2) ImageQueryLod 82 81
-              84:    7(fvec2) Load 9(lod)
-              85:    7(fvec2) FAdd 84 83
-                              Store 9(lod) 85
-              90:          87 Load 89(samp1Ds)
-              91:    6(float) Load 16(pf)
-              92:          86 Image 90
-              93:    7(fvec2) ImageQueryLod 92 91
-              94:    7(fvec2) Load 9(lod)
-              95:    7(fvec2) FAdd 94 93
-                              Store 9(lod) 95
-             100:          97 Load 99(samp2Ds)
-             101:    7(fvec2) Load 26(pf2)
-             102:          96 Image 100
-             103:    7(fvec2) ImageQueryLod 102 101
+              18:    7(fvec2) ImageQueryLod 14 17
+                              Store 9(lod) 18
+              24:          21 Load 23(isamp2D)
+              26:    7(fvec2) Load 25(pf2)
+              27:    7(fvec2) ImageQueryLod 24 26
+              28:    7(fvec2) Load 9(lod)
+              29:    7(fvec2) FAdd 28 27
+                              Store 9(lod) 29
+              35:          32 Load 34(usamp3D)
+              39:   36(fvec3) Load 38(pf3)
+              40:    7(fvec2) ImageQueryLod 35 39
+              41:    7(fvec2) Load 9(lod)
+              42:    7(fvec2) FAdd 41 40
+                              Store 9(lod) 42
+              47:          44 Load 46(sampCube)
+              48:   36(fvec3) Load 38(pf3)
+              49:    7(fvec2) ImageQueryLod 47 48
+              50:    7(fvec2) Load 9(lod)
+              51:    7(fvec2) FAdd 50 49
+                              Store 9(lod) 51
+              56:          53 Load 55(isamp1DA)
+              57:    6(float) Load 16(pf)
+              58:    7(fvec2) ImageQueryLod 56 57
+              59:    7(fvec2) Load 9(lod)
+              60:    7(fvec2) FAdd 59 58
+                              Store 9(lod) 60
+              65:          62 Load 64(usamp2DA)
+              66:    7(fvec2) Load 25(pf2)
+              67:    7(fvec2) ImageQueryLod 65 66
+              68:    7(fvec2) Load 9(lod)
+              69:    7(fvec2) FAdd 68 67
+                              Store 9(lod) 69
+              74:          71 Load 73(isampCubeA)
+              75:   36(fvec3) Load 38(pf3)
+              76:    7(fvec2) ImageQueryLod 74 75
+              77:    7(fvec2) Load 9(lod)
+              78:    7(fvec2) FAdd 77 76
+                              Store 9(lod) 78
+              83:          80 Load 82(samp1Ds)
+              84:    6(float) Load 16(pf)
+              85:    7(fvec2) ImageQueryLod 83 84
+              86:    7(fvec2) Load 9(lod)
+              87:    7(fvec2) FAdd 86 85
+                              Store 9(lod) 87
+              92:          89 Load 91(samp2Ds)
+              93:    7(fvec2) Load 25(pf2)
+              94:    7(fvec2) ImageQueryLod 92 93
+              95:    7(fvec2) Load 9(lod)
+              96:    7(fvec2) FAdd 95 94
+                              Store 9(lod) 96
+             101:          98 Load 100(sampCubes)
+             102:   36(fvec3) Load 38(pf3)
+             103:    7(fvec2) ImageQueryLod 101 102
              104:    7(fvec2) Load 9(lod)
              105:    7(fvec2) FAdd 104 103
                               Store 9(lod) 105
-             110:         107 Load 109(sampCubes)
-             111:   38(fvec3) Load 40(pf3)
-             112:         106 Image 110
-             113:    7(fvec2) ImageQueryLod 112 111
-             114:    7(fvec2) Load 9(lod)
-             115:    7(fvec2) FAdd 114 113
-                              Store 9(lod) 115
-             120:         117 Load 119(samp1DAs)
-             121:    6(float) Load 16(pf)
-             122:         116 Image 120
-             123:    7(fvec2) ImageQueryLod 122 121
-             124:    7(fvec2) Load 9(lod)
-             125:    7(fvec2) FAdd 124 123
-                              Store 9(lod) 125
-             130:         127 Load 129(samp2DAs)
-             131:    7(fvec2) Load 26(pf2)
-             132:         126 Image 130
-             133:    7(fvec2) ImageQueryLod 132 131
-             134:    7(fvec2) Load 9(lod)
-             135:    7(fvec2) FAdd 134 133
-                              Store 9(lod) 135
-             140:         137 Load 139(sampCubeAs)
-             141:   38(fvec3) Load 40(pf3)
-             142:         136 Image 140
-             143:    7(fvec2) ImageQueryLod 142 141
-             144:    7(fvec2) Load 9(lod)
-             145:    7(fvec2) FAdd 144 143
-                              Store 9(lod) 145
-             148:          11 Load 13(samp1D)
-             149:          10 Image 148
-             150:     20(int) ImageQueryLevels 149
-                              Store 147(levels) 150
-             155:         152 Load 154(usamp2D)
-             156:         151 Image 155
-             157:     20(int) ImageQueryLevels 156
-             158:     20(int) Load 147(levels)
-             159:     20(int) IAdd 158 157
-                              Store 147(levels) 159
-             164:         161 Load 163(isamp3D)
-             165:         160 Image 164
-             166:     20(int) ImageQueryLevels 165
-             167:     20(int) Load 147(levels)
-             168:     20(int) IAdd 167 166
-                              Store 147(levels) 168
-             173:         170 Load 172(isampCube)
-             174:         169 Image 173
-             175:     20(int) ImageQueryLevels 174
-             176:     20(int) Load 147(levels)
-             177:     20(int) IAdd 176 175
-                              Store 147(levels) 177
-             178:          57 Load 59(isamp1DA)
-             179:          56 Image 178
-             180:     20(int) ImageQueryLevels 179
-             181:     20(int) Load 147(levels)
-             182:     20(int) IAdd 181 180
-                              Store 147(levels) 182
-             187:         184 Load 186(samp2DA)
-             188:         183 Image 187
-             189:     20(int) ImageQueryLevels 188
-             190:     20(int) Load 147(levels)
-             191:     20(int) IAdd 190 189
-                              Store 147(levels) 191
-             196:         193 Load 195(usampCubeA)
-             197:         192 Image 196
-             198:     20(int) ImageQueryLevels 197
-             199:     20(int) Load 147(levels)
-             200:     20(int) IAdd 199 198
-                              Store 147(levels) 200
-             201:          87 Load 89(samp1Ds)
-             202:          86 Image 201
-             203:     20(int) ImageQueryLevels 202
-                              Store 147(levels) 203
-             204:          97 Load 99(samp2Ds)
-             205:          96 Image 204
-             206:     20(int) ImageQueryLevels 205
-             207:     20(int) Load 147(levels)
-             208:     20(int) IAdd 207 206
-                              Store 147(levels) 208
-             209:         107 Load 109(sampCubes)
-             210:         106 Image 209
-             211:     20(int) ImageQueryLevels 210
-             212:     20(int) Load 147(levels)
-             213:     20(int) IAdd 212 211
-                              Store 147(levels) 213
-             214:         117 Load 119(samp1DAs)
-             215:         116 Image 214
-             216:     20(int) ImageQueryLevels 215
-             217:     20(int) Load 147(levels)
-             218:     20(int) IAdd 217 216
-                              Store 147(levels) 218
-             219:         127 Load 129(samp2DAs)
-             220:         126 Image 219
-             221:     20(int) ImageQueryLevels 220
-             222:     20(int) Load 147(levels)
-             223:     20(int) IAdd 222 221
-                              Store 147(levels) 223
-             224:         137 Load 139(sampCubeAs)
-             225:         136 Image 224
-             226:     20(int) ImageQueryLevels 225
-             227:     20(int) Load 147(levels)
-             228:     20(int) IAdd 227 226
-                              Store 147(levels) 228
+             110:         107 Load 109(samp1DAs)
+             111:    6(float) Load 16(pf)
+             112:    7(fvec2) ImageQueryLod 110 111
+             113:    7(fvec2) Load 9(lod)
+             114:    7(fvec2) FAdd 113 112
+                              Store 9(lod) 114
+             119:         116 Load 118(samp2DAs)
+             120:    7(fvec2) Load 25(pf2)
+             121:    7(fvec2) ImageQueryLod 119 120
+             122:    7(fvec2) Load 9(lod)
+             123:    7(fvec2) FAdd 122 121
+                              Store 9(lod) 123
+             128:         125 Load 127(sampCubeAs)
+             129:   36(fvec3) Load 38(pf3)
+             130:    7(fvec2) ImageQueryLod 128 129
+             131:    7(fvec2) Load 9(lod)
+             132:    7(fvec2) FAdd 131 130
+                              Store 9(lod) 132
+             135:          11 Load 13(samp1D)
+             136:          10 Image 135
+             137:     19(int) ImageQueryLevels 136
+                              Store 134(levels) 137
+             142:         139 Load 141(usamp2D)
+             143:         138 Image 142
+             144:     19(int) ImageQueryLevels 143
+             145:     19(int) Load 134(levels)
+             146:     19(int) IAdd 145 144
+                              Store 134(levels) 146
+             151:         148 Load 150(isamp3D)
+             152:         147 Image 151
+             153:     19(int) ImageQueryLevels 152
+             154:     19(int) Load 134(levels)
+             155:     19(int) IAdd 154 153
+                              Store 134(levels) 155
+             160:         157 Load 159(isampCube)
+             161:         156 Image 160
+             162:     19(int) ImageQueryLevels 161
+             163:     19(int) Load 134(levels)
+             164:     19(int) IAdd 163 162
+                              Store 134(levels) 164
+             165:          53 Load 55(isamp1DA)
+             166:          52 Image 165
+             167:     19(int) ImageQueryLevels 166
+             168:     19(int) Load 134(levels)
+             169:     19(int) IAdd 168 167
+                              Store 134(levels) 169
+             174:         171 Load 173(samp2DA)
+             175:         170 Image 174
+             176:     19(int) ImageQueryLevels 175
+             177:     19(int) Load 134(levels)
+             178:     19(int) IAdd 177 176
+                              Store 134(levels) 178
+             183:         180 Load 182(usampCubeA)
+             184:         179 Image 183
+             185:     19(int) ImageQueryLevels 184
+             186:     19(int) Load 134(levels)
+             187:     19(int) IAdd 186 185
+                              Store 134(levels) 187
+             188:          80 Load 82(samp1Ds)
+             189:          79 Image 188
+             190:     19(int) ImageQueryLevels 189
+                              Store 134(levels) 190
+             191:          89 Load 91(samp2Ds)
+             192:          88 Image 191
+             193:     19(int) ImageQueryLevels 192
+             194:     19(int) Load 134(levels)
+             195:     19(int) IAdd 194 193
+                              Store 134(levels) 195
+             196:          98 Load 100(sampCubes)
+             197:          97 Image 196
+             198:     19(int) ImageQueryLevels 197
+             199:     19(int) Load 134(levels)
+             200:     19(int) IAdd 199 198
+                              Store 134(levels) 200
+             201:         107 Load 109(samp1DAs)
+             202:         106 Image 201
+             203:     19(int) ImageQueryLevels 202
+             204:     19(int) Load 134(levels)
+             205:     19(int) IAdd 204 203
+                              Store 134(levels) 205
+             206:         116 Load 118(samp2DAs)
+             207:         115 Image 206
+             208:     19(int) ImageQueryLevels 207
+             209:     19(int) Load 134(levels)
+             210:     19(int) IAdd 209 208
+                              Store 134(levels) 210
+             211:         125 Load 127(sampCubeAs)
+             212:         124 Image 211
+             213:     19(int) ImageQueryLevels 212
+             214:     19(int) Load 134(levels)
+             215:     19(int) IAdd 214 213
+                              Store 134(levels) 215
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..6d2ad36e833e5fc610c5e16242329f7354803d94
--- /dev/null
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -0,0 +1,54 @@
+spv.register.autoassign-2.frag
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 31
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "Color"
+                              Name 12  "g_tScene[0]"
+                              Name 16  "g_tSamp"
+                              Name 25  "g_tScene[1]"
+                              Decorate 9(Color) Location 0
+                              Decorate 12(g_tScene[0]) DescriptorSet 0
+                              Decorate 12(g_tScene[0]) Binding 10
+                              Decorate 16(g_tSamp) DescriptorSet 0
+                              Decorate 16(g_tSamp) Binding 5
+                              Decorate 25(g_tScene[1]) DescriptorSet 0
+                              Decorate 25(g_tScene[1]) Binding 11
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(Color):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+ 12(g_tScene[0]):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_tSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1050253722
+              22:    6(float) Constant 1053609165
+              23:   20(fvec2) ConstantComposite 21 22
+ 25(g_tScene[1]):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+              13:          10 Load 12(g_tScene[0])
+              17:          14 Load 16(g_tSamp)
+              19:          18 SampledImage 13 17
+              24:    7(fvec4) ImageSampleImplicitLod 19 23
+              26:          10 Load 25(g_tScene[1])
+              27:          14 Load 16(g_tSamp)
+              28:          18 SampledImage 26 27
+              29:    7(fvec4) ImageSampleImplicitLod 28 23
+              30:    7(fvec4) FAdd 24 29
+                              Store 9(Color) 30
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..4b4655e3bb28fff63ff2032b48e2d1e839b814ad
--- /dev/null
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -0,0 +1,233 @@
+spv.register.autoassign.frag
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 150
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main_ep" 145
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main_ep"
+                              Name 9  "Func1("
+                              Name 11  "Func2("
+                              Name 13  "Func2_unused("
+                              Name 17  "g_tTex1"
+                              Name 21  "g_sSamp1"
+                              Name 27  "g_tTex2"
+                              Name 29  "g_sSamp2"
+                              Name 39  "g_tTex3"
+                              Name 46  "g_sSamp3"
+                              Name 64  "g_tTex4"
+                              Name 69  "g_sSamp4"
+                              Name 84  "g_tTex5"
+                              Name 86  "g_sSamp5"
+                              Name 93  "MyStruct_t"
+                              MemberName 93(MyStruct_t) 0  "a"
+                              MemberName 93(MyStruct_t) 1  "b"
+                              MemberName 93(MyStruct_t) 2  "c"
+                              Name 95  "$Global"
+                              MemberName 95($Global) 0  "mystruct"
+                              MemberName 95($Global) 1  "myfloat4_a"
+                              MemberName 95($Global) 2  "myfloat4_b"
+                              MemberName 95($Global) 3  "myint4_a"
+                              Name 97  ""
+                              Name 119  "g_tTex_unused1"
+                              Name 121  "g_sSamp_unused1"
+                              Name 126  "g_tTex_unused2"
+                              Name 128  "g_sSamp_unused2"
+                              Name 136  "PS_OUTPUT"
+                              MemberName 136(PS_OUTPUT) 0  "Color"
+                              Name 138  "psout"
+                              Name 145  "Color"
+                              Name 149  "g_tTex_unused3"
+                              Decorate 17(g_tTex1) DescriptorSet 0
+                              Decorate 17(g_tTex1) Binding 11
+                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_sSamp1) Binding 5
+                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 27(g_tTex2) Binding 14
+                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 29(g_sSamp2) Binding 6
+                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 39(g_tTex3) Binding 13
+                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 46(g_sSamp3) Binding 7
+                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 64(g_tTex4) Binding 15
+                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 69(g_sSamp4) Binding 8
+                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 84(g_tTex5) Binding 16
+                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              Decorate 86(g_sSamp5) Binding 9
+                              MemberDecorate 93(MyStruct_t) 0 Offset 0
+                              MemberDecorate 93(MyStruct_t) 1 Offset 4
+                              MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              MemberDecorate 95($Global) 0 Offset 0
+                              MemberDecorate 95($Global) 1 Offset 32
+                              MemberDecorate 95($Global) 2 Offset 48
+                              MemberDecorate 95($Global) 3 Offset 64
+                              Decorate 95($Global) Block
+                              Decorate 97 DescriptorSet 0
+                              Decorate 97 Binding 20
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) Binding 10
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) Binding 12
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 145(Color) Location 0
+                              Decorate 149(g_tTex_unused3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+     17(g_tTex1):     16(ptr) Variable UniformConstant
+              19:             TypeSampler
+              20:             TypePointer UniformConstant 19
+    21(g_sSamp1):     20(ptr) Variable UniformConstant
+              23:             TypeSampledImage 15
+              25:    6(float) Constant 1036831949
+     27(g_tTex2):     16(ptr) Variable UniformConstant
+    29(g_sSamp2):     20(ptr) Variable UniformConstant
+              32:    6(float) Constant 1045220557
+              35:             TypeInt 32 0
+              36:     35(int) Constant 2
+              37:             TypeArray 15 36
+              38:             TypePointer UniformConstant 37
+     39(g_tTex3):     38(ptr) Variable UniformConstant
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              44:             TypeArray 19 36
+              45:             TypePointer UniformConstant 44
+    46(g_sSamp3):     45(ptr) Variable UniformConstant
+              50:    6(float) Constant 1050253722
+              53:     40(int) Constant 1
+              61:     35(int) Constant 3
+              62:             TypeArray 15 61
+              63:             TypePointer UniformConstant 62
+     64(g_tTex4):     63(ptr) Variable UniformConstant
+              67:             TypeArray 19 61
+              68:             TypePointer UniformConstant 67
+    69(g_sSamp4):     68(ptr) Variable UniformConstant
+              73:    6(float) Constant 1053609165
+              76:     40(int) Constant 2
+     84(g_tTex5):     16(ptr) Variable UniformConstant
+    86(g_sSamp5):     20(ptr) Variable UniformConstant
+              89:    6(float) Constant 1056964608
+              92:             TypeVector 6(float) 3
+  93(MyStruct_t):             TypeStruct 40(int) 6(float) 92(fvec3)
+              94:             TypeVector 40(int) 4
+     95($Global):             TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4)
+              96:             TypePointer Uniform 95($Global)
+              97:     96(ptr) Variable Uniform
+              98:     35(int) Constant 1
+              99:             TypePointer Uniform 6(float)
+119(g_tTex_unused1):     16(ptr) Variable UniformConstant
+121(g_sSamp_unused1):     20(ptr) Variable UniformConstant
+             124:    6(float) Constant 1066192077
+126(g_tTex_unused2):     16(ptr) Variable UniformConstant
+128(g_sSamp_unused2):     20(ptr) Variable UniformConstant
+             131:    6(float) Constant 1067030938
+  136(PS_OUTPUT):             TypeStruct 7(fvec4)
+             137:             TypePointer Function 136(PS_OUTPUT)
+             142:             TypePointer Function 7(fvec4)
+             144:             TypePointer Output 7(fvec4)
+      145(Color):    144(ptr) Variable Output
+149(g_tTex_unused3):     16(ptr) Variable UniformConstant
+      4(main_ep):           2 Function None 3
+               5:             Label
+      138(psout):    137(ptr) Variable Function
+             139:    7(fvec4) FunctionCall 9(Func1()
+             140:    7(fvec4) FunctionCall 11(Func2()
+             141:    7(fvec4) FAdd 139 140
+             143:    142(ptr) AccessChain 138(psout) 41
+                              Store 143 141
+             146:    142(ptr) AccessChain 138(psout) 41
+             147:    7(fvec4) Load 146
+                              Store 145(Color) 147
+                              Return
+                              FunctionEnd
+       9(Func1():    7(fvec4) Function None 8
+              10:             Label
+              18:          15 Load 17(g_tTex1)
+              22:          19 Load 21(g_sSamp1)
+              24:          23 SampledImage 18 22
+              26:    7(fvec4) ImageSampleImplicitLod 24 25
+              28:          15 Load 27(g_tTex2)
+              30:          19 Load 29(g_sSamp2)
+              31:          23 SampledImage 28 30
+              33:    7(fvec4) ImageSampleImplicitLod 31 32
+              34:    7(fvec4) FAdd 26 33
+              42:     16(ptr) AccessChain 39(g_tTex3) 41
+              43:          15 Load 42
+              47:     20(ptr) AccessChain 46(g_sSamp3) 41
+              48:          19 Load 47
+              49:          23 SampledImage 43 48
+              51:    7(fvec4) ImageSampleImplicitLod 49 50
+              52:    7(fvec4) FAdd 34 51
+              54:     16(ptr) AccessChain 39(g_tTex3) 53
+              55:          15 Load 54
+              56:     20(ptr) AccessChain 46(g_sSamp3) 53
+              57:          19 Load 56
+              58:          23 SampledImage 55 57
+              59:    7(fvec4) ImageSampleImplicitLod 58 50
+              60:    7(fvec4) FAdd 52 59
+              65:     16(ptr) AccessChain 64(g_tTex4) 53
+              66:          15 Load 65
+              70:     20(ptr) AccessChain 69(g_sSamp4) 53
+              71:          19 Load 70
+              72:          23 SampledImage 66 71
+              74:    7(fvec4) ImageSampleImplicitLod 72 73
+              75:    7(fvec4) FAdd 60 74
+              77:     16(ptr) AccessChain 64(g_tTex4) 76
+              78:          15 Load 77
+              79:     20(ptr) AccessChain 69(g_sSamp4) 76
+              80:          19 Load 79
+              81:          23 SampledImage 78 80
+              82:    7(fvec4) ImageSampleImplicitLod 81 73
+              83:    7(fvec4) FAdd 75 82
+              85:          15 Load 84(g_tTex5)
+              87:          19 Load 86(g_sSamp5)
+              88:          23 SampledImage 85 87
+              90:    7(fvec4) ImageSampleImplicitLod 88 89
+              91:    7(fvec4) FAdd 83 90
+             100:     99(ptr) AccessChain 97 41 76 98
+             101:    6(float) Load 100
+             102:    7(fvec4) CompositeConstruct 101 101 101 101
+             103:    7(fvec4) FAdd 91 102
+                              ReturnValue 103
+                              FunctionEnd
+      11(Func2():    7(fvec4) Function None 8
+              12:             Label
+             106:          15 Load 17(g_tTex1)
+             107:          19 Load 21(g_sSamp1)
+             108:          23 SampledImage 106 107
+             109:    7(fvec4) ImageSampleImplicitLod 108 25
+             110:     16(ptr) AccessChain 39(g_tTex3) 53
+             111:          15 Load 110
+             112:     20(ptr) AccessChain 46(g_sSamp3) 53
+             113:          19 Load 112
+             114:          23 SampledImage 111 113
+             115:    7(fvec4) ImageSampleImplicitLod 114 50
+             116:    7(fvec4) FAdd 109 115
+                              ReturnValue 116
+                              FunctionEnd
+13(Func2_unused():    7(fvec4) Function None 8
+              14:             Label
+             120:          15 Load 119(g_tTex_unused1)
+             122:          19 Load 121(g_sSamp_unused1)
+             123:          23 SampledImage 120 122
+             125:    7(fvec4) ImageSampleImplicitLod 123 124
+             127:          15 Load 126(g_tTex_unused2)
+             129:          19 Load 128(g_sSamp_unused2)
+             130:          23 SampledImage 127 129
+             132:    7(fvec4) ImageSampleImplicitLod 130 131
+             133:    7(fvec4) FAdd 125 132
+                              ReturnValue 133
+                              FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..8eb76c9b741c821a4f575a14874c766da3cd1a43
--- /dev/null
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -0,0 +1,5 @@
+spv.register.autoassign.rangetest.frag
+INTERNAL ERROR: mapped binding out of range: g_tSamp
+INTERNAL ERROR: mapped binding out of range: g_tScene
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..71140dcd9681a8cef9ff6517ffef4495c6459a37
--- /dev/null
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -0,0 +1,226 @@
+spv.register.noautoassign.frag
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 150
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main_ep" 145
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main_ep"
+                              Name 9  "Func1("
+                              Name 11  "Func2("
+                              Name 13  "Func2_unused("
+                              Name 17  "g_tTex1"
+                              Name 21  "g_sSamp1"
+                              Name 27  "g_tTex2"
+                              Name 29  "g_sSamp2"
+                              Name 39  "g_tTex3"
+                              Name 46  "g_sSamp3"
+                              Name 64  "g_tTex4"
+                              Name 69  "g_sSamp4"
+                              Name 84  "g_tTex5"
+                              Name 86  "g_sSamp5"
+                              Name 93  "MyStruct_t"
+                              MemberName 93(MyStruct_t) 0  "a"
+                              MemberName 93(MyStruct_t) 1  "b"
+                              MemberName 93(MyStruct_t) 2  "c"
+                              Name 95  "$Global"
+                              MemberName 95($Global) 0  "mystruct"
+                              MemberName 95($Global) 1  "myfloat4_a"
+                              MemberName 95($Global) 2  "myfloat4_b"
+                              MemberName 95($Global) 3  "myint4_a"
+                              Name 97  ""
+                              Name 119  "g_tTex_unused1"
+                              Name 121  "g_sSamp_unused1"
+                              Name 126  "g_tTex_unused2"
+                              Name 128  "g_sSamp_unused2"
+                              Name 136  "PS_OUTPUT"
+                              MemberName 136(PS_OUTPUT) 0  "Color"
+                              Name 138  "psout"
+                              Name 145  "Color"
+                              Name 149  "g_tTex_unused3"
+                              Decorate 17(g_tTex1) DescriptorSet 0
+                              Decorate 17(g_tTex1) Binding 11
+                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_sSamp1) Binding 5
+                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 39(g_tTex3) Binding 13
+                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 46(g_sSamp3) Binding 7
+                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              MemberDecorate 93(MyStruct_t) 0 Offset 0
+                              MemberDecorate 93(MyStruct_t) 1 Offset 4
+                              MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              MemberDecorate 95($Global) 0 Offset 0
+                              MemberDecorate 95($Global) 1 Offset 32
+                              MemberDecorate 95($Global) 2 Offset 48
+                              MemberDecorate 95($Global) 3 Offset 64
+                              Decorate 95($Global) Block
+                              Decorate 97 DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) Binding 10
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) Binding 12
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 145(Color) Location 0
+                              Decorate 149(g_tTex_unused3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              15:             TypeImage 6(float) 1D sampled format:Unknown
+              16:             TypePointer UniformConstant 15
+     17(g_tTex1):     16(ptr) Variable UniformConstant
+              19:             TypeSampler
+              20:             TypePointer UniformConstant 19
+    21(g_sSamp1):     20(ptr) Variable UniformConstant
+              23:             TypeSampledImage 15
+              25:    6(float) Constant 1036831949
+     27(g_tTex2):     16(ptr) Variable UniformConstant
+    29(g_sSamp2):     20(ptr) Variable UniformConstant
+              32:    6(float) Constant 1045220557
+              35:             TypeInt 32 0
+              36:     35(int) Constant 2
+              37:             TypeArray 15 36
+              38:             TypePointer UniformConstant 37
+     39(g_tTex3):     38(ptr) Variable UniformConstant
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              44:             TypeArray 19 36
+              45:             TypePointer UniformConstant 44
+    46(g_sSamp3):     45(ptr) Variable UniformConstant
+              50:    6(float) Constant 1050253722
+              53:     40(int) Constant 1
+              61:     35(int) Constant 3
+              62:             TypeArray 15 61
+              63:             TypePointer UniformConstant 62
+     64(g_tTex4):     63(ptr) Variable UniformConstant
+              67:             TypeArray 19 61
+              68:             TypePointer UniformConstant 67
+    69(g_sSamp4):     68(ptr) Variable UniformConstant
+              73:    6(float) Constant 1053609165
+              76:     40(int) Constant 2
+     84(g_tTex5):     16(ptr) Variable UniformConstant
+    86(g_sSamp5):     20(ptr) Variable UniformConstant
+              89:    6(float) Constant 1056964608
+              92:             TypeVector 6(float) 3
+  93(MyStruct_t):             TypeStruct 40(int) 6(float) 92(fvec3)
+              94:             TypeVector 40(int) 4
+     95($Global):             TypeStruct 93(MyStruct_t) 7(fvec4) 7(fvec4) 94(ivec4)
+              96:             TypePointer Uniform 95($Global)
+              97:     96(ptr) Variable Uniform
+              98:     35(int) Constant 1
+              99:             TypePointer Uniform 6(float)
+119(g_tTex_unused1):     16(ptr) Variable UniformConstant
+121(g_sSamp_unused1):     20(ptr) Variable UniformConstant
+             124:    6(float) Constant 1066192077
+126(g_tTex_unused2):     16(ptr) Variable UniformConstant
+128(g_sSamp_unused2):     20(ptr) Variable UniformConstant
+             131:    6(float) Constant 1067030938
+  136(PS_OUTPUT):             TypeStruct 7(fvec4)
+             137:             TypePointer Function 136(PS_OUTPUT)
+             142:             TypePointer Function 7(fvec4)
+             144:             TypePointer Output 7(fvec4)
+      145(Color):    144(ptr) Variable Output
+149(g_tTex_unused3):     16(ptr) Variable UniformConstant
+      4(main_ep):           2 Function None 3
+               5:             Label
+      138(psout):    137(ptr) Variable Function
+             139:    7(fvec4) FunctionCall 9(Func1()
+             140:    7(fvec4) FunctionCall 11(Func2()
+             141:    7(fvec4) FAdd 139 140
+             143:    142(ptr) AccessChain 138(psout) 41
+                              Store 143 141
+             146:    142(ptr) AccessChain 138(psout) 41
+             147:    7(fvec4) Load 146
+                              Store 145(Color) 147
+                              Return
+                              FunctionEnd
+       9(Func1():    7(fvec4) Function None 8
+              10:             Label
+              18:          15 Load 17(g_tTex1)
+              22:          19 Load 21(g_sSamp1)
+              24:          23 SampledImage 18 22
+              26:    7(fvec4) ImageSampleImplicitLod 24 25
+              28:          15 Load 27(g_tTex2)
+              30:          19 Load 29(g_sSamp2)
+              31:          23 SampledImage 28 30
+              33:    7(fvec4) ImageSampleImplicitLod 31 32
+              34:    7(fvec4) FAdd 26 33
+              42:     16(ptr) AccessChain 39(g_tTex3) 41
+              43:          15 Load 42
+              47:     20(ptr) AccessChain 46(g_sSamp3) 41
+              48:          19 Load 47
+              49:          23 SampledImage 43 48
+              51:    7(fvec4) ImageSampleImplicitLod 49 50
+              52:    7(fvec4) FAdd 34 51
+              54:     16(ptr) AccessChain 39(g_tTex3) 53
+              55:          15 Load 54
+              56:     20(ptr) AccessChain 46(g_sSamp3) 53
+              57:          19 Load 56
+              58:          23 SampledImage 55 57
+              59:    7(fvec4) ImageSampleImplicitLod 58 50
+              60:    7(fvec4) FAdd 52 59
+              65:     16(ptr) AccessChain 64(g_tTex4) 53
+              66:          15 Load 65
+              70:     20(ptr) AccessChain 69(g_sSamp4) 53
+              71:          19 Load 70
+              72:          23 SampledImage 66 71
+              74:    7(fvec4) ImageSampleImplicitLod 72 73
+              75:    7(fvec4) FAdd 60 74
+              77:     16(ptr) AccessChain 64(g_tTex4) 76
+              78:          15 Load 77
+              79:     20(ptr) AccessChain 69(g_sSamp4) 76
+              80:          19 Load 79
+              81:          23 SampledImage 78 80
+              82:    7(fvec4) ImageSampleImplicitLod 81 73
+              83:    7(fvec4) FAdd 75 82
+              85:          15 Load 84(g_tTex5)
+              87:          19 Load 86(g_sSamp5)
+              88:          23 SampledImage 85 87
+              90:    7(fvec4) ImageSampleImplicitLod 88 89
+              91:    7(fvec4) FAdd 83 90
+             100:     99(ptr) AccessChain 97 41 76 98
+             101:    6(float) Load 100
+             102:    7(fvec4) CompositeConstruct 101 101 101 101
+             103:    7(fvec4) FAdd 91 102
+                              ReturnValue 103
+                              FunctionEnd
+      11(Func2():    7(fvec4) Function None 8
+              12:             Label
+             106:          15 Load 17(g_tTex1)
+             107:          19 Load 21(g_sSamp1)
+             108:          23 SampledImage 106 107
+             109:    7(fvec4) ImageSampleImplicitLod 108 25
+             110:     16(ptr) AccessChain 39(g_tTex3) 53
+             111:          15 Load 110
+             112:     20(ptr) AccessChain 46(g_sSamp3) 53
+             113:          19 Load 112
+             114:          23 SampledImage 111 113
+             115:    7(fvec4) ImageSampleImplicitLod 114 50
+             116:    7(fvec4) FAdd 109 115
+                              ReturnValue 116
+                              FunctionEnd
+13(Func2_unused():    7(fvec4) Function None 8
+              14:             Label
+             120:          15 Load 119(g_tTex_unused1)
+             122:          19 Load 121(g_sSamp_unused1)
+             123:          23 SampledImage 120 122
+             125:    7(fvec4) ImageSampleImplicitLod 123 124
+             127:          15 Load 126(g_tTex_unused2)
+             129:          19 Load 128(g_sSamp_unused2)
+             130:          23 SampledImage 127 129
+             132:    7(fvec4) ImageSampleImplicitLod 130 131
+             133:    7(fvec4) FAdd 125 132
+                              ReturnValue 133
+                              FunctionEnd
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..d6b75ba3c7a5edc5d695db379f67473e4e4c5fcb
--- /dev/null
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -0,0 +1,66 @@
+spv.rw.autoassign.frag
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 37
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 11  "g_tTex1df1"
+                              Name 18  "r01"
+                              Name 21  "g_tBuf1du1"
+                              Name 25  "PS_OUTPUT"
+                              MemberName 25(PS_OUTPUT) 0  "Color"
+                              Name 27  "psout"
+                              Name 33  "Color"
+                              Decorate 11(g_tTex1df1) DescriptorSet 0
+                              Decorate 11(g_tTex1df1) Binding 20
+                              Decorate 21(g_tBuf1du1) DescriptorSet 0
+                              Decorate 21(g_tBuf1du1) Binding 21
+                              Decorate 33(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D nonsampled format:R32f
+              10:             TypePointer UniformConstant 9
+  11(g_tTex1df1):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              16:             TypeInt 32 0
+              17:             TypePointer Function 16(int)
+              19:             TypeImage 16(int) Buffer nonsampled format:R32ui
+              20:             TypePointer UniformConstant 19
+  21(g_tBuf1du1):     20(ptr) Variable UniformConstant
+              24:             TypeVector 6(float) 4
+   25(PS_OUTPUT):             TypeStruct 24(fvec4)
+              26:             TypePointer Function 25(PS_OUTPUT)
+              28:    6(float) Constant 0
+              29:   24(fvec4) ConstantComposite 28 28 28 28
+              30:             TypePointer Function 24(fvec4)
+              32:             TypePointer Output 24(fvec4)
+       33(Color):     32(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         18(r01):     17(ptr) Variable Function
+       27(psout):     26(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df1)
+              15:    6(float) ImageRead 12 14
+                              Store 8(r00) 15
+              22:          19 Load 21(g_tBuf1du1)
+              23:     16(int) ImageRead 22 14
+                              Store 18(r01) 23
+              31:     30(ptr) AccessChain 27(psout) 14
+                              Store 31 29
+              34:     30(ptr) AccessChain 27(psout) 14
+              35:   24(fvec4) Load 34
+                              Store 33(Color) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 2a71a019ece0a8597ccdfbb1704ed831197f7e41..c654117f7f40c7addba1a5be6c5e1d3669494a6b 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,10 +1,6 @@
 spv.separate.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 319
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 72fbaa70dcc7222ef1b55e886b21f0f73e0343a7..38cb669c6ae5c0d256e978ed3d347d0c5895f4e4 100755
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,10 +1,6 @@
 spv.set.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index cb2e0130ab213b0a56a92659c314d9713d6f3d93..4f03312848ef85db048a60bf21b76879080f5402 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,20 +1,18 @@
 spv.shaderBallot.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
-Missing functionality: shader ballot
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 241
+// Id's are bound by 299
 
                               Capability Shader
                               Capability Int64
+                              Capability Groups
+                              Capability SubgroupBallotKHR
+                              Extension  "SPV_KHR_shader_ballot"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 10 22 24 27 30 33
+                              EntryPoint GLCompute 4  "main" 10 12 21 23 26 29 32
                               ExecutionMode 4 LocalSize 8 8 1
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
@@ -22,293 +20,358 @@ Missing functionality: shader ballot
                               Name 4  "main"
                               Name 8  "invocation"
                               Name 10  "gl_SubGroupInvocationARB"
-                              Name 13  "gl_SubGroupSizeARB"
-                              Name 20  "relMask"
-                              Name 22  "gl_SubGroupEqMaskARB"
-                              Name 24  "gl_SubGroupGeMaskARB"
-                              Name 27  "gl_SubGroupGtMaskARB"
-                              Name 30  "gl_SubGroupLeMaskARB"
-                              Name 33  "gl_SubGroupLtMaskARB"
-                              Name 48  "Buffers"
-                              MemberName 48(Buffers) 0  "f4"
-                              MemberName 48(Buffers) 1  "i4"
-                              MemberName 48(Buffers) 2  "u4"
-                              Name 51  "data"
-                              MemberDecorate 48(Buffers) 0 Offset 0
-                              MemberDecorate 48(Buffers) 1 Offset 16
-                              MemberDecorate 48(Buffers) 2 Offset 32
-                              Decorate 48(Buffers) BufferBlock
-                              Decorate 51(data) DescriptorSet 0
-                              Decorate 51(data) Binding 0
-                              Decorate 240 BuiltIn WorkgroupSize
+                              Name 12  "gl_SubGroupSizeARB"
+                              Name 19  "relMask"
+                              Name 21  "gl_SubGroupEqMaskARB"
+                              Name 23  "gl_SubGroupGeMaskARB"
+                              Name 26  "gl_SubGroupGtMaskARB"
+                              Name 29  "gl_SubGroupLeMaskARB"
+                              Name 32  "gl_SubGroupLtMaskARB"
+                              Name 52  "Buffers"
+                              MemberName 52(Buffers) 0  "f4"
+                              MemberName 52(Buffers) 1  "i4"
+                              MemberName 52(Buffers) 2  "u4"
+                              Name 55  "data"
+                              Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
+                              Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
+                              Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
+                              Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
+                              Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
+                              Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
+                              Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
+                              MemberDecorate 52(Buffers) 0 Offset 0
+                              MemberDecorate 52(Buffers) 1 Offset 16
+                              MemberDecorate 52(Buffers) 2 Offset 32
+                              Decorate 52(Buffers) BufferBlock
+                              Decorate 55(data) DescriptorSet 0
+                              Decorate 55(data) Binding 0
+                              Decorate 298 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypePointer Function 6(int)
                9:             TypePointer Input 6(int)
 10(gl_SubGroupInvocationARB):      9(ptr) Variable Input
-              12:             TypePointer UniformConstant 6(int)
-13(gl_SubGroupSizeARB):     12(ptr) Variable UniformConstant
-              16:      6(int) Constant 4
-              18:             TypeInt 64 0
-              19:             TypePointer Function 18(int)
-              21:             TypePointer Input 18(int)
-22(gl_SubGroupEqMaskARB):     21(ptr) Variable Input
-24(gl_SubGroupGeMaskARB):     21(ptr) Variable Input
-27(gl_SubGroupGtMaskARB):     21(ptr) Variable Input
-30(gl_SubGroupLeMaskARB):     21(ptr) Variable Input
-33(gl_SubGroupLtMaskARB):     21(ptr) Variable Input
-              37:             TypeBool
-              38:    37(bool) ConstantTrue
-              43:             TypeFloat 32
-              44:             TypeVector 43(float) 4
-              45:             TypeInt 32 1
-              46:             TypeVector 45(int) 4
-              47:             TypeVector 6(int) 4
-     48(Buffers):             TypeStruct 44(fvec4) 46(ivec4) 47(ivec4)
-              49:             TypeArray 48(Buffers) 16
-              50:             TypePointer Uniform 49
-        51(data):     50(ptr) Variable Uniform
-              53:     45(int) Constant 0
-              54:      6(int) Constant 0
-              55:             TypePointer Uniform 43(float)
-              62:     45(int) Constant 1
-              63:             TypeVector 43(float) 2
-              64:             TypePointer Uniform 44(fvec4)
-              74:     45(int) Constant 2
-              75:             TypeVector 43(float) 3
-              85:     45(int) Constant 3
-              92:             TypePointer Uniform 45(int)
-              99:             TypeVector 45(int) 2
-             100:             TypePointer Uniform 46(ivec4)
-             110:             TypeVector 45(int) 3
-             126:             TypePointer Uniform 6(int)
-             133:             TypeVector 6(int) 2
-             134:             TypePointer Uniform 47(ivec4)
-             144:             TypeVector 6(int) 3
-             238:      6(int) Constant 8
-             239:      6(int) Constant 1
-             240:  144(ivec3) ConstantComposite 238 238 239
+12(gl_SubGroupSizeARB):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 64 0
+              18:             TypePointer Function 17(int)
+              20:             TypePointer Input 17(int)
+21(gl_SubGroupEqMaskARB):     20(ptr) Variable Input
+23(gl_SubGroupGeMaskARB):     20(ptr) Variable Input
+26(gl_SubGroupGtMaskARB):     20(ptr) Variable Input
+29(gl_SubGroupLeMaskARB):     20(ptr) Variable Input
+32(gl_SubGroupLtMaskARB):     20(ptr) Variable Input
+              36:             TypeBool
+              37:    36(bool) ConstantTrue
+              38:             TypeVector 6(int) 4
+              42:             TypeVector 6(int) 2
+              48:             TypeFloat 32
+              49:             TypeVector 48(float) 4
+              50:             TypeInt 32 1
+              51:             TypeVector 50(int) 4
+     52(Buffers):             TypeStruct 49(fvec4) 51(ivec4) 38(ivec4)
+              53:             TypeArray 52(Buffers) 15
+              54:             TypePointer Uniform 53
+        55(data):     54(ptr) Variable Uniform
+              57:     50(int) Constant 0
+              58:      6(int) Constant 0
+              59:             TypePointer Uniform 48(float)
+              63:      6(int) Constant 3
+              67:     50(int) Constant 1
+              68:             TypeVector 48(float) 2
+              69:             TypePointer Uniform 49(fvec4)
+              83:     50(int) Constant 2
+              84:             TypeVector 48(float) 3
+             100:     50(int) Constant 3
+             115:             TypePointer Uniform 50(int)
+             122:             TypeVector 50(int) 2
+             123:             TypePointer Uniform 51(ivec4)
+             137:             TypeVector 50(int) 3
+             167:             TypePointer Uniform 6(int)
+             174:             TypePointer Uniform 38(ivec4)
+             188:             TypeVector 6(int) 3
+             296:      6(int) Constant 8
+             297:      6(int) Constant 1
+             298:  188(ivec3) ConstantComposite 296 296 297
          4(main):           2 Function None 3
                5:             Label
    8(invocation):      7(ptr) Variable Function
-     20(relMask):     19(ptr) Variable Function
+     19(relMask):     18(ptr) Variable Function
               11:      6(int) Load 10(gl_SubGroupInvocationARB)
-              14:      6(int) Load 13(gl_SubGroupSizeARB)
-              15:      6(int) IAdd 11 14
-              17:      6(int) UMod 15 16
-                              Store 8(invocation) 17
-              23:     18(int) Load 22(gl_SubGroupEqMaskARB)
-              25:     18(int) Load 24(gl_SubGroupGeMaskARB)
-              26:     18(int) IAdd 23 25
-              28:     18(int) Load 27(gl_SubGroupGtMaskARB)
-              29:     18(int) IAdd 26 28
-              31:     18(int) Load 30(gl_SubGroupLeMaskARB)
-              32:     18(int) IAdd 29 31
-              34:     18(int) Load 33(gl_SubGroupLtMaskARB)
-              35:     18(int) IAdd 32 34
-                              Store 20(relMask) 35
-              36:     18(int) Load 20(relMask)
-              39:     18(int) ExtInst 1(GLSL.std.450) 0(Unknown) 38
-              40:    37(bool) IEqual 36 39
-                              SelectionMerge 42 None
-                              BranchConditional 40 41 159
-              41:               Label
-              52:      6(int)   Load 8(invocation)
-              56:     55(ptr)   AccessChain 51(data) 53 53 54
-              57:   43(float)   Load 56
-              58:      6(int)   Load 8(invocation)
-              59:   43(float)   ExtInst 1(GLSL.std.450) 0(Unknown) 57 58
-              60:     55(ptr)   AccessChain 51(data) 52 53 54
-                                Store 60 59
-              61:      6(int)   Load 8(invocation)
-              65:     64(ptr)   AccessChain 51(data) 62 53
-              66:   44(fvec4)   Load 65
-              67:   63(fvec2)   VectorShuffle 66 66 0 1
-              68:      6(int)   Load 8(invocation)
-              69:   63(fvec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 67 68
-              70:     64(ptr)   AccessChain 51(data) 61 53
-              71:   44(fvec4)   Load 70
-              72:   44(fvec4)   VectorShuffle 71 69 4 5 2 3
-                                Store 70 72
+              13:      6(int) Load 12(gl_SubGroupSizeARB)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              22:     17(int) Load 21(gl_SubGroupEqMaskARB)
+              24:     17(int) Load 23(gl_SubGroupGeMaskARB)
+              25:     17(int) IAdd 22 24
+              27:     17(int) Load 26(gl_SubGroupGtMaskARB)
+              28:     17(int) IAdd 25 27
+              30:     17(int) Load 29(gl_SubGroupLeMaskARB)
+              31:     17(int) IAdd 28 30
+              33:     17(int) Load 32(gl_SubGroupLtMaskARB)
+              34:     17(int) IAdd 31 33
+                              Store 19(relMask) 34
+              35:     17(int) Load 19(relMask)
+              39:   38(ivec4) SubgroupBallotKHR 37
+              40:      6(int) CompositeExtract 39 0
+              41:      6(int) CompositeExtract 39 1
+              43:   42(ivec2) CompositeConstruct 40 41
+              44:     17(int) Bitcast 43
+              45:    36(bool) IEqual 35 44
+                              SelectionMerge 47 None
+                              BranchConditional 45 46 217
+              46:               Label
+              56:      6(int)   Load 8(invocation)
+              60:     59(ptr)   AccessChain 55(data) 57 57 58
+              61:   48(float)   Load 60
+              62:      6(int)   Load 8(invocation)
+              64:   48(float)   GroupBroadcast 63 61 62
+              65:     59(ptr)   AccessChain 55(data) 56 57 58
+                                Store 65 64
+              66:      6(int)   Load 8(invocation)
+              70:     69(ptr)   AccessChain 55(data) 67 57
+              71:   49(fvec4)   Load 70
+              72:   68(fvec2)   VectorShuffle 71 71 0 1
               73:      6(int)   Load 8(invocation)
-              76:     64(ptr)   AccessChain 51(data) 74 53
-              77:   44(fvec4)   Load 76
-              78:   75(fvec3)   VectorShuffle 77 77 0 1 2
-              79:      6(int)   Load 8(invocation)
-              80:   75(fvec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 78 79
-              81:     64(ptr)   AccessChain 51(data) 73 53
-              82:   44(fvec4)   Load 81
-              83:   44(fvec4)   VectorShuffle 82 80 4 5 6 3
-                                Store 81 83
-              84:      6(int)   Load 8(invocation)
-              86:     64(ptr)   AccessChain 51(data) 85 53
-              87:   44(fvec4)   Load 86
+              74:   48(float)   CompositeExtract 72 0
+              75:   48(float)   GroupBroadcast 63 74 73
+              76:   48(float)   CompositeExtract 72 1
+              77:   48(float)   GroupBroadcast 63 76 73
+              78:   68(fvec2)   CompositeConstruct 75 77
+              79:     69(ptr)   AccessChain 55(data) 66 57
+              80:   49(fvec4)   Load 79
+              81:   49(fvec4)   VectorShuffle 80 78 4 5 2 3
+                                Store 79 81
+              82:      6(int)   Load 8(invocation)
+              85:     69(ptr)   AccessChain 55(data) 83 57
+              86:   49(fvec4)   Load 85
+              87:   84(fvec3)   VectorShuffle 86 86 0 1 2
               88:      6(int)   Load 8(invocation)
-              89:   44(fvec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 87 88
-              90:     64(ptr)   AccessChain 51(data) 84 53
-                                Store 90 89
-              91:      6(int)   Load 8(invocation)
-              93:     92(ptr)   AccessChain 51(data) 53 62 54
-              94:     45(int)   Load 93
-              95:      6(int)   Load 8(invocation)
-              96:     45(int)   ExtInst 1(GLSL.std.450) 0(Unknown) 94 95
-              97:     92(ptr)   AccessChain 51(data) 91 62 54
-                                Store 97 96
-              98:      6(int)   Load 8(invocation)
-             101:    100(ptr)   AccessChain 51(data) 62 62
-             102:   46(ivec4)   Load 101
-             103:   99(ivec2)   VectorShuffle 102 102 0 1
-             104:      6(int)   Load 8(invocation)
-             105:   99(ivec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 103 104
-             106:    100(ptr)   AccessChain 51(data) 98 62
-             107:   46(ivec4)   Load 106
-             108:   46(ivec4)   VectorShuffle 107 105 4 5 2 3
-                                Store 106 108
-             109:      6(int)   Load 8(invocation)
-             111:    100(ptr)   AccessChain 51(data) 74 62
-             112:   46(ivec4)   Load 111
-             113:  110(ivec3)   VectorShuffle 112 112 0 1 2
+              89:   48(float)   CompositeExtract 87 0
+              90:   48(float)   GroupBroadcast 63 89 88
+              91:   48(float)   CompositeExtract 87 1
+              92:   48(float)   GroupBroadcast 63 91 88
+              93:   48(float)   CompositeExtract 87 2
+              94:   48(float)   GroupBroadcast 63 93 88
+              95:   84(fvec3)   CompositeConstruct 90 92 94
+              96:     69(ptr)   AccessChain 55(data) 82 57
+              97:   49(fvec4)   Load 96
+              98:   49(fvec4)   VectorShuffle 97 95 4 5 6 3
+                                Store 96 98
+              99:      6(int)   Load 8(invocation)
+             101:     69(ptr)   AccessChain 55(data) 100 57
+             102:   49(fvec4)   Load 101
+             103:      6(int)   Load 8(invocation)
+             104:   48(float)   CompositeExtract 102 0
+             105:   48(float)   GroupBroadcast 63 104 103
+             106:   48(float)   CompositeExtract 102 1
+             107:   48(float)   GroupBroadcast 63 106 103
+             108:   48(float)   CompositeExtract 102 2
+             109:   48(float)   GroupBroadcast 63 108 103
+             110:   48(float)   CompositeExtract 102 3
+             111:   48(float)   GroupBroadcast 63 110 103
+             112:   49(fvec4)   CompositeConstruct 105 107 109 111
+             113:     69(ptr)   AccessChain 55(data) 99 57
+                                Store 113 112
              114:      6(int)   Load 8(invocation)
-             115:  110(ivec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 113 114
-             116:    100(ptr)   AccessChain 51(data) 109 62
-             117:   46(ivec4)   Load 116
-             118:   46(ivec4)   VectorShuffle 117 115 4 5 6 3
-                                Store 116 118
-             119:      6(int)   Load 8(invocation)
-             120:    100(ptr)   AccessChain 51(data) 85 62
-             121:   46(ivec4)   Load 120
-             122:      6(int)   Load 8(invocation)
-             123:   46(ivec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 121 122
-             124:    100(ptr)   AccessChain 51(data) 119 62
-                                Store 124 123
-             125:      6(int)   Load 8(invocation)
-             127:    126(ptr)   AccessChain 51(data) 53 74 54
-             128:      6(int)   Load 127
-             129:      6(int)   Load 8(invocation)
-             130:      6(int)   ExtInst 1(GLSL.std.450) 0(Unknown) 128 129
-             131:    126(ptr)   AccessChain 51(data) 125 74 54
-                                Store 131 130
-             132:      6(int)   Load 8(invocation)
-             135:    134(ptr)   AccessChain 51(data) 62 74
-             136:   47(ivec4)   Load 135
-             137:  133(ivec2)   VectorShuffle 136 136 0 1
-             138:      6(int)   Load 8(invocation)
-             139:  133(ivec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 137 138
-             140:    134(ptr)   AccessChain 51(data) 132 74
-             141:   47(ivec4)   Load 140
-             142:   47(ivec4)   VectorShuffle 141 139 4 5 2 3
-                                Store 140 142
-             143:      6(int)   Load 8(invocation)
-             145:    134(ptr)   AccessChain 51(data) 74 74
-             146:   47(ivec4)   Load 145
-             147:  144(ivec3)   VectorShuffle 146 146 0 1 2
-             148:      6(int)   Load 8(invocation)
-             149:  144(ivec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 147 148
-             150:    134(ptr)   AccessChain 51(data) 143 74
-             151:   47(ivec4)   Load 150
-             152:   47(ivec4)   VectorShuffle 151 149 4 5 6 3
-                                Store 150 152
-             153:      6(int)   Load 8(invocation)
-             154:    134(ptr)   AccessChain 51(data) 85 74
-             155:   47(ivec4)   Load 154
-             156:      6(int)   Load 8(invocation)
-             157:   47(ivec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 155 156
-             158:    134(ptr)   AccessChain 51(data) 153 74
-                                Store 158 157
-                                Branch 42
-             159:               Label
-             160:      6(int)   Load 8(invocation)
-             161:     55(ptr)   AccessChain 51(data) 53 53 54
-             162:   43(float)   Load 161
-             163:   43(float)   ExtInst 1(GLSL.std.450) 0(Unknown) 162
-             164:     55(ptr)   AccessChain 51(data) 160 53 54
-                                Store 164 163
-             165:      6(int)   Load 8(invocation)
-             166:     64(ptr)   AccessChain 51(data) 62 53
-             167:   44(fvec4)   Load 166
-             168:   63(fvec2)   VectorShuffle 167 167 0 1
-             169:   63(fvec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 168
-             170:     64(ptr)   AccessChain 51(data) 165 53
-             171:   44(fvec4)   Load 170
-             172:   44(fvec4)   VectorShuffle 171 169 4 5 2 3
-                                Store 170 172
+             116:    115(ptr)   AccessChain 55(data) 57 67 58
+             117:     50(int)   Load 116
+             118:      6(int)   Load 8(invocation)
+             119:     50(int)   GroupBroadcast 63 117 118
+             120:    115(ptr)   AccessChain 55(data) 114 67 58
+                                Store 120 119
+             121:      6(int)   Load 8(invocation)
+             124:    123(ptr)   AccessChain 55(data) 67 67
+             125:   51(ivec4)   Load 124
+             126:  122(ivec2)   VectorShuffle 125 125 0 1
+             127:      6(int)   Load 8(invocation)
+             128:     50(int)   CompositeExtract 126 0
+             129:     50(int)   GroupBroadcast 63 128 127
+             130:     50(int)   CompositeExtract 126 1
+             131:     50(int)   GroupBroadcast 63 130 127
+             132:  122(ivec2)   CompositeConstruct 129 131
+             133:    123(ptr)   AccessChain 55(data) 121 67
+             134:   51(ivec4)   Load 133
+             135:   51(ivec4)   VectorShuffle 134 132 4 5 2 3
+                                Store 133 135
+             136:      6(int)   Load 8(invocation)
+             138:    123(ptr)   AccessChain 55(data) 83 67
+             139:   51(ivec4)   Load 138
+             140:  137(ivec3)   VectorShuffle 139 139 0 1 2
+             141:      6(int)   Load 8(invocation)
+             142:     50(int)   CompositeExtract 140 0
+             143:     50(int)   GroupBroadcast 63 142 141
+             144:     50(int)   CompositeExtract 140 1
+             145:     50(int)   GroupBroadcast 63 144 141
+             146:     50(int)   CompositeExtract 140 2
+             147:     50(int)   GroupBroadcast 63 146 141
+             148:  137(ivec3)   CompositeConstruct 143 145 147
+             149:    123(ptr)   AccessChain 55(data) 136 67
+             150:   51(ivec4)   Load 149
+             151:   51(ivec4)   VectorShuffle 150 148 4 5 6 3
+                                Store 149 151
+             152:      6(int)   Load 8(invocation)
+             153:    123(ptr)   AccessChain 55(data) 100 67
+             154:   51(ivec4)   Load 153
+             155:      6(int)   Load 8(invocation)
+             156:     50(int)   CompositeExtract 154 0
+             157:     50(int)   GroupBroadcast 63 156 155
+             158:     50(int)   CompositeExtract 154 1
+             159:     50(int)   GroupBroadcast 63 158 155
+             160:     50(int)   CompositeExtract 154 2
+             161:     50(int)   GroupBroadcast 63 160 155
+             162:     50(int)   CompositeExtract 154 3
+             163:     50(int)   GroupBroadcast 63 162 155
+             164:   51(ivec4)   CompositeConstruct 157 159 161 163
+             165:    123(ptr)   AccessChain 55(data) 152 67
+                                Store 165 164
+             166:      6(int)   Load 8(invocation)
+             168:    167(ptr)   AccessChain 55(data) 57 83 58
+             169:      6(int)   Load 168
+             170:      6(int)   Load 8(invocation)
+             171:      6(int)   GroupBroadcast 63 169 170
+             172:    167(ptr)   AccessChain 55(data) 166 83 58
+                                Store 172 171
              173:      6(int)   Load 8(invocation)
-             174:     64(ptr)   AccessChain 51(data) 74 53
-             175:   44(fvec4)   Load 174
-             176:   75(fvec3)   VectorShuffle 175 175 0 1 2
-             177:   75(fvec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 176
-             178:     64(ptr)   AccessChain 51(data) 173 53
-             179:   44(fvec4)   Load 178
-             180:   44(fvec4)   VectorShuffle 179 177 4 5 6 3
-                                Store 178 180
-             181:      6(int)   Load 8(invocation)
-             182:     64(ptr)   AccessChain 51(data) 85 53
-             183:   44(fvec4)   Load 182
-             184:   44(fvec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 183
-             185:     64(ptr)   AccessChain 51(data) 181 53
-                                Store 185 184
-             186:      6(int)   Load 8(invocation)
-             187:     92(ptr)   AccessChain 51(data) 53 62 54
-             188:     45(int)   Load 187
-             189:     45(int)   ExtInst 1(GLSL.std.450) 0(Unknown) 188
-             190:     92(ptr)   AccessChain 51(data) 186 62 54
-                                Store 190 189
-             191:      6(int)   Load 8(invocation)
-             192:    100(ptr)   AccessChain 51(data) 62 62
-             193:   46(ivec4)   Load 192
-             194:   99(ivec2)   VectorShuffle 193 193 0 1
-             195:   99(ivec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 194
-             196:    100(ptr)   AccessChain 51(data) 191 62
-             197:   46(ivec4)   Load 196
-             198:   46(ivec4)   VectorShuffle 197 195 4 5 2 3
-                                Store 196 198
-             199:      6(int)   Load 8(invocation)
-             200:    100(ptr)   AccessChain 51(data) 74 62
-             201:   46(ivec4)   Load 200
-             202:  110(ivec3)   VectorShuffle 201 201 0 1 2
-             203:  110(ivec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 202
-             204:    100(ptr)   AccessChain 51(data) 199 62
-             205:   46(ivec4)   Load 204
-             206:   46(ivec4)   VectorShuffle 205 203 4 5 6 3
-                                Store 204 206
-             207:      6(int)   Load 8(invocation)
-             208:    100(ptr)   AccessChain 51(data) 85 62
-             209:   46(ivec4)   Load 208
-             210:   46(ivec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 209
-             211:    100(ptr)   AccessChain 51(data) 207 62
-                                Store 211 210
-             212:      6(int)   Load 8(invocation)
-             213:    126(ptr)   AccessChain 51(data) 53 74 54
-             214:      6(int)   Load 213
-             215:      6(int)   ExtInst 1(GLSL.std.450) 0(Unknown) 214
-             216:    126(ptr)   AccessChain 51(data) 212 74 54
+             175:    174(ptr)   AccessChain 55(data) 67 83
+             176:   38(ivec4)   Load 175
+             177:   42(ivec2)   VectorShuffle 176 176 0 1
+             178:      6(int)   Load 8(invocation)
+             179:      6(int)   CompositeExtract 177 0
+             180:      6(int)   GroupBroadcast 63 179 178
+             181:      6(int)   CompositeExtract 177 1
+             182:      6(int)   GroupBroadcast 63 181 178
+             183:   42(ivec2)   CompositeConstruct 180 182
+             184:    174(ptr)   AccessChain 55(data) 173 83
+             185:   38(ivec4)   Load 184
+             186:   38(ivec4)   VectorShuffle 185 183 4 5 2 3
+                                Store 184 186
+             187:      6(int)   Load 8(invocation)
+             189:    174(ptr)   AccessChain 55(data) 83 83
+             190:   38(ivec4)   Load 189
+             191:  188(ivec3)   VectorShuffle 190 190 0 1 2
+             192:      6(int)   Load 8(invocation)
+             193:      6(int)   CompositeExtract 191 0
+             194:      6(int)   GroupBroadcast 63 193 192
+             195:      6(int)   CompositeExtract 191 1
+             196:      6(int)   GroupBroadcast 63 195 192
+             197:      6(int)   CompositeExtract 191 2
+             198:      6(int)   GroupBroadcast 63 197 192
+             199:  188(ivec3)   CompositeConstruct 194 196 198
+             200:    174(ptr)   AccessChain 55(data) 187 83
+             201:   38(ivec4)   Load 200
+             202:   38(ivec4)   VectorShuffle 201 199 4 5 6 3
+                                Store 200 202
+             203:      6(int)   Load 8(invocation)
+             204:    174(ptr)   AccessChain 55(data) 100 83
+             205:   38(ivec4)   Load 204
+             206:      6(int)   Load 8(invocation)
+             207:      6(int)   CompositeExtract 205 0
+             208:      6(int)   GroupBroadcast 63 207 206
+             209:      6(int)   CompositeExtract 205 1
+             210:      6(int)   GroupBroadcast 63 209 206
+             211:      6(int)   CompositeExtract 205 2
+             212:      6(int)   GroupBroadcast 63 211 206
+             213:      6(int)   CompositeExtract 205 3
+             214:      6(int)   GroupBroadcast 63 213 206
+             215:   38(ivec4)   CompositeConstruct 208 210 212 214
+             216:    174(ptr)   AccessChain 55(data) 203 83
                                 Store 216 215
-             217:      6(int)   Load 8(invocation)
-             218:    134(ptr)   AccessChain 51(data) 62 74
-             219:   47(ivec4)   Load 218
-             220:  133(ivec2)   VectorShuffle 219 219 0 1
-             221:  133(ivec2)   ExtInst 1(GLSL.std.450) 0(Unknown) 220
-             222:    134(ptr)   AccessChain 51(data) 217 74
-             223:   47(ivec4)   Load 222
-             224:   47(ivec4)   VectorShuffle 223 221 4 5 2 3
-                                Store 222 224
-             225:      6(int)   Load 8(invocation)
-             226:    134(ptr)   AccessChain 51(data) 74 74
-             227:   47(ivec4)   Load 226
-             228:  144(ivec3)   VectorShuffle 227 227 0 1 2
-             229:  144(ivec3)   ExtInst 1(GLSL.std.450) 0(Unknown) 228
-             230:    134(ptr)   AccessChain 51(data) 225 74
-             231:   47(ivec4)   Load 230
-             232:   47(ivec4)   VectorShuffle 231 229 4 5 6 3
-                                Store 230 232
-             233:      6(int)   Load 8(invocation)
-             234:    134(ptr)   AccessChain 51(data) 85 74
-             235:   47(ivec4)   Load 234
-             236:   47(ivec4)   ExtInst 1(GLSL.std.450) 0(Unknown) 235
-             237:    134(ptr)   AccessChain 51(data) 233 74
-                                Store 237 236
-                                Branch 42
-              42:             Label
+                                Branch 47
+             217:               Label
+             218:      6(int)   Load 8(invocation)
+             219:     59(ptr)   AccessChain 55(data) 57 57 58
+             220:   48(float)   Load 219
+             221:   48(float)   SubgroupFirstInvocationKHR 220
+             222:     59(ptr)   AccessChain 55(data) 218 57 58
+                                Store 222 221
+             223:      6(int)   Load 8(invocation)
+             224:     69(ptr)   AccessChain 55(data) 67 57
+             225:   49(fvec4)   Load 224
+             226:   68(fvec2)   VectorShuffle 225 225 0 1
+             227:   68(fvec2)   SubgroupFirstInvocationKHR 226
+             228:     69(ptr)   AccessChain 55(data) 223 57
+             229:   49(fvec4)   Load 228
+             230:   49(fvec4)   VectorShuffle 229 227 4 5 2 3
+                                Store 228 230
+             231:      6(int)   Load 8(invocation)
+             232:     69(ptr)   AccessChain 55(data) 83 57
+             233:   49(fvec4)   Load 232
+             234:   84(fvec3)   VectorShuffle 233 233 0 1 2
+             235:   84(fvec3)   SubgroupFirstInvocationKHR 234
+             236:     69(ptr)   AccessChain 55(data) 231 57
+             237:   49(fvec4)   Load 236
+             238:   49(fvec4)   VectorShuffle 237 235 4 5 6 3
+                                Store 236 238
+             239:      6(int)   Load 8(invocation)
+             240:     69(ptr)   AccessChain 55(data) 100 57
+             241:   49(fvec4)   Load 240
+             242:   49(fvec4)   SubgroupFirstInvocationKHR 241
+             243:     69(ptr)   AccessChain 55(data) 239 57
+                                Store 243 242
+             244:      6(int)   Load 8(invocation)
+             245:    115(ptr)   AccessChain 55(data) 57 67 58
+             246:     50(int)   Load 245
+             247:     50(int)   SubgroupFirstInvocationKHR 246
+             248:    115(ptr)   AccessChain 55(data) 244 67 58
+                                Store 248 247
+             249:      6(int)   Load 8(invocation)
+             250:    123(ptr)   AccessChain 55(data) 67 67
+             251:   51(ivec4)   Load 250
+             252:  122(ivec2)   VectorShuffle 251 251 0 1
+             253:  122(ivec2)   SubgroupFirstInvocationKHR 252
+             254:    123(ptr)   AccessChain 55(data) 249 67
+             255:   51(ivec4)   Load 254
+             256:   51(ivec4)   VectorShuffle 255 253 4 5 2 3
+                                Store 254 256
+             257:      6(int)   Load 8(invocation)
+             258:    123(ptr)   AccessChain 55(data) 83 67
+             259:   51(ivec4)   Load 258
+             260:  137(ivec3)   VectorShuffle 259 259 0 1 2
+             261:  137(ivec3)   SubgroupFirstInvocationKHR 260
+             262:    123(ptr)   AccessChain 55(data) 257 67
+             263:   51(ivec4)   Load 262
+             264:   51(ivec4)   VectorShuffle 263 261 4 5 6 3
+                                Store 262 264
+             265:      6(int)   Load 8(invocation)
+             266:    123(ptr)   AccessChain 55(data) 100 67
+             267:   51(ivec4)   Load 266
+             268:   51(ivec4)   SubgroupFirstInvocationKHR 267
+             269:    123(ptr)   AccessChain 55(data) 265 67
+                                Store 269 268
+             270:      6(int)   Load 8(invocation)
+             271:    167(ptr)   AccessChain 55(data) 57 83 58
+             272:      6(int)   Load 271
+             273:      6(int)   SubgroupFirstInvocationKHR 272
+             274:    167(ptr)   AccessChain 55(data) 270 83 58
+                                Store 274 273
+             275:      6(int)   Load 8(invocation)
+             276:    174(ptr)   AccessChain 55(data) 67 83
+             277:   38(ivec4)   Load 276
+             278:   42(ivec2)   VectorShuffle 277 277 0 1
+             279:   42(ivec2)   SubgroupFirstInvocationKHR 278
+             280:    174(ptr)   AccessChain 55(data) 275 83
+             281:   38(ivec4)   Load 280
+             282:   38(ivec4)   VectorShuffle 281 279 4 5 2 3
+                                Store 280 282
+             283:      6(int)   Load 8(invocation)
+             284:    174(ptr)   AccessChain 55(data) 83 83
+             285:   38(ivec4)   Load 284
+             286:  188(ivec3)   VectorShuffle 285 285 0 1 2
+             287:  188(ivec3)   SubgroupFirstInvocationKHR 286
+             288:    174(ptr)   AccessChain 55(data) 283 83
+             289:   38(ivec4)   Load 288
+             290:   38(ivec4)   VectorShuffle 289 287 4 5 6 3
+                                Store 288 290
+             291:      6(int)   Load 8(invocation)
+             292:    174(ptr)   AccessChain 55(data) 100 83
+             293:   38(ivec4)   Load 292
+             294:   38(ivec4)   SubgroupFirstInvocationKHR 293
+             295:    174(ptr)   AccessChain 55(data) 291 83
+                                Store 295 294
+                                Branch 47
+              47:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
new file mode 100644
index 0000000000000000000000000000000000000000..41ad78d480cbe8389b5985921efe518ae1bda7c9
--- /dev/null
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -0,0 +1,104 @@
+spv.shaderDrawParams.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 53
+
+                              Capability Shader
+                              Capability DrawParameters
+                              Extension  "SPV_KHR_shader_draw_parameters"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 16 29 37
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_shader_draw_parameters"
+                              Name 4  "main"
+                              Name 9  "gl_BaseVertexARB"
+                              Name 16  "gl_BaseInstanceARB"
+                              Name 27  "gl_PerVertex"
+                              MemberName 27(gl_PerVertex) 0  "gl_Position"
+                              MemberName 27(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 27(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 29  ""
+                              Name 34  "Block"
+                              MemberName 34(Block) 0  "pos"
+                              Name 36  "block"
+                              Name 37  "gl_DrawIDARB"
+                              Decorate 9(gl_BaseVertexARB) BuiltIn BaseVertex
+                              Decorate 16(gl_BaseInstanceARB) BuiltIn BaseInstance
+                              MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 27(gl_PerVertex) Block
+                              Decorate 31 ArrayStride 16
+                              Decorate 33 ArrayStride 64
+                              MemberDecorate 34(Block) 0 Offset 0
+                              Decorate 34(Block) Block
+                              Decorate 36(block) DescriptorSet 0
+                              Decorate 36(block) Binding 0
+                              Decorate 37(gl_DrawIDARB) BuiltIn DrawIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypeInt 32 1
+               8:             TypePointer Input 7(int)
+9(gl_BaseVertexARB):      8(ptr) Variable Input
+              11:      7(int) Constant 0
+16(gl_BaseInstanceARB):      8(ptr) Variable Input
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 4
+              24:             TypeInt 32 0
+              25:     24(int) Constant 1
+              26:             TypeArray 22(float) 25
+27(gl_PerVertex):             TypeStruct 23(fvec4) 22(float) 26 26
+              28:             TypePointer Output 27(gl_PerVertex)
+              29:     28(ptr) Variable Output
+              30:     24(int) Constant 4
+              31:             TypeArray 23(fvec4) 30
+              32:     24(int) Constant 2
+              33:             TypeArray 31 32
+       34(Block):             TypeStruct 33
+              35:             TypePointer Uniform 34(Block)
+       36(block):     35(ptr) Variable Uniform
+37(gl_DrawIDARB):      8(ptr) Variable Input
+              39:      7(int) Constant 4
+              41:             TypePointer Uniform 23(fvec4)
+              44:             TypePointer Output 23(fvec4)
+              47:      7(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              10:      7(int) Load 9(gl_BaseVertexARB)
+              12:     6(bool) SGreaterThan 10 11
+              13:     6(bool) LogicalNot 12
+                              SelectionMerge 15 None
+                              BranchConditional 13 14 15
+              14:               Label
+              17:      7(int)   Load 16(gl_BaseInstanceARB)
+              18:     6(bool)   SGreaterThan 17 11
+                                Branch 15
+              15:             Label
+              19:     6(bool) Phi 12 5 18 14
+                              SelectionMerge 21 None
+                              BranchConditional 19 20 46
+              20:               Label
+              38:      7(int)   Load 37(gl_DrawIDARB)
+              40:      7(int)   SMod 38 39
+              42:     41(ptr)   AccessChain 36(block) 11 11 40
+              43:   23(fvec4)   Load 42
+              45:     44(ptr)   AccessChain 29 11
+                                Store 45 43
+                                Branch 21
+              46:               Label
+              48:      7(int)   Load 37(gl_DrawIDARB)
+              49:      7(int)   SMod 48 39
+              50:     41(ptr)   AccessChain 36(block) 11 47 49
+              51:   23(fvec4)   Load 50
+              52:     44(ptr)   AccessChain 29 11
+                                Store 52 51
+                                Branch 21
+              21:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index e63164d024ee32080e8c9fa6140a2713ee813722..f8bfae804a96212911811c7255c7934fc518c055 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,10 +1,6 @@
 spv.shaderGroupVote.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 39e40ece73746802ee8220b12f9f470614263da8..498c287784b4505c49663d669de10da10890ff0e 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,10 +1,6 @@
 spv.shiftOps.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 5b39b1cba56653312f5f371c322616742f1fd528..7d5189a25187ea98f6aab7856f24912534b53641 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,10 +1,6 @@
 spv.shortCircuit.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 147
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 458a90dbac18ae4e7fc3eff13913463c7473c0ee..2e6b671f4686050c16344663e07fa2acd1cec22b 100755
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,8 +1,4 @@
 spv.simpleFunctionCall.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 19
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index 3e0f05e19c6b1e6d0d5330d1ba1a8f12774f047a..2cad63137f1381dc1f6837afef29bf4c5710b5a4 100755
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -1,10 +1,6 @@
 spv.simpleMat.vert
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 39
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index ae48f41d72d934a3b1b3e76b98a271b121da5ab0..431ef1528474e93d0d9732edec7d3fe988d4fda7 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,10 +1,6 @@
 spv.sparseTexture.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 438
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index 1922ac12548c5774ed088ad33095c571a8c8fd74..175dc35c8a534aaacada17271a8c70a6c69d2399 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,10 +1,6 @@
 spv.sparseTextureClamp.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 360
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index db5a417ce2a20d2b865b80be4a43926670f42d63..5a7de46feede95a009e0dea8da94d41dcceb5d28 100755
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,10 +1,6 @@
 spv.specConst.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 27
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index 2f16f04d4a7c1e355b987226b813c44f65f392ab..481ed68c3ac49337340b4583125d61f60d20ca4c 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,10 +1,6 @@
 spv.specConstant.comp
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked compute stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 27
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index edda4a7b582fb6b5f1d211b2d12c96aa42e51956..dc10e2387994344a6d680c57a21bf6447673bf19 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,10 +1,6 @@
 spv.specConstant.vert
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 81
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index c4585e40da1f879ad1a29d3cc1fa2e73160bb82b..f8c556edcad1241b2320452a8eaf7fcadb38ca6a 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,10 +1,6 @@
 spv.specConstantComposite.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index ab425583896f8909b88208358a2c4914031ba64f..e2395c82b82476bae3d0793ce713a45441175233 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,10 +1,6 @@
 spv.specConstantOperations.vert
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 135
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index abff683492cd2f78f69eac55aa940086b1f426e4..eb796f7c89c1ddb2b527ccbac3ecb7f16fbcf0c5 100755
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -2,10 +2,6 @@ spv.structAssignment.frag
 WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 50
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 78ebdc635f1af64e53d66a063481f862813e9255..e60159f9952122916b9e90c3905e22957c71959b 100755
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,8 +1,4 @@
 spv.structDeref.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 123
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index 8d91ed043af8b69e4ab3fb94efb97b89679f31e2..f7cb2d2a2588fc792624f7028349ddc4914c53b1 100755
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,8 +1,4 @@
 spv.structure.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 60
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 93d680c71ab26bbaac8112249d3ea3c72a49b076..c2421113881e52adad655eb8874881cedd73605d 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,10 +1,6 @@
 spv.subpass.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 67
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 87ea4c87ea7caf7895026d20b8254eb4fdf30eaf..86acb6c8eeabf2063d7b110227d1289c68befcf9 100755
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,10 +4,6 @@ WARNING: 0:121: 'switch' : last case/default label not followed by statements
 WARNING: 0:134: 'switch' : last case/default label not followed by statements 
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 269
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 471fed1128c7d7160aabcb6125d0af1f48f13ac5..46978f8c60c4b83da3f1b720a912a61dd089d7bf 100755
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,8 +1,4 @@
 spv.swizzle.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 108
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 6b922065d8845c063aa6eb331c63078fb704e255..bf0699a3cf7c83cfdac9ef425d3c1ba67379c405 100755
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,10 +1,6 @@
 spv.swizzleInversion.frag
 Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 46
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 8f1c5260bbaf1915cb4088a3877a819c7554ccca..bf0135aebe65e9df0a87c5ee31f4274b1c4147a9 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,10 +1,6 @@
 spv.test.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 55
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 697e468d4fdece5ca0e97f9344f0dc09dcda71e4..623d16ba679d9804919958145493a8df912926fd 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -1,10 +1,6 @@
 spv.test.vert
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 24
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index 30f3f281b409bccd7b4533aa4a9dd2e7e683c71f..467f25458964f64af8de59c33ec22073e33bd1c9 100755
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -3,10 +3,6 @@ WARNING: 0:10: varying deprecated in version 130; may be removed in future relea
 WARNING: 0:11: varying deprecated in version 130; may be removed in future release
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 305
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index cc3d3daaf893bde0a73335c22ee069f48320174a..c361549952d01b2a36afdb5f681aca7755ec707c 100755
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,8 +1,4 @@
 spv.texture.vert
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 150
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index 4295370d385d8561f019194c2dc1bfb6ce767345..9a2d8e35f94f45ac3c6037fa015aeca11e70a540 100755
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,8 +1,4 @@
 spv.types.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 260
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 6682e7c26a55e272395488076e928b0af93da8af..e9ba0ce263343f943df78e53b430a666458c0b8c 100755
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,10 +1,6 @@
 spv.uint.frag
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 213
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index e66eda6b109ec04fe3e3ce1299347b39336baaab..447ad4fd4e32ae049903021a618a94b528180e64 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,8 +1,4 @@
 spv.uniformArray.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 53
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 1f8ee96ab25082321da1bce6ed53da06ade3bd91..b4d3fe01a4de9859db32e37da1388b7b5f2b7b76 100755
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,10 +1,6 @@
 spv.variableArrayIndex.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 93
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 4a7d2ee6268be8792a1b88ecea3a35161eb369c3..58833ea1b6729be0c180c4e8c39f9062c18cdfb3 100755
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,8 +1,4 @@
 spv.varyingArray.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 61
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 410fd3c46a16fb87502042cdbcc3590613006900..9c018406ab847fcab7b067356cb80a82e0646e0f 100755
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,8 +1,4 @@
 spv.varyingArrayIndirect.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 70
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index 1d4b694b3fe5b00a5c7c9146f6267fe80747301b..44348616e805205546e3ba15c2e5d96984be168e 100755
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,10 +1,6 @@
 spv.voidFunction.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 43
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 2ec331024b040cf90a03ff0484d3e44c1ca2b65c..73dc35ced3845dc143d5033dc312b42e28104b27 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,10 +1,6 @@
 spv.while-continue-break.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 41
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index 0c1c822179fce39a1a28ea85a00972e832b0bcc5..82121dd00c05707d7a3e9ae4ba6f3983dd9b776c 100755
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,10 +1,6 @@
 spv.while-simple.vert
 Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 
-
-Linked vertex stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 22
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index 8de5e956e0d3e3b47d0c1d52384f6790f926487b..ce1e195d0dcd87fa659a2f30aa89eb6939a369e1 100755
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,8 +1,4 @@
 spv.whileLoop.frag
-
-Linked fragment stage:
-
-
 // Module Version 10000
 // Generated by (magic number): 80001
 // Id's are bound by 35
diff --git a/Test/baseResults/tokenPaste.vert.out b/Test/baseResults/tokenPaste.vert.out
new file mode 100755
index 0000000000000000000000000000000000000000..59971515a30225f11417bdeac030cb13a12de717
--- /dev/null
+++ b/Test/baseResults/tokenPaste.vert.out
@@ -0,0 +1,60 @@
+tokenPaste.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:38: '##' : unexpected location 
+ERROR: 0:40: '##' : unexpected location; end of replacement list 
+ERROR: 0:49: '##' : combined tokens are too long 
+ERROR: 0:52: '##' : only supported for preprocessing identifiers 
+ERROR: 4 compilation errors.  No code generated.
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:52  Sequence
+0:52    move second child to first child (temp int)
+0:52      'a' (global int)
+0:52      Constant:
+0:52        11 (const int)
+0:?   Linker Objects
+0:?     'SecondExpansion' (global int)
+0:?     'PostPasteExpansion' (global int)
+0:?     'foo27' (global float)
+0:?     'foo155' (uniform float)
+0:?     'foo719' (global float)
+0:?     'barfoo' (uniform float)
+0:?     'argless' (global float)
+0:?     'dc1' (global float)
+0:?     'dc2' (global float)
+0:?     'foo875' (uniform float)
+0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123451234' (global float)
+0:?     'a' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:52  Sequence
+0:52    move second child to first child (temp int)
+0:52      'a' (global int)
+0:52      Constant:
+0:52        11 (const int)
+0:?   Linker Objects
+0:?     'SecondExpansion' (global int)
+0:?     'PostPasteExpansion' (global int)
+0:?     'foo27' (global float)
+0:?     'foo155' (uniform float)
+0:?     'foo719' (global float)
+0:?     'barfoo' (uniform float)
+0:?     'argless' (global float)
+0:?     'dc1' (global float)
+0:?     'dc2' (global float)
+0:?     'foo875' (uniform float)
+0:?     'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123451234' (global float)
+0:?     'a' (global int)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/varyingArray.frag.out b/Test/baseResults/varyingArray.frag.out
index c6cf6bae2b4b44d203f4cd4824dfa845a9fc6166..1fd59b466729a45c400c316465c423231dd3958b 100644
--- a/Test/baseResults/varyingArray.frag.out
+++ b/Test/baseResults/varyingArray.frag.out
@@ -56,7 +56,6 @@ Shader version: 130
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'foo' (smooth in 3-element array of 4-component vector of float)
 
 
@@ -115,6 +114,5 @@ Shader version: 130
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'foo' (smooth in 3-element array of 4-component vector of float)
 
diff --git a/Test/baseResults/varyingArrayIndirect.frag.out b/Test/baseResults/varyingArrayIndirect.frag.out
index 02a41f3f1dcad71b68da487757d59b35ff0c7bd7..73498129473146da27d8321bcd28de53f5067955 100644
--- a/Test/baseResults/varyingArrayIndirect.frag.out
+++ b/Test/baseResults/varyingArrayIndirect.frag.out
@@ -57,7 +57,6 @@ Shader version: 130
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'userIn' (smooth in 2-element array of 4-component vector of float)
 0:?     'a' (uniform int)
 0:?     'b' (uniform int)
@@ -119,7 +118,6 @@ Shader version: 130
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'userIn' (smooth in 2-element array of 4-component vector of float)
 0:?     'a' (uniform int)
 0:?     'b' (uniform int)
diff --git a/Test/baseResults/vulkan.comp.out b/Test/baseResults/vulkan.comp.out
index 7f1fd18ac733e8595bd31f473ac6871f6638fc9f..5eb4c5b484ead795667adf7fb6ca6267501f351c 100644
--- a/Test/baseResults/vulkan.comp.out
+++ b/Test/baseResults/vulkan.comp.out
@@ -4,8 +4,4 @@ ERROR: 0:5: 'local_size' : cannot change previously set size
 ERROR: 1 compilation errors.  No code generated.
 
 
-
-Linked compute stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index d4da9190632beea2f922214755101f527598704d..1df2c3eb5306a62f60be00abe7e3b5d5449b2d4d 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -43,9 +43,6 @@ ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use
 ERROR: 38 compilation errors.  No code generated.
 
 
-
-Linked fragment stage:
-
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/vulkan.vert.out b/Test/baseResults/vulkan.vert.out
index 5aeaa74c3520caa4bf37d99dac8779436112d41b..7111a2dc2b6c5d44d2675d04211c6de4f37edf3d 100644
--- a/Test/baseResults/vulkan.vert.out
+++ b/Test/baseResults/vulkan.vert.out
@@ -26,8 +26,4 @@ ERROR: 0:39: 'set' : cannot be used with push_constant
 ERROR: 23 compilation errors.  No code generated.
 
 
-
-Linked vertex stage:
-
-
 SPIR-V is not generated for failed compile or link
diff --git a/Test/hlsl.amend.frag b/Test/hlsl.amend.frag
new file mode 100755
index 0000000000000000000000000000000000000000..c9fd69bd3ef2e35d4afd5f6c8e86d1c69d07f478
--- /dev/null
+++ b/Test/hlsl.amend.frag
@@ -0,0 +1,28 @@
+float4 a;
+float b;
+
+void f1()
+{
+    a * b;
+}
+
+float3 c;
+
+void f2()
+{
+    a.x + b + c.x;
+}
+
+void f3()
+{
+    c;
+}
+
+int d;
+
+void f4()
+{
+    d * a;
+}
+
+int e;
\ No newline at end of file
diff --git a/Test/hlsl.array.flatten.frag b/Test/hlsl.array.flatten.frag
new file mode 100644
index 0000000000000000000000000000000000000000..987ce1bf32e87fd8a71f8db64e9f2fee77e4b878
--- /dev/null
+++ b/Test/hlsl.array.flatten.frag
@@ -0,0 +1,38 @@
+
+// uniform Texture1D g_tex3[3][2];  // TODO: legal in HLSL, but we don't handle it yet.
+
+uniform Texture1D g_tex[3];
+uniform Texture1D g_tex_explicit[3] : register(t1);
+
+SamplerState g_samp[3];
+SamplerState g_samp_explicit[3] : register(s5);
+
+uniform float3x3 g_mats[4];
+uniform float3x3 g_mats_explicit[4] : register(b10);
+uniform float g_floats[4];
+
+// uniform float g_floats[4] = { 10, 11, 12, 13 };  // TODO: ... add when initializer lists can be flattened.
+
+float4 TestFn1()
+{
+    return g_tex[1].Sample(g_samp[1], 0.2);
+}
+
+float4 TestFn2(Texture1D l_tex[3], SamplerState l_samp[3])
+{
+    return l_tex[2].Sample(l_samp[2], 0.2);
+}
+
+static int not_flattened_a[5] = { 1, 2, 3, 4, 5 };
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+void main(out PS_OUTPUT ps_output)
+{
+    // test flattening for local assignment initialization
+    SamplerState local_sampler_array[3] = g_samp;
+    Texture1D local_texture_array[3]    = g_tex;
+    float local_float_array[4]          = g_floats;
+
+    ps_output.color = TestFn1() + TestFn2(g_tex, g_samp);
+}
diff --git a/Test/hlsl.array.implicit-size.frag b/Test/hlsl.array.implicit-size.frag
new file mode 100644
index 0000000000000000000000000000000000000000..e7a54f46624616070cf803d7bb6f0335d8d01584
--- /dev/null
+++ b/Test/hlsl.array.implicit-size.frag
@@ -0,0 +1,32 @@
+
+// array size from initializer
+static float g_array [ ] = { 1, 2, 3, 4, 5 };
+
+// Unused: array size from initializer
+static float g_array_unused [ ] = { 1, 2, 3, 4, 5, 6, 7 };
+
+// Test initializer sizing for arrayed structs
+static struct mystruct {
+    int i;
+    float f;
+} g_mystruct[] = {
+    { 1, 2.0 },
+    { 3, 4.0 },
+};
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+// INVALID: implicit size requires an initializer expression.
+// uniform float bad[];
+
+// INVALID: function parameters cannot be implicitly sized
+// void BadFunction(int a[]) { }
+
+void main(out PS_OUTPUT ps_output)
+{
+    // local array sized from initializers
+    float l_array[] = { 1, 2, 3 };
+    int idx;
+
+    ps_output.color = g_array[0] + g_array[4] + l_array[1] + g_mystruct[0].f + g_array[idx];
+}
diff --git a/Test/hlsl.array.multidim.frag b/Test/hlsl.array.multidim.frag
new file mode 100644
index 0000000000000000000000000000000000000000..524a8896e09faa576152a5f69496319a6227800d
--- /dev/null
+++ b/Test/hlsl.array.multidim.frag
@@ -0,0 +1,20 @@
+
+float float_array[5][4][3];
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+    float4 float4_array_1[2][3];
+    float4 float4_array_2[5][3];
+
+    float4_array_1[1][2] = float_array[2][3][1];
+    float4_array_2[1] = float4_array_1[0];
+
+    PS_OUTPUT psout;
+    psout.Color = float4_array_1[1][2];
+    return psout;
+}
diff --git a/Test/hlsl.attribute.expression.comp b/Test/hlsl.attribute.expression.comp
new file mode 100644
index 0000000000000000000000000000000000000000..535fbad42c8b758451d08d093a27f220713d2f38
--- /dev/null
+++ b/Test/hlsl.attribute.expression.comp
@@ -0,0 +1,15 @@
+
+uniform int bound;
+
+#define FOO 3
+#define BAR 2
+
+[numthreads(2+2, 2*3, (1+FOO)*BAR)]
+float4 main() : SV_TARGET
+{
+    [unroll(5*2 + 1) ]
+        for (int x=0; x<bound; ++x)
+            ;
+    
+    return float4(0,0,0,0);
+}
diff --git a/Test/hlsl.basic.comp b/Test/hlsl.basic.comp
new file mode 100644
index 0000000000000000000000000000000000000000..8a65a59616f20b32c64ae2e92c225ec16835daf4
--- /dev/null
+++ b/Test/hlsl.basic.comp
@@ -0,0 +1,6 @@
+groupshared float4 a[100];
+
+void main(int dti : SV_DispatchThreadID)
+{
+    dti;
+}
diff --git a/Test/hlsl.basic.geom b/Test/hlsl.basic.geom
new file mode 100644
index 0000000000000000000000000000000000000000..79b061ee0af1853b82c62201c50bbe3fc18815cf
--- /dev/null
+++ b/Test/hlsl.basic.geom
@@ -0,0 +1,25 @@
+struct PSInput
+{
+    float  myfloat    : SOME_SEMANTIC;
+    int    something  : ANOTHER_SEMANTIC;
+};
+
+struct nametest {
+    int Append;        // these are valid names even though they are also method names.
+    int RestartStrip;  // ...
+};
+
+[maxvertexcount(4)]
+void main(triangle in uint VertexID[3] : VertexID,
+          triangle uint test[3] : FOO, 
+          inout LineStream<PSInput> OutputStream)
+{
+    PSInput Vert;
+
+    Vert.myfloat    = test[0] + test[1] + test[2];
+    Vert.something  = VertexID[0];
+
+    OutputStream.Append(Vert);
+    OutputStream.Append(Vert);
+    OutputStream.RestartStrip();
+}
diff --git a/Test/hlsl.buffer.frag b/Test/hlsl.buffer.frag
index 4e28043a86748e8516ba3c0f442ac79dc84e46b9..b93dcd3124cd44d57241eeb89cb20975edef05d9 100644
--- a/Test/hlsl.buffer.frag
+++ b/Test/hlsl.buffer.frag
@@ -20,6 +20,10 @@ tbuffer tbufName : register(b8) {
     float f5  : packoffset(c4.z);
     float f6  : packoffset(c);
     float f7;
+                 float3x4 m1;
+       row_major float3x4 m2;
+    column_major float3x4 m3;
+                 float3x4 m4;
 };
 
 float4 PixelShaderFunction(float4 input) : COLOR0
diff --git a/Test/hlsl.comparison.vec.frag b/Test/hlsl.comparison.vec.frag
new file mode 100644
index 0000000000000000000000000000000000000000..b8f93c9f94ff1c5c01d301f74e69d4c66f0ae2d8
--- /dev/null
+++ b/Test/hlsl.comparison.vec.frag
@@ -0,0 +1,34 @@
+uniform float4 uf4;
+
+void Bug1( float4 a )
+{
+    float4 v04 = float4( 0.0, 0.0, 0.0, 0.0 );
+    float  v01 = 0.0; 
+
+    bool4 r00 = a == v04;
+    bool4 r01 = a != v04;
+    bool4 r02 = a < v04;
+    bool4 r03 = a > v04;
+    
+    bool4 r10 = a == v01;
+    bool4 r11 = a != v01;
+    bool4 r12 = a < v01;
+    bool4 r13 = a > v01;
+    
+    bool4 r20 = v01 == a;
+    bool4 r21 = v01 != a;
+    bool4 r22 = v01 < a;
+    bool4 r23 = v01 > a;
+}
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+   psout.Color = 0;
+   return psout;
+}
diff --git a/Test/hlsl.deadFunctionMissingBody.vert b/Test/hlsl.deadFunctionMissingBody.vert
new file mode 100644
index 0000000000000000000000000000000000000000..a5f965abcbf79202bc85dd63d9b92baaa615f111
--- /dev/null
+++ b/Test/hlsl.deadFunctionMissingBody.vert
@@ -0,0 +1,8 @@
+float4 main(): SV_Target0 { return 0; }
+struct Surface { float3 albedo; };
+Surface surfaceShader(float fade);
+Surface surfaceShaderExec()
+{
+    float fade = 0;
+    return surfaceShader(0);
+}
diff --git a/Test/hlsl.doLoop.frag b/Test/hlsl.doLoop.frag
index 546b2c2ca76e6e69271bc6893f958485120aa4d7..251a8c120638a2d7e051faa2cd19f70fc9fb5039 100644
--- a/Test/hlsl.doLoop.frag
+++ b/Test/hlsl.doLoop.frag
@@ -2,5 +2,5 @@ float4 PixelShaderFunction(float4 input) : COLOR0
 {
     [unroll] do {} while (false);
     [unroll] do {;} while (false);
-    do { return input; } while (input == input);
+    do { return input; } while (all(input == input));
 }
diff --git a/Test/hlsl.entry-out.frag b/Test/hlsl.entry-out.frag
index 14f0e45959b60f313bc77eb25aebba081c23f256..27b4dd6428cde5293d2a908eafab4c0510bc4bf6 100644
--- a/Test/hlsl.entry-out.frag
+++ b/Test/hlsl.entry-out.frag
@@ -3,6 +3,12 @@ struct OutParam {
     int2 i;
 };
 
+void fun(out OutParam op)
+{
+    op.v = float2(0.4);
+    op.i = int2(7);
+}
+
 float4 PixelShaderFunction(float4 input, out float4 out1, out OutParam out2, out OutParam out3) : COLOR0
 {
     out1 = input;
@@ -11,7 +17,7 @@ float4 PixelShaderFunction(float4 input, out float4 out1, out OutParam out2, out
     OutParam local;
     local.v = 12.0;
     local.i = 13;
-    out3 = local;
+    fun(out3);
 
     return out1;
 }
diff --git a/Test/hlsl.entry.rename.frag b/Test/hlsl.entry.rename.frag
new file mode 100644
index 0000000000000000000000000000000000000000..188dfc58a7ddfbdda6cd9784262a192794d53f1b
--- /dev/null
+++ b/Test/hlsl.entry.rename.frag
@@ -0,0 +1,15 @@
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+void not_the_entry_point() { }
+int also_not_the_entry_point;
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/Test/hlsl.flatten.return.frag b/Test/hlsl.flatten.return.frag
new file mode 100644
index 0000000000000000000000000000000000000000..c633e679882ee1e181ca28400267d20769ac1ffe
--- /dev/null
+++ b/Test/hlsl.flatten.return.frag
@@ -0,0 +1,18 @@
+
+struct PS_OUTPUT
+{
+    float4 color : SV_Target0;
+    float other_struct_member1;
+    float other_struct_member2;
+    float other_struct_member3;
+};
+
+PS_OUTPUT Func1()
+{
+    return PS_OUTPUT(float4(1), 2, 3, 4);
+}
+
+PS_OUTPUT main()
+{
+    return Func1();
+}
diff --git a/Test/hlsl.float1.frag b/Test/hlsl.float1.frag
index 6247e77be86e5bde3d5707a7f50fc4c8a7787167..f9c0a6e0b4ac40166c4e5d5d55dee7c328264b5c 100644
--- a/Test/hlsl.float1.frag
+++ b/Test/hlsl.float1.frag
@@ -1,5 +1,5 @@
-float1 f1 = float1(1.0);
-float scalar = 2.0;
+static float1 f1 = float1(1.0);
+static float scalar = 2.0;
 
 float1 ShaderFunction(float1 inFloat1 : COLOR, float inScalar) : COLOR0
 {
diff --git a/Test/hlsl.float4.frag b/Test/hlsl.float4.frag
index 5ae70db064a7effb43cce99cd5930ca111d7bb79..b541f5d3252cddab9c29b6bcb264dd96fb42e5c6 100644
--- a/Test/hlsl.float4.frag
+++ b/Test/hlsl.float4.frag
@@ -1,9 +1,9 @@
 float4 AmbientColor = float4(1, 0.5, 0, 1);
 
 bool ff1 : SV_IsFrontFace;
-float4 ff2 : packoffset(c0.y);
-float4 ff3 : packoffset(c0.y) : register(ps_5_0, s0) ;
-float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s1) <int bambam=30;> ;
+float ff2 : packoffset(c1.y);
+float4 ff3 : packoffset(c2) : register(ps_5_0, s0) ;
+float4 ff4 : VPOS : packoffset(c3) : register(ps_5_0, s1) <int bambam=30;> ;
 
 float4 ShaderFunction(float4 input) : COLOR0
 {
diff --git a/Test/hlsl.forLoop.frag b/Test/hlsl.forLoop.frag
index 2495e6e183c6af78c962d15e956c5af17184b5ca..937899670da0d23a56dea3811347fd484ef30363 100644
--- a/Test/hlsl.forLoop.frag
+++ b/Test/hlsl.forLoop.frag
@@ -2,9 +2,9 @@ float4 PixelShaderFunction(float4 input) : COLOR0
 {
     for (;;) ;
     for (++input; ; ) ;
-    [unroll] for (; input != input; ) {}
-    for (; input != input; ) { return -input; }
-    for (--input; input != input; input += 2) { return -input; }
+    [unroll] for (; any(input != input); ) {}
+    for (; any(input != input); ) { return -input; }
+    for (--input; any(input != input); input += 2) { return -input; }
 	for (;;) if (input.x > 2.0) break;
 	for (;;) if (input.x > 2.0) continue;
 	float ii;
diff --git a/Test/hlsl.getdimensions.rw.dx10.frag b/Test/hlsl.getdimensions.rw.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..957a80828001712472e1c73af3314f3ecd570334
--- /dev/null
+++ b/Test/hlsl.getdimensions.rw.dx10.frag
@@ -0,0 +1,96 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float4> g_tTex1df4 : register(t0);
+RWTexture1D <int4>   g_tTex1di4;
+RWTexture1D <uint4>  g_tTex1du4;
+
+RWTexture2D <float4> g_tTex2df4;
+RWTexture2D <int4>   g_tTex2di4;
+RWTexture2D <uint4>  g_tTex2du4;
+
+RWTexture3D <float4> g_tTex3df4;
+RWTexture3D <int4>   g_tTex3di4;
+RWTexture3D <uint4>  g_tTex3du4;
+
+RWTexture1DArray <float4> g_tTex1df4a;
+RWTexture1DArray <int4>   g_tTex1di4a;
+RWTexture1DArray <uint4>  g_tTex1du4a;
+
+RWTexture2DArray <float4> g_tTex2df4a;
+RWTexture2DArray <int4>   g_tTex2di4a;
+RWTexture2DArray <uint4>  g_tTex2du4a;
+
+RWBuffer <float4> g_tBuffF;
+RWBuffer <int4>   g_tBuffI;
+RWBuffer <uint4>  g_tBuffU;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   uint MipLevel;
+   uint WidthU;
+   uint HeightU;
+   uint ElementsU;
+   uint DepthU;
+   uint NumberOfLevelsU;
+   uint NumberOfSamplesU;
+
+   float WidthF;
+   float HeightF;
+   float ElementsF;
+   float DepthF;
+   float NumberOfLevelsF;
+   float NumberOfSamplesF;
+
+   // 1D, float/int/uint, uint params
+   g_tTex1df4.GetDimensions(WidthU);
+   g_tTex1di4.GetDimensions(WidthU);
+   g_tTex1du4.GetDimensions(WidthU);
+
+   // buffer, float/int/uint, uint params
+   g_tBuffF.GetDimensions(WidthU);
+   g_tBuffI.GetDimensions(WidthU);
+   g_tBuffU.GetDimensions(WidthU);
+
+   // 1DArray, float/int/uint, uint params
+   g_tTex1df4a.GetDimensions(WidthU, ElementsU);
+   g_tTex1di4a.GetDimensions(WidthU, ElementsU);
+   g_tTex1du4a.GetDimensions(WidthU, ElementsU);
+
+   // 2D, float/int/uint, uint params
+   g_tTex2df4.GetDimensions(WidthU, HeightU);
+   g_tTex2di4.GetDimensions(WidthU, HeightU);
+   g_tTex2du4.GetDimensions(WidthU, HeightU);
+
+   // 2DArray, float/int/uint, uint params
+   g_tTex2df4a.GetDimensions(WidthU, HeightU, ElementsU);
+   g_tTex2di4a.GetDimensions(WidthU, HeightU, ElementsU);
+   g_tTex2du4a.GetDimensions(WidthU, HeightU, ElementsU);
+
+   // 3D, float/int/uint, uint params
+   g_tTex3df4.GetDimensions(WidthU, HeightU, DepthU);
+   g_tTex3di4.GetDimensions(WidthU, HeightU, DepthU);
+   g_tTex3du4.GetDimensions(WidthU, HeightU, DepthU);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.identifier.sample.frag b/Test/hlsl.identifier.sample.frag
new file mode 100644
index 0000000000000000000000000000000000000000..d3f824272f390955b128b351590757ca20822093
--- /dev/null
+++ b/Test/hlsl.identifier.sample.frag
@@ -0,0 +1,18 @@
+
+struct MyStruct {
+    sample        float a;
+    noperspective float b;
+    linear        float c;
+    centroid      float d;
+};
+
+int sample(int x) { return x; } // HLSL allows this as an identifier as well.
+
+float4 main() : SV_Target0
+{
+    // HLSL allows this as an identifier as well.
+    // However, this is not true of other qualifier keywords such as "linear".
+    float4 sample = float4(3,4,5,6);
+
+    return sample.rgba; // 'sample' can participate in an expression.
+}
diff --git a/Test/hlsl.if.frag b/Test/hlsl.if.frag
index 1f6dc4159658e3ff0dedba82dcacd4dda493ecc9..ba659e6d154f722ea65a8632feded236bcb34429 100644
--- a/Test/hlsl.if.frag
+++ b/Test/hlsl.if.frag
@@ -1,26 +1,26 @@
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    if (input == input)
+    if (all(input == input))
         return input;
 
-    if (input == input)
+    if (all(input == input))
         return input;
     else
         return -input;
 
-    if (input == input)
+    if (all(input == input))
         ;
 
-    if (input == input)
+    if (all(input == input))
         ;
     else
         ;
 
-    [flatten] if (input == input) {
+    [flatten] if (all(input == input)) {
         return input;
     }
 
-    if (input == input) {
+    if (all(input == input)) {
         return input;
     } else {
         return -input;
diff --git a/Test/hlsl.init.frag b/Test/hlsl.init.frag
index c233d127d9f1de2464e3bec9c3be9d829fb1100e..a3f6f0e79d52779e03a4c85643019d7022bc9be8 100644
--- a/Test/hlsl.init.frag
+++ b/Test/hlsl.init.frag
@@ -1,21 +1,21 @@
-float4 a1 = float4(1, 0.5, 0, 1), b1 = float4(2.0, 2.5, 2.1, 2.2);
-float4 a1i = {1, 0.5, 0, 1}, b1i = {2.0, 2.5, 2.1, 2.2};
-float a2 = 0.2, b2;
-float a3, b3 = 0.3;
-float a4, b4 = 0.4, c4;
-float a5 = 0.5, b5, c5 = 1.5;
+static float4 a1 = float4(1, 0.5, 0, 1), b1 = float4(2.0, 2.5, 2.1, 2.2);
+static float4 a1i = {1, 0.5, 0, 1}, b1i = {2.0, 2.5, 2.1, 2.2};
+static float a2 = 0.2, b2;
+static float a3, b3 = 0.3;
+static float a4, b4 = 0.4, c4;
+static float a5 = 0.5, b5, c5 = 1.5;
 
 struct Single1 { int f; };
-Single1 single1 = { 10 };
+static Single1 single1 = { 10 };
 
 struct Single2 { uint2 v; };
-Single2 single2 = { { 1, 2 } };
+static Single2 single2 = { { 1, 2 } };
 
 struct Single3 { Single1 s1; };
-Single3 single3 = { { 3 } };
+static Single3 single3 = { { 3 } };
 
 struct Single4 { Single2 s1; };
-Single4 single4 = { { { 4u, 5u } } };
+static Single4 single4 = { { { 4u, 5u } } };
 
 float4 ShaderFunction(float4 input) : COLOR0
 {
diff --git a/Test/hlsl.inoutquals.frag b/Test/hlsl.inoutquals.frag
index 91798d5747fc3a8e1fb66921bed590553598cad2..32346882681d45b87bd07a0e058cb40ee4984b99 100644
--- a/Test/hlsl.inoutquals.frag
+++ b/Test/hlsl.inoutquals.frag
@@ -11,7 +11,7 @@ void MyFunc(in float x, out float y, inout float z)
     x = -1; // no effect since x = in param
 }
 
-PS_OUTPUT main(noperspective in float4 inpos : SV_Position)
+PS_OUTPUT main(noperspective in float4 inpos : SV_Position, out int sampleMask : SV_Coverage)
 {
    PS_OUTPUT psout;
 
diff --git a/Test/hlsl.intrinsics.comp b/Test/hlsl.intrinsics.comp
index 642a0fc609ad4d38fbda55e9b6d2621b2351f7db..bce2d27d814e07c0bec4bc2cc11f06d8b1516164 100644
--- a/Test/hlsl.intrinsics.comp
+++ b/Test/hlsl.intrinsics.comp
@@ -1,17 +1,17 @@
 
-#define gs     // TODO: define as groupshared when available in the grammar
-gs uint gs_ua;
-gs uint gs_ub;
-gs uint gs_uc;
-gs uint2 gs_ua2;
-gs uint2 gs_ub2;
-gs uint2 gs_uc2;
-gs uint3 gs_ua3;
-gs uint3 gs_ub3;
-gs uint3 gs_uc3;
-gs uint4 gs_ua4;
-gs uint4 gs_ub4;
-gs uint4 gs_uc4;
+
+groupshared uint gs_ua;
+groupshared uint gs_ub;
+groupshared uint gs_uc;
+groupshared uint2 gs_ua2;
+groupshared uint2 gs_ub2;
+groupshared uint2 gs_uc2;
+groupshared uint3 gs_ua3;
+groupshared uint3 gs_ub3;
+groupshared uint3 gs_uc3;
+groupshared uint4 gs_ua4;
+groupshared uint4 gs_ub4;
+groupshared uint4 gs_uc4;
 
 float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index c04acaeda9c04bdea037cdb0edb32f2f4fe9eda6..15db6376ca1a002a786689eec956f0e0103b4691 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -1,17 +1,17 @@
 
-#define gs     // TODO: define as groupshared when available in the grammar
-gs uint gs_ua;
-gs uint gs_ub;
-gs uint gs_uc;
-gs uint2 gs_ua2;
-gs uint2 gs_ub2;
-gs uint2 gs_uc2;
-gs uint3 gs_ua3;
-gs uint3 gs_ub3;
-gs uint3 gs_uc3;
-gs uint4 gs_ua4;
-gs uint4 gs_ub4;
-gs uint4 gs_uc4;
+
+groupshared uint gs_ua;
+groupshared uint gs_ub;
+groupshared uint gs_uc;
+groupshared uint2 gs_ua2;
+groupshared uint2 gs_ub2;
+groupshared uint2 gs_uc2;
+groupshared uint3 gs_ua3;
+groupshared uint3 gs_ub3;
+groupshared uint3 gs_uc3;
+groupshared uint4 gs_ua4;
+groupshared uint4 gs_ub4;
+groupshared uint4 gs_uc4;
 
 float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
@@ -33,7 +33,7 @@ float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint i
     clip(inF0);
     float r014 = cos(inF0);
     float r015 = cosh(inF0);
-    uint r016 = countbits(7);
+    int r016 = countbits(7);
     float r017 = ddx(inF0);
     float r018 = ddx_coarse(inF0);
     float r019 = ddx_fine(inF0);
@@ -111,7 +111,7 @@ float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
     clip(inF0);
     float2 r013 = cos(inF0);
     float2 r015 = cosh(inF0);
-    uint2 r016 = countbits(int2(7,3));
+    int2 r016 = countbits(int2(7,3));
     float2 r017 = ddx(inF0);
     float2 r018 = ddx_coarse(inF0);
     float2 r019 = ddx_fine(inF0);
diff --git a/Test/hlsl.intrinsics.negative.vert b/Test/hlsl.intrinsics.negative.vert
index fcfb761a6e66952437c99375c1a9c21a91930961..6224b25e46ff6f28af1ee0afe78e0b9a24b1f33b 100644
--- a/Test/hlsl.intrinsics.negative.vert
+++ b/Test/hlsl.intrinsics.negative.vert
@@ -1,15 +1,15 @@
-uint gs_ua;
-uint gs_ub;
-uint gs_uc;
-uint2 gs_ua2;
-uint2 gs_ub2;
-uint2 gs_uc2;
-uint3 gs_ua3;
-uint3 gs_ub3;
-uint3 gs_uc3;
-uint4 gs_ua4;
-uint4 gs_ub4;
-uint4 gs_uc4;
+static uint gs_ua;
+static uint gs_ub;
+static uint gs_uc;
+static uint2 gs_ua2;
+static uint2 gs_ub2;
+static uint2 gs_uc2;
+static uint3 gs_ua3;
+static uint3 gs_ub3;
+static uint3 gs_uc3;
+static uint4 gs_ua4;
+static uint4 gs_ub4;
+static uint4 gs_uc4;
 
 float VertexShaderFunctionS(float inF0, float inF1, float inF2, int inI0)
 {
diff --git a/Test/hlsl.intrinsics.promote.down.frag b/Test/hlsl.intrinsics.promote.down.frag
new file mode 100644
index 0000000000000000000000000000000000000000..5f4882b2624fd9cb198ea0b04398c3701bd2a3fe
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.down.frag
@@ -0,0 +1,22 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+PS_OUTPUT main()
+{
+    uint r00  = countbits(f);
+    uint2 r01 = reversebits(f2);
+
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.intrinsics.promote.frag b/Test/hlsl.intrinsics.promote.frag
new file mode 100644
index 0000000000000000000000000000000000000000..89d3e680409b2dc3d88100fea05dc7f1b95e11ef
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.frag
@@ -0,0 +1,79 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+Buffer    <float>  g_tTexbfs;
+Texture1D <float4> g_tTex1df4;
+uint  upos;
+float fpos;
+
+PS_OUTPUT main()
+{
+    // Same shapes:
+
+    float r00 = max(b,  f);
+    uint  r01 = max(b,  u);
+    int   r02 = max(b,  i);
+    float r03 = max(i,  f);
+    float r04 = max(u,  f);
+
+    float2 r10 = max(b2,  f2);
+    uint2  r11 = max(b2,  u2);
+    int2   r12 = max(b2,  i2);
+    float2 r13 = max(i2,  f2);
+    float2 r14 = max(u2,  f2);
+
+    float2 r20 = clamp(i2, u2, f2);  // 3 args, converts all to best type.
+    uint2  r21 = clamp(b2, u2, b2);
+    float2 r22 = clamp(b2, f2, b2);
+
+    // Mixed shapes:
+    float2 r30 = max(b,  f2);
+    uint2  r31 = max(b,  u2);
+    int2   r32 = max(b,  i2);
+    float2 r33 = max(i,  f2);
+    float2 r34 = max(u,  f2);
+
+    float2 r40 = clamp(i, u2, f2);  // 3 args, converts all to best type.
+    uint2  r41 = clamp(b2, u, b2);
+    float2 r42 = clamp(b2, f, b);
+    int2   r43 = clamp(i, i2, u2);
+
+    float r50 = g_tTexbfs.Load(upos);
+    float r51 = g_tTexbfs.Load(fpos);
+
+    int MipLevel;
+
+    uint WidthU;
+    uint HeightU;
+    uint ElementsU;
+    uint DepthU;
+    uint NumberOfLevelsU;
+    uint NumberOfSamplesU;
+
+    int  WidthI;
+    int  HeightI;
+    int  ElementsI;
+    int  DepthI;
+    int  NumberOfLevelsI;
+    int  NumberOfSamplesI;
+
+    g_tTex1df4 . GetDimensions(WidthI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU);
+    g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI);
+
+    // max(i2, f2);
+    PS_OUTPUT ps_output;
+    ps_output.color = r00;
+    return ps_output;
+};
diff --git a/Test/hlsl.intrinsics.promote.outputs.frag b/Test/hlsl.intrinsics.promote.outputs.frag
new file mode 100644
index 0000000000000000000000000000000000000000..42fa3e806d9907259d61bda97f07786df37ffdc8
--- /dev/null
+++ b/Test/hlsl.intrinsics.promote.outputs.frag
@@ -0,0 +1,49 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+int    i;
+uint   u;
+float  f;
+bool   b;
+
+int2   i2;
+uint2  u2;
+float2 f2;
+bool2  b2;
+
+Buffer    <float>  g_tTexbfs;
+Texture1D <float4> g_tTex1df4;
+uint  upos;
+float fpos;
+
+PS_OUTPUT main()
+{
+    int MipLevel;
+
+    uint WidthU;
+    uint HeightU;
+    uint ElementsU;
+    uint DepthU;
+    uint NumberOfLevelsU;
+    uint NumberOfSamplesU;
+
+    int  WidthI;
+    int  HeightI;
+    int  ElementsI;
+    int  DepthI;
+    int  NumberOfLevelsI;
+    int  NumberOfSamplesI;
+
+    saturate(fpos);
+
+    // Test output promotions
+    g_tTex1df4 . GetDimensions(WidthI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsU);
+    g_tTex1df4 . GetDimensions(6, WidthU, NumberOfLevelsI);
+    g_tTex1df4 . GetDimensions(6, WidthI, NumberOfLevelsI);
+
+    // max(i2, f2);
+    PS_OUTPUT ps_output;
+    ps_output.color = 0;
+    return ps_output;
+};
diff --git a/Test/hlsl.load.buffer.float.dx10.frag b/Test/hlsl.load.buffer.float.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..eeea9a63e2c855b92be8ec9d4f4c229525563a68
--- /dev/null
+++ b/Test/hlsl.load.buffer.float.dx10.frag
@@ -0,0 +1,38 @@
+uniform Buffer <float> g_tTexbfs_test : register(t0);
+
+Buffer <float> g_tTexbfs;
+Buffer <int>   g_tTexbis;
+Buffer <uint>  g_tTexbus;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // Buffer
+   float r00 = g_tTexbfs.Load(c1);
+   int   r01 = g_tTexbis.Load(c1);
+   uint  r02 = g_tTexbus.Load(c1);
+
+   // TODO: other types that can be put in sampler buffers, like float2x2, and float3.
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.rwbuffer.dx10.frag b/Test/hlsl.load.rwbuffer.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..accd5f0c1ef42362c6673704254181add6202125
--- /dev/null
+++ b/Test/hlsl.load.rwbuffer.dx10.frag
@@ -0,0 +1,32 @@
+
+RWBuffer <float4> g_tBuffF;
+RWBuffer <int4>   g_tBuffI;
+RWBuffer <uint4>  g_tBuffU;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   g_tBuffF.Load(c1);
+   g_tBuffU.Load(c1);
+   g_tBuffI.Load(c1);
+
+   psout.Color = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.rwtexture.array.dx10.frag b/Test/hlsl.load.rwtexture.array.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..38e290962b4a6ee9ba68c78a5c6d10e2ee576aef
--- /dev/null
+++ b/Test/hlsl.load.rwtexture.array.dx10.frag
@@ -0,0 +1,57 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float4> g_tTex1df4 : register(t0);
+RWTexture1D <int4>   g_tTex1di4;
+RWTexture1D <uint4>  g_tTex1du4;
+
+RWTexture2D <float4> g_tTex2df4;
+RWTexture2D <int4>   g_tTex2di4;
+RWTexture2D <uint4>  g_tTex2du4;
+
+RWTexture3D <float4> g_tTex3df4;
+RWTexture3D <int4>   g_tTex3di4;
+RWTexture3D <uint4>  g_tTex3du4;
+
+RWTexture1DArray <float4> g_tTex1df4a;
+RWTexture1DArray <int4>   g_tTex1di4a;
+RWTexture1DArray <uint4>  g_tTex1du4a;
+
+RWTexture2DArray <float4> g_tTex2df4a;
+RWTexture2DArray <int4>   g_tTex2di4a;
+RWTexture2DArray <uint4>  g_tTex2du4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df4a.Load(c2);
+   g_tTex1di4a.Load(c2);
+   g_tTex1du4a.Load(c2);
+
+   // 2D
+   g_tTex2df4a.Load(c3);
+   g_tTex2di4a.Load(c3);
+   g_tTex2du4a.Load(c3);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.rwtexture.dx10.frag b/Test/hlsl.load.rwtexture.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..c09507766f27c965b7c0e15de1274d13f4204b8d
--- /dev/null
+++ b/Test/hlsl.load.rwtexture.dx10.frag
@@ -0,0 +1,62 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float4> g_tTex1df4 : register(t0);
+RWTexture1D <int4>   g_tTex1di4;
+RWTexture1D <uint4>  g_tTex1du4;
+
+RWTexture2D <float4> g_tTex2df4;
+RWTexture2D <int4>   g_tTex2di4;
+RWTexture2D <uint4>  g_tTex2du4;
+
+RWTexture3D <float4> g_tTex3df4;
+RWTexture3D <int4>   g_tTex3di4;
+RWTexture3D <uint4>  g_tTex3du4;
+
+RWTexture1DArray <float4> g_tTex1df4a;
+RWTexture1DArray <int4>   g_tTex1di4a;
+RWTexture1DArray <uint4>  g_tTex1du4a;
+
+RWTexture2DArray <float4> g_tTex2df4a;
+RWTexture2DArray <int4>   g_tTex2di4a;
+RWTexture2DArray <uint4>  g_tTex2du4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df4.Load(c1);
+   g_tTex1di4.Load(c1);
+   g_tTex1du4.Load(c1);
+
+   // 2D
+   g_tTex2df4.Load(c2);
+   g_tTex2di4.Load(c2);
+   g_tTex2du4.Load(c2);
+
+   // 3D
+   g_tTex3df4.Load(c3);
+   g_tTex3di4.Load(c3);
+   g_tTex3du4.Load(c3);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.logical.binary.frag b/Test/hlsl.logical.binary.frag
new file mode 100644
index 0000000000000000000000000000000000000000..06bc9f2f05dd9a386afe4c39af1821ebcc9c02f7
--- /dev/null
+++ b/Test/hlsl.logical.binary.frag
@@ -0,0 +1,21 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    if (ival && fval);
+    if (ival || fval);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
+
+
diff --git a/Test/hlsl.logical.binary.vec.frag b/Test/hlsl.logical.binary.vec.frag
new file mode 100644
index 0000000000000000000000000000000000000000..e94c8f5b0362be2a860184a0fd6c6ee2438f4d69
--- /dev/null
+++ b/Test/hlsl.logical.binary.vec.frag
@@ -0,0 +1,24 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform bool4 b4a, b4b;
+uniform bool  b1a, b1b;
+
+PS_OUTPUT main()
+{
+    bool4 r00 = !b4a;
+    bool4 r01 = b4a && b4b;  // vec, vec
+    bool4 r02 = b4a || b4b;  // vec, vec
+
+    bool4 r10 = b1a && b4b;  // scalar, vec
+    bool4 r11 = b1a || b4b;  // scalar, vec
+
+    bool4 r20 = b4a && b1b;  // vec, scalar
+    bool4 r21 = b4a || b1b;  // vec, scalar
+
+    PS_OUTPUT psout;
+    psout.Color = r00 || r01 || r02 || r10 || r11 || r20 || r21;
+    return psout;
+}
diff --git a/Test/hlsl.logical.unary.frag b/Test/hlsl.logical.unary.frag
new file mode 100644
index 0000000000000000000000000000000000000000..cbcb3bfc41aec30e94f2f32dc05725b33adcf019
--- /dev/null
+++ b/Test/hlsl.logical.unary.frag
@@ -0,0 +1,29 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    !ival;  // scalar int
+    !ival4; // vector int
+
+    !fval;  // scalar float
+    !fval4; // vector float
+    
+    if (ival);
+    if (fval);
+    if (!ival);
+    if (!fval);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
+
+
diff --git a/Test/hlsl.matNx1.frag b/Test/hlsl.matNx1.frag
new file mode 100644
index 0000000000000000000000000000000000000000..515bd47074b018d05c153f16c51fd1548172e5b5
--- /dev/null
+++ b/Test/hlsl.matNx1.frag
@@ -0,0 +1,31 @@
+
+void TestMatNx1()
+{
+    float1x1 f1x1;
+    float2x1 f2x1;
+    float3x1 f3x1;
+    float4x1 f4x1;
+
+    float1x2 f1x2;
+    float1x3 f1x3;
+    float1x4 f1x4;
+
+    float1x1 r00 = transpose(f1x1);
+    float1x2 r01 = transpose(f2x1);
+    float1x3 r02 = transpose(f3x1);
+    float1x4 r03 = transpose(f4x1);
+
+    float1x1 r10 = transpose(f1x1);
+    float2x1 r11 = transpose(f1x2);
+    float3x1 r12 = transpose(f1x3);
+    float4x1 r13 = transpose(f1x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = 1.0;
+    return ps_output;
+};
diff --git a/Test/hlsl.matType.bool.frag b/Test/hlsl.matType.bool.frag
new file mode 100644
index 0000000000000000000000000000000000000000..e4a62e36c65431fa2cf031c2b6f8baccbf877250
--- /dev/null
+++ b/Test/hlsl.matType.bool.frag
@@ -0,0 +1,53 @@
+
+void TestBoolMatTypes()
+{
+    bool1x1 b1x1;
+    bool2x1 b2x1;
+    bool3x1 b3x1;
+    bool4x1 b4x1;
+    
+    bool1x2 b1x2;
+    bool2x2 b2x2;
+    bool3x2 b3x2;
+    bool4x2 b4x2;
+    
+    bool1x3 b1x3;
+    bool2x3 b2x3;
+    bool3x3 b3x3;
+    bool4x3 b4x3;
+    
+    bool1x4 b1x4;
+    bool2x4 b2x4;
+    bool3x4 b3x4;
+    bool4x4 b4x4;
+    
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    bool1x1 r00 = transpose(b1x1);
+    bool1x2 r01 = transpose(b2x1);
+    bool1x3 r02 = transpose(b3x1);
+    bool1x4 r03 = transpose(b4x1);
+    
+    bool2x1 r10 = transpose(b1x2);
+    bool2x2 r11 = transpose(b2x2);
+    bool2x3 r12 = transpose(b3x2);
+    bool2x4 r13 = transpose(b4x2);
+    
+    bool3x1 r20 = transpose(b1x3);
+    bool3x2 r21 = transpose(b2x3);
+    bool3x3 r22 = transpose(b3x3);
+    bool3x4 r23 = transpose(b4x3);
+    
+    bool4x1 r30 = transpose(b1x4);
+    bool4x2 r31 = transpose(b2x4);
+    bool4x3 r32 = transpose(b3x4);
+    bool4x4 r33 = transpose(b4x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.matType.int.frag b/Test/hlsl.matType.int.frag
new file mode 100644
index 0000000000000000000000000000000000000000..09e9f2ad5732ee8ca8ee153c6f982437a42ab1f8
--- /dev/null
+++ b/Test/hlsl.matType.int.frag
@@ -0,0 +1,97 @@
+
+void TestIntMatTypes()
+{
+    int1x1 i1x1;
+    int2x1 i2x1;
+    int3x1 i3x1;
+    int4x1 i4x1;
+
+    int1x2 i1x2;
+    int2x2 i2x2;
+    int3x2 i3x2;
+    int4x2 i4x2;
+
+    int1x3 i1x3;
+    int2x3 i2x3;
+    int3x3 i3x3;
+    int4x3 i4x3;
+
+    int1x4 i1x4;
+    int2x4 i2x4;
+    int3x4 i3x4;
+    int4x4 i4x4;
+
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    int1x1 r00 = transpose(i1x1);
+    int1x2 r01 = transpose(i2x1);
+    int1x3 r02 = transpose(i3x1);
+    int1x4 r03 = transpose(i4x1);
+
+    int2x1 r10 = transpose(i1x2);
+    int2x2 r11 = transpose(i2x2);
+    int2x3 r12 = transpose(i3x2);
+    int2x4 r13 = transpose(i4x2);
+
+    int3x1 r20 = transpose(i1x3);
+    int3x2 r21 = transpose(i2x3);
+    int3x3 r22 = transpose(i3x3);
+    int3x4 r23 = transpose(i4x3);
+
+    int4x1 r30 = transpose(i1x4);
+    int4x2 r31 = transpose(i2x4);
+    int4x3 r32 = transpose(i3x4);
+    int4x4 r33 = transpose(i4x4);
+}
+
+void TestUintMatTypes()
+{
+    uint1x1 u1x1;
+    uint2x1 u2x1;
+    uint3x1 u3x1;
+    uint4x1 u4x1;
+    
+    uint1x2 u1x2;
+    uint2x2 u2x2;
+    uint3x2 u3x2;
+    uint4x2 u4x2;
+    
+    uint1x3 u1x3;
+    uint2x3 u2x3;
+    uint3x3 u3x3;
+    uint4x3 u4x3;
+    
+    uint1x4 u1x4;
+    uint2x4 u2x4;
+    uint3x4 u3x4;
+    uint4x4 u4x4;
+    
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    uint1x1 r00 = transpose(u1x1);
+    uint1x2 r01 = transpose(u2x1);
+    uint1x3 r02 = transpose(u3x1);
+    uint1x4 r03 = transpose(u4x1);
+    
+    uint2x1 r10 = transpose(u1x2);
+    uint2x2 r11 = transpose(u2x2);
+    uint2x3 r12 = transpose(u3x2);
+    uint2x4 r13 = transpose(u4x2);
+    
+    uint3x1 r20 = transpose(u1x3);
+    uint3x2 r21 = transpose(u2x3);
+    uint3x3 r22 = transpose(u3x3);
+    uint3x4 r23 = transpose(u4x3);
+    
+    uint4x1 r30 = transpose(u1x4);
+    uint4x2 r31 = transpose(u2x4);
+    uint4x3 r32 = transpose(u3x4);
+    uint4x4 r33 = transpose(u4x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.mintypes.frag b/Test/hlsl.mintypes.frag
new file mode 100644
index 0000000000000000000000000000000000000000..ad47e68e3bcbd25d00ab4e8c1292cebb73e2aa54
--- /dev/null
+++ b/Test/hlsl.mintypes.frag
@@ -0,0 +1,49 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform min16float  b1a, b1b;
+
+PS_OUTPUT main()
+{
+    min16float  mf16;
+    min16float1 mf16_1;
+    min16float2 mf16_2;
+    min16float3 mf16_3;
+    min16float4 mf16_4;
+
+    min10float  mf10;
+    min10float1 mf10_1;
+    min10float2 mf10_2;
+    min10float3 mf10_3;
+    min10float4 mf12_4;
+
+    min16int  mi16;
+    min16int1 mi16_1;
+    min16int2 mi16_2;
+    min16int3 mi16_3;
+    min16int4 mi16_4;
+
+    min12int  mi12;
+    min12int1 mi12_1;
+    min12int2 mi12_2;
+    min12int3 mi12_3;
+    min12int4 mi12_4;
+
+    min16uint  mu16;
+    min16uint1 mu16_1;
+    min16uint2 mu16_2;
+    min16uint3 mu16_3;
+    min16uint4 mu16_4;
+
+    mf16_2 + mf16;
+    mf10_2 + mf10;
+    mi16_2 + mi16;
+    mi12_2 + mi12;
+    mu16_2 + mu16;
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/Test/hlsl.multiReturn.frag b/Test/hlsl.multiReturn.frag
new file mode 100755
index 0000000000000000000000000000000000000000..fdab772109e394796c53f29c7021ca3b3919fd23
--- /dev/null
+++ b/Test/hlsl.multiReturn.frag
@@ -0,0 +1,19 @@
+struct S {
+    float f;
+    float3 v;
+    float3x3 m;
+};
+
+cbuffer bufName {
+    S s;
+};
+
+S foo()
+{
+    return s;
+}
+
+void main()
+{
+    foo();
+}
diff --git a/Test/hlsl.numthreads.comp b/Test/hlsl.numthreads.comp
new file mode 100644
index 0000000000000000000000000000000000000000..fcc97f37985b671f15c745e6aa48a06d5d74198d
--- /dev/null
+++ b/Test/hlsl.numthreads.comp
@@ -0,0 +1,14 @@
+
+[numthreads(8,8,1)]
+void main(uint3 tid : SV_DispatchThreadID )
+{
+}
+
+[numTHreaDs(4,4,2)]  // case insensitive
+void main_aux1(uint3 tid : SV_DispatchThreadID )
+{
+}
+
+[numthreads(1,4,8)]
+void main_aux2(uint3 tid : SV_DispatchThreadID );
+
diff --git a/Test/hlsl.partialInit.frag b/Test/hlsl.partialInit.frag
new file mode 100755
index 0000000000000000000000000000000000000000..59e8a529cad08fd25fa7f6de754ba0e4144742ac
--- /dev/null
+++ b/Test/hlsl.partialInit.frag
@@ -0,0 +1,29 @@
+struct outs {
+    int a;
+    float b;
+    bool c;
+    float4 v;
+};
+
+static float4 gv = {0,0,1};
+static float gfa[3] = {0,0};
+
+struct Nest {
+    float4x3 m;
+    outs os;
+    bool b;
+};
+
+outs PixelShaderFunction(float4 input) : COLOR0
+{
+    outs o2 = { 3 };
+    outs o4;
+    o4.v = gv * gfa[2];
+    outs o1 = { };
+    outs o3 = (outs)0;
+    o4 = (outs)0;
+    o4.c = o1.c;
+    Nest nest = (Nest)0;
+
+    return o4;
+}
\ No newline at end of file
diff --git a/Test/hlsl.precise.frag b/Test/hlsl.precise.frag
index 7518de542a55a70168229b2164c720339be267f0..77454e0728b5a3e590e38c5d6ca140fbc8d03844 100644
--- a/Test/hlsl.precise.frag
+++ b/Test/hlsl.precise.frag
@@ -1,7 +1,7 @@
 
 struct PS_OUTPUT { precise float4 color : SV_Target0; };
 
-precise float precisefloat;
+static precise float precisefloat;
 
 void MyFunction(in precise float myfloat, out precise float3 myfloat3) { }
 
diff --git a/Test/hlsl.promote.atomic.frag b/Test/hlsl.promote.atomic.frag
new file mode 100644
index 0000000000000000000000000000000000000000..2b46225bc8a43b64d3f958b33c37bee1ca1f27dd
--- /dev/null
+++ b/Test/hlsl.promote.atomic.frag
@@ -0,0 +1,17 @@
+
+RWBuffer<uint> s_uintbuff;  // UINT RWBuffer ...
+
+float4 main() : SV_Target
+{
+    int Loc;  // ... with INT variables
+    int Inc;
+    int Orig;
+
+    // This must select the uint flavor of SPIR-V atomic op, and promote
+    // the other arguments as required.  The output value from the
+    // imageAtomicAdd AST will be converted to an int for 'Orig'.
+    InterlockedAdd(s_uintbuff[Loc], Inc, Orig);
+
+    return float4(0,0,0,0);
+}
+
diff --git a/Test/hlsl.promote.binary.frag b/Test/hlsl.promote.binary.frag
new file mode 100644
index 0000000000000000000000000000000000000000..0203bed99bb45d12786a6c617d7fbbd7f7706897
--- /dev/null
+++ b/Test/hlsl.promote.binary.frag
@@ -0,0 +1,28 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform bool   bval;
+uniform bool4  bval4;
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    ival  % fval;
+    ival4 % fval4;
+
+    bval  % fval;
+    bval4 % fval4;
+
+    int l_int = 1;
+    l_int %= fval;
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
+
diff --git a/Test/hlsl.promote.vec1.frag b/Test/hlsl.promote.vec1.frag
new file mode 100644
index 0000000000000000000000000000000000000000..a674ccbaa9066c44fb274ff5f36578018294d2a6
--- /dev/null
+++ b/Test/hlsl.promote.vec1.frag
@@ -0,0 +1,16 @@
+
+float4 main() : SV_Target
+{
+    float f1a;
+    float1 f1b;
+
+    f1a = f1b;  // convert float1 to float
+    f1b = f1a;  // convert float to float1
+
+    float3 f3;
+    step(0.0, f3);
+
+    sin(f1b); // test 1-vectors in intrinsics
+
+    return float4(0,0,0,0);
+}
diff --git a/Test/hlsl.reflection.binding.frag b/Test/hlsl.reflection.binding.frag
new file mode 100644
index 0000000000000000000000000000000000000000..25b22c975dc6a51560ba2e684b5b07734ceb9095
--- /dev/null
+++ b/Test/hlsl.reflection.binding.frag
@@ -0,0 +1,34 @@
+
+uniform float u1 : register(b2);
+
+uniform SamplerState s1     : register(s5);
+uniform SamplerState s1a[3] : register(s6);
+
+uniform Texture1D t1     : register(t15);
+uniform Texture1D t1a[3] : register(t16);
+
+cbuffer cbuff1 : register(b2) {
+    float4 c1_a;
+    int c1_b;
+    float c1_c;
+};
+
+cbuffer cbuff2 : register(b3) {
+    float4 c2_a;
+    int c2_b;
+    float c2_c;
+};
+
+struct PS_OUTPUT
+{
+    float4 Color : Sv_Target0;
+};
+
+void main(out PS_OUTPUT psout)
+{
+    psout.Color = 
+        t1.Sample(s1, 0.3) +
+        t1a[0].Sample(s1a[0], 0.3) +
+        c1_a + c1_b + c1_c +
+        c2_a + c2_b + c2_c;
+}
diff --git a/Test/hlsl.rw.atomics.frag b/Test/hlsl.rw.atomics.frag
new file mode 100644
index 0000000000000000000000000000000000000000..930d6501279e72d91ed0498b4c12d58f15c31a8a
--- /dev/null
+++ b/Test/hlsl.rw.atomics.frag
@@ -0,0 +1,244 @@
+SamplerState       g_sSamp;
+
+RWTexture1D <float> g_tTex1df1;
+RWTexture1D <int>   g_tTex1di1;
+RWTexture1D <uint>  g_tTex1du1;
+
+RWTexture2D <float> g_tTex2df1;
+RWTexture2D <int>   g_tTex2di1;
+RWTexture2D <uint>  g_tTex2du1;
+
+RWTexture3D <float> g_tTex3df1;
+RWTexture3D <int>   g_tTex3di1;
+RWTexture3D <uint>  g_tTex3du1;
+
+RWTexture1DArray <float> g_tTex1df1a;
+RWTexture1DArray <int>   g_tTex1di1a;
+RWTexture1DArray <uint>  g_tTex1du1a;
+
+RWTexture2DArray <float> g_tTex2df1a;
+RWTexture2DArray <int>   g_tTex2di1a;
+RWTexture2DArray <uint>  g_tTex2du1a;
+
+RWBuffer <float> g_tBuffF;
+RWBuffer <int>   g_tBuffI;
+RWBuffer <uint>  g_tBuffU;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform uint  u1;
+uniform uint2 u2;
+uniform uint3 u3;
+uniform uint  u1b;
+uniform uint  u1c;
+
+uniform int   i1;
+uniform int2  i2;
+uniform int3  i3;
+uniform int   i1b;
+uniform int   i1c;
+
+PS_OUTPUT main()
+{
+    uint out_u1;
+    int out_i1;
+
+    // 1D int
+    InterlockedAdd(g_tTex1di1[i1], i1b);
+    InterlockedAdd(g_tTex1di1[i1], i1, out_i1);
+    InterlockedAnd(g_tTex1di1[i1], i1b);
+    InterlockedAnd(g_tTex1di1[i1], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1[i1], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1[i1], i1, out_i1);
+    InterlockedMax(g_tTex1di1[i1], i1b);
+    InterlockedMax(g_tTex1di1[i1], i1, out_i1);
+    InterlockedMin(g_tTex1di1[i1], i1b);
+    InterlockedMin(g_tTex1di1[i1], i1, out_i1);
+    InterlockedOr(g_tTex1di1[i1], i1b);
+    InterlockedOr(g_tTex1di1[i1], i1, out_i1);
+    InterlockedXor(g_tTex1di1[i1], i1b);
+    InterlockedXor(g_tTex1di1[i1], i1, out_i1);
+
+    // 1D uint
+    InterlockedAdd(g_tTex1du1[u1], u1);
+    InterlockedAdd(g_tTex1du1[u1], u1, out_u1);
+    InterlockedAnd(g_tTex1du1[u1], u1);
+    InterlockedAnd(g_tTex1du1[u1], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1[u1], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1[u1], u1, out_u1);
+    InterlockedMax(g_tTex1du1[u1], u1);
+    InterlockedMax(g_tTex1du1[u1], u1, out_u1);
+    InterlockedMin(g_tTex1du1[u1], u1);
+    InterlockedMin(g_tTex1du1[u1], u1, out_u1);
+    InterlockedOr(g_tTex1du1[u1], u1);
+    InterlockedOr(g_tTex1du1[u1], u1, out_u1);
+    InterlockedXor(g_tTex1du1[u1], u1);
+    InterlockedXor(g_tTex1du1[u1], u1, out_u1);
+
+    // 2D int
+    InterlockedAdd(g_tTex2di1[i2], i1b);
+    InterlockedAdd(g_tTex2di1[i2], i1, out_i1);
+    InterlockedAnd(g_tTex2di1[i2], i1b);
+    InterlockedAnd(g_tTex2di1[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex2di1[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex2di1[i2], i1, out_i1);
+    InterlockedMax(g_tTex2di1[i2], i1b);
+    InterlockedMax(g_tTex2di1[i2], i1, out_i1);
+    InterlockedMin(g_tTex2di1[i2], i1b);
+    InterlockedMin(g_tTex2di1[i2], i1, out_i1);
+    InterlockedOr(g_tTex2di1[i2], i1b);
+    InterlockedOr(g_tTex2di1[i2], i1, out_i1);
+    InterlockedXor(g_tTex2di1[i2], i1b);
+    InterlockedXor(g_tTex2di1[i2], i1, out_i1);
+
+    // 2D uint
+    InterlockedAdd(g_tTex2du1[u2], u1);
+    InterlockedAdd(g_tTex2du1[u2], u1, out_u1);
+    InterlockedAnd(g_tTex2du1[u2], u1);
+    InterlockedAnd(g_tTex2du1[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex2du1[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex2du1[u2], u1, out_u1);
+    InterlockedMax(g_tTex2du1[u2], u1);
+    InterlockedMax(g_tTex2du1[u2], u1, out_u1);
+    InterlockedMin(g_tTex2du1[u2], u1);
+    InterlockedMin(g_tTex2du1[u2], u1, out_u1);
+    InterlockedOr(g_tTex2du1[u2], u1);
+    InterlockedOr(g_tTex2du1[u2], u1, out_u1);
+    InterlockedXor(g_tTex2du1[u2], u1);
+    InterlockedXor(g_tTex2du1[u2], u1, out_u1);
+
+    // 3D int
+    InterlockedAdd(g_tTex3di1[i3], i1b);
+    InterlockedAdd(g_tTex3di1[i3], i1, out_i1);
+    InterlockedAnd(g_tTex3di1[i3], i1b);
+    InterlockedAnd(g_tTex3di1[i3], i1, out_i1);
+    InterlockedCompareExchange(g_tTex3di1[i3], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex3di1[i3], i1, out_i1);
+    InterlockedMax(g_tTex3di1[i3], i1b);
+    InterlockedMax(g_tTex3di1[i3], i1, out_i1);
+    InterlockedMin(g_tTex3di1[i3], i1b);
+    InterlockedMin(g_tTex3di1[i3], i1, out_i1);
+    InterlockedOr(g_tTex3di1[i3], i1b);
+    InterlockedOr(g_tTex3di1[i3], i1, out_i1);
+    InterlockedXor(g_tTex3di1[i3], i1b);
+    InterlockedXor(g_tTex3di1[i3], i1, out_i1);
+
+    // 3D uint
+    InterlockedAdd(g_tTex3du1[u3], u1);
+    InterlockedAdd(g_tTex3du1[u3], u1, out_u1);
+    InterlockedAnd(g_tTex3du1[u3], u1);
+    InterlockedAnd(g_tTex3du1[u3], u1, out_u1);
+    InterlockedCompareExchange(g_tTex3du1[u3], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex3du1[u3], u1, out_u1);
+    InterlockedMax(g_tTex3du1[u3], u1);
+    InterlockedMax(g_tTex3du1[u3], u1, out_u1);
+    InterlockedMin(g_tTex3du1[u3], u1);
+    InterlockedMin(g_tTex3du1[u3], u1, out_u1);
+    InterlockedOr(g_tTex3du1[u3], u1);
+    InterlockedOr(g_tTex3du1[u3], u1, out_u1);
+    InterlockedXor(g_tTex3du1[u3], u1);
+    InterlockedXor(g_tTex3du1[u3], u1, out_u1);
+
+    // 1D array int
+    InterlockedAdd(g_tTex1di1a[i2], i1b);
+    InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedAnd(g_tTex1di1a[i2], i1b);
+    InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMax(g_tTex1di1a[i2], i1b);
+    InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMin(g_tTex1di1a[i2], i1b);
+    InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedOr(g_tTex1di1a[i2], i1b);
+    InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedXor(g_tTex1di1a[i2], i1b);
+    InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
+
+    // 1D array uint
+    InterlockedAdd(g_tTex1du1a[u2], u1);
+    InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMax(g_tTex1du1a[u2], u1);
+    InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMin(g_tTex1du1a[u2], u1);
+    InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedOr(g_tTex1du1a[u2], u1);
+    InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedXor(g_tTex1du1a[u2], u1);
+    InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
+
+    // 2D array int
+    InterlockedAdd(g_tTex1di1a[i2], i1b);
+    InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedAnd(g_tTex1di1a[i2], i1b);
+    InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMax(g_tTex1di1a[i2], i1b);
+    InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMin(g_tTex1di1a[i2], i1b);
+    InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedOr(g_tTex1di1a[i2], i1b);
+    InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedXor(g_tTex1di1a[i2], i1b);
+    InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
+
+    // 2D array uint
+    InterlockedAdd(g_tTex1du1a[u2], u1);
+    InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMax(g_tTex1du1a[u2], u1);
+    InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMin(g_tTex1du1a[u2], u1);
+    InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedOr(g_tTex1du1a[u2], u1);
+    InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedXor(g_tTex1du1a[u2], u1);
+    InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
+
+    // buffer int
+    InterlockedAdd(g_tBuffI[i1], i1b);
+    InterlockedAdd(g_tBuffI[i1], i1, out_i1);
+    InterlockedAnd(g_tBuffI[i1], i1b);
+    InterlockedAnd(g_tBuffI[i1], i1, out_i1);
+    InterlockedCompareExchange(g_tBuffI[i1], i1b, i1c, out_i1);
+    InterlockedExchange(g_tBuffI[i1], i1, out_i1);
+    InterlockedMax(g_tBuffI[i1], i1b);
+    InterlockedMax(g_tBuffI[i1], i1, out_i1);
+    InterlockedMin(g_tBuffI[i1], i1b);
+    InterlockedMin(g_tBuffI[i1], i1, out_i1);
+    InterlockedOr(g_tBuffI[i1], i1b);
+    InterlockedOr(g_tBuffI[i1], i1, out_i1);
+    InterlockedXor(g_tBuffI[i1], i1b);
+    InterlockedXor(g_tBuffI[i1], i1, out_i1);
+
+    // buffer uint
+    InterlockedAdd(g_tBuffU[u1], u1);
+    InterlockedAdd(g_tBuffU[u1], u1, out_u1);
+    InterlockedAnd(g_tBuffU[u1], u1);
+    InterlockedAnd(g_tBuffU[u1], u1, out_u1);
+    InterlockedCompareExchange(g_tBuffU[u1], u1b, u1c, out_u1);
+    InterlockedExchange(g_tBuffU[u1], u1, out_u1);
+    InterlockedMax(g_tBuffU[u1], u1);
+    InterlockedMax(g_tBuffU[u1], u1, out_u1);
+    InterlockedMin(g_tBuffU[u1], u1);
+    InterlockedMin(g_tBuffU[u1], u1, out_u1);
+    InterlockedOr(g_tBuffU[u1], u1);
+    InterlockedOr(g_tBuffU[u1], u1, out_u1);
+    InterlockedXor(g_tBuffU[u1], u1);
+    InterlockedXor(g_tBuffU[u1], u1, out_u1);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
diff --git a/Test/hlsl.rw.bracket.frag b/Test/hlsl.rw.bracket.frag
new file mode 100644
index 0000000000000000000000000000000000000000..9390e8de10f2511a717f46bc185abde1045298e5
--- /dev/null
+++ b/Test/hlsl.rw.bracket.frag
@@ -0,0 +1,140 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float4> g_tTex1df4 : register(t0);
+RWTexture1D <int4>   g_tTex1di4;
+RWTexture1D <uint4>  g_tTex1du4;
+
+RWTexture2D <float4> g_tTex2df4;
+RWTexture2D <int4>   g_tTex2di4;
+RWTexture2D <uint4>  g_tTex2du4;
+
+RWTexture3D <float4> g_tTex3df4;
+RWTexture3D <int4>   g_tTex3di4;
+RWTexture3D <uint4>  g_tTex3du4;
+
+RWTexture1DArray <float4> g_tTex1df4a;
+RWTexture1DArray <int4>   g_tTex1di4a;
+RWTexture1DArray <uint4>  g_tTex1du4a;
+
+RWTexture2DArray <float4> g_tTex2df4a;
+RWTexture2DArray <int4>   g_tTex2di4a;
+RWTexture2DArray <uint4>  g_tTex2du4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+uniform float4 uf4;
+uniform int4   ui4;
+uniform uint4  uu4;
+
+int4   Fn1(in int4 x)   { return x; }
+uint4  Fn1(in uint4 x)  { return x; }
+float4 Fn1(in float4 x) { return x; }
+
+void Fn2(out int4 x)   { x = int4(0); }
+void Fn2(out uint4 x)  { x = uint4(0); }
+void Fn2(out float4 x) { x = float4(0); }
+
+float4 SomeValue() { return c4; }
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df4[c1];
+   
+   float4 r00 = g_tTex1df4[c1];
+   int4   r01 = g_tTex1di4[c1];
+   uint4  r02 = g_tTex1du4[c1];
+
+   // 2D
+   float4 r10 = g_tTex2df4[c2];
+   int4   r11 = g_tTex2di4[c2];
+   uint4  r12 = g_tTex2du4[c2];
+   
+   // 3D
+   float4 r20 = g_tTex3df4[c3];
+   int4   r21 = g_tTex3di4[c3];
+   uint4  r22 = g_tTex3du4[c3];
+
+   float4 lf4 = uf4;
+
+   // Test as L-values
+   // 1D
+   g_tTex1df4[c1] = SomeValue(); // complex R-value
+   g_tTex1df4[c1] = lf4;
+   g_tTex1di4[c1] = int4(2,2,3,4);
+   g_tTex1du4[c1] = uint4(3,2,3,4);
+
+   // Test some operator= things, which need to do both a load and a store.
+   float4 val1 = (g_tTex1df4[c1] *= 2.0);
+   g_tTex1df4[c1] -= 3.0;
+   g_tTex1df4[c1] += 4.0;
+   
+   g_tTex1di4[c1] /= 2;
+   g_tTex1di4[c1] %= 2;
+   g_tTex1di4[c1] &= 0xffff;
+   g_tTex1di4[c1] |= 0xf0f0;
+   g_tTex1di4[c1] <<= 2;
+   g_tTex1di4[c1] >>= 2;
+
+   // 2D
+   g_tTex2df4[c2] = SomeValue(); // complex L-value
+   g_tTex2df4[c2] = lf4;
+   g_tTex2di4[c2] = int4(5,2,3,4);
+   g_tTex2du4[c2] = uint4(6,2,3,4);
+   
+   // 3D
+   g_tTex3df4[c3] = SomeValue(); // complex L-value
+   g_tTex3df4[c3] = lf4;
+   g_tTex3di4[c3] = int4(8,6,7,8);
+   g_tTex3du4[c3] = uint4(9,2,3,4);
+
+   // Test function calling
+   Fn1(g_tTex1df4[c1]);  // in
+   Fn1(g_tTex1di4[c1]);  // in
+   Fn1(g_tTex1du4[c1]);  // in
+
+   Fn2(g_tTex1df4[c1]);  // out
+   Fn2(g_tTex1di4[c1]);  // out
+   Fn2(g_tTex1du4[c1]);  // out
+
+   // Test increment operators
+   // pre-ops
+   ++g_tTex1df4[c1];
+   ++g_tTex1di4[c1];
+   ++g_tTex1du4[c1];
+
+   --g_tTex1df4[c1];
+   --g_tTex1di4[c1];
+   --g_tTex1du4[c1];
+
+   // post-ops
+   g_tTex1df4[c1]++;
+   g_tTex1du4[c1]--;
+   g_tTex1di4[c1]++;
+
+   g_tTex1df4[c1]--;
+   g_tTex1di4[c1]++;
+   g_tTex1du4[c1]--;
+
+   // read and write
+   g_tTex1df4[1] = g_tTex2df4[int2(2,3)];
+
+   psout.Color = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.rw.register.frag b/Test/hlsl.rw.register.frag
new file mode 100644
index 0000000000000000000000000000000000000000..e82e419a089d2b45d4a0036277efe6857c998c8d
--- /dev/null
+++ b/Test/hlsl.rw.register.frag
@@ -0,0 +1,18 @@
+
+RWTexture1D <float> g_tTex1df1 : register(u2);
+RWBuffer <uint>     g_tBuf1du1 : register(U3);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+   float r00 = g_tTex1df1[0];
+   uint  r01 = g_tBuf1du1[0];
+
+   PS_OUTPUT psout;
+   psout.Color = 1.0;
+   return psout;
+}
diff --git a/Test/hlsl.rw.scalar.bracket.frag b/Test/hlsl.rw.scalar.bracket.frag
new file mode 100644
index 0000000000000000000000000000000000000000..e185f05d17955ab112224bcfbe311c8be72b7993
--- /dev/null
+++ b/Test/hlsl.rw.scalar.bracket.frag
@@ -0,0 +1,140 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float> g_tTex1df1;
+RWTexture1D <int>   g_tTex1di1;
+RWTexture1D <uint>  g_tTex1du1;
+
+RWTexture2D <float> g_tTex2df1;
+RWTexture2D <int>   g_tTex2di1;
+RWTexture2D <uint>  g_tTex2du1;
+
+RWTexture3D <float> g_tTex3df1;
+RWTexture3D <int>   g_tTex3di1;
+RWTexture3D <uint>  g_tTex3du1;
+
+RWTexture1DArray <float> g_tTex1df1a;
+RWTexture1DArray <int>   g_tTex1di1a;
+RWTexture1DArray <uint>  g_tTex1du1a;
+
+RWTexture2DArray <float> g_tTex2df1a;
+RWTexture2DArray <int>   g_tTex2di1a;
+RWTexture2DArray <uint>  g_tTex2du1a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+uniform float uf1;
+uniform int   ui1;
+uniform uint  uu1;
+
+int   Fn1(in int x)   { return x; }
+uint  Fn1(in uint x)  { return x; }
+float Fn1(in float x) { return x; }
+
+void Fn2(out int x)   { x = int(0); }
+void Fn2(out uint x)  { x = uint(0); }
+void Fn2(out float x) { x = float(0); }
+
+float SomeValue() { return c1; }
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df1[c1];
+   
+   float r00 = g_tTex1df1[c1];
+   int   r01 = g_tTex1di1[c1];
+   uint  r02 = g_tTex1du1[c1];
+
+   // 2D
+   float r10 = g_tTex2df1[c2];
+   int   r11 = g_tTex2di1[c2];
+   uint  r12 = g_tTex2du1[c2];
+   
+   // 3D
+   float r20 = g_tTex3df1[c3];
+   int   r21 = g_tTex3di1[c3];
+   uint  r22 = g_tTex3du1[c3];
+
+   float lf1 = uf1;
+
+   // Test as L-values
+   // 1D
+   g_tTex1df1[c1] = SomeValue(); // complex R-value
+   g_tTex1df1[c1] = lf1;
+   g_tTex1di1[c1] = int(2);
+   g_tTex1du1[c1] = uint(3);
+
+   // Test some operator= things, which need to do both a load and a store.
+   float val1 = (g_tTex1df1[c1] *= 2.0);
+   g_tTex1df1[c1] -= 3.0;
+   g_tTex1df1[c1] += 4.0;
+   
+   g_tTex1di1[c1] /= 2;
+   g_tTex1di1[c1] %= 2;
+   g_tTex1di1[c1] &= 0xffff;
+   g_tTex1di1[c1] |= 0xf0f0;
+   g_tTex1di1[c1] <<= 2;
+   g_tTex1di1[c1] >>= 2;
+
+   // 2D
+   g_tTex2df1[c2] = SomeValue(); // complex L-value
+   g_tTex2df1[c2] = lf1;
+   g_tTex2di1[c2] = int(5);
+   g_tTex2du1[c2] = uint(6);
+   
+   // 3D
+   g_tTex3df1[c3] = SomeValue(); // complex L-value
+   g_tTex3df1[c3] = lf1;
+   g_tTex3di1[c3] = int(8);
+   g_tTex3du1[c3] = uint(9);
+
+   // Test function calling
+   Fn1(g_tTex1df1[c1]);  // in
+   Fn1(g_tTex1di1[c1]);  // in
+   Fn1(g_tTex1du1[c1]);  // in
+
+   Fn2(g_tTex1df1[c1]);  // out
+   Fn2(g_tTex1di1[c1]);  // out
+   Fn2(g_tTex1du1[c1]);  // out
+
+   // Test increment operators
+   // pre-ops
+   ++g_tTex1df1[c1];
+   ++g_tTex1di1[c1];
+   ++g_tTex1du1[c1];
+
+   --g_tTex1df1[c1];
+   --g_tTex1di1[c1];
+   --g_tTex1du1[c1];
+
+   // post-ops
+   g_tTex1df1[c1]++;
+   g_tTex1du1[c1]--;
+   g_tTex1di1[c1]++;
+
+   g_tTex1df1[c1]--;
+   g_tTex1di1[c1]++;
+   g_tTex1du1[c1]--;
+
+   // read and write
+   g_tTex1df1[1] = g_tTex2df1[int2(2, 3)];
+
+   psout.Color = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.rw.vec2.bracket.frag b/Test/hlsl.rw.vec2.bracket.frag
new file mode 100644
index 0000000000000000000000000000000000000000..7b4a10a8a6a02969b9dba06f94cf41819a7ad6a8
--- /dev/null
+++ b/Test/hlsl.rw.vec2.bracket.frag
@@ -0,0 +1,140 @@
+SamplerState       g_sSamp : register(s0);
+
+RWTexture1D <float2> g_tTex1df2;
+RWTexture1D <int2>   g_tTex1di2;
+RWTexture1D <uint2>  g_tTex1du2;
+
+RWTexture2D <float2> g_tTex2df2;
+RWTexture2D <int2>   g_tTex2di2;
+RWTexture2D <uint2>  g_tTex2du2;
+
+RWTexture3D <float2> g_tTex3df2;
+RWTexture3D <int2>   g_tTex3di2;
+RWTexture3D <uint2>  g_tTex3du2;
+
+RWTexture1DArray <float2> g_tTex1df2a;
+RWTexture1DArray <int2>   g_tTex1di2a;
+RWTexture1DArray <uint2>  g_tTex1du2a;
+
+RWTexture2DArray <float2> g_tTex2df2a;
+RWTexture2DArray <int2>   g_tTex2di2a;
+RWTexture2DArray <uint2>  g_tTex2du2a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+uniform float2 uf2;
+uniform int2   ui2;
+uniform uint2  uu2;
+
+int2   Fn1(in int2 x)   { return x; }
+uint2  Fn1(in uint2 x)  { return x; }
+float2 Fn1(in float2 x) { return x; }
+
+void Fn2(out int2 x)   { x = int2(0,0); }
+void Fn2(out uint2 x)  { x = uint2(0,0); }
+void Fn2(out float2 x) { x = float2(0,0); }
+
+float2 SomeValue() { return c2; }
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df2[c1];
+   
+   float2 r00 = g_tTex1df2[c1];
+   int2   r01 = g_tTex1di2[c1];
+   uint2  r02 = g_tTex1du2[c1];
+
+   // 2D
+   float2 r10 = g_tTex2df2[c2];
+   int2   r11 = g_tTex2di2[c2];
+   uint2  r12 = g_tTex2du2[c2];
+   
+   // 3D
+   float2 r20 = g_tTex3df2[c3];
+   int2   r21 = g_tTex3di2[c3];
+   uint2  r22 = g_tTex3du2[c3];
+
+   float2 lf2 = uf2;
+
+   // Test as L-values
+   // 1D
+   g_tTex1df2[c1] = SomeValue(); // complex R-value
+   g_tTex1df2[c1] = lf2;
+   g_tTex1di2[c1] = int2(2,2);
+   g_tTex1du2[c1] = uint2(3,2);
+
+   // Test some operator= things, which need to do both a load and a store.
+   float2 val1 = (g_tTex1df2[c1] *= 2.0);
+   g_tTex1df2[c1] -= 3.0;
+   g_tTex1df2[c1] += 4.0;
+   
+   g_tTex1di2[c1] /= 2;
+   g_tTex1di2[c1] %= 2;
+   g_tTex1di2[c1] &= 0xffff;
+   g_tTex1di2[c1] |= 0xf0f0;
+   g_tTex1di2[c1] <<= 2;
+   g_tTex1di2[c1] >>= 2;
+
+   // 2D
+   g_tTex2df2[c2] = SomeValue(); // complex L-value
+   g_tTex2df2[c2] = lf2;
+   g_tTex2di2[c2] = int2(5,2);
+   g_tTex2du2[c2] = uint2(6,2);
+   
+   // 3D
+   g_tTex3df2[c3] = SomeValue(); // complex L-value
+   g_tTex3df2[c3] = lf2;
+   g_tTex3di2[c3] = int2(8,6);
+   g_tTex3du2[c3] = uint2(9,2);
+
+   // Test function calling
+   Fn1(g_tTex1df2[c1]);  // in
+   Fn1(g_tTex1di2[c1]);  // in
+   Fn1(g_tTex1du2[c1]);  // in
+
+   Fn2(g_tTex1df2[c1]);  // out
+   Fn2(g_tTex1di2[c1]);  // out
+   Fn2(g_tTex1du2[c1]);  // out
+
+   // Test increment operators
+   // pre-ops
+   ++g_tTex1df2[c1];
+   ++g_tTex1di2[c1];
+   ++g_tTex1du2[c1];
+
+   --g_tTex1df2[c1];
+   --g_tTex1di2[c1];
+   --g_tTex1du2[c1];
+
+   // post-ops
+   g_tTex1df2[c1]++;
+   g_tTex1du2[c1]--;
+   g_tTex1di2[c1]++;
+
+   g_tTex1df2[c1]--;
+   g_tTex1di2[c1]++;
+   g_tTex1du2[c1]--;
+
+   // read and write
+   g_tTex1df2[1] = g_tTex2df2[int2(2,3)];
+
+   psout.Color = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.sample.sub-vec4.dx10.frag b/Test/hlsl.sample.sub-vec4.dx10.frag
new file mode 100644
index 0000000000000000000000000000000000000000..991d976a1d60cd40ccd1823ceed5601321c6348c
--- /dev/null
+++ b/Test/hlsl.sample.sub-vec4.dx10.frag
@@ -0,0 +1,24 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1D <float>  g_tTex1df1;
+Texture1D <float2> g_tTex1df2;
+Texture1D <float3> g_tTex1df3;
+Texture1D <float4> g_tTex1df4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float  txval10 = g_tTex1df1 . Sample(g_sSamp, 0.1);
+   float2 txval11 = g_tTex1df2 . Sample(g_sSamp, 0.2);
+   float3 txval12 = g_tTex1df3 . Sample(g_sSamp, 0.2);
+   float4 txval13 = g_tTex1df4 . Sample(g_sSamp, 0.2);
+
+   psout.Color = 1.0;
+   return psout;
+}
diff --git a/Test/hlsl.shapeConv.frag b/Test/hlsl.shapeConv.frag
index 0485b4a577bbca18838bfeb8ffdcbb0860501704..adb170eab35d4740791693048ab28a8be489f139 100644
--- a/Test/hlsl.shapeConv.frag
+++ b/Test/hlsl.shapeConv.frag
@@ -18,8 +18,8 @@ float4 PixelShaderFunction(float4 input, float f) : COLOR0
     6.0 < foo;
     7.0 <= foo;
 
-    v.x == v;
-    f != v;
+    all(v.x == v);
+    any(f != v);
 
     float1 f1;
 
diff --git a/Test/hlsl.shapeConvRet.frag b/Test/hlsl.shapeConvRet.frag
new file mode 100755
index 0000000000000000000000000000000000000000..7d7755821ab8bdd9271907276eaff52cdc395cf4
--- /dev/null
+++ b/Test/hlsl.shapeConvRet.frag
@@ -0,0 +1,9 @@
+int3 foo()
+{
+    return 13;
+}
+
+float4 main(float f)
+{
+    return f;
+}
diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag
index 58cd524be5bb66634e5a124ff6187b91399fb937..e602c9ed5163390336bde3bd227763e073db60de 100644
--- a/Test/hlsl.struct.frag
+++ b/Test/hlsl.struct.frag
@@ -12,7 +12,7 @@ struct myS {
 
 myS s1;
 
-struct {
+static struct {
     float4 i;
 } s2;
 
@@ -27,8 +27,8 @@ struct IN_S {
     float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s0) <int bambam=30;> ;
 };
 
-float3 ff5 : packoffset(c1.y) : register(ps_5_0, s[5]);
-float3 ff6 : packoffset(c2.y) : register(s3[5]);
+float ff5 : packoffset(c101.y) : register(ps_5_0, s[5]);
+float ff6 : packoffset(c102.y) : register(s3[5]);
 
 float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0
 {
@@ -40,4 +40,4 @@ float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0
     s2.i = s.ff4;
 
     return input;
-}
\ No newline at end of file
+}
diff --git a/Test/hlsl.structarray.flatten.frag b/Test/hlsl.structarray.flatten.frag
new file mode 100644
index 0000000000000000000000000000000000000000..eedb931da67582dbd5344dcb5ae24aa5c3a154cf
--- /dev/null
+++ b/Test/hlsl.structarray.flatten.frag
@@ -0,0 +1,28 @@
+SamplerState g_samp;
+Texture1D    g_tex;
+
+struct tex_t {
+    SamplerState samp;
+    Texture1D tex;
+    int nonopaque_thing;
+};
+
+struct tex_with_arrays_t {
+    SamplerState samp[2];
+    Texture1D tex[2];
+    int nonopaque_thing;
+};
+
+uniform tex_t g_texdata;
+uniform tex_t g_texdata_array[3];
+uniform tex_with_arrays_t g_texdata_array2[3];
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+void main(out PS_OUTPUT ps_output)
+{
+    ps_output.color =
+        g_texdata.tex.Sample(g_texdata.samp, 0.5) +
+        g_texdata_array[1].tex.Sample(g_texdata_array[1].samp, 0.4) +
+        g_texdata_array2[1].tex[0].Sample(g_texdata_array2[1].samp[0], 0.3);
+}
diff --git a/Test/hlsl.structarray.flatten.geom b/Test/hlsl.structarray.flatten.geom
new file mode 100644
index 0000000000000000000000000000000000000000..1b05dc11d280594c55a9f2b7a1d74aa847801fd2
--- /dev/null
+++ b/Test/hlsl.structarray.flatten.geom
@@ -0,0 +1,17 @@
+
+struct VertexData {
+	float4 position : POSITION;
+	float4 color    : COLOR0;
+	float2 uv       : TEXCOORD0;
+};
+
+[maxvertexcount(4)]
+void main(line VertexData vin[2], inout TriangleStream<VertexData> outStream)
+{
+    VertexData vout;
+
+    vout.color = vin[0].color;
+    vout.uv = vin[0].uv;
+    vout.position = vin[0].position;
+    outStream.Append(vout);
+}
diff --git a/Test/hlsl.structin.vert b/Test/hlsl.structin.vert
index 7eba552d54350635101c2ae80a492eb7cd8a197a..43d0cfd0bbdf5d62e17680a0b4838667a14b11e8 100644
--- a/Test/hlsl.structin.vert
+++ b/Test/hlsl.structin.vert
@@ -11,4 +11,4 @@ VI main(float4 d, VI vi, float4 e) : SV_POSITION
     local.b = vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e;
 
     return local;
-}
\ No newline at end of file
+}
diff --git a/Test/hlsl.swizzle.frag b/Test/hlsl.swizzle.frag
index 231430a91958e29106245e967e2196e8c024a877..9e87c6d77356a45331ed2325d5c9050ea1aabf29 100644
--- a/Test/hlsl.swizzle.frag
+++ b/Test/hlsl.swizzle.frag
@@ -1,4 +1,4 @@
-float4 AmbientColor = float4(1, 0.5, 0, 1);
+static float4 AmbientColor = float4(1, 0.5, 0, 1);
 
 float4 ShaderFunction(float4 input) : COLOR0
 {
diff --git a/Test/hlsl.tx.bracket.frag b/Test/hlsl.tx.bracket.frag
new file mode 100644
index 0000000000000000000000000000000000000000..0d3d81f82c1b1322a2268e1a22c6e75b14aee99d
--- /dev/null
+++ b/Test/hlsl.tx.bracket.frag
@@ -0,0 +1,73 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1D <float4> g_tTex1df4 : register(t0);
+Texture1D <int4>   g_tTex1di4;
+Texture1D <uint4>  g_tTex1du4;
+
+Texture2D <float4> g_tTex2df4;
+Texture2D <int4>   g_tTex2di4;
+Texture2D <uint4>  g_tTex2du4;
+
+Texture3D <float4> g_tTex3df4;
+Texture3D <int4>   g_tTex3di4;
+Texture3D <uint4>  g_tTex3du4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+int4   Fn1(in int4 x)   { return x; }
+uint4  Fn1(in uint4 x)  { return x; }
+float4 Fn1(in float4 x) { return x; }
+
+float4 SomeValue() { return c4; }
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   g_tTex1df4[c1];
+   
+   float4 r00 = g_tTex1df4[c1];
+   int4   r01 = g_tTex1di4[c1];
+   uint4  r02 = g_tTex1du4[c1];
+
+   // 2D
+   float4 r10 = g_tTex2df4[c2];
+   int4   r11 = g_tTex2di4[c2];
+   uint4  r12 = g_tTex2du4[c2];
+   
+   // 3D
+   float4 r20 = g_tTex3df4[c3];
+   int4   r21 = g_tTex3di4[c3];
+   uint4  r22 = g_tTex3du4[c3];
+
+   // Test function calling
+   Fn1(g_tTex1df4[c1]);  // in
+   Fn1(g_tTex1di4[c1]);  // in
+   Fn1(g_tTex1du4[c1]);  // in
+
+   psout.Color = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.whileLoop.frag b/Test/hlsl.whileLoop.frag
index f282375ddd55848d245c81f79fe62d2e374acba2..e4084ae7eb361010cb526233daeda7b1b4f75ed5 100644
--- a/Test/hlsl.whileLoop.frag
+++ b/Test/hlsl.whileLoop.frag
@@ -1,6 +1,6 @@
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    while (input != input) { return input; }
+    while (any(input != input)) { return input; }
     while (false) ;
     [unroll] while (false) { }
     while ((false)) { }
diff --git a/Test/missingBodies.vert b/Test/missingBodies.vert
new file mode 100644
index 0000000000000000000000000000000000000000..04b7181549847032a5155b0aca9c7a291ba908ed
--- /dev/null
+++ b/Test/missingBodies.vert
@@ -0,0 +1,24 @@
+#version 450
+
+void bar();
+void foo() { bar(); }
+
+void B();
+void C(int);
+void C(int, int) { }
+void C(bool);
+void A() { B(); C(1); C(true); C(1, 2); }
+
+void main()
+{
+    foo();
+    C(true);
+}
+
+int ret1();
+
+int f1 = ret1();
+
+int ret2() { return 3; }
+
+int f2 = ret2();
diff --git a/Test/remap.hlsl.templatetypes.everything.frag b/Test/remap.hlsl.templatetypes.everything.frag
index bacd6f56d9b5327e050f0d07be0e944b94253d42..f48c98a74b1302ce3dd9972e8a56f3a89daf6157 100644
--- a/Test/remap.hlsl.templatetypes.everything.frag
+++ b/Test/remap.hlsl.templatetypes.everything.frag
@@ -1,5 +1,5 @@
 
-float4 main(float4 input) : COLOR0
+float main(float4 input) : COLOR0
 {
     vector r00 = float4(1,2,3,4);  // vector means float4
     float4 r01 = vector(2,3,4,5);  // vector means float4
diff --git a/Test/remap.hlsl.templatetypes.none.frag b/Test/remap.hlsl.templatetypes.none.frag
index bacd6f56d9b5327e050f0d07be0e944b94253d42..f48c98a74b1302ce3dd9972e8a56f3a89daf6157 100644
--- a/Test/remap.hlsl.templatetypes.none.frag
+++ b/Test/remap.hlsl.templatetypes.none.frag
@@ -1,5 +1,5 @@
 
-float4 main(float4 input) : COLOR0
+float main(float4 input) : COLOR0
 {
     vector r00 = float4(1,2,3,4);  // vector means float4
     float4 r01 = vector(2,3,4,5);  // vector means float4
diff --git a/Test/runtests b/Test/runtests
index 18513380841180cef5419e07e1d9643a6540ffae..a17848b74caf60d12e242e490a85c6a65ece51ef 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -33,6 +33,9 @@ $EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
 diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
 $EXE -D -e flizv -l -q -C -V hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
 diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
+$EXE -D -e main -l -q -C -V hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
+diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1
+
 
 #
 # multi-threaded test
@@ -42,6 +45,20 @@ $EXE -i -C *.vert *.geom *.frag *.tes* *.comp > singleThread.out
 $EXE -i -C *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
 diff singleThread.out multiThread.out || HASERROR=1
 
+#
+# entry point renaming tests
+#
+echo Running entry-point renaming tests
+$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
+
+#
+# Testing ill-defined uncalled function
+#
+echo Running ill-defined uncalled function
+$EXE -D -e main -H hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1
+
 if [ $HASERROR -eq 0 ]
 then
     echo Tests Succeeded.
diff --git a/Test/spv.400.frag b/Test/spv.400.frag
index 05b4370bcc60d4a4d8473319a5ab18d2e0a980aa..d64c4700ebba2607c9abfdf3990e4d8fc313a117 100644
--- a/Test/spv.400.frag
+++ b/Test/spv.400.frag
@@ -259,5 +259,7 @@ void main()
     uo = u % i;
     foo23();
     doubles();
+
+    int id = gl_PrimitiveID;
 }
 
diff --git a/Test/spv.buffer.autoassign.frag b/Test/spv.buffer.autoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..464426095d8a8a24db794a8f50fd5a617879a695
--- /dev/null
+++ b/Test/spv.buffer.autoassign.frag
@@ -0,0 +1,28 @@
+
+cbuffer MyUB1 : register(b5)  // explicitly assigned & offsetted
+{
+    float g_a;
+    int g_b;
+};
+
+cbuffer MyUB2  // implicitly assigned
+{
+    float g_c;
+};
+
+cbuffer MyUB3  // implicitly assigned
+{
+    float g_d;
+};
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT psout;
+    psout.Color = g_a + g_b + g_c + g_d;
+    return psout;
+}
diff --git a/Test/spv.float16.frag b/Test/spv.float16.frag
new file mode 100644
index 0000000000000000000000000000000000000000..7c94a5151b0cc946f4d3ba18d9874627d0acc51e
--- /dev/null
+++ b/Test/spv.float16.frag
@@ -0,0 +1,306 @@
+#version 450 core
+
+#extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_ARB_gpu_shader_int64: enable
+
+void main()
+{
+}
+
+// Half float literals
+void literal()
+{
+    const float16_t f16c  = 0.000001hf;
+    const f16vec2   f16cv = f16vec2(-0.25HF, 0.03HF);
+
+    f16vec2 f16v;
+    f16v.x  = f16c;
+    f16v   += f16cv;
+}
+
+// Block memory layout
+struct S
+{
+    float16_t  x;   // rule 1: align = 2, takes offsets 0-1
+    f16vec2    y;   // rule 2: align = 4, takes offsets 4-7
+    f16vec3    z;   // rule 3: align = 8, takes offsets 8-13
+};
+
+layout(column_major, std140) uniform B1
+{
+    float16_t  a;     // rule 1:  align = 2, takes offsets 0-1
+    f16vec2    b;     // rule 2:  align = 4, takes offsets 4-7
+    f16vec3    c;     // rule 3:  align = 8, takes offsets 8-15
+    float16_t  d[2];  // rule 4:  align = 16, array stride = 16,
+                      //          takes offsets 16-47
+    f16mat2x3  e;     // rule 5:  align = 16, matrix stride = 16,
+                      //          takes offsets 48-79
+    f16mat2x3  f[2];  // rule 6:  align = 16, matrix stride = 16,
+                      //          array stride = 32, f[0] takes
+                      //          offsets 80-111, f[1] takes offsets
+                      //          112-143
+    S          g;     // rule 9:  align = 16, g.x takes offsets
+                      //          144-145, g.y takes offsets 148-151,
+                      //          g.z takes offsets 152-159
+    S          h[2];  // rule 10: align = 16, array stride = 16, h[0]
+                      //          takes offsets 160-175, h[1] takes
+                      //          offsets 176-191
+};
+
+layout(row_major, std430) buffer B2
+{
+    float16_t  o;     // rule 1:  align = 2, takes offsets 0-1
+    f16vec2    p;     // rule 2:  align = 4, takes offsets 4-7
+    f16vec3    q;     // rule 3:  align = 8, takes offsets 8-13
+    float16_t  r[2];  // rule 4:  align = 2, array stride = 2, takes
+                      //          offsets 14-17
+    f16mat2x3  s;     // rule 7:  align = 4, matrix stride = 4, takes
+                      //          offsets 20-31
+    f16mat2x3  t[2];  // rule 8:  align = 4, matrix stride = 4, array
+                      //          stride = 12, t[0] takes offsets
+                      //          32-43, t[1] takes offsets 44-55
+    S          u;     // rule 9:  align = 8, u.x takes offsets
+                      //          56-57, u.y takes offsets 60-63, u.z
+                      //          takes offsets 64-69
+    S          v[2];  // rule 10: align = 8, array stride = 16, v[0]
+                      //          takes offsets 72-87, v[1] takes
+                      //          offsets 88-103
+};
+
+// Specialization constant
+layout(constant_id = 100) const float16_t sf16 = 0.125hf;
+layout(constant_id = 101) const float     sf   = 0.25;
+layout(constant_id = 102) const double    sd   = 0.5lf;
+
+const float  f16_to_f = float(sf16);
+const double f16_to_d = float(sf16);
+
+const float16_t f_to_f16 = float16_t(sf);
+const float16_t d_to_f16 = float16_t(sd);
+
+void operators()
+{
+    float16_t f16;
+    f16vec2   f16v;
+    f16mat2x2 f16m;
+    bool      b;
+
+    // Arithmetic
+    f16v += f16v;
+    f16v -= f16v;
+    f16v *= f16v;
+    f16v /= f16v;
+    f16v++;
+    f16v--;
+    ++f16m;
+    --f16m;
+    f16v = -f16v;
+    f16m = -f16m;
+
+    f16 = f16v.x + f16v.y;
+    f16 = f16v.x - f16v.y;
+    f16 = f16v.x * f16v.y;
+    f16 = f16v.x / f16v.y;
+
+    // Relational
+    b = (f16v.x != f16);
+    b = (f16v.y == f16);
+    b = (f16v.x >  f16);
+    b = (f16v.y <  f16);
+    b = (f16v.x >= f16);
+    b = (f16v.y <= f16);
+
+    // Vector/matrix operations
+    f16v = f16v * f16;
+    f16m = f16m * f16;
+    f16v = f16m * f16v;
+    f16v = f16v * f16m;
+    f16m = f16m * f16m;
+}
+
+void typeCast()
+{
+    bvec3   bv;
+    vec3    fv;
+    dvec3   dv;
+    ivec3   iv;
+    uvec3   uv;
+    i64vec3 i64v;
+    u64vec3 u64v;
+
+    f16vec3 f16v;
+
+    f16v = f16vec3(bv);     // bool -> float16
+    bv   = bvec3(f16v);     // float16 -> bool
+
+    f16v = f16vec3(fv);     // float -> float16
+    fv   = vec3(f16v);      // float16 -> float
+
+    f16v = f16vec3(dv);     // double -> float16
+    dv   = dvec3(dv);       // float16 -> double
+
+    f16v = f16vec3(iv);     // int -> float16
+    iv   = ivec3(f16v);     // float16 -> int
+
+    f16v = f16vec3(uv);     // uint -> float16
+    uv   = uvec3(f16v);     // float16 -> uint
+
+    f16v = f16vec3(i64v);   // int64 -> float16
+    i64v = i64vec3(f16v);   // float16 -> int64
+
+    f16v = f16vec3(u64v);   // uint64 -> float16
+    u64v = u64vec3(f16v);   // float16 -> uint64
+}
+
+void builtinAngleTrigFuncs()
+{
+    f16vec4 f16v1, f16v2;
+
+    f16v2 = radians(f16v1);
+    f16v2 = degrees(f16v1);
+    f16v2 = sin(f16v1);
+    f16v2 = cos(f16v1);
+    f16v2 = tan(f16v1);
+    f16v2 = asin(f16v1);
+    f16v2 = acos(f16v1);
+    f16v2 = atan(f16v1, f16v2);
+    f16v2 = atan(f16v1);
+    f16v2 = sinh(f16v1);
+    f16v2 = cosh(f16v1);
+    f16v2 = tanh(f16v1);
+    f16v2 = asinh(f16v1);
+    f16v2 = acosh(f16v1);
+    f16v2 = atanh(f16v1);
+}
+
+void builtinExpFuncs()
+{
+    f16vec2 f16v1, f16v2;
+
+    f16v2 = pow(f16v1, f16v2);
+    f16v2 = exp(f16v1);
+    f16v2 = log(f16v1);
+    f16v2 = exp2(f16v1);
+    f16v2 = log2(f16v1);
+    f16v2 = sqrt(f16v1);
+    f16v2 = inversesqrt(f16v1);
+}
+
+void builtinCommonFuncs()
+{
+    f16vec3   f16v1, f16v2, f16v3;
+    float16_t f16;
+    bool  b;
+    bvec3 bv;
+    ivec3 iv;
+
+    f16v2 = abs(f16v1);
+    f16v2 = sign(f16v1);
+    f16v2 = floor(f16v1);
+    f16v2 = trunc(f16v1);
+    f16v2 = round(f16v1);
+    f16v2 = roundEven(f16v1);
+    f16v2 = ceil(f16v1);
+    f16v2 = fract(f16v1);
+    f16v2 = mod(f16v1, f16v2);
+    f16v2 = mod(f16v1, f16);
+    f16v3 = modf(f16v1, f16v2);
+    f16v3 = min(f16v1, f16v2);
+    f16v3 = min(f16v1, f16);
+    f16v3 = max(f16v1, f16v2);
+    f16v3 = max(f16v1, f16);
+    f16v3 = clamp(f16v1, f16, f16v2.x);
+    f16v3 = clamp(f16v1, f16v2, f16vec3(f16));
+    f16v3 = mix(f16v1, f16v2, f16);
+    f16v3 = mix(f16v1, f16v2, f16v3);
+    f16v3 = mix(f16v1, f16v2, bv);
+    f16v3 = step(f16v1, f16v2);
+    f16v3 = step(f16, f16v3);
+    f16v3 = smoothstep(f16v1, f16v2, f16v3);
+    f16v3 = smoothstep(f16, f16v1.x, f16v2);
+    b     = isnan(f16);
+    bv    = isinf(f16v1);
+    f16v3 = fma(f16v1, f16v2, f16v3);
+    f16v2 = frexp(f16v1, iv);
+    f16v2 = ldexp(f16v1, iv);
+}
+
+void builtinPackUnpackFuncs()
+{
+    uint u;
+    f16vec2 f16v;
+
+    u    = packFloat2x16(f16v);
+    f16v = unpackFloat2x16(u);
+}
+
+void builtinGeometryFuncs()
+{
+    float16_t f16;
+    f16vec3   f16v1, f16v2, f16v3;
+
+    f16   = length(f16v1);
+    f16   = distance(f16v1, f16v2);
+    f16   = dot(f16v1, f16v2);
+    f16v3 = cross(f16v1, f16v2);
+    f16v2 = normalize(f16v1);
+    f16v3 = faceforward(f16v1, f16v2, f16v3);
+    f16v3 = reflect(f16v1, f16v2);
+    f16v3 = refract(f16v1, f16v2, f16);
+}
+
+void builtinMatrixFuncs()
+{
+    f16mat2x3 f16m1, f16m2, f16m3;
+    f16mat3x2 f16m4;
+    f16mat3   f16m5;
+    f16mat4   f16m6, f16m7;
+
+    f16vec3 f16v1;
+    f16vec2 f16v2;
+
+    float16_t f16;
+
+    f16m3 = matrixCompMult(f16m1, f16m2);
+    f16m1 = outerProduct(f16v1, f16v2);
+    f16m4 = transpose(f16m1);
+    f16   = determinant(f16m5);
+    f16m6 = inverse(f16m7);
+}
+
+void builtinVecRelFuncs()
+{
+    f16vec3 f16v1, f16v2;
+    bvec3   bv;
+
+    bv = lessThan(f16v1, f16v2);
+    bv = lessThanEqual(f16v1, f16v2);
+    bv = greaterThan(f16v1, f16v2);
+    bv = greaterThanEqual(f16v1, f16v2);
+    bv = equal(f16v1, f16v2);
+    bv = notEqual(f16v1, f16v2);
+}
+
+in f16vec3 if16v;
+
+void builtinFragProcFuncs()
+{
+    f16vec3 f16v;
+
+    // Derivative
+    f16v.x  = dFdx(if16v.x);
+    f16v.y  = dFdy(if16v.y);
+    f16v.xy = dFdxFine(if16v.xy);
+    f16v.xy = dFdyFine(if16v.xy);
+    f16v    = dFdxCoarse(if16v);
+    f16v    = dFdxCoarse(if16v);
+
+    f16v.x  = fwidth(if16v.x);
+    f16v.xy = fwidthFine(if16v.xy);
+    f16v    = fwidthCoarse(if16v);
+
+    // Interpolation
+    f16v.x  = interpolateAtCentroid(if16v.x);
+    f16v.xy = interpolateAtSample(if16v.xy, 1);
+    f16v    = interpolateAtOffset(if16v, f16vec2(0.5hf));
+}
diff --git a/Test/spv.glsl.register.autoassign.frag b/Test/spv.glsl.register.autoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..f754d8aad92c7b81c906472e1ce9922e963d9f19
--- /dev/null
+++ b/Test/spv.glsl.register.autoassign.frag
@@ -0,0 +1,68 @@
+#version 450
+
+uniform layout(binding=0) sampler       g_sSamp1;
+uniform sampler       g_sSamp2;
+uniform layout(binding=2) sampler       g_sSamp3[2];
+uniform sampler       g_sSamp4[3];
+uniform sampler       g_sSamp5;
+
+uniform sampler       g_sSamp_unused1;
+uniform sampler       g_sSamp_unused2;
+
+uniform layout(binding=1) texture1D          g_tTex1;
+uniform texture1D  g_tTex2;
+uniform layout(binding=3) texture1D          g_tTex3[2];
+uniform texture1D          g_tTex4[3];
+uniform texture1D          g_tTex5;
+
+uniform layout(binding=0)  texture1D          g_tTex_unused1;
+uniform layout(binding=2)  texture1D          g_tTex_unused2;
+uniform texture1D          g_tTex_unused3;
+
+struct MyStruct_t {
+    int a;
+    float b;
+    vec3 c;
+};
+
+uniform layout(binding=4) myblock {
+    MyStruct_t mystruct;
+    vec4 myvec4_a;
+    vec4 myvec4_b;
+    ivec4 myint4_a;
+};
+
+vec4 Func1()
+{
+    return
+        texture(sampler1D(g_tTex1, g_sSamp1), 0.1) +
+        texture(sampler1D(g_tTex2, g_sSamp2), 0.2) +
+        texture(sampler1D(g_tTex3[0], g_sSamp3[0]), 0.3) +
+        texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3) +
+        texture(sampler1D(g_tTex4[1], g_sSamp4[1]), 0.4) +
+        texture(sampler1D(g_tTex4[2], g_sSamp4[2]), 0.4) +
+        texture(sampler1D(g_tTex5, g_sSamp5), 0.5) +
+        mystruct.c[1];
+}
+
+vec4 Func2()
+{
+    return
+        texture(sampler1D(g_tTex1, g_sSamp1), 0.1) +
+        texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3);
+}
+
+// Not called from entry point:
+vec4 Func2_unused()
+{
+    return
+        texture(sampler1D(g_tTex_unused1, g_sSamp_unused1), 1.1) +
+        texture(sampler1D(g_tTex_unused2, g_sSamp_unused2), 1.2);
+}
+
+out vec4 FragColor;
+
+void main()
+{
+    FragColor = Func1() + Func2();
+}
diff --git a/Test/spv.glsl.register.noautoassign.frag b/Test/spv.glsl.register.noautoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..f754d8aad92c7b81c906472e1ce9922e963d9f19
--- /dev/null
+++ b/Test/spv.glsl.register.noautoassign.frag
@@ -0,0 +1,68 @@
+#version 450
+
+uniform layout(binding=0) sampler       g_sSamp1;
+uniform sampler       g_sSamp2;
+uniform layout(binding=2) sampler       g_sSamp3[2];
+uniform sampler       g_sSamp4[3];
+uniform sampler       g_sSamp5;
+
+uniform sampler       g_sSamp_unused1;
+uniform sampler       g_sSamp_unused2;
+
+uniform layout(binding=1) texture1D          g_tTex1;
+uniform texture1D  g_tTex2;
+uniform layout(binding=3) texture1D          g_tTex3[2];
+uniform texture1D          g_tTex4[3];
+uniform texture1D          g_tTex5;
+
+uniform layout(binding=0)  texture1D          g_tTex_unused1;
+uniform layout(binding=2)  texture1D          g_tTex_unused2;
+uniform texture1D          g_tTex_unused3;
+
+struct MyStruct_t {
+    int a;
+    float b;
+    vec3 c;
+};
+
+uniform layout(binding=4) myblock {
+    MyStruct_t mystruct;
+    vec4 myvec4_a;
+    vec4 myvec4_b;
+    ivec4 myint4_a;
+};
+
+vec4 Func1()
+{
+    return
+        texture(sampler1D(g_tTex1, g_sSamp1), 0.1) +
+        texture(sampler1D(g_tTex2, g_sSamp2), 0.2) +
+        texture(sampler1D(g_tTex3[0], g_sSamp3[0]), 0.3) +
+        texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3) +
+        texture(sampler1D(g_tTex4[1], g_sSamp4[1]), 0.4) +
+        texture(sampler1D(g_tTex4[2], g_sSamp4[2]), 0.4) +
+        texture(sampler1D(g_tTex5, g_sSamp5), 0.5) +
+        mystruct.c[1];
+}
+
+vec4 Func2()
+{
+    return
+        texture(sampler1D(g_tTex1, g_sSamp1), 0.1) +
+        texture(sampler1D(g_tTex3[1], g_sSamp3[1]), 0.3);
+}
+
+// Not called from entry point:
+vec4 Func2_unused()
+{
+    return
+        texture(sampler1D(g_tTex_unused1, g_sSamp_unused1), 1.1) +
+        texture(sampler1D(g_tTex_unused2, g_sSamp_unused2), 1.2);
+}
+
+out vec4 FragColor;
+
+void main()
+{
+    FragColor = Func1() + Func2();
+}
diff --git a/Test/spv.noWorkgroup.comp b/Test/spv.noWorkgroup.comp
new file mode 100644
index 0000000000000000000000000000000000000000..0c77f278fcd0c1f7d6058213c5c3538fbe57ba54
--- /dev/null
+++ b/Test/spv.noWorkgroup.comp
@@ -0,0 +1,7 @@
+#version 450
+
+layout(local_size_x_id = 18, local_size_y_id=10,local_size_z_id = 19) in;
+
+void main()
+{
+}
diff --git a/Test/spv.offsets.frag b/Test/spv.offsets.frag
new file mode 100755
index 0000000000000000000000000000000000000000..0a1c008c926e02207a3b5cc58f65c11d46211c96
--- /dev/null
+++ b/Test/spv.offsets.frag
@@ -0,0 +1,17 @@
+#version 450
+
+layout(set = 0, binding = 0, std140) uniform n1 {
+    layout(offset = 8)  int a;
+    layout(offset = 4)  int b;
+    layout(offset = 0)  int c;
+    layout(offset = 12) int d;
+} i1;
+
+layout(set = 0, binding = 1, std430) buffer n2 {
+    layout(offset = 32) vec3 e;
+                        vec3 f;
+    layout(offset = 16) vec3 g;
+    layout(offset = 0)  vec3 h;
+} i2;
+
+void main() {}
\ No newline at end of file
diff --git a/Test/spv.register.autoassign-2.frag b/Test/spv.register.autoassign-2.frag
new file mode 100644
index 0000000000000000000000000000000000000000..05c49250ee89f1ca1ccc60480a357c3adc3e68a8
--- /dev/null
+++ b/Test/spv.register.autoassign-2.frag
@@ -0,0 +1,15 @@
+
+SamplerState g_tSamp : register(s0);
+
+Texture2D g_tScene[2] : register(t0);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+void main(out PS_OUTPUT psout)
+{
+    psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3,0.4)) +
+                  g_tScene[1].Sample(g_tSamp, float2(0.3,0.4));
+}
diff --git a/Test/spv.register.autoassign.frag b/Test/spv.register.autoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..0d6f0b2d5becfa10bb34db73229696fd1f6a6dcb
--- /dev/null
+++ b/Test/spv.register.autoassign.frag
@@ -0,0 +1,71 @@
+
+SamplerState       g_sSamp1 : register(s0);
+SamplerState       g_sSamp2;
+SamplerState       g_sSamp3[2] : register(s2);
+SamplerState       g_sSamp4[3];
+SamplerState       g_sSamp5;
+
+SamplerState       g_sSamp_unused1;
+SamplerState       g_sSamp_unused2;
+
+Texture1D          g_tTex1 : register(t1);
+const uniform Texture1D g_tTex2;
+Texture1D          g_tTex3[2] : register(t3);
+Texture1D          g_tTex4[3];
+Texture1D          g_tTex5;
+
+Texture1D          g_tTex_unused1 : register(t0);
+Texture1D          g_tTex_unused2 : register(t2);
+Texture1D          g_tTex_unused3;
+
+struct MyStruct_t {
+    int a;
+    float b;
+    float3 c;
+};
+
+uniform MyStruct_t mystruct : register(b4);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform float4 myfloat4_a;
+uniform float4 myfloat4_b;
+uniform int4 myint4_a;
+
+float4 Func1()
+{
+    return
+        g_tTex1    . Sample(g_sSamp1,    0.1) +
+        g_tTex2    . Sample(g_sSamp2,    0.2) +
+        g_tTex3[0] . Sample(g_sSamp3[0], 0.3) +
+        g_tTex3[1] . Sample(g_sSamp3[1], 0.3) +
+        g_tTex4[1] . Sample(g_sSamp4[1], 0.4) +
+        g_tTex4[2] . Sample(g_sSamp4[2], 0.4) +
+        g_tTex5    . Sample(g_sSamp5,    0.5) +
+        mystruct.c[1];
+}
+
+float4 Func2()
+{
+    return
+        g_tTex1    . Sample(g_sSamp1,    0.1) +
+        g_tTex3[1] . Sample(g_sSamp3[1], 0.3);
+}
+
+// Not called from entry point:
+float4 Func2_unused()
+{
+    return
+        g_tTex_unused1 . Sample(g_sSamp_unused1, 1.1) +
+        g_tTex_unused2 . Sample(g_sSamp_unused2, 1.2);
+}
+
+PS_OUTPUT main_ep()
+{
+    PS_OUTPUT psout;
+    psout.Color = Func1() + Func2();
+    return psout;
+}
diff --git a/Test/spv.register.autoassign.rangetest.frag b/Test/spv.register.autoassign.rangetest.frag
new file mode 100644
index 0000000000000000000000000000000000000000..314c8e96cd36eae560185c1eb3cef8f4cfe6f118
--- /dev/null
+++ b/Test/spv.register.autoassign.rangetest.frag
@@ -0,0 +1,15 @@
+
+SamplerState g_tSamp : register(s5);
+
+Texture2D g_tScene[2] : register(t5);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+void main(out PS_OUTPUT psout)
+{
+    psout.Color = g_tScene[0].Sample(g_tSamp, float2(0.3, 0.3)) +
+                  g_tScene[1].Sample(g_tSamp, float2(0.3, 0.3));
+}
diff --git a/Test/spv.register.noautoassign.frag b/Test/spv.register.noautoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..0d6f0b2d5becfa10bb34db73229696fd1f6a6dcb
--- /dev/null
+++ b/Test/spv.register.noautoassign.frag
@@ -0,0 +1,71 @@
+
+SamplerState       g_sSamp1 : register(s0);
+SamplerState       g_sSamp2;
+SamplerState       g_sSamp3[2] : register(s2);
+SamplerState       g_sSamp4[3];
+SamplerState       g_sSamp5;
+
+SamplerState       g_sSamp_unused1;
+SamplerState       g_sSamp_unused2;
+
+Texture1D          g_tTex1 : register(t1);
+const uniform Texture1D g_tTex2;
+Texture1D          g_tTex3[2] : register(t3);
+Texture1D          g_tTex4[3];
+Texture1D          g_tTex5;
+
+Texture1D          g_tTex_unused1 : register(t0);
+Texture1D          g_tTex_unused2 : register(t2);
+Texture1D          g_tTex_unused3;
+
+struct MyStruct_t {
+    int a;
+    float b;
+    float3 c;
+};
+
+uniform MyStruct_t mystruct : register(b4);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform float4 myfloat4_a;
+uniform float4 myfloat4_b;
+uniform int4 myint4_a;
+
+float4 Func1()
+{
+    return
+        g_tTex1    . Sample(g_sSamp1,    0.1) +
+        g_tTex2    . Sample(g_sSamp2,    0.2) +
+        g_tTex3[0] . Sample(g_sSamp3[0], 0.3) +
+        g_tTex3[1] . Sample(g_sSamp3[1], 0.3) +
+        g_tTex4[1] . Sample(g_sSamp4[1], 0.4) +
+        g_tTex4[2] . Sample(g_sSamp4[2], 0.4) +
+        g_tTex5    . Sample(g_sSamp5,    0.5) +
+        mystruct.c[1];
+}
+
+float4 Func2()
+{
+    return
+        g_tTex1    . Sample(g_sSamp1,    0.1) +
+        g_tTex3[1] . Sample(g_sSamp3[1], 0.3);
+}
+
+// Not called from entry point:
+float4 Func2_unused()
+{
+    return
+        g_tTex_unused1 . Sample(g_sSamp_unused1, 1.1) +
+        g_tTex_unused2 . Sample(g_sSamp_unused2, 1.2);
+}
+
+PS_OUTPUT main_ep()
+{
+    PS_OUTPUT psout;
+    psout.Color = Func1() + Func2();
+    return psout;
+}
diff --git a/Test/spv.rw.autoassign.frag b/Test/spv.rw.autoassign.frag
new file mode 100644
index 0000000000000000000000000000000000000000..5c7d0d3f5ba93f300e7fb29a2b05be695af77646
--- /dev/null
+++ b/Test/spv.rw.autoassign.frag
@@ -0,0 +1,18 @@
+
+RWTexture1D <float> g_tTex1df1;
+RWBuffer <uint>     g_tBuf1du1;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+    float r00 = g_tTex1df1[0];
+    uint  r01 = g_tBuf1du1[0];
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/Test/spv.shaderDrawParams.vert b/Test/spv.shaderDrawParams.vert
new file mode 100644
index 0000000000000000000000000000000000000000..15ae2953a1646f875fda0f4dd205d1d0d2d93d19
--- /dev/null
+++ b/Test/spv.shaderDrawParams.vert
@@ -0,0 +1,16 @@
+#version 450 core
+
+#extension GL_ARB_shader_draw_parameters: enable
+
+layout(binding = 0) uniform Block
+{
+    vec4 pos[2][4];
+} block;
+
+void main()
+{
+    if ((gl_BaseVertexARB > 0) || (gl_BaseInstanceARB > 0))
+        gl_Position = block.pos[0][gl_DrawIDARB % 4];
+    else
+        gl_Position = block.pos[1][gl_DrawIDARB % 4];
+}
diff --git a/Test/tokenPaste.vert b/Test/tokenPaste.vert
new file mode 100644
index 0000000000000000000000000000000000000000..6d6212cc8623d3082396ebe879f7cbe839a93c77
--- /dev/null
+++ b/Test/tokenPaste.vert
@@ -0,0 +1,52 @@
+#version 450
+
+// side test verifies multiple rounds of argument expansion
+#define bear SecondExpansion
+#define mmmB bear
+#define mmmA(a) a
+int mmmA(mmmB);                    // mmmB -> bear, and then in mmmA(), bear -> SecondExpansion
+
+// pasting skips the first round of expansion
+#define mmcatmmdog PostPasteExpansion
+#define mmcat cat
+#define mmdog dog
+#define mmp(a,b) a## b
+int mmp(mmcat, mmdog);             // mmcat/mmdog not expanded, mmcatmmdog -> PostPasteExpansion
+
+// multi-token pre
+#define mmtokpastepre(a) a##27
+mmtokpastepre(float foo);          // should declare "float foo27;"
+
+// multi-token post
+#define mmtokpastepost(a) uni ##a
+mmtokpastepost(form float foo155); // should declare "uniform float foo155;"
+
+// non-first argument
+#define foo ShouldntExpandToThis
+#define semi ;
+#define bothpaste(a,b) a##b
+float bothpaste(foo, 719);          // should declare "float foo719;"
+#define secpaste(a,b) a bar ## b
+secpaste(uniform float, foo semi)   // should declare "uniform float barfoo;"
+
+// no args
+#define noArg fl##oat
+noArg argless;
+
+// bad location
+#define bad1 ## float
+bad1 dc1;
+#define bad2 float ##
+bad2 dc2;
+
+// multiple ##
+#define multiPaste(a, b, c) a##or##b flo##at foo##c
+multiPaste(unif, m, 875);
+
+// too long
+#define simplePaste(a,b) a##b
+// 1020 + 5 characters
+float simplePaste(ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345, 12345);
+
+// non-identifiers
+int a = simplePaste(11,12);
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 6325fd4aee05db7bab10c6e37aee7070b13054f8..95d4bdd8fcd74edcfa8e9c66a5f550ec36424e9d 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -10,6 +10,7 @@ set(SOURCES
     MachineIndependent/glslang.y
     MachineIndependent/glslang_tab.cpp
     MachineIndependent/Constant.cpp
+    MachineIndependent/iomapper.cpp
     MachineIndependent/InfoSink.cpp
     MachineIndependent/Initialize.cpp
     MachineIndependent/IntermTraverse.cpp
@@ -55,6 +56,7 @@ set(HEADERS
     MachineIndependent/glslang_tab.cpp.h
     MachineIndependent/gl_types.h
     MachineIndependent/Initialize.h
+    MachineIndependent/iomapper.h
     MachineIndependent/LiveTraverser.h
     MachineIndependent/localintermediate.h
     MachineIndependent/ParseHelper.h
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 64ef80c923aff7899a553b35345f1695df911656..f70744067215939f8e3c6254713662b18bc5d80a 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -46,6 +46,9 @@ enum TBasicType {
     EbtVoid,
     EbtFloat,
     EbtDouble,
+#ifdef AMD_EXTENSIONS
+    EbtFloat16,
+#endif
     EbtInt,
     EbtUint,
     EbtInt64,
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index 636645e79f905f9f4a3821df7a441d2e5d23c591..e082356cc74b4ea8a29ce8a800d7745d13df3a8c 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -68,6 +68,10 @@ inline long long int strtoll (const char* str, char** endptr, int base)
 {
   return _strtoi64(str, endptr, base); 
 }
+inline unsigned long long int strtoull (const char* str, char** endptr, int base)
+{
+  return _strtoui64(str, endptr, base);
+}
 inline long long int atoll (const char* str)
 {
   return strtoll(str, NULL, 10);
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 8ee2c84ccf29d060e4866420db399427bb827c19..ec6aff1171be29f811523f5a6567155efacaf392 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -538,7 +538,7 @@ private:
 };
 
 // Encapsulate having a pointer to an array of TConstUnion,
-// which only needs to be allocated if it's size is going to be
+// which only needs to be allocated if its size is going to be
 // bigger than 0.
 //
 // One convenience is being able to use [] to go inside the array, instead
diff --git a/glslang/Include/InfoSink.h b/glslang/Include/InfoSink.h
index aa02f914a55b7edfc9f67793de11b4228ad8be37..0cbd99bdaae5d09bd2cbf8db131b7a6ce3b25dbe 100644
--- a/glslang/Include/InfoSink.h
+++ b/glslang/Include/InfoSink.h
@@ -74,7 +74,6 @@ public:
     TInfoSinkBase& operator<<(const char* s)           { append(s); return *this; }
     TInfoSinkBase& operator<<(int n)                   { append(String(n)); return *this; }
     TInfoSinkBase& operator<<(unsigned int n)          { append(String(n)); return *this; }
-    TInfoSinkBase& operator<<(long unsigned int n)     { append(String(n)); return *this; }
     TInfoSinkBase& operator<<(float n)                 { const int size = 40; char buf[size]; 
                                                          snprintf(buf, size, (fabs(n) > 1e-8 && fabs(n) < 1e8) || n == 0.0f ? "%f" : "%g", n);
                                                          append(buf); 
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 6c2ded8e043952ae133178eccd7d716daeea4cf3..8745c7a9422c62d3dcf90244e2b2723175eb25c2 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -78,6 +78,7 @@ struct TSampler {   // misnomer now; includes images, textures without sampler,
     bool   combined : 1;  // true means texture is combined with a sampler, false means texture with no sampler
     bool    sampler : 1;  // true means a pure sampler, other fields should be clear()
     bool   external : 1;  // GL_OES_EGL_image_external
+    unsigned int vectorSize : 3;  // return vector size.  TODO: support arbitrary types.
 
     bool isImage()       const { return image && dim != EsdSubpass; }
     bool isSubpass()     const { return dim == EsdSubpass; }
@@ -99,6 +100,7 @@ struct TSampler {   // misnomer now; includes images, textures without sampler,
         combined = false;
         sampler = false;
         external = false;
+        vectorSize = 4;
     }
 
     // make a combined sampler and texture
@@ -164,7 +166,8 @@ struct TSampler {   // misnomer now; includes images, textures without sampler,
               image == right.image &&
            combined == right.combined &&
             sampler == right.sampler &&
-           external == right.external;
+           external == right.external &&
+         vectorSize == right.vectorSize;
     }
 
     bool operator!=(const TSampler& right) const
@@ -185,8 +188,6 @@ struct TSampler {   // misnomer now; includes images, textures without sampler,
         case EbtFloat:               break;
         case EbtInt:  s.append("i"); break;
         case EbtUint: s.append("u"); break;
-        case EbtInt64:  s.append("i64"); break;
-        case EbtUint64: s.append("u64"); break;
         default:  break;  // some compilers want this
         }
         if (image) {
@@ -623,8 +624,8 @@ public:
                  unsigned int layoutSet                 : 7;
     static const unsigned int layoutSetEnd         =   0x3F;
 
-                 unsigned int layoutBinding             : 8;
-    static const unsigned int layoutBindingEnd    =    0xFF;
+                 unsigned int layoutBinding            : 16;
+    static const unsigned int layoutBindingEnd    =  0xFFFF;
 
                  unsigned int layoutIndex              :  8;
     static const unsigned int layoutIndexEnd    =      0xFF;
@@ -1204,7 +1205,7 @@ public:
             typeName = NewPoolTString(copyOf.typeName->c_str());
     }
 
-    TType* clone()
+    TType* clone() const
     {
         TType *newType = new TType();
         newType->deepCopy(*this);
@@ -1270,6 +1271,7 @@ public:
     virtual       TArraySizes& getArraySizes()       { assert(arraySizes != nullptr); return *arraySizes; }
 
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
+    virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
     virtual bool isVector() const { return vectorSize > 1 || vector1; }
     virtual bool isMatrix() const { return matrixCols ? true : false; }
     virtual bool isArray()  const { return arraySizes != nullptr; }
@@ -1277,7 +1279,11 @@ public:
     virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
     virtual bool isRuntimeSizedArray()    const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
     virtual bool isStruct() const { return structure != nullptr; }
+#ifdef AMD_EXTENSIONS
+    virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
+#else
     virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; }
+#endif
 
     virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; }
 
@@ -1359,6 +1365,9 @@ public:
         case EbtVoid:
         case EbtFloat:
         case EbtDouble:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+#endif
         case EbtInt:
         case EbtUint:
         case EbtInt64:
@@ -1451,6 +1460,9 @@ public:
         case EbtVoid:              return "void";
         case EbtFloat:             return "float";
         case EbtDouble:            return "double";
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:           return "float16_t";
+#endif
         case EbtInt:               return "int";
         case EbtUint:              return "uint";
         case EbtInt64:             return "int64_t";
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 5166e3d51bc90dd1d6c345c0d4cb59eb0414e93e..8f7ffcc0daa308cc9dc3c25bf421cd91e1e4900b 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -46,12 +46,19 @@
 #ifndef __INTERMEDIATE_H
 #define __INTERMEDIATE_H
 
+#if _MSC_VER >= 1900
+    #pragma warning(disable : 4464) // relative include path contains '..'
+    #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted
+#endif
+
 #include "../Include/Common.h"
 #include "../Include/Types.h"
 #include "../Include/ConstantUnion.h"
 
 namespace glslang {
 
+class TIntermediate;
+
 //
 // Operators used by the high-level (parse tree) representation.
 //
@@ -119,6 +126,22 @@ enum TOperator {
     EOpConvFloatToUint64,
     EOpConvDoubleToUint64,
     EOpConvInt64ToUint64,
+#ifdef AMD_EXTENSIONS
+    EOpConvBoolToFloat16,
+    EOpConvIntToFloat16,
+    EOpConvUintToFloat16,
+    EOpConvFloatToFloat16,
+    EOpConvDoubleToFloat16,
+    EOpConvInt64ToFloat16,
+    EOpConvUint64ToFloat16,
+    EOpConvFloat16ToBool,
+    EOpConvFloat16ToInt,
+    EOpConvFloat16ToUint,
+    EOpConvFloat16ToFloat,
+    EOpConvFloat16ToDouble,
+    EOpConvFloat16ToInt64,
+    EOpConvFloat16ToUint64,
+#endif
 
     //
     // binary operations
@@ -236,6 +259,10 @@ enum TOperator {
     EOpUnpackInt2x32,
     EOpPackUint2x32,
     EOpUnpackUint2x32,
+#ifdef AMD_EXTENSIONS
+    EOpPackFloat2x16,
+    EOpUnpackFloat2x16,
+#endif
 
     EOpLength,
     EOpDistance,
@@ -396,6 +423,21 @@ enum TOperator {
     EOpConstructDMat4x2,
     EOpConstructDMat4x3,
     EOpConstructDMat4x4,
+#ifdef AMD_EXTENSIONS
+    EOpConstructFloat16,
+    EOpConstructF16Vec2,
+    EOpConstructF16Vec3,
+    EOpConstructF16Vec4,
+    EOpConstructF16Mat2x2,
+    EOpConstructF16Mat2x3,
+    EOpConstructF16Mat2x4,
+    EOpConstructF16Mat3x2,
+    EOpConstructF16Mat3x3,
+    EOpConstructF16Mat3x4,
+    EOpConstructF16Mat4x2,
+    EOpConstructF16Mat4x3,
+    EOpConstructF16Mat4x4,
+#endif
     EOpConstructStruct,
     EOpConstructTextureSampler,
     EOpConstructGuardEnd,
@@ -579,6 +621,10 @@ enum TOperator {
     EOpMethodGatherCmpGreen,             // ...
     EOpMethodGatherCmpBlue,              // ...
     EOpMethodGatherCmpAlpha,             // ...
+
+    // geometry methods
+    EOpMethodAppend,                     // Geometry shader methods
+    EOpMethodRestartStrip,               // ...
 };
 
 class TIntermTraverser;
@@ -810,7 +856,7 @@ public:
     virtual       TIntermOperator* getAsOperator()       { return this; }
     virtual const TIntermOperator* getAsOperator() const { return this; }
     TOperator getOp() const { return op; }
-    virtual bool promote() { return true; }
+    void setOp(TOperator newOp) { op = newOp; }
     bool modifiesState() const;
     bool isConstructor() const;
     bool isTexture()  const { return op > EOpTextureGuardBegin  && op < EOpTextureGuardEnd; }
@@ -989,7 +1035,6 @@ public:
     virtual TIntermTyped* getRight() const { return right; }
     virtual       TIntermBinary* getAsBinaryNode()       { return this; }
     virtual const TIntermBinary* getAsBinaryNode() const { return this; }
-    virtual bool promote();
     virtual void updatePrecision();
 protected:
     TIntermTyped* left;
@@ -1009,7 +1054,6 @@ public:
     virtual const TIntermTyped* getOperand() const { return operand; }
     virtual       TIntermUnary* getAsUnaryNode()       { return this; }
     virtual const TIntermUnary* getAsUnaryNode() const { return this; }
-    virtual bool promote();
     virtual void updatePrecision();
 protected:
     TIntermTyped* operand;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 6850d6fcd4c7a4716b028a85a863be9a02c01ec7..3cbc006a73b7a703c9d4662b4cf6e33e22dd72fe 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1503"
-#define GLSLANG_DATE "20-Sep-2016"
+#define GLSLANG_REVISION "Overload400-PrecQual.1704"
+#define GLSLANG_DATE "19-Dec-2016"
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 4adfd4704ef8d05aff25388a8730bb364e325da5..61b6f67e794e0813a1d893ae5534da5a8d8acdc9 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -57,7 +57,7 @@ bool isNan(double x)
     u.d = x;
     int bitPatternL = u.i[0];
     int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff80000) == 0x7ff80000 && 
+    return (bitPatternH & 0x7ff80000) == 0x7ff80000 &&
            ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0);
 }
 
@@ -68,7 +68,7 @@ bool isInf(double x)
     u.d = x;
     int bitPatternL = u.i[0];
     int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff00000) == 0x7ff00000 && 
+    return (bitPatternH & 0x7ff00000) == 0x7ff00000 &&
            (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0;
 }
 
@@ -131,7 +131,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
             TConstUnionArray smearedArray(newComps, rightNode->getConstArray()[0]);
             rightUnionArray = smearedArray;
         } else if (constComps > 1 && newComps == 1) {
-            // for a case like vec4 f = 1.2 + vec4(2,3,4,5);            
+            // for a case like vec4 f = 1.2 + vec4(2,3,4,5);
             newComps = constComps;
             rightUnionArray = rightNode->getConstArray();
             TConstUnionArray smearedArray(newComps, getConstArray()[0]);
@@ -176,6 +176,9 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
             switch (getType().getBasicType()) {
             case EbtDouble:
             case EbtFloat:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
                 break;
 
@@ -450,6 +453,9 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
         case EOpNegative:
             switch (getType().getBasicType()) {
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
             case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
             case EbtInt:   newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
             case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
@@ -620,7 +626,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
 //
 // Do constant folding for an aggregate node that has all its children
 // as constants and an operator that requires constant folding.
-// 
+//
 TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
 {
     if (! areAllChildConst(aggrNode))
@@ -688,6 +694,9 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
     // Second, do the actual folding
 
     bool isFloatingPoint = children[0]->getAsTyped()->getBasicType() == EbtFloat ||
+#ifdef AMD_EXTENSIONS
+                           children[0]->getAsTyped()->getBasicType() == EbtFloat16 ||
+#endif
                            children[0]->getAsTyped()->getBasicType() == EbtDouble;
     bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt ||
                     children[0]->getAsTyped()->getBasicType() == EbtInt64;
@@ -793,7 +802,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
                 break;
             case EOpSmoothStep:
             {
-                double t = (childConstUnions[2][arg2comp].getDConst() - childConstUnions[0][arg0comp].getDConst()) / 
+                double t = (childConstUnions[2][arg2comp].getDConst() - childConstUnions[0][arg0comp].getDConst()) /
                            (childConstUnions[1][arg1comp].getDConst() - childConstUnions[0][arg0comp].getDConst());
                 if (t < 0.0)
                     t = 0.0;
@@ -832,7 +841,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
             newConstArray[2] = childConstUnions[0][0] * childConstUnions[1][1] - childConstUnions[0][1] * childConstUnions[1][0];
             break;
         case EOpFaceForward:
-            // If dot(Nref, I) < 0 return N, otherwise return –N:  Arguments are (N, I, Nref).
+            // If dot(Nref, I) < 0 return N, otherwise return -N:  Arguments are (N, I, Nref).
             dot = childConstUnions[1].dot(childConstUnions[2]);
             for (int comp = 0; comp < numComps; ++comp) {
                 if (dot < 0.0)
@@ -959,7 +968,7 @@ TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, cons
 }
 
 //
-// Make a constant vector node or constant scalar node, representing a given 
+// Make a constant vector node or constant scalar node, representing a given
 // constant vector and constant swizzle into it.
 //
 TIntermTyped* TIntermediate::foldSwizzle(TIntermTyped* node, TVectorFields& fields, const TSourceLoc& loc)
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 6d2e9c076d76b3db5a6e23c62b3f1e20529c4cad..c8739535e7bdd5cca930822d6f948b9a83ddeec3 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -85,8 +85,6 @@ TBuiltIns::TBuiltIns()
     prefixes[EbtFloat] =  "";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
-    prefixes[EbtInt64]  = "i64";
-    prefixes[EbtUint64] = "u64";
     postfixes[2] = "2";
     postfixes[3] = "3";
     postfixes[4] = "4";
@@ -875,6 +873,21 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "uvec3 mid3(uvec3, uvec3, uvec3);"
             "uvec4 mid3(uvec4, uvec4, uvec4);"
 
+            "float16_t min3(float16_t, float16_t, float16_t);"
+            "f16vec2   min3(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   min3(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   min3(f16vec4,   f16vec4,   f16vec4);"
+
+            "float16_t max3(float16_t, float16_t, float16_t);"
+            "f16vec2   max3(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   max3(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   max3(f16vec4,   f16vec4,   f16vec4);"
+
+            "float16_t mid3(float16_t, float16_t, float16_t);"
+            "f16vec2   mid3(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   mid3(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   mid3(f16vec4,   f16vec4,   f16vec4);"
+
             "\n"
         );
     }
@@ -1709,6 +1722,354 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
             "\n");
     }
+
+    // GL_AMD_gpu_shader_half_float
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "float16_t radians(float16_t);"
+            "f16vec2   radians(f16vec2);"
+            "f16vec3   radians(f16vec3);"
+            "f16vec4   radians(f16vec4);"
+
+            "float16_t degrees(float16_t);"
+            "f16vec2   degrees(f16vec2);"
+            "f16vec3   degrees(f16vec3);"
+            "f16vec4   degrees(f16vec4);"
+
+            "float16_t sin(float16_t);"
+            "f16vec2   sin(f16vec2);"
+            "f16vec3   sin(f16vec3);"
+            "f16vec4   sin(f16vec4);"
+
+            "float16_t cos(float16_t);"
+            "f16vec2   cos(f16vec2);"
+            "f16vec3   cos(f16vec3);"
+            "f16vec4   cos(f16vec4);"
+
+            "float16_t tan(float16_t);"
+            "f16vec2   tan(f16vec2);"
+            "f16vec3   tan(f16vec3);"
+            "f16vec4   tan(f16vec4);"
+
+            "float16_t asin(float16_t);"
+            "f16vec2   asin(f16vec2);"
+            "f16vec3   asin(f16vec3);"
+            "f16vec4   asin(f16vec4);"
+
+            "float16_t acos(float16_t);"
+            "f16vec2   acos(f16vec2);"
+            "f16vec3   acos(f16vec3);"
+            "f16vec4   acos(f16vec4);"
+
+            "float16_t atan(float16_t, float16_t);"
+            "f16vec2   atan(f16vec2,   f16vec2);"
+            "f16vec3   atan(f16vec3,   f16vec3);"
+            "f16vec4   atan(f16vec4,   f16vec4);"
+
+            "float16_t atan(float16_t);"
+            "f16vec2   atan(f16vec2);"
+            "f16vec3   atan(f16vec3);"
+            "f16vec4   atan(f16vec4);"
+
+            "float16_t sinh(float16_t);"
+            "f16vec2   sinh(f16vec2);"
+            "f16vec3   sinh(f16vec3);"
+            "f16vec4   sinh(f16vec4);"
+
+            "float16_t cosh(float16_t);"
+            "f16vec2   cosh(f16vec2);"
+            "f16vec3   cosh(f16vec3);"
+            "f16vec4   cosh(f16vec4);"
+
+            "float16_t tanh(float16_t);"
+            "f16vec2   tanh(f16vec2);"
+            "f16vec3   tanh(f16vec3);"
+            "f16vec4   tanh(f16vec4);"
+
+            "float16_t asinh(float16_t);"
+            "f16vec2   asinh(f16vec2);"
+            "f16vec3   asinh(f16vec3);"
+            "f16vec4   asinh(f16vec4);"
+
+            "float16_t acosh(float16_t);"
+            "f16vec2   acosh(f16vec2);"
+            "f16vec3   acosh(f16vec3);"
+            "f16vec4   acosh(f16vec4);"
+
+            "float16_t atanh(float16_t);"
+            "f16vec2   atanh(f16vec2);"
+            "f16vec3   atanh(f16vec3);"
+            "f16vec4   atanh(f16vec4);"
+
+            "float16_t pow(float16_t, float16_t);"
+            "f16vec2   pow(f16vec2,   f16vec2);"
+            "f16vec3   pow(f16vec3,   f16vec3);"
+            "f16vec4   pow(f16vec4,   f16vec4);"
+
+            "float16_t exp(float16_t);"
+            "f16vec2   exp(f16vec2);"
+            "f16vec3   exp(f16vec3);"
+            "f16vec4   exp(f16vec4);"
+
+            "float16_t log(float16_t);"
+            "f16vec2   log(f16vec2);"
+            "f16vec3   log(f16vec3);"
+            "f16vec4   log(f16vec4);"
+
+            "float16_t exp2(float16_t);"
+            "f16vec2   exp2(f16vec2);"
+            "f16vec3   exp2(f16vec3);"
+            "f16vec4   exp2(f16vec4);"
+
+            "float16_t log2(float16_t);"
+            "f16vec2   log2(f16vec2);"
+            "f16vec3   log2(f16vec3);"
+            "f16vec4   log2(f16vec4);"
+
+            "float16_t sqrt(float16_t);"
+            "f16vec2   sqrt(f16vec2);"
+            "f16vec3   sqrt(f16vec3);"
+            "f16vec4   sqrt(f16vec4);"
+
+            "float16_t inversesqrt(float16_t);"
+            "f16vec2   inversesqrt(f16vec2);"
+            "f16vec3   inversesqrt(f16vec3);"
+            "f16vec4   inversesqrt(f16vec4);"
+
+            "float16_t abs(float16_t);"
+            "f16vec2   abs(f16vec2);"
+            "f16vec3   abs(f16vec3);"
+            "f16vec4   abs(f16vec4);"
+
+            "float16_t sign(float16_t);"
+            "f16vec2   sign(f16vec2);"
+            "f16vec3   sign(f16vec3);"
+            "f16vec4   sign(f16vec4);"
+
+            "float16_t floor(float16_t);"
+            "f16vec2   floor(f16vec2);"
+            "f16vec3   floor(f16vec3);"
+            "f16vec4   floor(f16vec4);"
+
+            "float16_t trunc(float16_t);"
+            "f16vec2   trunc(f16vec2);"
+            "f16vec3   trunc(f16vec3);"
+            "f16vec4   trunc(f16vec4);"
+
+            "float16_t round(float16_t);"
+            "f16vec2   round(f16vec2);"
+            "f16vec3   round(f16vec3);"
+            "f16vec4   round(f16vec4);"
+
+            "float16_t roundEven(float16_t);"
+            "f16vec2   roundEven(f16vec2);"
+            "f16vec3   roundEven(f16vec3);"
+            "f16vec4   roundEven(f16vec4);"
+
+            "float16_t ceil(float16_t);"
+            "f16vec2   ceil(f16vec2);"
+            "f16vec3   ceil(f16vec3);"
+            "f16vec4   ceil(f16vec4);"
+
+            "float16_t fract(float16_t);"
+            "f16vec2   fract(f16vec2);"
+            "f16vec3   fract(f16vec3);"
+            "f16vec4   fract(f16vec4);"
+
+            "float16_t mod(float16_t, float16_t);"
+            "f16vec2   mod(f16vec2,   float16_t);"
+            "f16vec3   mod(f16vec3,   float16_t);"
+            "f16vec4   mod(f16vec4,   float16_t);"
+            "f16vec2   mod(f16vec2,   f16vec2);"
+            "f16vec3   mod(f16vec3,   f16vec3);"
+            "f16vec4   mod(f16vec4,   f16vec4);"
+
+            "float16_t modf(float16_t, out float16_t);"
+            "f16vec2   modf(f16vec2,   out f16vec2);"
+            "f16vec3   modf(f16vec3,   out f16vec3);"
+            "f16vec4   modf(f16vec4,   out f16vec4);"
+
+            "float16_t min(float16_t, float16_t);"
+            "f16vec2   min(f16vec2,   float16_t);"
+            "f16vec3   min(f16vec3,   float16_t);"
+            "f16vec4   min(f16vec4,   float16_t);"
+            "f16vec2   min(f16vec2,   f16vec2);"
+            "f16vec3   min(f16vec3,   f16vec3);"
+            "f16vec4   min(f16vec4,   f16vec4);"
+
+            "float16_t max(float16_t, float16_t);"
+            "f16vec2   max(f16vec2,   float16_t);"
+            "f16vec3   max(f16vec3,   float16_t);"
+            "f16vec4   max(f16vec4,   float16_t);"
+            "f16vec2   max(f16vec2,   f16vec2);"
+            "f16vec3   max(f16vec3,   f16vec3);"
+            "f16vec4   max(f16vec4,   f16vec4);"
+
+            "float16_t clamp(float16_t, float16_t, float16_t);"
+            "f16vec2   clamp(f16vec2,   float16_t, float16_t);"
+            "f16vec3   clamp(f16vec3,   float16_t, float16_t);"
+            "f16vec4   clamp(f16vec4,   float16_t, float16_t);"
+            "f16vec2   clamp(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   clamp(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   clamp(f16vec4,   f16vec4,   f16vec4);"
+
+            "float16_t mix(float16_t, float16_t, float16_t);"
+            "f16vec2   mix(f16vec2,   f16vec2,   float16_t);"
+            "f16vec3   mix(f16vec3,   f16vec3,   float16_t);"
+            "f16vec4   mix(f16vec4,   f16vec4,   float16_t);"
+            "f16vec2   mix(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   mix(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   mix(f16vec4,   f16vec4,   f16vec4);"
+            "float16_t mix(float16_t, float16_t, bool);"
+            "f16vec2   mix(f16vec2,   f16vec2,   bvec2);"
+            "f16vec3   mix(f16vec3,   f16vec3,   bvec3);"
+            "f16vec4   mix(f16vec4,   f16vec4,   bvec4);"
+
+            "float16_t step(float16_t, float16_t);"
+            "f16vec2   step(f16vec2,   f16vec2);"
+            "f16vec3   step(f16vec3,   f16vec3);"
+            "f16vec4   step(f16vec4,   f16vec4);"
+            "f16vec2   step(float16_t, f16vec2);"
+            "f16vec3   step(float16_t, f16vec3);"
+            "f16vec4   step(float16_t, f16vec4);"
+
+            "float16_t smoothstep(float16_t, float16_t, float16_t);"
+            "f16vec2   smoothstep(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   smoothstep(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   smoothstep(f16vec4,   f16vec4,   f16vec4);"
+            "f16vec2   smoothstep(float16_t, float16_t, f16vec2);"
+            "f16vec3   smoothstep(float16_t, float16_t, f16vec3);"
+            "f16vec4   smoothstep(float16_t, float16_t, f16vec4);"
+
+            "bool  isnan(float16_t);"
+            "bvec2 isnan(f16vec2);"
+            "bvec3 isnan(f16vec3);"
+            "bvec4 isnan(f16vec4);"
+
+            "bool  isinf(float16_t);"
+            "bvec2 isinf(f16vec2);"
+            "bvec3 isinf(f16vec3);"
+            "bvec4 isinf(f16vec4);"
+
+            "float16_t fma(float16_t, float16_t, float16_t);"
+            "f16vec2   fma(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   fma(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   fma(f16vec4,   f16vec4,   f16vec4);"
+
+            "float16_t frexp(float16_t, out int);"
+            "f16vec2   frexp(f16vec2,   out ivec2);"
+            "f16vec3   frexp(f16vec3,   out ivec3);"
+            "f16vec4   frexp(f16vec4,   out ivec4);"
+
+            "float16_t ldexp(float16_t, in int);"
+            "f16vec2   ldexp(f16vec2,   in ivec2);"
+            "f16vec3   ldexp(f16vec3,   in ivec3);"
+            "f16vec4   ldexp(f16vec4,   in ivec4);"
+
+            "uint    packFloat2x16(f16vec2);"
+            "f16vec2 unpackFloat2x16(uint);"
+
+            "float16_t length(float16_t);"
+            "float16_t length(f16vec2);"
+            "float16_t length(f16vec3);"
+            "float16_t length(f16vec4);"
+
+            "float16_t distance(float16_t, float16_t);"
+            "float16_t distance(f16vec2,   f16vec2);"
+            "float16_t distance(f16vec3,   f16vec3);"
+            "float16_t distance(f16vec4,   f16vec4);"
+
+            "float16_t dot(float16_t, float16_t);"
+            "float16_t dot(f16vec2,   f16vec2);"
+            "float16_t dot(f16vec3,   f16vec3);"
+            "float16_t dot(f16vec4,   f16vec4);"
+
+            "f16vec3 cross(f16vec3, f16vec3);"
+
+            "float16_t normalize(float16_t);"
+            "f16vec2   normalize(f16vec2);"
+            "f16vec3   normalize(f16vec3);"
+            "f16vec4   normalize(f16vec4);"
+
+            "float16_t faceforward(float16_t, float16_t, float16_t);"
+            "f16vec2   faceforward(f16vec2,   f16vec2,   f16vec2);"
+            "f16vec3   faceforward(f16vec3,   f16vec3,   f16vec3);"
+            "f16vec4   faceforward(f16vec4,   f16vec4,   f16vec4);"
+
+            "float16_t reflect(float16_t, float16_t);"
+            "f16vec2   reflect(f16vec2,   f16vec2);"
+            "f16vec3   reflect(f16vec3,   f16vec3);"
+            "f16vec4   reflect(f16vec4,   f16vec4);"
+
+            "float16_t refract(float16_t, float16_t, float16_t);"
+            "f16vec2   refract(f16vec2,   f16vec2,   float16_t);"
+            "f16vec3   refract(f16vec3,   f16vec3,   float16_t);"
+            "f16vec4   refract(f16vec4,   f16vec4,   float16_t);"
+
+            "f16mat2   matrixCompMult(f16mat2,   f16mat2);"
+            "f16mat3   matrixCompMult(f16mat3,   f16mat3);"
+            "f16mat4   matrixCompMult(f16mat4,   f16mat4);"
+            "f16mat2x3 matrixCompMult(f16mat2x3, f16mat2x3);"
+            "f16mat2x4 matrixCompMult(f16mat2x4, f16mat2x4);"
+            "f16mat3x2 matrixCompMult(f16mat3x2, f16mat3x2);"
+            "f16mat3x4 matrixCompMult(f16mat3x4, f16mat3x4);"
+            "f16mat4x2 matrixCompMult(f16mat4x2, f16mat4x2);"
+            "f16mat4x3 matrixCompMult(f16mat4x3, f16mat4x3);"
+
+            "f16mat2   outerProduct(f16vec2, f16vec2);"
+            "f16mat3   outerProduct(f16vec3, f16vec3);"
+            "f16mat4   outerProduct(f16vec4, f16vec4);"
+            "f16mat2x3 outerProduct(f16vec3, f16vec2);"
+            "f16mat3x2 outerProduct(f16vec2, f16vec3);"
+            "f16mat2x4 outerProduct(f16vec4, f16vec2);"
+            "f16mat4x2 outerProduct(f16vec2, f16vec4);"
+            "f16mat3x4 outerProduct(f16vec4, f16vec3);"
+            "f16mat4x3 outerProduct(f16vec3, f16vec4);"
+
+            "f16mat2   transpose(f16mat2);"
+            "f16mat3   transpose(f16mat3);"
+            "f16mat4   transpose(f16mat4);"
+            "f16mat2x3 transpose(f16mat3x2);"
+            "f16mat3x2 transpose(f16mat2x3);"
+            "f16mat2x4 transpose(f16mat4x2);"
+            "f16mat4x2 transpose(f16mat2x4);"
+            "f16mat3x4 transpose(f16mat4x3);"
+            "f16mat4x3 transpose(f16mat3x4);"
+
+            "float16_t determinant(f16mat2);"
+            "float16_t determinant(f16mat3);"
+            "float16_t determinant(f16mat4);"
+
+            "f16mat2 inverse(f16mat2);"
+            "f16mat3 inverse(f16mat3);"
+            "f16mat4 inverse(f16mat4);"
+
+            "bvec2 lessThan(f16vec2, f16vec2);"
+            "bvec3 lessThan(f16vec3, f16vec3);"
+            "bvec4 lessThan(f16vec4, f16vec4);"
+
+            "bvec2 lessThanEqual(f16vec2, f16vec2);"
+            "bvec3 lessThanEqual(f16vec3, f16vec3);"
+            "bvec4 lessThanEqual(f16vec4, f16vec4);"
+
+            "bvec2 greaterThan(f16vec2, f16vec2);"
+            "bvec3 greaterThan(f16vec3, f16vec3);"
+            "bvec4 greaterThan(f16vec4, f16vec4);"
+
+            "bvec2 greaterThanEqual(f16vec2, f16vec2);"
+            "bvec3 greaterThanEqual(f16vec3, f16vec3);"
+            "bvec4 greaterThanEqual(f16vec4, f16vec4);"
+
+            "bvec2 equal(f16vec2, f16vec2);"
+            "bvec3 equal(f16vec3, f16vec3);"
+            "bvec4 equal(f16vec4, f16vec4);"
+
+            "bvec2 notEqual(f16vec2, f16vec2);"
+            "bvec3 notEqual(f16vec3, f16vec3);"
+            "bvec4 notEqual(f16vec4, f16vec4);"
+
+            "\n");
+    }
 #endif
 
     //============================================================================
@@ -1975,6 +2336,77 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "uvec3 interpolateAtVertexAMD(uvec3, uint);"
             "uvec4 interpolateAtVertexAMD(uvec4, uint);"
 
+            "float16_t interpolateAtVertexAMD(float16_t, uint);"
+            "f16vec2   interpolateAtVertexAMD(f16vec2,   uint);"
+            "f16vec3   interpolateAtVertexAMD(f16vec3,   uint);"
+            "f16vec4   interpolateAtVertexAMD(f16vec4,   uint);"
+
+            "\n");
+    }
+
+    // GL_AMD_gpu_shader_half_float
+    if (profile != EEsProfile && version >= 450) {
+        stageBuiltins[EShLangFragment].append(
+            "float16_t dFdx(float16_t);"
+            "f16vec2   dFdx(f16vec2);"
+            "f16vec3   dFdx(f16vec3);"
+            "f16vec4   dFdx(f16vec4);"
+
+            "float16_t dFdy(float16_t);"
+            "f16vec2   dFdy(f16vec2);"
+            "f16vec3   dFdy(f16vec3);"
+            "f16vec4   dFdy(f16vec4);"
+
+            "float16_t dFdxFine(float16_t);"
+            "f16vec2   dFdxFine(f16vec2);"
+            "f16vec3   dFdxFine(f16vec3);"
+            "f16vec4   dFdxFine(f16vec4);"
+
+            "float16_t dFdyFine(float16_t);"
+            "f16vec2   dFdyFine(f16vec2);"
+            "f16vec3   dFdyFine(f16vec3);"
+            "f16vec4   dFdyFine(f16vec4);"
+
+            "float16_t dFdxCoarse(float16_t);"
+            "f16vec2   dFdxCoarse(f16vec2);"
+            "f16vec3   dFdxCoarse(f16vec3);"
+            "f16vec4   dFdxCoarse(f16vec4);"
+
+            "float16_t dFdyCoarse(float16_t);"
+            "f16vec2   dFdyCoarse(f16vec2);"
+            "f16vec3   dFdyCoarse(f16vec3);"
+            "f16vec4   dFdyCoarse(f16vec4);"
+
+            "float16_t fwidth(float16_t);"
+            "f16vec2   fwidth(f16vec2);"
+            "f16vec3   fwidth(f16vec3);"
+            "f16vec4   fwidth(f16vec4);"
+
+            "float16_t fwidthFine(float16_t);"
+            "f16vec2   fwidthFine(f16vec2);"
+            "f16vec3   fwidthFine(f16vec3);"
+            "f16vec4   fwidthFine(f16vec4);"
+
+            "float16_t fwidthCoarse(float16_t);"
+            "f16vec2   fwidthCoarse(f16vec2);"
+            "f16vec3   fwidthCoarse(f16vec3);"
+            "f16vec4   fwidthCoarse(f16vec4);"
+
+            "float16_t interpolateAtCentroid(float16_t);"
+            "f16vec2   interpolateAtCentroid(f16vec2);"
+            "f16vec3   interpolateAtCentroid(f16vec3);"
+            "f16vec4   interpolateAtCentroid(f16vec4);"
+
+            "float16_t interpolateAtSample(float16_t, int);"
+            "f16vec2   interpolateAtSample(f16vec2,   int);"
+            "f16vec3   interpolateAtSample(f16vec3,   int);"
+            "f16vec4   interpolateAtSample(f16vec4,   int);"
+
+            "float16_t interpolateAtOffset(float16_t, f16vec2);"
+            "f16vec2   interpolateAtOffset(f16vec2,   f16vec2);"
+            "f16vec3   interpolateAtOffset(f16vec3,   f16vec2);"
+            "f16vec4   interpolateAtOffset(f16vec4,   f16vec2);"
+
             "\n");
     }
 #endif
@@ -3862,7 +4294,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setFunctionExtensions("readInvocationARB",      1, &E_GL_ARB_shader_ballot);
             symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot);
 
-            BuiltInVariable("gl_SubGroupSizeARB",       EbvSubGroupSize,       symbolTable);
             BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
             BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
             BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
@@ -3870,6 +4301,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
+            if (spvVersion.vulkan >= 100)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+
             symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
             symbolTable.setFunctionExtensions("allInvocationsARB",      1, &E_GL_ARB_shader_group_vote);
             symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
@@ -4366,6 +4801,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
     symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
 
+#ifdef AMD_EXTENSIONS
+    symbolTable.relateToOperator("packFloat2x16",   EOpPackFloat2x16);
+    symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
+#endif
+
     symbolTable.relateToOperator("length",       EOpLength);
     symbolTable.relateToOperator("distance",     EOpDistance);
     symbolTable.relateToOperator("dot",          EOpDot);
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 677cef39535ea0744abf4560ad239b6e3bd7c8b5..999fd5d8a92e91c50ca723311fd89b729591bc0e 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -45,6 +45,7 @@
 #include "propagateNoContraction.h"
 
 #include <cfloat>
+#include <utility>
 
 namespace glslang {
 
@@ -73,6 +74,16 @@ TIntermSymbol* TIntermediate::addSymbol(int id, const TString& name, const TType
     return node;
 }
 
+TIntermSymbol* TIntermediate::addSymbol(const TIntermSymbol& intermSymbol)
+{
+    return addSymbol(intermSymbol.getId(),
+                     intermSymbol.getName(),
+                     intermSymbol.getType(),
+                     intermSymbol.getConstArray(),
+                     intermSymbol.getConstSubtree(),
+                     intermSymbol.getLoc());
+}
+
 TIntermSymbol* TIntermediate::addSymbol(const TVariable& variable)
 {
     glslang::TSourceLoc loc; // just a null location
@@ -104,7 +115,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
 {
     // No operations work on blocks
     if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
-        return 0;
+        return nullptr;
 
     // Try converting the children's base types to compatible types.
     TIntermTyped* child = addConversion(op, left->getType(), right);
@@ -115,7 +126,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
         if (child)
             left = child;
         else
-            return 0;
+            return nullptr;
     }
 
     // Convert the children's type shape to be compatible.
@@ -126,15 +137,9 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
     // Need a new node holding things together.  Make
     // one and promote it to the right type.
     //
-    TIntermBinary* node = new TIntermBinary(op);
-    if (loc.line == 0)
-        loc = right->getLoc();
-    node->setLoc(loc);
-
-    node->setLeft(left);
-    node->setRight(right);
-    if (! node->promote())
-        return 0;
+    TIntermBinary* node = addBinaryNode(op, left, right, loc);
+    if (! promote(node))
+        return nullptr;
 
     node->updatePrecision();
 
@@ -162,6 +167,56 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
     return node;
 }
 
+//
+// Low level: add binary node (no promotions or other argument modifications)
+//
+TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) const
+{
+    // build the node
+    TIntermBinary* node = new TIntermBinary(op);
+    if (loc.line == 0)
+        loc = left->getLoc();
+    node->setLoc(loc);
+    node->setLeft(left);
+    node->setRight(right);
+
+    return node;
+}
+
+//
+// like non-type form, but sets node's type.
+//
+TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc, const TType& type) const
+{
+    TIntermBinary* node = addBinaryNode(op, left, right, loc);
+    node->setType(type);
+    return node;
+}
+    
+//
+// Low level: add unary node (no promotions or other argument modifications)
+//
+TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc) const
+{
+    TIntermUnary* node = new TIntermUnary(op);
+    if (loc.line == 0)
+        loc = child->getLoc();
+    node->setLoc(loc);
+    node->setOperand(child);
+
+    return node;
+}
+
+//
+// like non-type form, but sets node's type.
+//
+TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc, const TType& type) const
+{
+    TIntermUnary* node = addUnaryNode(op, child, loc);
+    node->setType(type);
+    return node;
+}
+
 //
 // Connect two nodes through an assignment.
 //
@@ -190,14 +245,9 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm
     right = addShapeConversion(op, left->getType(), right);
 
     // build the node
-    TIntermBinary* node = new TIntermBinary(op);
-    if (loc.line == 0)
-        loc = left->getLoc();
-    node->setLoc(loc);
-    node->setLeft(left);
-    node->setRight(right);
+    TIntermBinary* node = addBinaryNode(op, left, right, loc);
 
-    if (! node->promote())
+    if (! promote(node))
         return nullptr;
 
     node->updatePrecision();
@@ -214,16 +264,8 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm
 //
 TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc loc)
 {
-    TIntermBinary* node = new TIntermBinary(op);
-    if (loc.line == 0)
-        loc = index->getLoc();
-    node->setLoc(loc);
-    node->setLeft(base);
-    node->setRight(index);
-
     // caller should set the type
-
-    return node;
+    return addBinaryNode(op, base, index, loc);
 }
 
 //
@@ -234,15 +276,19 @@ TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermT
 TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSourceLoc loc)
 {
     if (child == 0)
-        return 0;
+        return nullptr;
 
     if (child->getType().getBasicType() == EbtBlock)
-        return 0;
+        return nullptr;
 
     switch (op) {
     case EOpLogicalNot:
+        if (source == EShSourceHlsl) {
+            break; // HLSL can promote logical not
+        }
+ 
         if (child->getType().getBasicType() != EbtBool || child->getType().isMatrix() || child->getType().isArray() || child->getType().isVector()) {
-            return 0;
+            return nullptr;
         }
         break;
 
@@ -252,7 +298,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
     case EOpPreDecrement:
     case EOpNegative:
         if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
-            return 0;
+            return nullptr;
     default: break; // some compilers want this
     }
 
@@ -268,6 +314,9 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
     case EOpConstructBool:   newType = EbtBool;   break;
     case EOpConstructFloat:  newType = EbtFloat;  break;
     case EOpConstructDouble: newType = EbtDouble; break;
+#ifdef AMD_EXTENSIONS
+    case EOpConstructFloat16: newType = EbtFloat16; break;
+#endif
     default: break; // some compilers want this
     }
 
@@ -277,8 +326,8 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
                                                                child->getMatrixRows(),
                                                                child->isVector()),
                               child);
-        if (child == 0)
-            return 0;
+        if (child == nullptr)
+            return nullptr;
     }
 
     //
@@ -293,6 +342,9 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
     case EOpConstructBool:
     case EOpConstructFloat:
     case EOpConstructDouble:
+#ifdef AMD_EXTENSIONS
+    case EOpConstructFloat16:
+#endif
         return child;
     default: break; // some compilers want this
     }
@@ -300,14 +352,10 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
     //
     // Make a new node for the operator.
     //
-    TIntermUnary* node = new TIntermUnary(op);
-    if (loc.line == 0)
-        loc = child->getLoc();
-    node->setLoc(loc);
-    node->setOperand(child);
+    TIntermUnary* node = addUnaryNode(op, child, loc);
 
-    if (! node->promote())
-        return 0;
+    if (! promote(node))
+        return nullptr;
 
     node->updatePrecision();
 
@@ -332,8 +380,8 @@ TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOper
         // including constness (which would differ from the prototype).
         //
         TIntermTyped* child = childNode->getAsTyped();
-        if (child == 0)
-            return 0;
+        if (child == nullptr)
+            return nullptr;
 
         if (child->getAsConstantUnion()) {
             TIntermTyped* folded = child->getAsConstantUnion()->fold(op, returnType);
@@ -341,12 +389,7 @@ TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOper
                 return folded;
         }
 
-        TIntermUnary* node = new TIntermUnary(op);
-        node->setLoc(child->getLoc());
-        node->setOperand(child);
-        node->setType(returnType);
-
-        return node;
+        return addUnaryNode(op, child, child->getLoc(), returnType);
     } else {
         // setAggregateOperater() calls fold() for constant folding
         TIntermTyped* node = setAggregateOperator(childNode, op, returnType, loc);
@@ -374,7 +417,7 @@ TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator o
     //
     if (node) {
         aggNode = node->getAsAggregate();
-        if (aggNode == 0 || aggNode->getOp() != EOpNull) {
+        if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
             //
             // Make an aggregate containing this node.
             //
@@ -409,7 +452,7 @@ TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator o
 // Generally, this is focused on basic type conversion, not shape conversion.
 // See addShapeConversion().
 //
-// Return 0 if a conversion can't be done.
+// Return nullptr if a conversion can't be done.
 //
 TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
 {
@@ -418,12 +461,17 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     //
     switch (node->getBasicType()) {
     case EbtVoid:
-        return 0;
+        return nullptr;
     case EbtAtomicUint:
     case EbtSampler:
         // opaque types can be passed to functions
         if (op == EOpFunction)
             break;
+
+        // HLSL can assign samplers directly (no constructor)
+        if (source == EShSourceHlsl && node->getBasicType() == EbtSampler)
+            break;
+
         // samplers can get assigned via a sampler constructor
         // (well, not yet, but code in the rest of this function is ready for it)
         if (node->getBasicType() == EbtSampler && op == EOpAssign && 
@@ -431,7 +479,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
             break;
 
         // otherwise, opaque types can't even be operated on, let alone converted
-        return 0;
+        return nullptr;
     default:
         break;
     }
@@ -442,11 +490,11 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
 
     // If one's a structure, then no conversions.
     if (type.isStruct() || node->isStruct())
-        return 0;
+        return nullptr;
 
     // If one's an array, then no conversions.
     if (type.isArray() || node->getType().isArray())
-        return 0;
+        return nullptr;
 
     // Note: callers are responsible for other aspects of shape,
     // like vector and matrix sizes.
@@ -466,6 +514,11 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     case EOpConstructDouble:
         promoteTo = EbtDouble;
         break;
+#ifdef AMD_EXTENSIONS
+    case EOpConstructFloat16:
+        promoteTo = EbtFloat16;
+        break;
+#endif
     case EOpConstructInt:
         promoteTo = EbtInt;
         break;
@@ -507,6 +560,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+    case EOpLogicalNot:
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
 
     case EOpFunctionCall:
     case EOpReturn:
@@ -519,6 +576,27 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     case EOpDivAssign:
     case EOpModAssign:
 
+    case EOpAtan:
+    case EOpClamp:
+    case EOpCross:
+    case EOpDistance:
+    case EOpDot:
+    case EOpDst:
+    case EOpFaceForward:
+    case EOpFma:
+    case EOpFrexp:
+    case EOpLdexp:
+    case EOpMix:
+    case EOpLit:
+    case EOpMax:
+    case EOpMin:
+    case EOpModf:
+    case EOpPow:
+    case EOpReflect:
+    case EOpRefract:
+    case EOpSmoothStep:
+    case EOpStep:
+
     case EOpSequence:
     case EOpConstructStruct:
 
@@ -528,7 +606,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
-            return 0;
+            return nullptr;
 
         break;
 
@@ -550,7 +628,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
 
             return node;
         else
-            return 0;
+            return nullptr;
 
     default:
         // default is to require a match; all exceptions should have case statements above
@@ -558,7 +636,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         if (type.getBasicType() == node->getType().getBasicType())
             return node;
         else
-            return 0;
+            return nullptr;
     }
 
     if (node->getAsConstantUnion())
@@ -567,7 +645,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     //
     // Add a new newNode for the conversion.
     //
-    TIntermUnary* newNode = 0;
+    TIntermUnary* newNode = nullptr;
 
     TOperator newOp = EOpNull;
 
@@ -580,10 +658,13 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtUint:  newOp = EOpConvUintToDouble;  break;
         case EbtBool:  newOp = EOpConvBoolToDouble;  break;
         case EbtFloat: newOp = EOpConvFloatToDouble; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
+#endif
         case EbtInt64: newOp = EOpConvInt64ToDouble; break;
         case EbtUint64: newOp = EOpConvUint64ToDouble; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtFloat:
@@ -592,22 +673,43 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtUint:   newOp = EOpConvUintToFloat;   break;
         case EbtBool:   newOp = EOpConvBoolToFloat;   break;
         case EbtDouble: newOp = EOpConvDoubleToFloat; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
+#endif
         case EbtInt64:  newOp = EOpConvInt64ToFloat;  break;
         case EbtUint64: newOp = EOpConvUint64ToFloat; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
+#ifdef AMD_EXTENSIONS
+    case EbtFloat16:
+        switch (node->getBasicType()) {
+        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+        default:
+            return nullptr;
+        }
+        break;
+#endif
     case EbtBool:
         switch (node->getBasicType()) {
         case EbtInt:    newOp = EOpConvIntToBool;    break;
         case EbtUint:   newOp = EOpConvUintToBool;   break;
         case EbtFloat:  newOp = EOpConvFloatToBool;  break;
         case EbtDouble: newOp = EOpConvDoubleToBool; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
+#endif
         case EbtInt64:  newOp = EOpConvInt64ToBool;  break;
         case EbtUint64: newOp = EOpConvUint64ToBool; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtInt:
@@ -616,10 +718,13 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtBool:   newOp = EOpConvBoolToInt;   break;
         case EbtFloat:  newOp = EOpConvFloatToInt;  break;
         case EbtDouble: newOp = EOpConvDoubleToInt; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
+#endif
         case EbtInt64:  newOp = EOpConvInt64ToInt;  break;
         case EbtUint64: newOp = EOpConvUint64ToInt; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtUint:
@@ -628,10 +733,13 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtBool:   newOp = EOpConvBoolToUint;   break;
         case EbtFloat:  newOp = EOpConvFloatToUint;  break;
         case EbtDouble: newOp = EOpConvDoubleToUint; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
+#endif
         case EbtInt64:  newOp = EOpConvInt64ToUint;  break;
         case EbtUint64: newOp = EOpConvUint64ToUint; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtInt64:
@@ -641,9 +749,12 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtBool:   newOp = EOpConvBoolToInt64;   break;
         case EbtFloat:  newOp = EOpConvFloatToInt64;  break;
         case EbtDouble: newOp = EOpConvDoubleToInt64; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
+#endif
         case EbtUint64: newOp = EOpConvUint64ToInt64; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtUint64:
@@ -653,19 +764,20 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         case EbtBool:   newOp = EOpConvBoolToUint64;   break;
         case EbtFloat:  newOp = EOpConvFloatToUint64;  break;
         case EbtDouble: newOp = EOpConvDoubleToUint64; break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
+#endif
         case EbtInt64:  newOp = EOpConvInt64ToUint64;  break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     default:
-        return 0;
+        return nullptr;
     }
 
     TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
-    newNode = new TIntermUnary(newOp, newType);
-    newNode->setLoc(node->getLoc());
-    newNode->setOperand(node);
+    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
 
     // TODO: it seems that some unary folding operations should occur here, but are not
 
@@ -706,6 +818,10 @@ TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type,
     case EOpEqual:
     case EOpNotEqual:
     case EOpFunctionCall:
+    case EOpReturn:
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
         break;
     default:
         return node;
@@ -720,8 +836,10 @@ TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type,
     TOperator constructorOp = mapTypeToConstructorOp(type);
 
     // scalar -> smeared -> vector, or
+    // vec1 -> scalar, or
     // bigger vector -> smaller vector or scalar
     if ((type.isVector() && node->getType().isScalar()) ||
+        (node->getType().isVector() && node->getVectorSize() == 1 && type.isScalar()) ||
         (node->getVectorSize() > type.getVectorSize() && type.isVector()))
         return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 
@@ -737,6 +855,9 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
     if (profile == EEsProfile || version == 110)
         return false;
 
+    if (from == to)
+        return true;
+
     // TODO: Move more policies into language-specific handlers.
     // Some languages allow more general (or potentially, more specific) conversions under some conditions.
     if (source == EShSourceHlsl) {
@@ -758,6 +879,11 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             case EOpModAssign:               // ... 
             case EOpReturn:                  // function returns can also perform arbitrary conversions
             case EOpFunctionCall:            // conversion of a calling parameter
+            case EOpLogicalNot:
+            case EOpLogicalAnd:
+            case EOpLogicalOr:
+            case EOpLogicalXor:
+            case EOpConstructStruct:
                 return true;
             default:
                 break;
@@ -774,6 +900,9 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
         case EbtUint64:
         case EbtFloat:
         case EbtDouble:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+#endif
             return true;
         default:
             return false;
@@ -783,7 +912,12 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
         case EbtInt:
         case EbtUint:
         case EbtFloat:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+#endif
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -793,6 +927,8 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             return version >= 400;
         case EbtUint:
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -800,6 +936,8 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
         switch (from) {
         case EbtInt:
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -918,6 +1056,47 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
             }
         }
         break;
+#ifdef AMD_EXTENSIONS
+    case EbtFloat16:
+        if (type.getMatrixCols()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructF16Mat2x2; break;
+                case 3: op = EOpConstructF16Mat2x3; break;
+                case 4: op = EOpConstructF16Mat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructF16Mat3x2; break;
+                case 3: op = EOpConstructF16Mat3x3; break;
+                case 4: op = EOpConstructF16Mat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructF16Mat4x2; break;
+                case 3: op = EOpConstructF16Mat4x3; break;
+                case 4: op = EOpConstructF16Mat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            }
+        }
+        else {
+            switch (type.getVectorSize()) {
+            case 1: op = EOpConstructFloat16;  break;
+            case 2: op = EOpConstructF16Vec2;  break;
+            case 3: op = EOpConstructF16Vec3;  break;
+            case 4: op = EOpConstructF16Vec4;  break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+#endif
     case EbtInt:
         switch(type.getVectorSize()) {
         case 1: op = EOpConstructInt;   break;
@@ -974,15 +1153,15 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
 // Safe way to combine two nodes into an aggregate.  Works with null pointers,
 // a node that's not a aggregate yet, etc.
 //
-// Returns the resulting aggregate, unless 0 was passed in for
+// Returns the resulting aggregate, unless nullptr was passed in for
 // both existing nodes.
 //
 TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* right)
 {
-    if (left == 0 && right == 0)
-        return 0;
+    if (left == nullptr && right == nullptr)
+        return nullptr;
 
-    TIntermAggregate* aggNode = 0;
+    TIntermAggregate* aggNode = nullptr;
     if (left)
         aggNode = left->getAsAggregate();
     if (! aggNode || aggNode->getOp() != EOpNull) {
@@ -1009,12 +1188,12 @@ TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* r
 //
 // Turn an existing node into an aggregate.
 //
-// Returns an aggregate, unless 0 was passed in for the existing node.
+// Returns an aggregate, unless nullptr was passed in for the existing node.
 //
 TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node)
 {
-    if (node == 0)
-        return 0;
+    if (node == nullptr)
+        return nullptr;
 
     TIntermAggregate* aggNode = new TIntermAggregate;
     aggNode->getSequence().push_back(node);
@@ -1025,8 +1204,8 @@ TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node)
 
 TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node, const TSourceLoc& loc)
 {
-    if (node == 0)
-        return 0;
+    if (node == nullptr)
+        return nullptr;
 
     TIntermAggregate* aggNode = new TIntermAggregate;
     aggNode->getSequence().push_back(node);
@@ -1035,6 +1214,17 @@ TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node, const TSourceL
     return aggNode;
 }
 
+//
+// Make an aggregate with an empty sequence.
+//
+TIntermAggregate* TIntermediate::makeAggregate(const TSourceLoc& loc)
+{
+    TIntermAggregate* aggNode = new TIntermAggregate;
+    aggNode->setLoc(loc);
+
+    return aggNode;
+}
+
 //
 // For "if" test nodes.  There are three children; a condition,
 // a true path, and a false path.  The two paths are in the
@@ -1088,7 +1278,7 @@ TIntermTyped* TIntermediate::addMethod(TIntermTyped* object, const TType& type,
 // a true path, and a false path.  The two paths are specified
 // as separate parameters.
 //
-// Returns the selection node created, or 0 if one could not be.
+// Returns the selection node created, or nullptr if one could not be.
 //
 TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc& loc)
 {
@@ -1103,12 +1293,12 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
         if (child)
             trueBlock = child;
         else
-            return 0;
+            return nullptr;
     }
 
     // After conversion, types have to match.
     if (falseBlock->getType() != trueBlock->getType())
-        return 0;
+        return nullptr;
 
     //
     // See if all the operands are constant, then fold it otherwise not.
@@ -1191,7 +1381,11 @@ TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc&
 
 TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseType, const TSourceLoc& loc, bool literal) const
 {
+#ifdef AMD_EXTENSIONS
+    assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16);
+#else
     assert(baseType == EbtFloat || baseType == EbtDouble);
+#endif
 
     TConstUnionArray unionArray(1);
     unionArray[0].setDConst(d);
@@ -1278,7 +1472,7 @@ TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* init
 //
 TIntermBranch* TIntermediate::addBranch(TOperator branchOp, const TSourceLoc& loc)
 {
-    return addBranch(branchOp, 0, loc);
+    return addBranch(branchOp, nullptr, loc);
 }
 
 TIntermBranch* TIntermediate::addBranch(TOperator branchOp, TIntermTyped* expression, const TSourceLoc& loc)
@@ -1295,7 +1489,7 @@ TIntermBranch* TIntermediate::addBranch(TOperator branchOp, TIntermTyped* expres
 //
 bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/)
 {
-    if (root == 0)
+    if (root == nullptr)
         return true;
 
     // Finish off the top-level sequence
@@ -1446,6 +1640,12 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
         case EOpVectorSwizzle:
         case EOpConvFloatToDouble:
         case EOpConvDoubleToFloat:
+#ifdef AMD_EXTENSIONS
+        case EOpConvFloat16ToFloat:
+        case EOpConvFloatToFloat16:
+        case EOpConvFloat16ToDouble:
+        case EOpConvDoubleToFloat16:
+#endif
             return true;
         default:
             return false;
@@ -1571,18 +1771,49 @@ bool TIntermOperator::isConstructor() const
 }
 
 //
-// Make sure the type of a unary operator is appropriate for its
-// combination of operation and operand type.
+// Make sure the type of an operator is appropriate for its
+// combination of operation and operand type.  This will invoke
+// promoteUnary, promoteBinary, etc as needed.
 //
-// Returns false in nothing makes sense.
+// Returns false if nothing makes sense.
 //
-bool TIntermUnary::promote()
+bool TIntermediate::promote(TIntermOperator* node)
 {
+    if (node == nullptr)
+        return false;
+
+    if (node->getAsUnaryNode())
+        return promoteUnary(*node->getAsUnaryNode());
+
+    if (node->getAsBinaryNode())
+        return promoteBinary(*node->getAsBinaryNode());
+
+    if (node->getAsAggregate())
+        return promoteAggregate(*node->getAsAggregate());
+
+    return false;
+}
+
+//
+// See TIntermediate::promote
+//
+bool TIntermediate::promoteUnary(TIntermUnary& node)
+{
+    const TOperator op    = node.getOp();
+    TIntermTyped* operand = node.getOperand();
+
     switch (op) {
     case EOpLogicalNot:
-        if (operand->getBasicType() != EbtBool)
+        // Convert operand to a boolean type
+        if (operand->getBasicType() != EbtBool) {
+            // Add constructor to boolean type. If that fails, we can't do it, so return false.
+            TIntermTyped* converted = convertToBasicType(op, EbtBool, operand);
+            if (converted == nullptr)
+                return false;
 
-            return false;
+            // Use the result of converting the node to a bool.
+            node.setOperand(operand = converted); // also updates stack variable
+        }
         break;
     case EOpBitwiseNot:
         if (operand->getBasicType() != EbtInt &&
@@ -1602,6 +1833,9 @@ bool TIntermUnary::promote()
             operand->getBasicType() != EbtInt64 &&
             operand->getBasicType() != EbtUint64 &&
             operand->getBasicType() != EbtFloat &&
+#ifdef AMD_EXTENSIONS
+            operand->getBasicType() != EbtFloat16 &&
+#endif
             operand->getBasicType() != EbtDouble)
 
             return false;
@@ -1613,28 +1847,51 @@ bool TIntermUnary::promote()
             return false;
     }
 
-    setType(operand->getType());
-    getWritableType().getQualifier().makeTemporary();
+    node.setType(operand->getType());
+    node.getWritableType().getQualifier().makeTemporary();
 
     return true;
 }
 
 void TIntermUnary::updatePrecision()
 {
+#ifdef AMD_EXTENSIONS
+    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+#else
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
+#endif
         if (operand->getQualifier().precision > getQualifier().precision)
             getQualifier().precision = operand->getQualifier().precision;
     }
 }
 
+// If it is not already, convert this node to the given basic type.
+TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const
+{
+    if (node == nullptr)
+        return nullptr;
+
+    // It's already this basic type: nothing needs to be done, so use the node directly.
+    if (node->getBasicType() == basicType)
+        return node;
+
+    const TType& type = node->getType();
+    const TType newType(basicType, type.getQualifier().storage,
+                        type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector());
+
+    // Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr.
+    return addConversion(op, newType, node);
+}
+
 //
-// Establishes the type of the resultant operation, as well as
-// makes the operator the correct one for the operands.
-//
-// Returns false if operator can't work on operands.
+// See TIntermediate::promote
 //
-bool TIntermBinary::promote()
+bool TIntermediate::promoteBinary(TIntermBinary& node)
 {
+    TOperator     op    = node.getOp();
+    TIntermTyped* left  = node.getLeft();
+    TIntermTyped* right = node.getRight();
+
     // Arrays and structures have to be exact matches.
     if ((left->isArray() || right->isArray() || left->getBasicType() == EbtStruct || right->getBasicType() == EbtStruct)
         && left->getType() != right->getType())
@@ -1642,8 +1899,8 @@ bool TIntermBinary::promote()
 
     // Base assumption:  just make the type the same as the left
     // operand.  Only deviations from this will be coded.
-    setType(left->getType());
-    type.getQualifier().clear();
+    node.setType(left->getType());
+    node.getWritableType().getQualifier().clear();
 
     // Composite and opaque types don't having pending operator changes, e.g.,
     // array, structure, and samplers.  Just establish final type and correctness.
@@ -1656,7 +1913,7 @@ bool TIntermBinary::promote()
                 return false;
             } else {
                 // Promote to conditional
-                setType(TType(EbtBool));
+                node.setType(TType(EbtBool));
             }
 
             return true;
@@ -1684,23 +1941,46 @@ bool TIntermBinary::promote()
         // Relational comparisons need numeric types and will promote to scalar Boolean.
         if (left->getBasicType() == EbtBool)
             return false;
-        setType(TType(EbtBool));
+
+        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
         break;
 
     case EOpEqual:
     case EOpNotEqual:
-        // All the above comparisons result in a bool (but not the vector compares)
-        setType(TType(EbtBool));
+        if (getSource() == EShSourceHlsl) {
+            const int resultWidth = std::max(left->getVectorSize(), right->getVectorSize());
+
+            // In HLSL, == or != on vectors means component-wise comparison.
+            if (resultWidth > 1) {
+                op = (op == EOpEqual) ? EOpVectorEqual : EOpVectorNotEqual;
+                node.setOp(op);
+            }
+
+            node.setType(TType(EbtBool, EvqTemporary, resultWidth));
+        } else {
+            // All the above comparisons result in a bool (but not the vector compares)
+            node.setType(TType(EbtBool));
+        }
         break;
 
     case EOpLogicalAnd:
     case EOpLogicalOr:
     case EOpLogicalXor:
-        // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
-        if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
-            return false;
+        if (getSource() == EShSourceHlsl) {
+            TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left);
+            TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right);
+            if (convertedL == nullptr || convertedR == nullptr)
+                return false;
+            node.setLeft(left = convertedL);   // also updates stack variable
+            node.setRight(right = convertedR); // also updates stack variable
+        } else {
+            // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
+            if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
+                return false;
+        }
+
+        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
 
-        setType(TType(EbtBool));
         break;
 
     case EOpRightShift:
@@ -1717,6 +1997,9 @@ bool TIntermBinary::promote()
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+        if (getSource() == EShSourceHlsl)
+            break;
+
         // Check for integer-only operands.
         if ((left->getBasicType() != EbtInt &&  left->getBasicType() != EbtUint &&
              left->getBasicType() != EbtInt64 &&  left->getBasicType() != EbtUint64) ||
@@ -1753,6 +2036,8 @@ bool TIntermBinary::promote()
 
     case EOpEqual:
     case EOpNotEqual:
+    case EOpVectorEqual:
+    case EOpVectorNotEqual:
 
     case EOpLogicalAnd:
     case EOpLogicalOr:
@@ -1813,33 +2098,33 @@ bool TIntermBinary::promote()
             if (left->isVector()) {
                 if (left->getVectorSize() != right->getMatrixRows())
                     return false;
-                op = EOpVectorTimesMatrix;
-                setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
+                node.setOp(op = EOpVectorTimesMatrix);
+                node.setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
             } else {
-                op = EOpMatrixTimesScalar;
-                setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
+                node.setOp(op = EOpMatrixTimesScalar);
+                node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
             }
         } else if (left->isMatrix() && !right->isMatrix()) {
             if (right->isVector()) {
                 if (left->getMatrixCols() != right->getVectorSize())
                     return false;
-                op = EOpMatrixTimesVector;
-                setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
+                node.setOp(op = EOpMatrixTimesVector);
+                node.setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
             } else {
-                op = EOpMatrixTimesScalar;
+                node.setOp(op = EOpMatrixTimesScalar);
             }
         } else if (left->isMatrix() && right->isMatrix()) {
             if (left->getMatrixCols() != right->getMatrixRows())
                 return false;
-            op = EOpMatrixTimesMatrix;
-            setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
+            node.setOp(op = EOpMatrixTimesMatrix);
+            node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
         } else if (! left->isMatrix() && ! right->isMatrix()) {
             if (left->isVector() && right->isVector()) {
                 ; // leave as component product
             } else if (left->isVector() || right->isVector()) {
-                op = EOpVectorTimesScalar;
+                node.setOp(op = EOpVectorTimesScalar);
                 if (right->isVector())
-                    setType(TType(basicType, EvqTemporary, right->getVectorSize()));
+                    node.setType(TType(basicType, EvqTemporary, right->getVectorSize()));
             }
         } else {
             return false;
@@ -1850,7 +2135,7 @@ bool TIntermBinary::promote()
             if (left->isVector()) {
                 if (left->getVectorSize() != right->getMatrixRows() || left->getVectorSize() != right->getMatrixCols())
                     return false;
-                op = EOpVectorTimesMatrixAssign;
+                node.setOp(op = EOpVectorTimesMatrixAssign);
             } else {
                 return false;
             }
@@ -1858,19 +2143,19 @@ bool TIntermBinary::promote()
             if (right->isVector()) {
                 return false;
             } else {
-                op = EOpMatrixTimesScalarAssign;
+                node.setOp(op = EOpMatrixTimesScalarAssign);
             }
         } else if (left->isMatrix() && right->isMatrix()) {
             if (left->getMatrixCols() != left->getMatrixRows() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
                 return false;
-            op = EOpMatrixTimesMatrixAssign;
+            node.setOp(op = EOpMatrixTimesMatrixAssign);
         } else if (!left->isMatrix() && !right->isMatrix()) {
             if (left->isVector() && right->isVector()) {
                 // leave as component product
             } else if (left->isVector() || right->isVector()) {
                 if (! left->isVector())
                     return false;
-                op = EOpVectorTimesScalarAssign;
+                node.setOp(op = EOpVectorTimesScalarAssign);
             }
         } else {
             return false;
@@ -1904,6 +2189,7 @@ bool TIntermBinary::promote()
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+
         if ((left->isMatrix() && right->isVector()) ||
             (left->isVector() && right->isMatrix()) ||
             left->getBasicType() != right->getBasicType())
@@ -1913,8 +2199,8 @@ bool TIntermBinary::promote()
         if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize())
             return false;
         if (right->isVector() || right->isMatrix()) {
-            type.shallowCopy(right->getType());
-            type.getQualifier().makeTemporary();
+            node.getWritableType().shallowCopy(right->getType());
+            node.getWritableType().getQualifier().makeTemporary();
         }
         break;
 
@@ -1938,7 +2224,7 @@ bool TIntermBinary::promote()
     case EOpExclusiveOrAssign:
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
-        if (getType() != left->getType())
+        if (node.getType() != left->getType())
             return false;
         break;
     default:
@@ -1948,9 +2234,84 @@ bool TIntermBinary::promote()
     return true;
 }
 
+//
+// See TIntermediate::promote
+//
+bool TIntermediate::promoteAggregate(TIntermAggregate& node)
+{
+    TOperator op = node.getOp();
+    TIntermSequence& args = node.getSequence();
+    const int numArgs = static_cast<int>(args.size());
+
+    // Presently, only hlsl does intrinsic promotions.
+    if (getSource() != EShSourceHlsl)
+        return true;
+
+    // set of opcodes that can be promoted in this manner.
+    switch (op) {
+    case EOpAtan:
+    case EOpClamp:
+    case EOpCross:
+    case EOpDistance:
+    case EOpDot:
+    case EOpDst:
+    case EOpFaceForward:
+        // case EOpFindMSB: TODO: ?? 
+        // case EOpFindLSB: TODO: ??
+    case EOpFma:
+    case EOpMod:
+    case EOpFrexp:
+    case EOpLdexp:
+    case EOpMix:
+    case EOpLit:
+    case EOpMax:
+    case EOpMin:
+    case EOpModf:
+        // case EOpGenMul: TODO: ??
+    case EOpPow:
+    case EOpReflect:
+    case EOpRefract:
+    // case EOpSinCos: TODO: ??
+    case EOpSmoothStep:
+    case EOpStep:
+        break;
+    default:
+        return true;
+    }
+
+    // TODO: array and struct behavior
+
+    // Try converting all nodes to the given node's type
+    TIntermSequence convertedArgs(numArgs, nullptr);
+
+    // Try to convert all types to the nonConvArg type.
+    for (int nonConvArg = 0; nonConvArg < numArgs; ++nonConvArg) {
+        // Try converting all args to this arg's type
+        for (int convArg = 0; convArg < numArgs; ++convArg) {
+            convertedArgs[convArg] = addConversion(op, args[nonConvArg]->getAsTyped()->getType(),
+                                                   args[convArg]->getAsTyped());
+        }
+
+        // If we successfully converted all the args, use the result.
+        if (std::all_of(convertedArgs.begin(), convertedArgs.end(),
+                        [](const TIntermNode* node) { return node != nullptr; })) {
+
+            std::swap(args, convertedArgs);
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 void TIntermBinary::updatePrecision()
 {
+#ifdef AMD_EXTENSIONS
+    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+#else
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
+#endif
         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
         if (getQualifier().precision != EpqNone) {
             left->propagatePrecision(getQualifier().precision);
@@ -1961,7 +2322,11 @@ void TIntermBinary::updatePrecision()
 
 void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
 {
+#ifdef AMD_EXTENSIONS
+    if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
+#else
     if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat))
+#endif
         return;
 
     getQualifier().precision = newPrecision;
@@ -2035,16 +2400,46 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
                 break;
             case EbtFloat:
+            case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
+            default:
+                return node;
+            }
+            break;
+        case EbtDouble:
+            switch (node->getType().getBasicType()) {
+            case EbtInt:
+                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
+                break;
+            case EbtUint:
+                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
+                break;
+            case EbtInt64:
+                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
+                break;
+            case EbtUint64:
+                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
+                break;
+            case EbtBool:
+                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
+                break;
+            case EbtFloat:
             case EbtDouble:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getDConst()));
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
+                leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
                 return node;
             }
             break;
-        case EbtDouble:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
             switch (node->getType().getBasicType()) {
             case EbtInt:
                 leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
@@ -2063,12 +2458,14 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+            case EbtFloat16:
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
                 return node;
             }
             break;
+#endif
         case EbtInt:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -2088,6 +2485,9 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -2113,6 +2513,9 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -2138,6 +2541,9 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
                 break;
             default:
@@ -2163,6 +2569,9 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -2188,6 +2597,9 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
                 break;
             case EbtFloat:
             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
                 leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
diff --git a/glslang/MachineIndependent/LiveTraverser.h b/glslang/MachineIndependent/LiveTraverser.h
index 5a902049e3f4ec4537cc7d6743bf4c1b2a513b2b..286efe6ceff8a45be89bc7dae10aae60f2f166a7 100644
--- a/glslang/MachineIndependent/LiveTraverser.h
+++ b/glslang/MachineIndependent/LiveTraverser.h
@@ -56,7 +56,9 @@ namespace glslang {
 
 class TLiveTraverser : public TIntermTraverser {
 public:
-    TLiveTraverser(const TIntermediate& i, bool traverseAll = false) :
+    TLiveTraverser(const TIntermediate& i, bool traverseAll = false,
+                   bool preVisit = true, bool inVisit = false, bool postVisit = false) :
+        TIntermTraverser(preVisit, inVisit, postVisit),
         intermediate(i), traverseAll(traverseAll)
     { }
 
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 4c1d02a884ed56d46d4f68ec99303faa1597d47c..d86e19d2406b0c68d533ae4309047033071b85e1 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -36,12 +36,244 @@
 
 // Implement the TParseContextBase class.
 
+#include <cstdarg>
+
 #include "ParseHelper.h"
 
 extern int yyparse(glslang::TParseContext*);
 
 namespace glslang {
 
+//
+// Used to output syntax, parsing, and semantic errors.
+//
+
+void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReason,
+                                      const char* szToken,
+                                      const char* szExtraInfoFormat,
+                                      TPrefixType prefix, va_list args)
+{
+    const int maxSize = MaxTokenLength + 200;
+    char szExtraInfo[maxSize];
+
+    safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
+
+    infoSink.info.prefix(prefix);
+    infoSink.info.location(loc);
+    infoSink.info << "'" << szToken <<  "' : " << szReason << " " << szExtraInfo << "\n";
+
+    if (prefix == EPrefixError) {
+        ++numErrors;
+    }
+}
+
+void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
+                                     const char* szExtraInfoFormat, ...)
+{
+    if (messages & EShMsgOnlyPreprocessor)
+        return;
+    va_list args;
+    va_start(args, szExtraInfoFormat);
+    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
+    va_end(args);
+
+    if ((messages & EShMsgCascadingErrors) == 0)
+        currentScanner->setEndOfInput();
+}
+
+void C_DECL TParseContextBase::warn(const TSourceLoc& loc, const char* szReason, const char* szToken,
+                                    const char* szExtraInfoFormat, ...)
+{
+    if (suppressWarnings())
+        return;
+    va_list args;
+    va_start(args, szExtraInfoFormat);
+    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
+    va_end(args);
+}
+
+void C_DECL TParseContextBase::ppError(const TSourceLoc& loc, const char* szReason, const char* szToken,
+                                       const char* szExtraInfoFormat, ...)
+{
+    va_list args;
+    va_start(args, szExtraInfoFormat);
+    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
+    va_end(args);
+
+    if ((messages & EShMsgCascadingErrors) == 0)
+        currentScanner->setEndOfInput();
+}
+
+void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReason, const char* szToken,
+                                      const char* szExtraInfoFormat, ...)
+{
+    va_list args;
+    va_start(args, szExtraInfoFormat);
+    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
+    va_end(args);
+}
+
+//
+// Both test and if necessary, spit out an error, to see if the node is really
+// an l-value that can be operated on this way.
+//
+// Returns true if there was an error.
+//
+bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
+{
+    TIntermBinary* binaryNode = node->getAsBinaryNode();
+
+    if (binaryNode) {
+        switch(binaryNode->getOp()) {
+        case EOpIndexDirect:
+        case EOpIndexIndirect:     // fall through
+        case EOpIndexDirectStruct: // fall through
+        case EOpVectorSwizzle:
+            return lValueErrorCheck(loc, op, binaryNode->getLeft());
+        default:
+            break;
+        }
+        error(loc, " l-value required", op, "", "");
+
+        return true;
+    }
+
+    const char* symbol = nullptr;
+    TIntermSymbol* symNode = node->getAsSymbolNode();
+    if (symNode != nullptr)
+        symbol = symNode->getName().c_str();
+
+    const char* message = nullptr;
+    switch (node->getQualifier().storage) {
+    case EvqConst:          message = "can't modify a const";        break;
+    case EvqConstReadOnly:  message = "can't modify a const";        break;
+    case EvqUniform:        message = "can't modify a uniform";      break;
+    case EvqBuffer:
+        if (node->getQualifier().readonly)
+            message = "can't modify a readonly buffer";
+        break;
+
+    default:
+        //
+        // Type that can't be written to?
+        //
+        switch (node->getBasicType()) {
+        case EbtSampler:
+            message = "can't modify a sampler";
+            break;
+        case EbtAtomicUint:
+            message = "can't modify an atomic_uint";
+            break;
+        case EbtVoid:
+            message = "can't modify void";
+            break;
+        default:
+            break;
+        }
+    }
+
+    if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
+        error(loc, " l-value required", op, "", "");
+
+        return true;
+    }
+
+    //
+    // Everything else is okay, no error.
+    //
+    if (message == nullptr)
+        return false;
+
+    //
+    // If we get here, we have an error and a message.
+    //
+    if (symNode)
+        error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
+    else
+        error(loc, " l-value required", op, "(%s)", message);
+
+    return true;
+}
+
+// Test for and give an error if the node can't be read from.
+void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
+{
+    if (! node)
+        return;
+
+    TIntermBinary* binaryNode = node->getAsBinaryNode();
+    if (binaryNode) {
+        switch(binaryNode->getOp()) {
+        case EOpIndexDirect:
+        case EOpIndexIndirect:
+        case EOpIndexDirectStruct:
+        case EOpVectorSwizzle:
+            rValueErrorCheck(loc, op, binaryNode->getLeft());
+        default:
+            break;
+        }
+
+        return;
+    }
+
+    TIntermSymbol* symNode = node->getAsSymbolNode();
+    if (symNode && symNode->getQualifier().writeonly)
+        error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
+}
+
+// Add a linkage symbol node for 'symbol', which
+// must have its type fully edited, as this will snapshot the type.
+// It is okay if symbol becomes invalid before finish().
+void TParseContextBase::trackLinkage(TSymbol& symbol)
+{
+    if (!parsingBuiltins)
+        intermediate.addSymbolLinkageNode(linkage, symbol);
+}
+
+// Add 'symbol' to the list of deferred linkage symbols, which
+// are later processed in finish(), at which point the symbol
+// must still be valid.
+// It is okay if the symbol's type will be subsequently edited.
+void TParseContextBase::trackLinkageDeferred(TSymbol& symbol)
+{
+    if (!parsingBuiltins)
+        linkageSymbols.push_back(&symbol);
+}
+
+// Make a shared symbol have a non-shared version that can be edited by the current 
+// compile, such that editing its type will not change the shared version and will
+// effect all nodes already sharing it (non-shallow type),
+// or adopting its full type after being edited (shallow type).
+void TParseContextBase::makeEditable(TSymbol*& symbol)
+{
+    // copyUp() does a deep copy of the type.
+    symbol = symbolTable.copyUp(symbol);
+
+    // Save it (deferred, so it can be edited first) in the AST for linker use.
+    if (symbol)
+        trackLinkageDeferred(*symbol);
+}
+
+// Return a writable version of the variable 'name'.
+//
+// Return nullptr if 'name' is not found.  This should mean
+// something is seriously wrong (e.g., compiler asking self for
+// built-in that doesn't exist).
+TVariable* TParseContextBase::getEditableVariable(const char* name)
+{
+    bool builtIn;
+    TSymbol* symbol = symbolTable.find(name, &builtIn);
+
+    assert(symbol != nullptr);
+    if (symbol == nullptr)
+        return nullptr;
+
+    if (builtIn)
+        makeEditable(symbol);
+
+    return symbol->getAsVariable();
+}
+
 // Select the best matching function for 'call' from 'candidateList'.
 //
 // Assumptions
@@ -72,7 +304,7 @@ namespace glslang {
 const TFunction* TParseContextBase::selectFunction(
     const TVector<const TFunction*> candidateList,
     const TFunction& call,
-    std::function<bool(const TType& from, const TType& to)> convertible,
+    std::function<bool(const TType& from, const TType& to, TOperator op, int arg)> convertible,
     std::function<bool(const TType& from, const TType& to1, const TType& to2)> better,
     /* output */ bool& tie)
 {
@@ -124,13 +356,13 @@ const TFunction* TParseContextBase::selectFunction(
         bool viable = true;
         for (int param = 0; param < candidate.getParamCount(); ++param) {
             if (candidate[param].type->getQualifier().isParamInput()) {
-                if (! convertible(*call[param].type, *candidate[param].type)) {
+                if (! convertible(*call[param].type, *candidate[param].type, candidate.getBuiltInOp(), param)) {
                     viable = false;
                     break;
                 }
             }
             if (candidate[param].type->getQualifier().isParamOutput()) {
-                if (! convertible(*candidate[param].type, *call[param].type)) {
+                if (! convertible(*candidate[param].type, *call[param].type, candidate.getBuiltInOp(), param)) {
                     viable = false;
                     break;
                 }
@@ -150,7 +382,7 @@ const TFunction* TParseContextBase::selectFunction(
         return viableCandidates.front();
 
     // 4. find best...
-    auto betterParam = [&call, &better](const TFunction& can1, const TFunction& can2){
+    auto betterParam = [&call, &better](const TFunction& can1, const TFunction& can2) -> bool {
         // is call -> can2 better than call -> can1 for any parameter
         bool hasBetterParam = false;
         for (int param = 0; param < call.getParamCount(); ++param) {
@@ -181,4 +413,70 @@ const TFunction* TParseContextBase::selectFunction(
     return incumbent;
 }
 
+//
+// Make the passed-in variable information become a member of the
+// global uniform block.  If this doesn't exist yet, make it.
+//
+void TParseContextBase::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType, TString& memberName)
+{
+    // make the global block, if not yet made
+    if (globalUniformBlock == nullptr) {
+        TString& blockName = *NewPoolTString(getGlobalUniformBlockName());
+        TQualifier blockQualifier;
+        blockQualifier.clear();
+        blockQualifier.storage = EvqUniform;
+        TType blockType(new TTypeList, blockName, blockQualifier);
+        TString* instanceName = NewPoolTString("");
+        globalUniformBlock = new TVariable(instanceName, blockType, true);
+        firstNewMember = 0;
+    }
+
+    // add the requested member as a member to the block
+    TType* type = new TType;
+    type->shallowCopy(memberType);
+    type->setFieldName(memberName);
+    TTypeLoc typeLoc = {type, loc};
+    globalUniformBlock->getType().getWritableStruct()->push_back(typeLoc);
+}
+
+//
+// Insert into the symbol table the global uniform block created in
+// growGlobalUniformBlock(). The variables added as members won't be
+// found unless this is done.
+//
+bool TParseContextBase::insertGlobalUniformBlock()
+{
+    if (globalUniformBlock == nullptr)
+        return true;
+
+    int numMembers = (int)globalUniformBlock->getType().getStruct()->size();
+    bool inserted = false;
+    if (firstNewMember == 0) {
+        // This is the first request; we need a normal symbol table insert
+        inserted = symbolTable.insert(*globalUniformBlock);
+        if (inserted)
+            trackLinkageDeferred(*globalUniformBlock);
+    } else if (firstNewMember <= numMembers) {
+        // This is a follow-on request; we need to amend the first insert
+        inserted = symbolTable.amend(*globalUniformBlock, firstNewMember);
+    }
+
+    if (inserted) {
+        finalizeGlobalUniformBlockLayout(*globalUniformBlock);
+        firstNewMember = numMembers;
+    }
+
+    return inserted;
+}
+
+void TParseContextBase::finish()
+{
+    if (!parsingBuiltins) {
+        // Transfer the linkage symbols to AST nodes
+        for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
+            intermediate.addSymbolLinkageNode(linkage, **i);
+        intermediate.addSymbolLinkageNodes(linkage, getLanguage(), symbolTable);
+    }
+}
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 3c9caf13d961e7d74ec7a6676e235bba1a4f00ed..ed043e0a01eee969f765e32b4fc68bd5ad1bc95b 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -39,7 +39,6 @@
 #include "Scan.h"
 
 #include "../OSDependent/osinclude.h"
-#include <cstdarg>
 #include <algorithm>
 
 #include "preprocessor/PpContext.h"
@@ -51,15 +50,12 @@ namespace glslang {
 TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                              int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
                              TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) :
-            TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), 
+            TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), 
             contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0),
             inMain(false), postMainReturn(false), currentFunctionType(nullptr), blockName(nullptr),
-            limits(resources.limits), parsingBuiltins(parsingBuiltins),
+            limits(resources.limits),
             atomicUintOffsets(nullptr), anyIndexLimits(false)
 {
-    // ensure we always have a linkage node, even if empty, to simplify tree topology algorithms
-    linkage = new TIntermAggregate;
-
     // decide whether precision qualifiers should be ignored or respected
     if (profile == EEsProfile || spvVersion.vulkan > 0) {
         precisionManager.respectPrecisionQualifiers();
@@ -185,8 +181,8 @@ bool TParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner& inp
     currentScanner = &input;
     ppContext.setInput(input, versionWillBeError);
     yyparse(this);
-    if (! parsingBuiltins)
-        finalErrorCheck();
+
+    finish();
 
     return numErrors == 0;
 }
@@ -362,81 +358,6 @@ bool TParseContext::parseVectorFields(const TSourceLoc& loc, const TString& comp
     return true;
 }
 
-///////////////////////////////////////////////////////////////////////
-//
-// Errors
-//
-////////////////////////////////////////////////////////////////////////
-
-//
-// Used to output syntax, parsing, and semantic errors.
-//
-
-void TParseContext::outputMessage(const TSourceLoc& loc, const char* szReason,
-                                  const char* szToken,
-                                  const char* szExtraInfoFormat,
-                                  TPrefixType prefix, va_list args)
-{
-    const int maxSize = MaxTokenLength + 200;
-    char szExtraInfo[maxSize];
-
-    safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
-
-    infoSink.info.prefix(prefix);
-    infoSink.info.location(loc);
-    infoSink.info << "'" << szToken <<  "' : " << szReason << " " << szExtraInfo << "\n";
-
-    if (prefix == EPrefixError) {
-        ++numErrors;
-    }
-}
-
-void C_DECL TParseContext::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
-                                 const char* szExtraInfoFormat, ...)
-{
-    if (messages & EShMsgOnlyPreprocessor)
-        return;
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
-    va_end(args);
-
-    if ((messages & EShMsgCascadingErrors) == 0)
-        currentScanner->setEndOfInput();
-}
-
-void C_DECL TParseContext::warn(const TSourceLoc& loc, const char* szReason, const char* szToken,
-                                 const char* szExtraInfoFormat, ...)
-{
-    if (suppressWarnings())
-        return;
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
-    va_end(args);
-}
-
-void C_DECL TParseContext::ppError(const TSourceLoc& loc, const char* szReason, const char* szToken,
-                                 const char* szExtraInfoFormat, ...)
-{
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
-    va_end(args);
-
-    if ((messages & EShMsgCascadingErrors) == 0)
-        currentScanner->setEndOfInput();
-}
-
-void C_DECL TParseContext::ppWarn(const TSourceLoc& loc, const char* szReason, const char* szToken,
-                                 const char* szExtraInfoFormat, ...)
-{
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
-    va_end(args);
-}
-
 //
 // Handle seeing a variable identifier in the grammar.
 //
@@ -457,7 +378,9 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
         // If this is a variable or a block, check it and all it contains, but if this 
         // is a member of an anonymous block, check the whole block, as the whole block
         // will need to be copied up if it contains an implicitly-sized array.
-        if (symbol->getType().containsImplicitlySizedArray() || (symbol->getAsAnonMember() && symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray()))
+        if (symbol->getType().containsImplicitlySizedArray() ||
+            (symbol->getAsAnonMember() &&
+             symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray()))
             makeEditable(symbol);
     }
 
@@ -558,7 +481,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
                     // input/output blocks either don't exist or can be variable indexed
                 }
             } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
-                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array");
+                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
             else if (base->getBasicType() == EbtSampler && version >= 130) {
                 const char* explanation = "variable indexing sampler array";
                 requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation);
@@ -640,35 +563,11 @@ void TParseContext::handleIndexLimits(const TSourceLoc& /*loc*/, TIntermTyped* b
 // effect all nodes sharing it.
 void TParseContext::makeEditable(TSymbol*& symbol)
 {
-    // copyUp() does a deep copy of the type.
-    symbol = symbolTable.copyUp(symbol);
+    TParseContextBase::makeEditable(symbol);
 
-    // Also, see if it's tied to IO resizing
+    // See if it's tied to IO resizing
     if (isIoResizeArray(symbol->getType()))
         ioArraySymbolResizeList.push_back(symbol);
-
-    // Also, save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *symbol);
-}
-
-// Return a writable version of the variable 'name'.
-//
-// Return nullptr if 'name' is not found.  This should mean
-// something is seriously wrong (e.g., compiler asking self for
-// built-in that doesn't exist).
-TVariable* TParseContext::getEditableVariable(const char* name)
-{
-    bool builtIn;
-    TSymbol* symbol = symbolTable.find(name, &builtIn);
-    
-    assert(symbol != nullptr);
-    if (symbol == nullptr)
-        return nullptr;
-
-    if (builtIn)
-        makeEditable(symbol);
-
-    return symbol->getAsVariable();
 }
 
 // Return true if this is a geometry shader input array or tessellation control output array.
@@ -1168,7 +1067,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
                     // means take 'arguments' itself as the one argument.
                     TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
                     TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
-                    if (formalQualifier.storage == EvqOut || formalQualifier.storage == EvqInOut) {
+                    if (formalQualifier.isParamOutput()) {
                         if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped()))
                             error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", "");
                     }
@@ -1210,9 +1109,10 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
                 // if builtIn == true, it's definitely a built-in function with EOpNull
                 if (! builtIn) {
                     call->setUserDefined();
-                    if (symbolTable.atGlobalLevel())
-                        error(loc, "can't call user function from global scope", fnCandidate->getName().c_str(), "");
-                    else
+                    if (symbolTable.atGlobalLevel()) {
+                        requireProfile(loc, ~EEsProfile, "calling user function from global scope");
+                        intermediate.addToCallGraph(infoSink, "main(", fnCandidate->getMangledName());
+                    } else
                         intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
                 }
 
@@ -1314,7 +1214,7 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
                                         function.getType().getQualifier().precision;
     } else if (TIntermAggregate* agg = node.getAsAggregate()) {
         TIntermSequence& sequence = agg->getSequence();
-        int numArgs = (int)sequence.size();
+        unsigned int numArgs = (unsigned int)sequence.size();
         switch (agg->getOp()) {
         case EOpBitfieldExtract:
             numArgs = 1;
@@ -1331,7 +1231,7 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
             break;
         }
         // find the maximum precision from the arguments and parameters
-        for (unsigned int arg = 0; arg < sequence.size(); ++arg) {
+        for (unsigned int arg = 0; arg < numArgs; ++arg) {
             operationPrecision = std::max(operationPrecision, sequence[arg]->getAsTyped()->getQualifier().precision);
             operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
         }
@@ -1499,7 +1399,7 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct
     // Will there be any output conversions?
     bool outputConversions = false;
     for (int i = 0; i < function.getParamCount(); ++i) {
-        if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().storage == EvqOut) {
+        if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().isParamOutput()) {
             outputConversions = true;
             break;
         }
@@ -1911,7 +1811,7 @@ TFunction* TParseContext::handleConstructorCall(const TSourceLoc& loc, const TPu
 }
 
 // Handle seeing a precision qualifier in the grammar.
-void TParseContext::handlePrecisionQualifier(const TSourceLoc& loc, TQualifier& qualifier, TPrecisionQualifier precision)
+void TParseContext::handlePrecisionQualifier(const TSourceLoc& /*loc*/, TQualifier& qualifier, TPrecisionQualifier precision)
 {
     if (obeyPrecisionQualifiers())
         qualifier.precision = precision;
@@ -2000,14 +1900,14 @@ void TParseContext::variableCheck(TIntermTyped*& nodePtr)
 // Both test and if necessary, spit out an error, to see if the node is really
 // an l-value that can be operated on this way.
 //
-// Returns true if the was an error.
+// Returns true if there was an error.
 //
 bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
 {
     TIntermBinary* binaryNode = node->getAsBinaryNode();
 
     if (binaryNode) {
-        bool errorReturn;
+        bool errorReturn = false;
 
         switch(binaryNode->getOp()) {
         case EOpIndexDirect:
@@ -2026,9 +1926,9 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
                 }
             }
 
-            // fall through
+            break; // left node is checked by base class
         case EOpIndexDirectStruct:
-            return lValueErrorCheck(loc, op, binaryNode->getLeft());
+            break; // left node is checked by base class
         case EOpVectorSwizzle:
             errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft());
             if (!errorReturn) {
@@ -2053,11 +1953,16 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
         default:
             break;
         }
-        error(loc, " l-value required", op, "", "");
 
-        return true;
+        if (errorReturn) {
+            error(loc, " l-value required", op, "", "");
+            return true;
+        }
     }
 
+    // Let the base class check errors
+    if (TParseContextBase::lValueErrorCheck(loc, op, node))
+        return true;
 
     const char* symbol = nullptr;
     TIntermSymbol* symNode = node->getAsSymbolNode();
@@ -2066,19 +1971,12 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
 
     const char* message = nullptr;
     switch (node->getQualifier().storage) {
-    case EvqConst:          message = "can't modify a const";        break;
-    case EvqConstReadOnly:  message = "can't modify a const";        break;
     case EvqVaryingIn:      message = "can't modify shader input";   break;
     case EvqInstanceId:     message = "can't modify gl_InstanceID";  break;
     case EvqVertexId:       message = "can't modify gl_VertexID";    break;
     case EvqFace:           message = "can't modify gl_FrontFace";   break;
     case EvqFragCoord:      message = "can't modify gl_FragCoord";   break;
     case EvqPointCoord:     message = "can't modify gl_PointCoord";  break;
-    case EvqUniform:        message = "can't modify a uniform";      break;
-    case EvqBuffer:
-        if (node->getQualifier().readonly)
-            message = "can't modify a readonly buffer";
-        break;
     case EvqFragDepth:
         intermediate.setDepthReplacing();
         // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
@@ -2087,22 +1985,7 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
         break;
 
     default:
-        //
-        // Type that can't be written to?
-        //
-        switch (node->getBasicType()) {
-        case EbtSampler:
-            message = "can't modify a sampler";
-            break;
-        case EbtAtomicUint:
-            message = "can't modify an atomic_uint";
-            break;
-        case EbtVoid:
-            message = "can't modify void";
-            break;
-        default:
-            break;
-        }
+        break;
     }
 
     if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
@@ -2111,7 +1994,6 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
         return true;
     }
 
-
     //
     // Everything else is okay, no error.
     //
@@ -2132,30 +2014,14 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
 // Test for and give an error if the node can't be read from.
 void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
 {
-    if (! node)
-        return;
-
-    TIntermBinary* binaryNode = node->getAsBinaryNode();
-    if (binaryNode) {
-        switch(binaryNode->getOp()) {
-        case EOpIndexDirect:
-        case EOpIndexIndirect:
-        case EOpIndexDirectStruct:
-        case EOpVectorSwizzle:
-            rValueErrorCheck(loc, op, binaryNode->getLeft());
-        default:
-            break;
-        }
-
-        return;
-    }
+    // Let the base class check errors
+    TParseContextBase::rValueErrorCheck(loc, op, node);
 
-    TIntermSymbol* symNode = node->getAsSymbolNode();
-    if (symNode && symNode->getQualifier().writeonly)
-        error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
 #ifdef AMD_EXTENSIONS
-    else if (symNode && symNode->getQualifier().explicitInterp)
-        error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
+    TIntermSymbol* symNode = node->getAsSymbolNode();
+    if (!(symNode && symNode->getQualifier().writeonly)) // base class checks
+        if (symNode && symNode->getQualifier().explicitInterp)
+            error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
 #endif
 }
 
@@ -2448,7 +2314,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
 
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
-                error(loc, "array constructor argument not correct type to construct array element", "constructior", "");
+                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
@@ -3003,7 +2869,7 @@ void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType ba
 
 void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier qualifier, const TType& type)
 {
-    if ((qualifier == EvqOut || qualifier == EvqInOut) && (type.getBasicType() == EbtSampler || type.getBasicType() == EbtAtomicUint))
+    if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque())
         error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
 }
 
@@ -3225,7 +3091,7 @@ void TParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
 //
-void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool& newDeclaration)
+void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol)
 {
     if (symbol == nullptr) {
         bool currentScope;
@@ -3243,7 +3109,8 @@ void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, con
             //
             symbol = new TVariable(&identifier, type);
             symbolTable.insert(*symbol);
-            newDeclaration = true;
+            if (symbolTable.atGlobalLevel())
+                trackLinkageDeferred(*symbol);
 
             if (! symbolTable.atBuiltInLevel()) {
                 if (isIoResizeArray(type)) {
@@ -3403,7 +3270,8 @@ void TParseContext::nonInitConstCheck(const TSourceLoc& loc, TString& identifier
 //
 // Returns a redeclared and type-modified variable if a redeclarated occurred.
 //
-TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier, const TQualifier& qualifier, const TShaderQualifiers& publicType, bool& newDeclaration)
+TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier,
+                                                 const TQualifier& qualifier, const TShaderQualifiers& publicType)
 {
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
@@ -3450,11 +3318,8 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
         // If it wasn't at a built-in level, then it's already been redeclared;
         // that is, this is a redeclaration of a redeclaration; reuse that initial
         // redeclaration.  Otherwise, make the new one.
-        if (builtIn) {
-            // Copy the symbol up to make a writable version
+        if (builtIn)
             makeEditable(symbol);
-            newDeclaration = true;
-        }
 
         // Now, modify the type of the copy, as per the type of the current redeclaration.
 
@@ -3672,7 +3537,7 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
         fixIoArraySize(loc, block->getWritableType());
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *block);
+    trackLinkageDeferred(*block);
 }
 
 void TParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
@@ -3716,7 +3581,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
     if (qualifier.invariant)
         error(loc, "cannot use invariant qualifier on a function parameter", "", "");
     if (qualifier.noContraction) {
-        if (qualifier.storage == EvqOut || qualifier.storage == EvqInOut)
+        if (qualifier.isParamOutput())
             type.getQualifier().noContraction = true;
         else
             warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
@@ -3926,8 +3791,13 @@ void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* lim
 //
 // Do any additional error checking, etc., once we know the parsing is done.
 //
-void TParseContext::finalErrorCheck()
+void TParseContext::finish()
 {
+    TParseContextBase::finish();
+
+    if (parsingBuiltins)
+        return;
+
     // Check on array indexes for ES 2.0 (version 100) limitations.
     for (size_t i = 0; i < needsIndexLimitationChecking.size(); ++i)
         constantIndexExpressionCheck(needsIndexLimitationChecking[i]);
@@ -4559,6 +4429,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         // containing a double, the offset must also be a multiple of 8..."
         if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
             error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
+#ifdef AMD_EXTENSIONS
+        // ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..."
+        else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
+            error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
+#endif
         else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
             error(loc, "must be a multiple of size of first component", "xfb_offset", "");
     }
@@ -4577,7 +4452,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         // an array of size N, all elements of the array from binding through binding + N - 1 must be within this
         // range."
         //
-        if (type.getBasicType() != EbtSampler && type.getBasicType() != EbtBlock && type.getBasicType() != EbtAtomicUint)
+        if (! type.isOpaque() && type.getBasicType() != EbtBlock)
             error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", "");
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
@@ -4662,6 +4537,9 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         case EbtBool:
         case EbtFloat:
         case EbtDouble:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+#endif
             break;
         default:
             error(loc, "cannot be applied to this type", "constant_id", "");
@@ -4997,7 +4875,7 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
     
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to) {
+    const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
         if (from == to)
             return true;
         if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
@@ -5008,7 +4886,7 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
     // Is 'to2' a better conversion than 'to1'?
     // Ties should not be considered as better.
     // Assumes 'convertible' already said true.
-    const auto better = [](const TType& from, const TType& to1, const TType& to2) {
+    const auto better = [](const TType& from, const TType& to1, const TType& to2) -> bool {
         // 1. exact match
         if (from == to2)
             return from != to1;
@@ -5095,8 +4973,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
         error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
-    bool newDeclaration = false;    // true if a new entry gets added to the symbol table
-    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers, newDeclaration);
+    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers);
     if (symbol == nullptr)
         reservedErrorCheck(loc, identifier);
 
@@ -5114,7 +4991,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
         arrayUnsizedCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
 
         if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
-            declareArray(loc, identifier, type, symbol, newDeclaration);
+            declareArray(loc, identifier, type, symbol);
 
         if (initializer) {
             profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "initializer");
@@ -5123,7 +5000,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
     } else {
         // non-array case
         if (symbol == nullptr)
-            symbol = declareNonArray(loc, identifier, type, newDeclaration);
+            symbol = declareNonArray(loc, identifier, type);
         else if (type != symbol->getType())
             error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
     }
@@ -5146,10 +5023,6 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
     layoutObjectCheck(loc, *symbol);
     fixOffset(loc, *symbol);
 
-    // see if it's a linker-level object to track
-    if (newDeclaration && symbolTable.atGlobalLevel())
-        intermediate.addSymbolLinkageNode(linkage, *symbol);
-
     return initNode;
 }
 
@@ -5185,20 +5058,22 @@ TVariable* TParseContext::makeInternalVariable(const char* name, const TType& ty
 //
 // Return the successfully declared variable.
 //
-TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool& newDeclaration)
+TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type)
 {
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
     ioArrayCheck(loc, type, identifier);
+
     // add variable to symbol table
-    if (! symbolTable.insert(*variable)) {
-        error(loc, "redefinition", variable->getName().c_str(), "");
-        return nullptr;
-    } else {
-        newDeclaration = true;
+    if (symbolTable.insert(*variable)) {
+        if (symbolTable.atGlobalLevel())
+            trackLinkageDeferred(*variable);
         return variable;
     }
+
+    error(loc, "redefinition", variable->getName().c_str(), "");
+    return nullptr;
 }
 
 //
@@ -5561,6 +5436,24 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
         basicOp = EOpConstructDouble;
         break;
 
+#ifdef AMD_EXTENSIONS
+    case EOpConstructF16Vec2:
+    case EOpConstructF16Vec3:
+    case EOpConstructF16Vec4:
+    case EOpConstructF16Mat2x2:
+    case EOpConstructF16Mat2x3:
+    case EOpConstructF16Mat2x4:
+    case EOpConstructF16Mat3x2:
+    case EOpConstructF16Mat3x3:
+    case EOpConstructF16Mat3x4:
+    case EOpConstructF16Mat4x2:
+    case EOpConstructF16Mat4x3:
+    case EOpConstructF16Mat4x4:
+    case EOpConstructFloat16:
+        basicOp = EOpConstructFloat16;
+        break;
+#endif
+
     case EOpConstructIVec2:
     case EOpConstructIVec3:
     case EOpConstructIVec4:
@@ -5837,7 +5730,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
         fixIoArraySize(loc, variable.getWritableType());
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, variable);
+    trackLinkageDeferred(variable);
 }
 
 // Do all block-declaration checking regarding the combination of in/out/uniform/buffer
@@ -6018,16 +5911,23 @@ void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typ
             if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
                 error(memberLoc, "must be a multiple of the member's alignment", "offset", "");
 
-            // "It is a compile-time error to specify an offset that is smaller than the offset of the previous 
+            // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous 
             // member in the block or that lies within the previous member of the block"
-            if (memberQualifier.layoutOffset < offset)
-                error(memberLoc, "cannot lie in previous members", "offset", "");
-
-            // "The offset qualifier forces the qualified member to start at or after the specified 
-            // integral-constant expression, which will be its byte offset from the beginning of the buffer. 
-            // "The actual offset of a member is computed as 
-            // follows: If offset was declared, start with that offset, otherwise start with the next available offset."
-            offset = std::max(offset, memberQualifier.layoutOffset);
+            if (spvVersion.spv == 0) {
+                if (memberQualifier.layoutOffset < offset)
+                    error(memberLoc, "cannot lie in previous members", "offset", "");
+
+                // "The offset qualifier forces the qualified member to start at or after the specified 
+                // integral-constant expression, which will be its byte offset from the beginning of the buffer. 
+                // "The actual offset of a member is computed as 
+                // follows: If offset was declared, start with that offset, otherwise start with the next available offset."
+                offset = std::max(offset, memberQualifier.layoutOffset);
+            } else {
+                // TODO: Vulkan: "It is a compile-time error to have any offset, explicit or assigned,
+                // that lies within another member of the block."
+
+                offset = memberQualifier.layoutOffset;
+            }
         }
 
         // "The actual alignment of a member will be the greater of the specified align alignment and the standard 
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index aa92954be3840adee2377cac68433fa39fb83fb5..f850f089714ecc7b88cc8a2b3b496c87047fb28f 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -49,8 +49,7 @@
 #include "SymbolTable.h"
 #include "localintermediate.h"
 #include "Scan.h"
-#include <functional>
-
+#include <cstdarg>
 #include <functional>
 
 namespace glslang {
@@ -73,18 +72,30 @@ typedef std::set<int> TIdSetType;
 //
 class TParseContextBase : public TParseVersions {
 public:
-    TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, int version,
+    TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, int version,
                       EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
                       TInfoSink& infoSink, bool forwardCompatible, EShMessages messages)
           : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
             symbolTable(symbolTable),
-            linkage(nullptr), scanContext(nullptr), ppContext(nullptr) { }
+            parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
+            globalUniformBlock(nullptr)
+    {
+        linkage = new TIntermAggregate;
+    }
     virtual ~TParseContextBase() { }
 
+    virtual void C_DECL   error(const TSourceLoc&, const char* szReason, const char* szToken,
+                                const char* szExtraInfoFormat, ...);
+    virtual void C_DECL    warn(const TSourceLoc&, const char* szReason, const char* szToken,
+                                const char* szExtraInfoFormat, ...);
+    virtual void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken,
+                                const char* szExtraInfoFormat, ...);
+    virtual void C_DECL  ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
+                                const char* szExtraInfoFormat, ...);
+
     virtual void setLimits(const TBuiltInResource&) = 0;
-    
+
     EShLanguage getLanguage() const { return language; }
-    TIntermAggregate*& getLinkage() { return linkage; }
     void setScanContext(TScanContext* c) { scanContext = c; }
     TScanContext* getScanContext() const { return scanContext; }
     void setPpContext(TPpContext* c) { ppContext = c; }
@@ -126,11 +137,22 @@ public:
 
     TSymbolTable& symbolTable;   // symbol table that goes with the current language, version, and profile
 
+    // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
+    // TODO: This could perhaps get its own object, but the current design doesn't work
+    // yet when new uniform variables are declared between function definitions, so
+    // this is pending getting a fully functional design.
+    virtual void growGlobalUniformBlock(TSourceLoc&, TType&, TString& memberName);
+    virtual bool insertGlobalUniformBlock();
+
+    virtual bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
+    virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
+
 protected:
     TParseContextBase(TParseContextBase&);
     TParseContextBase& operator=(TParseContextBase&);
 
-    TIntermAggregate* linkage;   // aggregate node of objects the linker may need, if not referenced by the rest of the AST
+    const bool parsingBuiltins;       // true if parsing built-in symbols/functions
+    TVector<TSymbol*> linkageSymbols; // these need to be transferred to 'linkage', after all editing is done
     TScanContext* scanContext;
     TPpContext* ppContext;
 
@@ -144,9 +166,27 @@ protected:
 
     // see implementation for detail
     const TFunction* selectFunction(const TVector<const TFunction*>, const TFunction&,
-        std::function<bool(const TType&, const TType&)>,
+        std::function<bool(const TType&, const TType&, TOperator, int arg)>,
         std::function<bool(const TType&, const TType&, const TType&)>,
         /* output */ bool& tie);
+
+    // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
+    TVariable* globalUniformBlock;   // the actual block, inserted into the symbol table
+    int firstNewMember;              // the index of the first member not yet inserted into the symbol table
+    // override this to set the language-specific name
+    virtual const char* getGlobalUniformBlockName() { return ""; }
+    virtual void finalizeGlobalUniformBlockLayout(TVariable&) { }
+    virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
+                               const char* szExtraInfoFormat, TPrefixType prefix,
+                               va_list args);
+    virtual void trackLinkage(TSymbol& symbol);
+    virtual void trackLinkageDeferred(TSymbol& symbol);
+    virtual void makeEditable(TSymbol*&);
+    virtual TVariable* getEditableVariable(const char* name);
+    virtual void finish();
+
+private:
+    TIntermAggregate* linkage;
 };
 
 //
@@ -197,33 +237,23 @@ public:
     bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
     void setPrecisionDefaults();
 
-    void setLimits(const TBuiltInResource&);
-    bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false);
+    void setLimits(const TBuiltInResource&) override;
+    bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override;
     void parserError(const char* s);     // for bison's yyerror
 
-    void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
-                      const char* szExtraInfoFormat, ...);
-    void C_DECL  warn(const TSourceLoc&, const char* szReason, const char* szToken,
-                      const char* szExtraInfoFormat, ...);
-    void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken,
-                      const char* szExtraInfoFormat, ...);
-    void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
-                      const char* szExtraInfoFormat, ...);
-
     void reservedErrorCheck(const TSourceLoc&, const TString&);
-    void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op);
-    bool lineContinuationCheck(const TSourceLoc&, bool endOfComment);
-    bool lineDirectiveShouldSetNextLine() const;
+    void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) override;
+    bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) override;
+    bool lineDirectiveShouldSetNextLine() const override;
     bool builtInName(const TString&);
 
-    void handlePragma(const TSourceLoc&, const TVector<TString>&);
+    void handlePragma(const TSourceLoc&, const TVector<TString>&) override;
     TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string);
     TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
     void checkIndex(const TSourceLoc&, const TType&, int& index);
     void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
 
-    void makeEditable(TSymbol*&);
-    TVariable* getEditableVariable(const char* name);
+    void makeEditable(TSymbol*&) override;
     bool isIoResizeArray(const TType&) const;
     void fixIoArraySize(const TSourceLoc&, TType&);
     void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier);
@@ -259,8 +289,8 @@ public:
     void unaryOpError(const TSourceLoc&, const char* op, TString operand);
     void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right);
     void variableCheck(TIntermTyped*& nodePtr);
-    bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
-    void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
+    bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override;
+    void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override;
     void constantValueCheck(TIntermTyped* node, const char* token);
     void integerCheck(const TIntermTyped* node, const char* token);
     void globalCheck(const TSourceLoc&, const char* token);
@@ -292,7 +322,7 @@ public:
     void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&);
     void parameterTypeCheck(const TSourceLoc&, TStorageQualifier qualifier, const TType& type);
     bool containsFieldWithBasicType(const TType& type ,TBasicType basicType);
-    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration);
+    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
     void paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type);
     void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type);
@@ -346,14 +376,11 @@ protected:
     void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
-    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool& newDeclaration);
-    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
+    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&);
+    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
-    void finalErrorCheck();
-    void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
-                       const char* szExtraInfoFormat, TPrefixType prefix,
-                       va_list args);
+    void finish() override;
 
 public:
     //
@@ -382,7 +409,6 @@ protected:
     TParseContext(TParseContext&);
     TParseContext& operator=(TParseContext&);
 
-    const bool parsingBuiltins;        // true if parsing built-in symbols/functions
     static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2 * 2 * 2)); // see computeSamplerTypeIndex()
     TPrecisionQualifier defaultSamplerPrecision[maxSamplerIndex];
     TPrecisionManager precisionManager;
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index ee0dbb40a49cc66c9fed2a46f8a3a22338750d92..3750645403fb53c120d935356c6bb7afac252b53 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -463,6 +463,25 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["u64vec3"] =                 U64VEC3;
     (*KeywordMap)["u64vec4"] =                 U64VEC4;
 
+#ifdef AMD_EXTENSIONS
+    (*KeywordMap)["float16_t"] =               FLOAT16_T;
+    (*KeywordMap)["f16vec2"] =                 F16VEC2;
+    (*KeywordMap)["f16vec3"] =                 F16VEC3;
+    (*KeywordMap)["f16vec4"] =                 F16VEC4;
+    (*KeywordMap)["f16mat2"] =                 F16MAT2;
+    (*KeywordMap)["f16mat3"] =                 F16MAT3;
+    (*KeywordMap)["f16mat4"] =                 F16MAT4;
+    (*KeywordMap)["f16mat2x2"] =               F16MAT2X2;
+    (*KeywordMap)["f16mat2x3"] =               F16MAT2X3;
+    (*KeywordMap)["f16mat2x4"] =               F16MAT2X4;
+    (*KeywordMap)["f16mat3x2"] =               F16MAT3X2;
+    (*KeywordMap)["f16mat3x3"] =               F16MAT3X3;
+    (*KeywordMap)["f16mat3x4"] =               F16MAT3X4;
+    (*KeywordMap)["f16mat4x2"] =               F16MAT4X2;
+    (*KeywordMap)["f16mat4x3"] =               F16MAT4X3;
+    (*KeywordMap)["f16mat4x4"] =               F16MAT4X4;
+#endif
+
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
     (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
@@ -687,6 +706,9 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
         case PpAtomConstUint64:        parserToken->sType.lex.i64 = ppToken.i64val;     return UINT64CONSTANT;
         case PpAtomConstFloat:         parserToken->sType.lex.d   = ppToken.dval;       return FLOATCONSTANT;
         case PpAtomConstDouble:        parserToken->sType.lex.d   = ppToken.dval;       return DOUBLECONSTANT;
+#ifdef AMD_EXTENSIONS
+        case PpAtomConstFloat16:       parserToken->sType.lex.d   = ppToken.dval;       return FLOAT16CONSTANT;
+#endif
         case PpAtomIdentifier:
         {
             int token = tokenizeIdentifier();
@@ -938,10 +960,38 @@ int TScanContext::tokenizeIdentifier()
     case U64VEC2:
     case U64VEC3:
     case U64VEC4:
-        if (parseContext.profile != EEsProfile && parseContext.version >= 450)
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() || 
+            (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) &&
+             parseContext.profile != EEsProfile && parseContext.version >= 450))
             return keyword;
         return identifierOrType();
 
+#ifdef AMD_EXTENSIONS
+    case FLOAT16_T:
+    case F16VEC2:
+    case F16VEC3:
+    case F16VEC4:
+    case F16MAT2:
+    case F16MAT3:
+    case F16MAT4:
+    case F16MAT2X2:
+    case F16MAT2X3:
+    case F16MAT2X4:
+    case F16MAT3X2:
+    case F16MAT3X3:
+    case F16MAT3X4:
+    case F16MAT4X2:
+    case F16MAT4X3:
+    case F16MAT4X4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) &&
+             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
     case ISAMPLERCUBEARRAY:
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 414a62b316e17695b321c87b6a4d7afffab734e1..e50b12f2555a07fb4ea9069153f0a708e2e8f202 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -51,6 +51,7 @@
 #include "../../hlsl/hlslParseables.h"
 #include "Scan.h"
 #include "ScanContext.h"
+#include "../../hlsl/hlslScanContext.h"
 
 #include "../Include/ShHandle.h"
 #include "../../OGLCompilersDLL/InitializeDll.h"
@@ -60,6 +61,7 @@
 #define SH_EXPORTING
 #include "../Public/ShaderLang.h"
 #include "reflection.h"
+#include "iomapper.h"
 #include "Initialize.h"
 
 namespace { // anonymous namespace for file-local functions and symbols
@@ -79,6 +81,28 @@ TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource sourc
     }
 }
 
+// Create a language specific version of a parse context.
+TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate& intermediate,
+                                      int version, EProfile profile, EShSource source,
+                                      EShLanguage language, TInfoSink& infoSink,
+                                      SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
+                                      bool parsingBuiltIns, const std::string sourceEntryPointName = "")
+{
+    switch (source) {
+    case EShSourceGlsl:
+        intermediate.setEntryPointName("main");
+        return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
+                                 language, infoSink, forwardCompatible, messages);
+
+    case EShSourceHlsl:
+        return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
+                                    language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages);
+    default:
+        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
+        return nullptr;
+    }
+}
+
 // Local mapping functions for making arrays of symbol tables....
 
 const int VersionCount = 15;  // index range in MapVersionToIndex
@@ -186,17 +210,22 @@ TPoolAllocator* PerProcessGPA = 0;
 //
 // Parse and add to the given symbol table the content of the given shader string.
 //
-bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, 
-                           TSymbolTable& symbolTable)
+bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
+                           EShSource source, TInfoSink& infoSink, TSymbolTable& symbolTable)
 {
     TIntermediate intermediate(language, version, profile);
     
-    TParseContext parseContext(symbolTable, intermediate, true, version, profile, spvVersion, language, infoSink);
+    intermediate.setSource(source);
+
+    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(symbolTable, intermediate, version, profile, source, 
+                                                                       language, infoSink, spvVersion, true, EShMsgDefault,
+                                                                       true));
+
     TShader::ForbidInclude includer;
-    TPpContext ppContext(parseContext, "", includer);
-    TScanContext scanContext(parseContext);
-    parseContext.setScanContext(&scanContext);
-    parseContext.setPpContext(&ppContext);
+    TPpContext ppContext(*parseContext, "", includer);
+    TScanContext scanContext(*parseContext);
+    parseContext->setScanContext(&scanContext);
+    parseContext->setPpContext(&ppContext);
     
     //
     // Push the symbol table to give it an initial scope.  This
@@ -215,7 +244,7 @@ bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profil
         return true;
     
     TInputScanner input(1, builtInShaders, builtInLengths);
-    if (! parseContext.parseShaderStrings(ppContext, input) != 0) {
+    if (! parseContext->parseShaderStrings(ppContext, input) != 0) {
         infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
         printf("Unable to parse built-ins\n%s\n", infoSink.info.c_str());
         printf("%s\n", builtInShaders[0]);
@@ -235,10 +264,12 @@ int CommonIndex(EProfile profile, EShLanguage language)
 // To initialize per-stage shared tables, with the common table already complete.
 //
 void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion,
-                                EShLanguage language, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables)
+                                EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable,
+                                TSymbolTable** symbolTables)
 {
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
-    InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, infoSink, *symbolTables[language]);
+    InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
+                          infoSink, *symbolTables[language]);
     builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]);
     if (profile == EEsProfile && version >= 300)
         (*symbolTables[language]).setNoBuiltInRedeclarations();
@@ -257,32 +288,40 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
     builtInParseables->initialize(version, profile, spvVersion);
 
     // do the common tables
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, infoSink, *commonTable[EPcGeneral]);
+    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
+                          infoSink, *commonTable[EPcGeneral]);
     if (profile == EEsProfile)
-        InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, infoSink, *commonTable[EPcFragment]);
+        InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
+                              infoSink, *commonTable[EPcFragment]);
 
     // do the per-stage tables
 
     // always have vertex and fragment
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, infoSink, commonTable, symbolTables);
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
+                               infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
+                               infoSink, commonTable, symbolTables);
 
     // check for tessellation
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
+                                   infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
+                                   infoSink, commonTable, symbolTables);
     }
 
     // check for geometry
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
+                                   infoSink, commonTable, symbolTables);
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
+                                   infoSink, commonTable, symbolTables);
 
     return true;
 }
@@ -293,7 +332,7 @@ bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& inf
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
     
     builtInParseables->initialize(*resources, version, profile, spvVersion, language);
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, infoSink, symbolTable);
+    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable);
     builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources);
 
     return true;
@@ -577,7 +616,8 @@ bool ProcessDeferred(
     TIntermediate& intermediate, // returned tree, etc.
     ProcessingContext& processingContext,
     bool requireNonempty,
-    TShader::Includer& includer
+    TShader::Includer& includer,
+    const std::string sourceEntryPointName = ""
     )
 {
     if (! InitThread())
@@ -692,15 +732,10 @@ bool ProcessDeferred(
     // Now we can process the full shader under proper symbols and rules.
     //
 
-    TParseContextBase* parseContext;
-    if (source == EShSourceHlsl) {
-        parseContext = new HlslParseContext(symbolTable, intermediate, false, version, profile, spvVersion,
-                                            compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
-    } else {
-        intermediate.setEntryPointName("main");
-        parseContext = new TParseContext(symbolTable, intermediate, false, version, profile, spvVersion,
-                                         compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
-    }
+    TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source,
+                                                         compiler->getLanguage(), compiler->infoSink,
+                                                         spvVersion, forwardCompatible, messages, false, sourceEntryPointName);
+
     TPpContext ppContext(*parseContext, names[numPre]? names[numPre]: "", includer);
 
     // only GLSL (bison triggered, really) needs an externally set scan context
@@ -938,14 +973,13 @@ struct DoPreprocessing {
 struct DoFullParse{
   bool operator()(TParseContextBase& parseContext, TPpContext& ppContext,
                   TInputScanner& fullInput, bool versionWillBeError,
-                  TSymbolTable& symbolTable, TIntermediate& intermediate,
+                  TSymbolTable&, TIntermediate& intermediate,
                   EShOptimizationLevel optLevel, EShMessages messages) 
     {
         bool success = true;
         // Parse the full shader.
         if (! parseContext.parseShaderStrings(ppContext, fullInput, versionWillBeError))
             success = false;
-        intermediate.addSymbolLinkageNodes(parseContext.getLinkage(), parseContext.getLanguage(), symbolTable);
 
         if (success && intermediate.getTreeRoot()) {
             if (optLevel == EShOptNoGeneration)
@@ -1021,14 +1055,15 @@ bool CompileDeferred(
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TIntermediate& intermediate,// returned tree, etc.
-    TShader::Includer& includer)
+    TShader::Includer& includer,
+    const std::string sourceEntryPointName = "")
 {
     DoFullParse parser;
     return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
                            preamble, optLevel, resources, defaultVersion,
                            defaultProfile, forceDefaultVersionAndProfile,
                            forwardCompatible, messages, intermediate, parser,
-                           true, includer);
+                           true, includer, sourceEntryPointName);
 }
 
 } // end anonymous namespace for local functions
@@ -1048,6 +1083,7 @@ int ShInitialize()
         PerProcessGPA = new TPoolAllocator();
 
     glslang::TScanContext::fillInKeywordMap();
+    glslang::HlslScanContext::fillInKeywordMap();
 
     return 1;
 }
@@ -1140,6 +1176,7 @@ int __fastcall ShFinalize()
     }
 
     glslang::TScanContext::deleteKeywordMap();
+    glslang::HlslScanContext::deleteKeywordMap();
 
     return 1;
 }
@@ -1444,7 +1481,7 @@ public:
     virtual bool compile(TIntermNode*, int = 0, EProfile = ENoProfile) { return true; }
 };
 
-TShader::TShader(EShLanguage s) 
+TShader::TShader(EShLanguage s)
     : pool(0), stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
 {
     infoSink = new TInfoSink;
@@ -1488,6 +1525,19 @@ void TShader::setEntryPoint(const char* entryPoint)
     intermediate->setEntryPointName(entryPoint);
 }
 
+void TShader::setSourceEntryPoint(const char* name)
+{
+    sourceEntryPointName = name;
+}
+
+void TShader::setShiftSamplerBinding(unsigned int base) { intermediate->setShiftSamplerBinding(base); }
+void TShader::setShiftTextureBinding(unsigned int base) { intermediate->setShiftTextureBinding(base); }
+void TShader::setShiftImageBinding(unsigned int base)   { intermediate->setShiftImageBinding(base); }
+void TShader::setShiftUboBinding(unsigned int base)     { intermediate->setShiftUboBinding(base); }
+void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
+void TShader::setFlattenUniformArrays(bool flatten)     { intermediate->setFlattenUniformArrays(flatten); }
+void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
+
 //
 // Turn the shader strings into a parse tree in the TIntermediate.
 //
@@ -1507,7 +1557,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
     return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
                            preamble, EShOptNone, builtInResources, defaultVersion,
                            defaultProfile, forceDefaultVersionAndProfile,
-                           forwardCompatible, messages, *intermediate, includer);
+                           forwardCompatible, messages, *intermediate, includer, sourceEntryPointName);
 }
 
 bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages)
@@ -1548,7 +1598,7 @@ const char* TShader::getInfoDebugLog()
     return infoSink->debug.c_str();
 }
 
-TProgram::TProgram() : pool(0), reflection(0), linked(false)
+TProgram::TProgram() : pool(0), reflection(0), ioMapper(nullptr), linked(false)
 {
     infoSink = new TInfoSink;
     for (int s = 0; s < EShLangCount; ++s) {
@@ -1637,7 +1687,8 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
         newedIntermediate[stage] = true;
     }
 
-    infoSink->info << "\nLinked " << StageName(stage) << " stage:\n\n";
+    if (messages & EShMsgAST)
+        infoSink->info << "\nLinked " << StageName(stage) << " stage:\n\n";
 
     if (stages[stage].size() > 1) {
         std::list<TShader*>::const_iterator it;
@@ -1645,7 +1696,7 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
             intermediate[stage]->merge(*infoSink, *(*it)->intermediate);
     }
 
-    intermediate[stage]->finalCheck(*infoSink);
+    intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
     if (messages & EShMsgAST)
         intermediate[stage]->output(*infoSink, true);
@@ -1684,20 +1735,43 @@ bool TProgram::buildReflection()
     return true;
 }
 
-int TProgram::getNumLiveUniformVariables()           { return reflection->getNumUniforms(); }
-int TProgram::getNumLiveUniformBlocks()              { return reflection->getNumUniformBlocks(); }
-const char* TProgram::getUniformName(int index)      { return reflection->getUniform(index).name.c_str(); }
-const char* TProgram::getUniformBlockName(int index) { return reflection->getUniformBlock(index).name.c_str(); }
-int TProgram::getUniformBlockSize(int index)         { return reflection->getUniformBlock(index).size; }
-int TProgram::getUniformIndex(const char* name)      { return reflection->getIndex(name); }
-int TProgram::getUniformBlockIndex(int index)        { return reflection->getUniform(index).index; }
-int TProgram::getUniformType(int index)              { return reflection->getUniform(index).glDefineType; }
-int TProgram::getUniformBufferOffset(int index)      { return reflection->getUniform(index).offset; }
-int TProgram::getUniformArraySize(int index)         { return reflection->getUniform(index).size; }
-int TProgram::getNumLiveAttributes()                 { return reflection->getNumAttributes(); }
-const char* TProgram::getAttributeName(int index)    { return reflection->getAttribute(index).name.c_str(); }
-int TProgram::getAttributeType(int index)            { return reflection->getAttribute(index).glDefineType; }
+int TProgram::getNumLiveUniformVariables() const             { return reflection->getNumUniforms(); }
+int TProgram::getNumLiveUniformBlocks() const                { return reflection->getNumUniformBlocks(); }
+const char* TProgram::getUniformName(int index) const        { return reflection->getUniform(index).name.c_str(); }
+const char* TProgram::getUniformBlockName(int index) const   { return reflection->getUniformBlock(index).name.c_str(); }
+int TProgram::getUniformBlockSize(int index) const           { return reflection->getUniformBlock(index).size; }
+int TProgram::getUniformIndex(const char* name) const        { return reflection->getIndex(name); }
+int TProgram::getUniformBlockIndex(int index) const          { return reflection->getUniform(index).index; }
+int TProgram::getUniformType(int index) const                { return reflection->getUniform(index).glDefineType; }
+int TProgram::getUniformBufferOffset(int index) const        { return reflection->getUniform(index).offset; }
+int TProgram::getUniformArraySize(int index) const           { return reflection->getUniform(index).size; }
+int TProgram::getNumLiveAttributes() const                   { return reflection->getNumAttributes(); }
+const char* TProgram::getAttributeName(int index) const      { return reflection->getAttribute(index).name.c_str(); }
+int TProgram::getAttributeType(int index) const              { return reflection->getAttribute(index).glDefineType; }
+const TType* TProgram::getAttributeTType(int index) const    { return reflection->getAttribute(index).getType(); }
+const TType* TProgram::getUniformTType(int index) const      { return reflection->getUniform(index).getType(); }
+const TType* TProgram::getUniformBlockTType(int index) const { return reflection->getUniformBlock(index).getType(); }
 
 void TProgram::dumpReflection()                      { reflection->dump(); }
 
+//
+// I/O mapping implementation.
+//
+bool TProgram::mapIO(TIoMapResolver* resolver)
+{
+    if (! linked || ioMapper)
+        return false;
+
+    ioMapper = new TIoMapper;
+
+    for (int s = 0; s < EShLangCount; ++s) {
+        if (intermediate[s]) {
+            if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, resolver))
+                return false;
+        }
+    }
+
+    return true;
+}
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 2068f26bd3dad8fe04ffbc7ece0097c57051c427..fb09fdf991370d0733ebb9e893c751b363b3dcc2 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -60,6 +60,9 @@ void TType::buildMangledName(TString& mangledName)
     switch (basicType) {
     case EbtFloat:              mangledName += 'f';      break;
     case EbtDouble:             mangledName += 'd';      break;
+#ifdef AMD_EXTENSIONS
+    case EbtFloat16:            mangledName += "f16";    break;
+#endif
     case EbtInt:                mangledName += 'i';      break;
     case EbtUint:               mangledName += 'u';      break;
     case EbtInt64:              mangledName += "i64";    break;
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 97c3d6b515e4cb284501478b79f46916ac062ea6..aeec34fc0299eb97dfff36e1cd72744972509f08 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -147,7 +147,8 @@ public:
     TVariable(const TString *name, const TType& t, bool uT = false )
         : TSymbol(name), 
           userType(uT),
-          constSubtree(nullptr) { type.shallowCopy(t); }
+          constSubtree(nullptr),
+          anonId(-1) { type.shallowCopy(t); }
     virtual TVariable* clone() const;
     virtual ~TVariable() { }
 
@@ -161,6 +162,8 @@ public:
     virtual void setConstArray(const TConstUnionArray& array) { constArray = array; }
     virtual void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
     virtual TIntermTyped* getConstSubtree() const { return constSubtree; }
+    virtual void setAnonId(int i) { anonId = i; }
+    virtual int getAnonId() const { return anonId; }
 
     virtual void dump(TInfoSink &infoSink) const;
 
@@ -178,6 +181,7 @@ protected:
     // constant, or neither, but never both.
     TConstUnionArray constArray;  // for compile-time constant value
     TIntermTyped* constSubtree;   // for specialization constant computation
+    int anonId;                   // the ID used for anonymous blocks: TODO: see if uniqueId could serve a dual purpose
 };
 
 //
@@ -305,27 +309,16 @@ public:
         //
         // returning true means symbol was added to the table with no semantic errors
         //
-        tInsertResult result;
         const TString& name = symbol.getName();
         if (name == "") {
+            symbol.getAsVariable()->setAnonId(anonId++);
             // An empty name means an anonymous container, exposing its members to the external scope.
             // Give it a name and insert its members in the symbol table, pointing to the container.
             char buf[20];
-            snprintf(buf, 20, "%s%d", AnonymousPrefix, anonId);
+            snprintf(buf, 20, "%s%d", AnonymousPrefix, symbol.getAsVariable()->getAnonId());
             symbol.changeName(NewPoolTString(buf));
 
-            bool isOkay = true;
-            const TTypeList& types = *symbol.getAsVariable()->getType().getStruct();
-            for (unsigned int m = 0; m < types.size(); ++m) {
-                TAnonMember* member = new TAnonMember(&types[m].type->getFieldName(), m, *symbol.getAsVariable(), anonId);
-                result = level.insert(tLevelPair(member->getMangledName(), member));
-                if (! result.second)
-                    isOkay = false;
-            }
-
-            ++anonId;
-
-            return isOkay;
+            return insertAnonymousMembers(symbol, 0);
         } else {
             // Check for redefinition errors:
             // - STL itself will tell us if there is a direct name collision, with name mangling, at this level
@@ -340,12 +333,33 @@ public:
                 level.insert(tLevelPair(insertName, &symbol));
 
                 return true;
-            } else {
-                result = level.insert(tLevelPair(insertName, &symbol));
+            } else
+                return level.insert(tLevelPair(insertName, &symbol)).second;
+        }
+    }
 
-                return result.second;
-            }
+    // Add more members to an already inserted aggregate object
+    bool amend(TSymbol& symbol, int firstNewMember)
+    {
+        // See insert() for comments on basic explanation of insert.
+        // This operates similarly, but more simply.
+        // Only supporting amend of anonymous blocks so far.
+        if (IsAnonymous(symbol.getName()))
+            return insertAnonymousMembers(symbol, firstNewMember);
+        else
+            return false;
+    }
+
+    bool insertAnonymousMembers(TSymbol& symbol, int firstMember)
+    {
+        const TTypeList& types = *symbol.getAsVariable()->getType().getStruct();
+        for (unsigned int m = firstMember; m < types.size(); ++m) {
+            TAnonMember* member = new TAnonMember(&types[m].type->getFieldName(), m, *symbol.getAsVariable(), symbol.getAsVariable()->getAnonId());
+            if (! level.insert(tLevelPair(member->getMangledName(), member)).second)
+                return false;
         }
+
+        return true;
     }
 
     TSymbol* find(const TString& name) const
@@ -546,6 +560,14 @@ public:
         return table[currentLevel()]->insert(symbol, separateNameSpaces);
     }
 
+    // Add more members to an already inserted aggregate object
+    bool amend(TSymbol& symbol, int firstNewMember)
+    {
+        // See insert() for comments on basic explanation of insert.
+        // This operates similarly, but more simply.
+        return table[currentLevel()]->amend(symbol, firstNewMember);
+    }
+
     //
     // To allocate an internal temporary, which will need to be uniquely
     // identified by the consumer of the AST, but never need to 
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 52d205da2a6c852594594eacc6b3555fc757d79d..8a29cb37f4a00a9554ff98191e09f87072b54854 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -192,6 +192,7 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter]     = EBhDisable;
     extensionBehavior[E_GL_AMD_gcn_shader]                           = EBhDisable;
+    extensionBehavior[E_GL_AMD_gpu_shader_half_float]                = EBhDisable;
 #endif
 
     // AEP
@@ -299,6 +300,7 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_AMD_shader_trinary_minmax 1\n"
             "#define GL_AMD_shader_explicit_vertex_parameter 1\n"
             "#define GL_AMD_gcn_shader 1\n"
+            "#define GL_AMD_gpu_shader_half_float 1\n"
 #endif
             ;
     }
@@ -663,6 +665,19 @@ void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
     profileRequires(loc, ECompatibilityProfile, 400, nullptr, op);
 }
 
+#ifdef AMD_EXTENSIONS
+// Call for any operation needing GLSL float16 data-type support.
+void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, "shader half float");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+#endif
+
 // Call for any operation needing GLSL 64-bit integer data-type support.
 void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 6fd08b05c035c3335bb136540263e180b59c1517..17baf3b1a3a69bbda8451ad2d3b911ae55535534 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -136,10 +136,11 @@ const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp
 const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
 
 #ifdef AMD_EXTENSIONS
-const char* const E_GL_AMD_shader_ballot = "GL_AMD_shader_ballot";
-const char* const E_GL_AMD_shader_trinary_minmax = "GL_AMD_shader_trinary_minmax";
-const char* const E_GL_AMD_shader_explicit_vertex_parameter = "GL_AMD_shader_explicit_vertex_parameter";
-const char* const E_GL_AMD_gcn_shader = "GL_AMD_gcn_shader";
+const char* const E_GL_AMD_shader_ballot                        = "GL_AMD_shader_ballot";
+const char* const E_GL_AMD_shader_trinary_minmax                = "GL_AMD_shader_trinary_minmax";
+const char* const E_GL_AMD_shader_explicit_vertex_parameter     = "GL_AMD_shader_explicit_vertex_parameter";
+const char* const E_GL_AMD_gcn_shader                           = "GL_AMD_gcn_shader";
+const char* const E_GL_AMD_gpu_shader_half_float                = "GL_AMD_gpu_shader_half_float";
 #endif
 
 // AEP
diff --git a/glslang/MachineIndependent/gl_types.h b/glslang/MachineIndependent/gl_types.h
index 9e877d37dc36afa9d73aa6a535268679581d5ca7..d7cb31fe38ad2ec6e3274de16fbbc59580c8a3b2 100644
--- a/glslang/MachineIndependent/gl_types.h
+++ b/glslang/MachineIndependent/gl_types.h
@@ -76,6 +76,24 @@
 #define GL_DOUBLE_MAT4x2                  0x8F4D
 #define GL_DOUBLE_MAT4x3                  0x8F4E
 
+#ifdef AMD_EXTENSIONS
+// Those constants are borrowed from extension NV_gpu_shader5
+#define GL_FLOAT16_NV                     0x8FF8
+#define GL_FLOAT16_VEC2_NV                0x8FF9
+#define GL_FLOAT16_VEC3_NV                0x8FFA
+#define GL_FLOAT16_VEC4_NV                0x8FFB
+
+#define GL_FLOAT16_MAT2_AMD               0x91C5
+#define GL_FLOAT16_MAT3_AMD               0x91C6
+#define GL_FLOAT16_MAT4_AMD               0x91C7
+#define GL_FLOAT16_MAT2x3_AMD             0x91C8
+#define GL_FLOAT16_MAT2x4_AMD             0x91C9
+#define GL_FLOAT16_MAT3x2_AMD             0x91CA
+#define GL_FLOAT16_MAT3x4_AMD             0x91CB
+#define GL_FLOAT16_MAT4x2_AMD             0x91CC
+#define GL_FLOAT16_MAT4x3_AMD             0x91CD
+#endif
+
 #define GL_SAMPLER_1D                     0x8B5D
 #define GL_SAMPLER_2D                     0x8B5E
 #define GL_SAMPLER_3D                     0x8B5F
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index a1628f611b5f49b341de8399ddbe7bd91c309885..060ffdd6fa9f2fe3b9012ea7bc2aa73fd918fbfb 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -119,13 +119,14 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %expect 1     // One shift reduce conflict because of if | else
 
 %token <lex> ATTRIBUTE VARYING
-%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T
+%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T FLOAT16_T
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
 %token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
+%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
 %token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
 
 %token <lex> MAT2X2 MAT2X3 MAT2X4
@@ -134,6 +135,9 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> DMAT2X2 DMAT2X3 DMAT2X4
 %token <lex> DMAT3X2 DMAT3X3 DMAT3X4
 %token <lex> DMAT4X2 DMAT4X3 DMAT4X4
+%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
+%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
+%token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
 %token <lex> ATOMIC_UINT
 
 // combined image/sampler
@@ -182,7 +186,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> STRUCT VOID WHILE
 
 %token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT
+%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -274,6 +278,12 @@ primary_expression
         parseContext.doubleCheck($1.loc, "double literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
+    | FLOAT16CONSTANT {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
+#endif
+    }
     | BOOLCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
@@ -1324,6 +1334,13 @@ type_specifier_nonarray
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
     }
+    | FLOAT16_T {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+#endif
+    }
     | INT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtInt;
@@ -1380,6 +1397,30 @@ type_specifier_nonarray
         $$.basicType = EbtDouble;
         $$.setVector(4);
     }
+    | F16VEC2 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(2);
+#endif
+    }
+    | F16VEC3 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(3);
+#endif
+    }
+    | F16VEC4 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(4);
+#endif
+    }
     | BVEC2 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtBool;
@@ -1596,6 +1637,102 @@ type_specifier_nonarray
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
+    | F16MAT2 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 2);
+#endif
+    }
+    | F16MAT3 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 3);
+#endif
+    }
+    | F16MAT4 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 4);
+#endif
+    }
+    | F16MAT2X2 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 2);
+#endif
+    }
+    | F16MAT2X3 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 3);
+#endif
+    }
+    | F16MAT2X4 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 4);
+#endif
+    }
+    | F16MAT3X2 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 2);
+#endif
+    }
+    | F16MAT3X3 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 3);
+#endif
+    }
+    | F16MAT3X4 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 4);
+#endif
+    }
+    | F16MAT4X2 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 2);
+#endif
+    }
+    | F16MAT4X3 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 3);
+#endif
+    }
+    | F16MAT4X4 {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 4);
+#endif
+    }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 3d7dc8e530ff95dc6cbb9a548577946d885101e2..3507c04e6259172f6a6b20a65747146a1dd16082 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 2.7.  */
 
 /* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "2.7"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -62,7 +62,8 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 41 "MachineIndependent/glslang.y" /* yacc.c:339  */
+/* Line 371 of yacc.c  */
+#line 41 "glslang.y"
 
 
 /* Based on:
@@ -87,13 +88,14 @@ Jutta Degener, 1995
 using namespace glslang;
 
 
-#line 91 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
+/* Line 371 of yacc.c  */
+#line 93 "glslang_tab.cpp"
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -107,9 +109,9 @@ using namespace glslang;
 
 /* In a future release of Bison, this section will be replaced
    by #include "glslang_tab.cpp.h".  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-/* Debug traces.  */
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+/* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
 #endif
@@ -117,288 +119,306 @@ using namespace glslang;
 extern int yydebug;
 #endif
 
-/* Token type.  */
+/* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-  enum yytokentype
-  {
-    ATTRIBUTE = 258,
-    VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
-    DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    BREAK = 268,
-    CONTINUE = 269,
-    DO = 270,
-    ELSE = 271,
-    FOR = 272,
-    IF = 273,
-    DISCARD = 274,
-    RETURN = 275,
-    SWITCH = 276,
-    CASE = 277,
-    DEFAULT = 278,
-    SUBROUTINE = 279,
-    BVEC2 = 280,
-    BVEC3 = 281,
-    BVEC4 = 282,
-    IVEC2 = 283,
-    IVEC3 = 284,
-    IVEC4 = 285,
-    I64VEC2 = 286,
-    I64VEC3 = 287,
-    I64VEC4 = 288,
-    UVEC2 = 289,
-    UVEC3 = 290,
-    UVEC4 = 291,
-    U64VEC2 = 292,
-    U64VEC3 = 293,
-    U64VEC4 = 294,
-    VEC2 = 295,
-    VEC3 = 296,
-    VEC4 = 297,
-    MAT2 = 298,
-    MAT3 = 299,
-    MAT4 = 300,
-    CENTROID = 301,
-    IN = 302,
-    OUT = 303,
-    INOUT = 304,
-    UNIFORM = 305,
-    PATCH = 306,
-    SAMPLE = 307,
-    BUFFER = 308,
-    SHARED = 309,
-    COHERENT = 310,
-    VOLATILE = 311,
-    RESTRICT = 312,
-    READONLY = 313,
-    WRITEONLY = 314,
-    DVEC2 = 315,
-    DVEC3 = 316,
-    DVEC4 = 317,
-    DMAT2 = 318,
-    DMAT3 = 319,
-    DMAT4 = 320,
-    NOPERSPECTIVE = 321,
-    FLAT = 322,
-    SMOOTH = 323,
-    LAYOUT = 324,
-    __EXPLICITINTERPAMD = 325,
-    MAT2X2 = 326,
-    MAT2X3 = 327,
-    MAT2X4 = 328,
-    MAT3X2 = 329,
-    MAT3X3 = 330,
-    MAT3X4 = 331,
-    MAT4X2 = 332,
-    MAT4X3 = 333,
-    MAT4X4 = 334,
-    DMAT2X2 = 335,
-    DMAT2X3 = 336,
-    DMAT2X4 = 337,
-    DMAT3X2 = 338,
-    DMAT3X3 = 339,
-    DMAT3X4 = 340,
-    DMAT4X2 = 341,
-    DMAT4X3 = 342,
-    DMAT4X4 = 343,
-    ATOMIC_UINT = 344,
-    SAMPLER1D = 345,
-    SAMPLER2D = 346,
-    SAMPLER3D = 347,
-    SAMPLERCUBE = 348,
-    SAMPLER1DSHADOW = 349,
-    SAMPLER2DSHADOW = 350,
-    SAMPLERCUBESHADOW = 351,
-    SAMPLER1DARRAY = 352,
-    SAMPLER2DARRAY = 353,
-    SAMPLER1DARRAYSHADOW = 354,
-    SAMPLER2DARRAYSHADOW = 355,
-    ISAMPLER1D = 356,
-    ISAMPLER2D = 357,
-    ISAMPLER3D = 358,
-    ISAMPLERCUBE = 359,
-    ISAMPLER1DARRAY = 360,
-    ISAMPLER2DARRAY = 361,
-    USAMPLER1D = 362,
-    USAMPLER2D = 363,
-    USAMPLER3D = 364,
-    USAMPLERCUBE = 365,
-    USAMPLER1DARRAY = 366,
-    USAMPLER2DARRAY = 367,
-    SAMPLER2DRECT = 368,
-    SAMPLER2DRECTSHADOW = 369,
-    ISAMPLER2DRECT = 370,
-    USAMPLER2DRECT = 371,
-    SAMPLERBUFFER = 372,
-    ISAMPLERBUFFER = 373,
-    USAMPLERBUFFER = 374,
-    SAMPLERCUBEARRAY = 375,
-    SAMPLERCUBEARRAYSHADOW = 376,
-    ISAMPLERCUBEARRAY = 377,
-    USAMPLERCUBEARRAY = 378,
-    SAMPLER2DMS = 379,
-    ISAMPLER2DMS = 380,
-    USAMPLER2DMS = 381,
-    SAMPLER2DMSARRAY = 382,
-    ISAMPLER2DMSARRAY = 383,
-    USAMPLER2DMSARRAY = 384,
-    SAMPLEREXTERNALOES = 385,
-    SAMPLER = 386,
-    SAMPLERSHADOW = 387,
-    TEXTURE1D = 388,
-    TEXTURE2D = 389,
-    TEXTURE3D = 390,
-    TEXTURECUBE = 391,
-    TEXTURE1DARRAY = 392,
-    TEXTURE2DARRAY = 393,
-    ITEXTURE1D = 394,
-    ITEXTURE2D = 395,
-    ITEXTURE3D = 396,
-    ITEXTURECUBE = 397,
-    ITEXTURE1DARRAY = 398,
-    ITEXTURE2DARRAY = 399,
-    UTEXTURE1D = 400,
-    UTEXTURE2D = 401,
-    UTEXTURE3D = 402,
-    UTEXTURECUBE = 403,
-    UTEXTURE1DARRAY = 404,
-    UTEXTURE2DARRAY = 405,
-    TEXTURE2DRECT = 406,
-    ITEXTURE2DRECT = 407,
-    UTEXTURE2DRECT = 408,
-    TEXTUREBUFFER = 409,
-    ITEXTUREBUFFER = 410,
-    UTEXTUREBUFFER = 411,
-    TEXTURECUBEARRAY = 412,
-    ITEXTURECUBEARRAY = 413,
-    UTEXTURECUBEARRAY = 414,
-    TEXTURE2DMS = 415,
-    ITEXTURE2DMS = 416,
-    UTEXTURE2DMS = 417,
-    TEXTURE2DMSARRAY = 418,
-    ITEXTURE2DMSARRAY = 419,
-    UTEXTURE2DMSARRAY = 420,
-    SUBPASSINPUT = 421,
-    SUBPASSINPUTMS = 422,
-    ISUBPASSINPUT = 423,
-    ISUBPASSINPUTMS = 424,
-    USUBPASSINPUT = 425,
-    USUBPASSINPUTMS = 426,
-    IMAGE1D = 427,
-    IIMAGE1D = 428,
-    UIMAGE1D = 429,
-    IMAGE2D = 430,
-    IIMAGE2D = 431,
-    UIMAGE2D = 432,
-    IMAGE3D = 433,
-    IIMAGE3D = 434,
-    UIMAGE3D = 435,
-    IMAGE2DRECT = 436,
-    IIMAGE2DRECT = 437,
-    UIMAGE2DRECT = 438,
-    IMAGECUBE = 439,
-    IIMAGECUBE = 440,
-    UIMAGECUBE = 441,
-    IMAGEBUFFER = 442,
-    IIMAGEBUFFER = 443,
-    UIMAGEBUFFER = 444,
-    IMAGE1DARRAY = 445,
-    IIMAGE1DARRAY = 446,
-    UIMAGE1DARRAY = 447,
-    IMAGE2DARRAY = 448,
-    IIMAGE2DARRAY = 449,
-    UIMAGE2DARRAY = 450,
-    IMAGECUBEARRAY = 451,
-    IIMAGECUBEARRAY = 452,
-    UIMAGECUBEARRAY = 453,
-    IMAGE2DMS = 454,
-    IIMAGE2DMS = 455,
-    UIMAGE2DMS = 456,
-    IMAGE2DMSARRAY = 457,
-    IIMAGE2DMSARRAY = 458,
-    UIMAGE2DMSARRAY = 459,
-    STRUCT = 460,
-    VOID = 461,
-    WHILE = 462,
-    IDENTIFIER = 463,
-    TYPE_NAME = 464,
-    FLOATCONSTANT = 465,
-    DOUBLECONSTANT = 466,
-    INTCONSTANT = 467,
-    UINTCONSTANT = 468,
-    INT64CONSTANT = 469,
-    UINT64CONSTANT = 470,
-    BOOLCONSTANT = 471,
-    LEFT_OP = 472,
-    RIGHT_OP = 473,
-    INC_OP = 474,
-    DEC_OP = 475,
-    LE_OP = 476,
-    GE_OP = 477,
-    EQ_OP = 478,
-    NE_OP = 479,
-    AND_OP = 480,
-    OR_OP = 481,
-    XOR_OP = 482,
-    MUL_ASSIGN = 483,
-    DIV_ASSIGN = 484,
-    ADD_ASSIGN = 485,
-    MOD_ASSIGN = 486,
-    LEFT_ASSIGN = 487,
-    RIGHT_ASSIGN = 488,
-    AND_ASSIGN = 489,
-    XOR_ASSIGN = 490,
-    OR_ASSIGN = 491,
-    SUB_ASSIGN = 492,
-    LEFT_PAREN = 493,
-    RIGHT_PAREN = 494,
-    LEFT_BRACKET = 495,
-    RIGHT_BRACKET = 496,
-    LEFT_BRACE = 497,
-    RIGHT_BRACE = 498,
-    DOT = 499,
-    COMMA = 500,
-    COLON = 501,
-    EQUAL = 502,
-    SEMICOLON = 503,
-    BANG = 504,
-    DASH = 505,
-    TILDE = 506,
-    PLUS = 507,
-    STAR = 508,
-    SLASH = 509,
-    PERCENT = 510,
-    LEFT_ANGLE = 511,
-    RIGHT_ANGLE = 512,
-    VERTICAL_BAR = 513,
-    CARET = 514,
-    AMPERSAND = 515,
-    QUESTION = 516,
-    INVARIANT = 517,
-    PRECISE = 518,
-    HIGH_PRECISION = 519,
-    MEDIUM_PRECISION = 520,
-    LOW_PRECISION = 521,
-    PRECISION = 522,
-    PACKED = 523,
-    RESOURCE = 524,
-    SUPERP = 525
-  };
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ATTRIBUTE = 258,
+     VARYING = 259,
+     CONST = 260,
+     BOOL = 261,
+     FLOAT = 262,
+     DOUBLE = 263,
+     INT = 264,
+     UINT = 265,
+     INT64_T = 266,
+     UINT64_T = 267,
+     FLOAT16_T = 268,
+     BREAK = 269,
+     CONTINUE = 270,
+     DO = 271,
+     ELSE = 272,
+     FOR = 273,
+     IF = 274,
+     DISCARD = 275,
+     RETURN = 276,
+     SWITCH = 277,
+     CASE = 278,
+     DEFAULT = 279,
+     SUBROUTINE = 280,
+     BVEC2 = 281,
+     BVEC3 = 282,
+     BVEC4 = 283,
+     IVEC2 = 284,
+     IVEC3 = 285,
+     IVEC4 = 286,
+     I64VEC2 = 287,
+     I64VEC3 = 288,
+     I64VEC4 = 289,
+     UVEC2 = 290,
+     UVEC3 = 291,
+     UVEC4 = 292,
+     U64VEC2 = 293,
+     U64VEC3 = 294,
+     U64VEC4 = 295,
+     VEC2 = 296,
+     VEC3 = 297,
+     VEC4 = 298,
+     MAT2 = 299,
+     MAT3 = 300,
+     MAT4 = 301,
+     CENTROID = 302,
+     IN = 303,
+     OUT = 304,
+     INOUT = 305,
+     UNIFORM = 306,
+     PATCH = 307,
+     SAMPLE = 308,
+     BUFFER = 309,
+     SHARED = 310,
+     COHERENT = 311,
+     VOLATILE = 312,
+     RESTRICT = 313,
+     READONLY = 314,
+     WRITEONLY = 315,
+     DVEC2 = 316,
+     DVEC3 = 317,
+     DVEC4 = 318,
+     DMAT2 = 319,
+     DMAT3 = 320,
+     DMAT4 = 321,
+     F16VEC2 = 322,
+     F16VEC3 = 323,
+     F16VEC4 = 324,
+     F16MAT2 = 325,
+     F16MAT3 = 326,
+     F16MAT4 = 327,
+     NOPERSPECTIVE = 328,
+     FLAT = 329,
+     SMOOTH = 330,
+     LAYOUT = 331,
+     __EXPLICITINTERPAMD = 332,
+     MAT2X2 = 333,
+     MAT2X3 = 334,
+     MAT2X4 = 335,
+     MAT3X2 = 336,
+     MAT3X3 = 337,
+     MAT3X4 = 338,
+     MAT4X2 = 339,
+     MAT4X3 = 340,
+     MAT4X4 = 341,
+     DMAT2X2 = 342,
+     DMAT2X3 = 343,
+     DMAT2X4 = 344,
+     DMAT3X2 = 345,
+     DMAT3X3 = 346,
+     DMAT3X4 = 347,
+     DMAT4X2 = 348,
+     DMAT4X3 = 349,
+     DMAT4X4 = 350,
+     F16MAT2X2 = 351,
+     F16MAT2X3 = 352,
+     F16MAT2X4 = 353,
+     F16MAT3X2 = 354,
+     F16MAT3X3 = 355,
+     F16MAT3X4 = 356,
+     F16MAT4X2 = 357,
+     F16MAT4X3 = 358,
+     F16MAT4X4 = 359,
+     ATOMIC_UINT = 360,
+     SAMPLER1D = 361,
+     SAMPLER2D = 362,
+     SAMPLER3D = 363,
+     SAMPLERCUBE = 364,
+     SAMPLER1DSHADOW = 365,
+     SAMPLER2DSHADOW = 366,
+     SAMPLERCUBESHADOW = 367,
+     SAMPLER1DARRAY = 368,
+     SAMPLER2DARRAY = 369,
+     SAMPLER1DARRAYSHADOW = 370,
+     SAMPLER2DARRAYSHADOW = 371,
+     ISAMPLER1D = 372,
+     ISAMPLER2D = 373,
+     ISAMPLER3D = 374,
+     ISAMPLERCUBE = 375,
+     ISAMPLER1DARRAY = 376,
+     ISAMPLER2DARRAY = 377,
+     USAMPLER1D = 378,
+     USAMPLER2D = 379,
+     USAMPLER3D = 380,
+     USAMPLERCUBE = 381,
+     USAMPLER1DARRAY = 382,
+     USAMPLER2DARRAY = 383,
+     SAMPLER2DRECT = 384,
+     SAMPLER2DRECTSHADOW = 385,
+     ISAMPLER2DRECT = 386,
+     USAMPLER2DRECT = 387,
+     SAMPLERBUFFER = 388,
+     ISAMPLERBUFFER = 389,
+     USAMPLERBUFFER = 390,
+     SAMPLERCUBEARRAY = 391,
+     SAMPLERCUBEARRAYSHADOW = 392,
+     ISAMPLERCUBEARRAY = 393,
+     USAMPLERCUBEARRAY = 394,
+     SAMPLER2DMS = 395,
+     ISAMPLER2DMS = 396,
+     USAMPLER2DMS = 397,
+     SAMPLER2DMSARRAY = 398,
+     ISAMPLER2DMSARRAY = 399,
+     USAMPLER2DMSARRAY = 400,
+     SAMPLEREXTERNALOES = 401,
+     SAMPLER = 402,
+     SAMPLERSHADOW = 403,
+     TEXTURE1D = 404,
+     TEXTURE2D = 405,
+     TEXTURE3D = 406,
+     TEXTURECUBE = 407,
+     TEXTURE1DARRAY = 408,
+     TEXTURE2DARRAY = 409,
+     ITEXTURE1D = 410,
+     ITEXTURE2D = 411,
+     ITEXTURE3D = 412,
+     ITEXTURECUBE = 413,
+     ITEXTURE1DARRAY = 414,
+     ITEXTURE2DARRAY = 415,
+     UTEXTURE1D = 416,
+     UTEXTURE2D = 417,
+     UTEXTURE3D = 418,
+     UTEXTURECUBE = 419,
+     UTEXTURE1DARRAY = 420,
+     UTEXTURE2DARRAY = 421,
+     TEXTURE2DRECT = 422,
+     ITEXTURE2DRECT = 423,
+     UTEXTURE2DRECT = 424,
+     TEXTUREBUFFER = 425,
+     ITEXTUREBUFFER = 426,
+     UTEXTUREBUFFER = 427,
+     TEXTURECUBEARRAY = 428,
+     ITEXTURECUBEARRAY = 429,
+     UTEXTURECUBEARRAY = 430,
+     TEXTURE2DMS = 431,
+     ITEXTURE2DMS = 432,
+     UTEXTURE2DMS = 433,
+     TEXTURE2DMSARRAY = 434,
+     ITEXTURE2DMSARRAY = 435,
+     UTEXTURE2DMSARRAY = 436,
+     SUBPASSINPUT = 437,
+     SUBPASSINPUTMS = 438,
+     ISUBPASSINPUT = 439,
+     ISUBPASSINPUTMS = 440,
+     USUBPASSINPUT = 441,
+     USUBPASSINPUTMS = 442,
+     IMAGE1D = 443,
+     IIMAGE1D = 444,
+     UIMAGE1D = 445,
+     IMAGE2D = 446,
+     IIMAGE2D = 447,
+     UIMAGE2D = 448,
+     IMAGE3D = 449,
+     IIMAGE3D = 450,
+     UIMAGE3D = 451,
+     IMAGE2DRECT = 452,
+     IIMAGE2DRECT = 453,
+     UIMAGE2DRECT = 454,
+     IMAGECUBE = 455,
+     IIMAGECUBE = 456,
+     UIMAGECUBE = 457,
+     IMAGEBUFFER = 458,
+     IIMAGEBUFFER = 459,
+     UIMAGEBUFFER = 460,
+     IMAGE1DARRAY = 461,
+     IIMAGE1DARRAY = 462,
+     UIMAGE1DARRAY = 463,
+     IMAGE2DARRAY = 464,
+     IIMAGE2DARRAY = 465,
+     UIMAGE2DARRAY = 466,
+     IMAGECUBEARRAY = 467,
+     IIMAGECUBEARRAY = 468,
+     UIMAGECUBEARRAY = 469,
+     IMAGE2DMS = 470,
+     IIMAGE2DMS = 471,
+     UIMAGE2DMS = 472,
+     IMAGE2DMSARRAY = 473,
+     IIMAGE2DMSARRAY = 474,
+     UIMAGE2DMSARRAY = 475,
+     STRUCT = 476,
+     VOID = 477,
+     WHILE = 478,
+     IDENTIFIER = 479,
+     TYPE_NAME = 480,
+     FLOATCONSTANT = 481,
+     DOUBLECONSTANT = 482,
+     INTCONSTANT = 483,
+     UINTCONSTANT = 484,
+     INT64CONSTANT = 485,
+     UINT64CONSTANT = 486,
+     BOOLCONSTANT = 487,
+     FLOAT16CONSTANT = 488,
+     LEFT_OP = 489,
+     RIGHT_OP = 490,
+     INC_OP = 491,
+     DEC_OP = 492,
+     LE_OP = 493,
+     GE_OP = 494,
+     EQ_OP = 495,
+     NE_OP = 496,
+     AND_OP = 497,
+     OR_OP = 498,
+     XOR_OP = 499,
+     MUL_ASSIGN = 500,
+     DIV_ASSIGN = 501,
+     ADD_ASSIGN = 502,
+     MOD_ASSIGN = 503,
+     LEFT_ASSIGN = 504,
+     RIGHT_ASSIGN = 505,
+     AND_ASSIGN = 506,
+     XOR_ASSIGN = 507,
+     OR_ASSIGN = 508,
+     SUB_ASSIGN = 509,
+     LEFT_PAREN = 510,
+     RIGHT_PAREN = 511,
+     LEFT_BRACKET = 512,
+     RIGHT_BRACKET = 513,
+     LEFT_BRACE = 514,
+     RIGHT_BRACE = 515,
+     DOT = 516,
+     COMMA = 517,
+     COLON = 518,
+     EQUAL = 519,
+     SEMICOLON = 520,
+     BANG = 521,
+     DASH = 522,
+     TILDE = 523,
+     PLUS = 524,
+     STAR = 525,
+     SLASH = 526,
+     PERCENT = 527,
+     LEFT_ANGLE = 528,
+     RIGHT_ANGLE = 529,
+     VERTICAL_BAR = 530,
+     CARET = 531,
+     AMPERSAND = 532,
+     QUESTION = 533,
+     INVARIANT = 534,
+     PRECISE = 535,
+     HIGH_PRECISION = 536,
+     MEDIUM_PRECISION = 537,
+     LOW_PRECISION = 538,
+     PRECISION = 539,
+     PACKED = 540,
+     RESOURCE = 541,
+     SUPERP = 542
+   };
 #endif
 
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
 {
-#line 66 "MachineIndependent/glslang.y" /* yacc.c:355  */
+/* Line 387 of yacc.c  */
+#line 66 "glslang.y"
 
     struct {
         glslang::TSourceLoc loc;
@@ -432,22 +452,35 @@ union YYSTYPE
         };
     } interm;
 
-#line 436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
-};
 
-typedef union YYSTYPE YYSTYPE;
+/* Line 387 of yacc.c  */
+#line 458 "glslang_tab.cpp"
+} YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
 int yyparse (glslang::TParseContext* pParseContext);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 100 "MachineIndependent/glslang.y" /* yacc.c:358  */
+/* Line 390 of yacc.c  */
+#line 100 "glslang.y"
 
 
 /* windows only pragma */
@@ -463,7 +496,8 @@ int yyparse (glslang::TParseContext* pParseContext);
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+/* Line 390 of yacc.c  */
+#line 501 "glslang_tab.cpp"
 
 #ifdef short
 # undef short
@@ -477,8 +511,11 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#else
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -498,7 +535,8 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -520,33 +558,6 @@ typedef short int yytype_int16;
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -554,26 +565,24 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(N) (N)
 #else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
 #endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
+{
+  return yyi;
+}
 #endif
 
-
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -591,7 +600,8 @@ typedef short int yytype_int16;
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -603,8 +613,8 @@ typedef short int yytype_int16;
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -620,7 +630,7 @@ typedef short int yytype_int16;
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
+	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -628,13 +638,15 @@ typedef short int yytype_int16;
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -644,7 +656,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -669,16 +681,16 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
 
 #endif
 
@@ -697,35 +709,33 @@ union yyalloc
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (0)
+      while (YYID (0))
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  249
+#define YYFINAL  265
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   5966
+#define YYLAST   6373
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  271
+#define YYNTOKENS  288
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  100
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  422
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  554
+#define YYNRULES  439
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  571
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   525
+#define YYMAXUTOK   542
 
-#define YYTRANSLATE(YYX)                                                \
+#define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
 static const yytype_uint16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -780,56 +790,224 @@ static const yytype_uint16 yytranslate[] =
      235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287
 };
 
 #if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
+      19,    21,    23,    27,    29,    34,    36,    40,    43,    46,
+      48,    50,    52,    55,    58,    61,    63,    66,    70,    73,
+      75,    77,    79,    82,    85,    88,    90,    92,    94,    96,
+      98,   102,   106,   110,   112,   116,   120,   122,   126,   130,
+     132,   136,   140,   144,   148,   150,   154,   158,   160,   164,
+     166,   170,   172,   176,   178,   182,   184,   188,   190,   194,
+     196,   197,   204,   206,   210,   212,   214,   216,   218,   220,
+     222,   224,   226,   228,   230,   232,   234,   238,   240,   243,
+     246,   251,   254,   258,   263,   266,   270,   275,   276,   283,
+     286,   290,   293,   295,   297,   300,   304,   308,   311,   315,
+     318,   320,   323,   325,   327,   329,   333,   338,   345,   351,
+     353,   356,   360,   366,   371,   373,   376,   378,   380,   382,
+     384,   386,   391,   393,   397,   399,   403,   405,   407,   409,
+     412,   414,   416,   418,   420,   422,   424,   426,   428,   430,
+     432,   434,   436,   438,   440,   442,   444,   446,   448,   450,
+     452,   454,   456,   458,   460,   465,   467,   471,   473,   476,
+     479,   483,   487,   492,   494,   496,   498,   500,   502,   504,
+     506,   508,   510,   512,   514,   516,   518,   520,   522,   524,
+     526,   528,   530,   532,   534,   536,   538,   540,   542,   544,
+     546,   548,   550,   552,   554,   556,   558,   560,   562,   564,
+     566,   568,   570,   572,   574,   576,   578,   580,   582,   584,
+     586,   588,   590,   592,   594,   596,   598,   600,   602,   604,
+     606,   608,   610,   612,   614,   616,   618,   620,   622,   624,
+     626,   628,   630,   632,   634,   636,   638,   640,   642,   644,
+     646,   648,   650,   652,   654,   656,   658,   660,   662,   664,
+     666,   668,   670,   672,   674,   676,   678,   680,   682,   684,
+     686,   688,   690,   692,   694,   696,   698,   700,   702,   704,
+     706,   708,   710,   712,   714,   716,   718,   720,   722,   724,
+     726,   728,   730,   732,   734,   736,   738,   740,   742,   744,
+     746,   748,   750,   752,   754,   756,   758,   760,   762,   764,
+     766,   768,   770,   772,   774,   776,   778,   780,   782,   784,
+     786,   788,   790,   792,   794,   796,   798,   800,   802,   804,
+     806,   808,   810,   812,   814,   816,   818,   820,   822,   824,
+     826,   828,   830,   832,   834,   836,   838,   840,   842,   844,
+     846,   848,   850,   852,   854,   856,   858,   860,   862,   864,
+     866,   868,   870,   872,   873,   880,   881,   887,   889,   892,
+     896,   901,   903,   907,   909,   912,   914,   918,   923,   925,
+     929,   931,   933,   935,   937,   939,   941,   943,   945,   947,
+     949,   952,   953,   954,   960,   962,   964,   965,   968,   969,
+     972,   975,   979,   981,   984,   986,   989,   995,   999,  1001,
+    1003,  1008,  1009,  1018,  1019,  1021,  1025,  1028,  1029,  1036,
+    1037,  1046,  1047,  1055,  1057,  1059,  1061,  1062,  1065,  1069,
+    1072,  1075,  1078,  1082,  1085,  1087,  1090,  1092,  1094,  1095
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     384,     0,    -1,   224,    -1,   289,    -1,   228,    -1,   229,
+      -1,   230,    -1,   231,    -1,   226,    -1,   227,    -1,   233,
+      -1,   232,    -1,   255,   317,   256,    -1,   290,    -1,   291,
+     257,   292,   258,    -1,   293,    -1,   291,   261,   224,    -1,
+     291,   236,    -1,   291,   237,    -1,   317,    -1,   294,    -1,
+     295,    -1,   297,   256,    -1,   296,   256,    -1,   298,   222,
+      -1,   298,    -1,   298,   315,    -1,   297,   262,   315,    -1,
+     299,   255,    -1,   343,    -1,   291,    -1,   291,    -1,   236,
+     300,    -1,   237,   300,    -1,   301,   300,    -1,   269,    -1,
+     267,    -1,   266,    -1,   268,    -1,   300,    -1,   302,   270,
+     300,    -1,   302,   271,   300,    -1,   302,   272,   300,    -1,
+     302,    -1,   303,   269,   302,    -1,   303,   267,   302,    -1,
+     303,    -1,   304,   234,   303,    -1,   304,   235,   303,    -1,
+     304,    -1,   305,   273,   304,    -1,   305,   274,   304,    -1,
+     305,   238,   304,    -1,   305,   239,   304,    -1,   305,    -1,
+     306,   240,   305,    -1,   306,   241,   305,    -1,   306,    -1,
+     307,   277,   306,    -1,   307,    -1,   308,   276,   307,    -1,
+     308,    -1,   309,   275,   308,    -1,   309,    -1,   310,   242,
+     309,    -1,   310,    -1,   311,   244,   310,    -1,   311,    -1,
+     312,   243,   311,    -1,   312,    -1,    -1,   312,   278,   314,
+     317,   263,   315,    -1,   313,    -1,   300,   316,   315,    -1,
+     264,    -1,   245,    -1,   246,    -1,   248,    -1,   247,    -1,
+     254,    -1,   249,    -1,   250,    -1,   251,    -1,   252,    -1,
+     253,    -1,   315,    -1,   317,   262,   315,    -1,   313,    -1,
+     323,   265,    -1,   330,   265,    -1,   284,   346,   343,   265,
+      -1,   320,   265,    -1,   320,   224,   265,    -1,   320,   224,
+     344,   265,    -1,   339,   265,    -1,   339,   224,   265,    -1,
+     339,   224,   322,   265,    -1,    -1,   339,   224,   259,   321,
+     350,   260,    -1,   262,   224,    -1,   322,   262,   224,    -1,
+     324,   256,    -1,   326,    -1,   325,    -1,   326,   328,    -1,
+     325,   262,   328,    -1,   332,   224,   255,    -1,   343,   224,
+      -1,   343,   224,   344,    -1,   339,   327,    -1,   327,    -1,
+     339,   329,    -1,   329,    -1,   343,    -1,   331,    -1,   330,
+     262,   224,    -1,   330,   262,   224,   344,    -1,   330,   262,
+     224,   344,   264,   354,    -1,   330,   262,   224,   264,   354,
+      -1,   332,    -1,   332,   224,    -1,   332,   224,   344,    -1,
+     332,   224,   344,   264,   354,    -1,   332,   224,   264,   354,
+      -1,   343,    -1,   339,   343,    -1,   279,    -1,    75,    -1,
+      74,    -1,    73,    -1,    77,    -1,    76,   255,   336,   256,
+      -1,   337,    -1,   336,   262,   337,    -1,   224,    -1,   224,
+     264,   318,    -1,    55,    -1,   280,    -1,   340,    -1,   339,
+     340,    -1,   341,    -1,   335,    -1,   346,    -1,   334,    -1,
+     333,    -1,   338,    -1,     5,    -1,     3,    -1,     4,    -1,
+      50,    -1,    48,    -1,    49,    -1,    47,    -1,    52,    -1,
+      53,    -1,    51,    -1,    54,    -1,    55,    -1,    56,    -1,
+      57,    -1,    58,    -1,    59,    -1,    60,    -1,    25,    -1,
+      25,   255,   342,   256,    -1,   225,    -1,   342,   262,   225,
+      -1,   345,    -1,   345,   344,    -1,   257,   258,    -1,   257,
+     313,   258,    -1,   344,   257,   258,    -1,   344,   257,   313,
+     258,    -1,   222,    -1,     7,    -1,     8,    -1,    13,    -1,
+       9,    -1,    10,    -1,    11,    -1,    12,    -1,     6,    -1,
+      41,    -1,    42,    -1,    43,    -1,    61,    -1,    62,    -1,
+      63,    -1,    67,    -1,    68,    -1,    69,    -1,    26,    -1,
+      27,    -1,    28,    -1,    29,    -1,    30,    -1,    31,    -1,
+      32,    -1,    33,    -1,    34,    -1,    35,    -1,    36,    -1,
+      37,    -1,    38,    -1,    39,    -1,    40,    -1,    44,    -1,
+      45,    -1,    46,    -1,    78,    -1,    79,    -1,    80,    -1,
+      81,    -1,    82,    -1,    83,    -1,    84,    -1,    85,    -1,
+      86,    -1,    64,    -1,    65,    -1,    66,    -1,    87,    -1,
+      88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,    -1,
+      93,    -1,    94,    -1,    95,    -1,    70,    -1,    71,    -1,
+      72,    -1,    96,    -1,    97,    -1,    98,    -1,    99,    -1,
+     100,    -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,
+     105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,
+     110,    -1,   111,    -1,   112,    -1,   113,    -1,   114,    -1,
+     115,    -1,   116,    -1,   136,    -1,   137,    -1,   117,    -1,
+     118,    -1,   119,    -1,   120,    -1,   121,    -1,   122,    -1,
+     138,    -1,   123,    -1,   124,    -1,   125,    -1,   126,    -1,
+     127,    -1,   128,    -1,   139,    -1,   129,    -1,   130,    -1,
+     131,    -1,   132,    -1,   133,    -1,   134,    -1,   135,    -1,
+     140,    -1,   141,    -1,   142,    -1,   143,    -1,   144,    -1,
+     145,    -1,   147,    -1,   148,    -1,   149,    -1,   150,    -1,
+     151,    -1,   152,    -1,   153,    -1,   154,    -1,   173,    -1,
+     155,    -1,   156,    -1,   157,    -1,   158,    -1,   159,    -1,
+     160,    -1,   174,    -1,   161,    -1,   162,    -1,   163,    -1,
+     164,    -1,   165,    -1,   166,    -1,   175,    -1,   167,    -1,
+     168,    -1,   169,    -1,   170,    -1,   171,    -1,   172,    -1,
+     176,    -1,   177,    -1,   178,    -1,   179,    -1,   180,    -1,
+     181,    -1,   188,    -1,   189,    -1,   190,    -1,   191,    -1,
+     192,    -1,   193,    -1,   194,    -1,   195,    -1,   196,    -1,
+     197,    -1,   198,    -1,   199,    -1,   200,    -1,   201,    -1,
+     202,    -1,   203,    -1,   204,    -1,   205,    -1,   206,    -1,
+     207,    -1,   208,    -1,   209,    -1,   210,    -1,   211,    -1,
+     212,    -1,   213,    -1,   214,    -1,   215,    -1,   216,    -1,
+     217,    -1,   218,    -1,   219,    -1,   220,    -1,   146,    -1,
+     182,    -1,   183,    -1,   184,    -1,   185,    -1,   186,    -1,
+     187,    -1,   347,    -1,   225,    -1,   281,    -1,   282,    -1,
+     283,    -1,    -1,   221,   224,   259,   348,   350,   260,    -1,
+      -1,   221,   259,   349,   350,   260,    -1,   351,    -1,   350,
+     351,    -1,   343,   352,   265,    -1,   339,   343,   352,   265,
+      -1,   353,    -1,   352,   262,   353,    -1,   224,    -1,   224,
+     344,    -1,   315,    -1,   259,   355,   260,    -1,   259,   355,
+     262,   260,    -1,   354,    -1,   355,   262,   354,    -1,   319,
+      -1,   359,    -1,   358,    -1,   356,    -1,   368,    -1,   369,
+      -1,   372,    -1,   375,    -1,   376,    -1,   383,    -1,   259,
+     260,    -1,    -1,    -1,   259,   360,   367,   361,   260,    -1,
+     366,    -1,   358,    -1,    -1,   364,   359,    -1,    -1,   365,
+     358,    -1,   259,   260,    -1,   259,   367,   260,    -1,   357,
+      -1,   367,   357,    -1,   265,    -1,   317,   265,    -1,    19,
+     255,   317,   256,   370,    -1,   363,    17,   363,    -1,   363,
+      -1,   317,    -1,   332,   224,   264,   354,    -1,    -1,    22,
+     255,   317,   256,   373,   259,   374,   260,    -1,    -1,   367,
+      -1,    23,   317,   263,    -1,    24,   263,    -1,    -1,   223,
+     255,   377,   371,   256,   362,    -1,    -1,    16,   378,   357,
+     223,   255,   317,   256,   265,    -1,    -1,    18,   255,   379,
+     380,   382,   256,   362,    -1,   368,    -1,   356,    -1,   371,
+      -1,    -1,   381,   265,    -1,   381,   265,   317,    -1,    15,
+     265,    -1,    14,   265,    -1,    21,   265,    -1,    21,   317,
+     265,    -1,    20,   265,    -1,   385,    -1,   384,   385,    -1,
+     386,    -1,   319,    -1,    -1,   323,   387,   366,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   246,   246,   252,   255,   258,   262,   266,   270,   273,
-     277,   280,   288,   291,   294,   297,   300,   305,   313,   320,
-     327,   333,   337,   344,   347,   353,   360,   370,   378,   383,
-     413,   419,   423,   427,   447,   448,   449,   450,   456,   457,
-     462,   467,   476,   477,   482,   490,   491,   497,   506,   507,
-     512,   517,   522,   530,   531,   539,   550,   551,   560,   561,
-     570,   571,   580,   581,   589,   590,   598,   599,   607,   608,
-     608,   626,   627,   642,   646,   650,   654,   659,   663,   667,
-     671,   675,   679,   683,   690,   693,   704,   711,   716,   721,
-     729,   733,   737,   741,   746,   751,   760,   760,   771,   775,
-     782,   789,   792,   799,   807,   827,   845,   860,   883,   894,
-     904,   914,   924,   933,   936,   940,   944,   949,   957,   962,
-     967,   972,   977,   986,   997,  1024,  1033,  1040,  1047,  1054,
-    1066,  1072,  1075,  1082,  1086,  1090,  1098,  1107,  1110,  1121,
-    1124,  1127,  1131,  1135,  1139,  1146,  1150,  1162,  1176,  1181,
-    1187,  1193,  1200,  1206,  1211,  1216,  1221,  1228,  1232,  1236,
-    1240,  1244,  1248,  1254,  1266,  1269,  1274,  1278,  1287,  1292,
-    1300,  1304,  1314,  1318,  1322,  1327,  1331,  1336,  1341,  1346,
-    1350,  1355,  1360,  1365,  1371,  1377,  1383,  1388,  1393,  1398,
-    1403,  1408,  1413,  1419,  1425,  1431,  1437,  1443,  1449,  1455,
-    1461,  1467,  1472,  1477,  1482,  1487,  1492,  1497,  1502,  1507,
-    1512,  1517,  1522,  1527,  1533,  1539,  1545,  1551,  1557,  1563,
-    1569,  1575,  1581,  1587,  1593,  1599,  1604,  1609,  1614,  1619,
-    1624,  1629,  1634,  1639,  1644,  1649,  1654,  1659,  1664,  1669,
-    1674,  1679,  1684,  1689,  1694,  1699,  1704,  1709,  1714,  1719,
-    1724,  1729,  1734,  1739,  1744,  1749,  1754,  1759,  1764,  1769,
-    1774,  1779,  1784,  1789,  1794,  1799,  1804,  1809,  1814,  1819,
-    1824,  1829,  1834,  1839,  1844,  1849,  1854,  1859,  1864,  1869,
-    1874,  1879,  1884,  1889,  1894,  1899,  1904,  1909,  1914,  1919,
-    1924,  1929,  1934,  1939,  1944,  1949,  1954,  1959,  1964,  1969,
-    1974,  1979,  1984,  1989,  1994,  1999,  2004,  2009,  2014,  2019,
-    2024,  2029,  2034,  2039,  2044,  2049,  2054,  2059,  2064,  2069,
-    2074,  2079,  2084,  2089,  2094,  2099,  2104,  2109,  2114,  2119,
-    2124,  2129,  2134,  2139,  2144,  2150,  2156,  2162,  2168,  2174,
-    2180,  2186,  2191,  2207,  2212,  2217,  2225,  2225,  2236,  2236,
-    2246,  2249,  2262,  2280,  2304,  2308,  2314,  2319,  2330,  2333,
-    2339,  2348,  2351,  2357,  2361,  2362,  2368,  2369,  2370,  2371,
-    2372,  2373,  2374,  2378,  2379,  2383,  2379,  2395,  2396,  2400,
-    2400,  2407,  2407,  2421,  2424,  2432,  2440,  2451,  2452,  2456,
-    2463,  2467,  2475,  2479,  2492,  2492,  2512,  2515,  2521,  2533,
-    2545,  2545,  2560,  2560,  2576,  2576,  2597,  2600,  2606,  2609,
-    2615,  2619,  2626,  2631,  2636,  2643,  2646,  2655,  2659,  2666,
-    2669,  2675,  2675
+       0,   250,   250,   256,   259,   262,   266,   270,   274,   277,
+     281,   287,   290,   298,   301,   304,   307,   310,   315,   323,
+     330,   337,   343,   347,   354,   357,   363,   370,   380,   388,
+     393,   423,   429,   433,   437,   457,   458,   459,   460,   466,
+     467,   472,   477,   486,   487,   492,   500,   501,   507,   516,
+     517,   522,   527,   532,   540,   541,   549,   560,   561,   570,
+     571,   580,   581,   590,   591,   599,   600,   608,   609,   617,
+     618,   618,   636,   637,   652,   656,   660,   664,   669,   673,
+     677,   681,   685,   689,   693,   700,   703,   714,   721,   726,
+     731,   739,   743,   747,   751,   756,   761,   770,   770,   781,
+     785,   792,   799,   802,   809,   817,   837,   855,   870,   893,
+     904,   914,   924,   934,   943,   946,   950,   954,   959,   967,
+     972,   977,   982,   987,   996,  1007,  1034,  1043,  1050,  1057,
+    1064,  1076,  1082,  1085,  1092,  1096,  1100,  1108,  1117,  1120,
+    1131,  1134,  1137,  1141,  1145,  1149,  1156,  1160,  1172,  1186,
+    1191,  1197,  1203,  1210,  1216,  1221,  1226,  1231,  1238,  1242,
+    1246,  1250,  1254,  1258,  1264,  1276,  1279,  1284,  1288,  1297,
+    1302,  1310,  1314,  1324,  1328,  1332,  1337,  1344,  1348,  1353,
+    1358,  1363,  1367,  1372,  1377,  1382,  1388,  1394,  1400,  1408,
+    1416,  1424,  1429,  1434,  1439,  1444,  1449,  1454,  1460,  1466,
+    1472,  1478,  1484,  1490,  1496,  1502,  1508,  1513,  1518,  1523,
+    1528,  1533,  1538,  1543,  1548,  1553,  1558,  1563,  1568,  1574,
+    1580,  1586,  1592,  1598,  1604,  1610,  1616,  1622,  1628,  1634,
+    1640,  1648,  1656,  1664,  1672,  1680,  1688,  1696,  1704,  1712,
+    1720,  1728,  1736,  1741,  1746,  1751,  1756,  1761,  1766,  1771,
+    1776,  1781,  1786,  1791,  1796,  1801,  1806,  1811,  1816,  1821,
+    1826,  1831,  1836,  1841,  1846,  1851,  1856,  1861,  1866,  1871,
+    1876,  1881,  1886,  1891,  1896,  1901,  1906,  1911,  1916,  1921,
+    1926,  1931,  1936,  1941,  1946,  1951,  1956,  1961,  1966,  1971,
+    1976,  1981,  1986,  1991,  1996,  2001,  2006,  2011,  2016,  2021,
+    2026,  2031,  2036,  2041,  2046,  2051,  2056,  2061,  2066,  2071,
+    2076,  2081,  2086,  2091,  2096,  2101,  2106,  2111,  2116,  2121,
+    2126,  2131,  2136,  2141,  2146,  2151,  2156,  2161,  2166,  2171,
+    2176,  2181,  2186,  2191,  2196,  2201,  2206,  2211,  2216,  2221,
+    2226,  2231,  2236,  2241,  2246,  2251,  2256,  2261,  2266,  2271,
+    2276,  2281,  2287,  2293,  2299,  2305,  2311,  2317,  2323,  2328,
+    2344,  2349,  2354,  2362,  2362,  2373,  2373,  2383,  2386,  2399,
+    2417,  2441,  2445,  2451,  2456,  2467,  2470,  2476,  2485,  2488,
+    2494,  2498,  2499,  2505,  2506,  2507,  2508,  2509,  2510,  2511,
+    2515,  2516,  2520,  2516,  2532,  2533,  2537,  2537,  2544,  2544,
+    2558,  2561,  2569,  2577,  2588,  2589,  2593,  2600,  2604,  2612,
+    2616,  2629,  2629,  2649,  2652,  2658,  2670,  2682,  2682,  2697,
+    2697,  2713,  2713,  2734,  2737,  2743,  2746,  2752,  2756,  2763,
+    2768,  2773,  2780,  2783,  2792,  2796,  2803,  2806,  2812,  2812
 };
 #endif
 
@@ -839,31 +1017,34 @@ static const yytype_uint16 yyrline[] =
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "CONST", "BOOL",
-  "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "BREAK",
-  "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH",
-  "CASE", "DEFAULT", "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2",
-  "IVEC3", "IVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "UVEC2", "UVEC3",
-  "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4", "VEC2", "VEC3", "VEC4", "MAT2",
-  "MAT3", "MAT4", "CENTROID", "IN", "OUT", "INOUT", "UNIFORM", "PATCH",
-  "SAMPLE", "BUFFER", "SHARED", "COHERENT", "VOLATILE", "RESTRICT",
-  "READONLY", "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3",
-  "DMAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT",
+  "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "FLOAT16_T",
+  "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN",
+  "SWITCH", "CASE", "DEFAULT", "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4",
+  "IVEC2", "IVEC3", "IVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "UVEC2",
+  "UVEC3", "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4", "VEC2", "VEC3",
+  "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT", "INOUT",
+  "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", "COHERENT", "VOLATILE",
+  "RESTRICT", "READONLY", "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2",
+  "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3",
+  "F16MAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT",
   "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3",
   "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4",
   "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4",
-  "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
-  "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
-  "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
-  "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
-  "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
-  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
-  "USAMPLER2DARRAY", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
-  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
-  "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
-  "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
-  "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
-  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLER", "SAMPLERSHADOW",
-  "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
+  "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3",
+  "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "ATOMIC_UINT",
+  "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
+  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
+  "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
+  "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
+  "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
+  "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
+  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
+  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
+  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
+  "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
+  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
+  "SAMPLEREXTERNALOES", "SAMPLER", "SAMPLERSHADOW", "TEXTURE1D",
+  "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
   "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
   "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
   "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
@@ -882,11 +1063,11 @@ static const char *const yytname[] =
   "UIMAGE2DMS", "IMAGE2DMSARRAY", "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY",
   "STRUCT", "VOID", "WHILE", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
   "DOUBLECONSTANT", "INTCONSTANT", "UINTCONSTANT", "INT64CONSTANT",
-  "UINT64CONSTANT", "BOOLCONSTANT", "LEFT_OP", "RIGHT_OP", "INC_OP",
-  "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP",
-  "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN",
-  "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN",
-  "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+  "UINT64CONSTANT", "BOOLCONSTANT", "FLOAT16CONSTANT", "LEFT_OP",
+  "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP",
+  "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
+  "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
+  "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
   "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
   "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
   "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
@@ -925,13 +1106,13 @@ static const char *const yytname[] =
   "switch_statement_list", "case_label", "iteration_statement", "$@10",
   "$@11", "$@12", "for_init_statement", "conditionopt",
   "for_rest_statement", "jump_statement", "translation_unit",
-  "external_declaration", "function_definition", "$@13", YY_NULLPTR
+  "external_declaration", "function_definition", "$@13", YY_NULL
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -961,370 +1142,447 @@ static const yytype_uint16 yytoknum[] =
      495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
-     525
+     525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
+     535,   536,   537,   538,   539,   540,   541,   542
 };
 # endif
 
-#define YYPACT_NINF -495
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-495)))
-
-#define YYTABLE_NINF -380
-
-#define yytable_value_is_error(Yytable_value) \
-  0
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint16 yyr1[] =
+{
+       0,   288,   289,   290,   290,   290,   290,   290,   290,   290,
+     290,   290,   290,   291,   291,   291,   291,   291,   291,   292,
+     293,   294,   295,   295,   296,   296,   297,   297,   298,   299,
+     299,   300,   300,   300,   300,   301,   301,   301,   301,   302,
+     302,   302,   302,   303,   303,   303,   304,   304,   304,   305,
+     305,   305,   305,   305,   306,   306,   306,   307,   307,   308,
+     308,   309,   309,   310,   310,   311,   311,   312,   312,   313,
+     314,   313,   315,   315,   316,   316,   316,   316,   316,   316,
+     316,   316,   316,   316,   316,   317,   317,   318,   319,   319,
+     319,   319,   319,   319,   319,   319,   319,   321,   320,   322,
+     322,   323,   324,   324,   325,   325,   326,   327,   327,   328,
+     328,   328,   328,   329,   330,   330,   330,   330,   330,   331,
+     331,   331,   331,   331,   332,   332,   333,   334,   334,   334,
+     334,   335,   336,   336,   337,   337,   337,   338,   339,   339,
+     340,   340,   340,   340,   340,   340,   341,   341,   341,   341,
+     341,   341,   341,   341,   341,   341,   341,   341,   341,   341,
+     341,   341,   341,   341,   341,   342,   342,   343,   343,   344,
+     344,   344,   344,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
+     346,   346,   346,   348,   347,   349,   347,   350,   350,   351,
+     351,   352,   352,   353,   353,   354,   354,   354,   355,   355,
+     356,   357,   357,   358,   358,   358,   358,   358,   358,   358,
+     359,   360,   361,   359,   362,   362,   364,   363,   365,   363,
+     366,   366,   367,   367,   368,   368,   369,   370,   370,   371,
+     371,   373,   372,   374,   374,   375,   375,   377,   376,   378,
+     376,   379,   376,   380,   380,   381,   381,   382,   382,   383,
+     383,   383,   383,   383,   384,   384,   385,   385,   387,   386
+};
 
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
 {
-    2402,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -216,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -198,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -190,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -127,  -495,  -189,  -193,  -158,  -149,  3885,  -207,  -495,   -98,
-    -495,  -495,  -495,  -495,  2910,  -495,  -495,  -495,  -106,  -495,
-    -495,   547,  -495,  -495,   -62,   -45,   -90,  -495,  5757,  -217,
-    -495,  -495,   -86,  -495,  3885,  -495,  -495,  -495,  3885,   -51,
-     -50,  -495,  -208,  -155,  -495,  -495,  -495,  4339,   -81,  -495,
-    -495,  -495,  -185,  -495,   -87,  -157,  -495,  -495,  3885,   -83,
-    -495,  -204,   812,  -495,  -495,  -495,  -495,  -106,  -183,  -495,
-    4575,  -162,  -495,   -47,  -495,  -119,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  5291,  5291,  5291,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -195,  -495,  -495,  -495,   -77,  -150,
-    5524,   -72,  -495,  5291,  -111,  -144,  -167,  -194,  -147,   -93,
-     -91,   -89,   -55,   -56,  -213,   -69,  -495,  4822,  -495,   -36,
-    5291,  -495,   -45,  3885,  3885,   -34,  3156,  -495,  -495,  -495,
-     -73,   -71,  -495,   -60,   -59,   -66,  5058,   -54,  5291,   -70,
-     -49,   -58,  -495,  -495,  -163,  -495,  -495,  -118,  -495,  -193,
-     -46,  -495,  -495,  -495,  -495,  1077,  -495,  -495,  -495,  -495,
-    -495,  -495,   -81,  4575,  -161,  4575,  -495,  -495,  4575,  3885,
-    -495,   -25,  -495,  -495,  -495,  -145,  -495,  -495,  5291,   -21,
-    -495,  -495,  5291,   -48,  -495,  -495,  -495,  5291,  5291,  5291,
-    5291,  5291,  5291,  5291,  5291,  5291,  5291,  5291,  5291,  5291,
-    5291,  5291,  5291,  5291,  5291,  5291,  -495,  -495,  -495,   -44,
-    -495,  -495,  -495,  -495,  3399,   -34,  -106,  -117,  -495,  -495,
-    -495,  -495,  -495,  1342,  -495,  5291,  -495,  -495,  -113,  5291,
-    -154,  -495,  -495,  -495,  1342,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  5291,  5291,  -495,  -495,
-    -495,  -495,  4575,  -495,   -92,  -495,  3642,  -495,  -495,   -43,
-     -57,  -495,  -495,  -495,  -495,  -495,  -111,  -111,  -144,  -144,
-    -167,  -167,  -167,  -167,  -194,  -194,  -147,   -93,   -91,   -89,
-     -55,   -56,  5291,  -495,  -495,  -112,   -81,   -34,  -495,   -14,
-    2137,  -136,  -495,  -134,  -495,  2646,  1342,  -495,  -495,  -495,
-    -495,  4092,  -495,  -495,  -131,  -495,  -495,   -42,  -495,  -495,
-    2646,   -39,  -495,   -57,    -9,  3885,   -35,   -38,  -495,  -495,
-    5291,  5291,  -495,   -41,   -31,   184,   -32,  1872,  -495,   -30,
-     -29,  1607,  -495,  -495,  -132,  5291,  1607,   -39,  -495,  -495,
-    1342,  4575,  -495,  -495,  -495,   -37,   -57,  -495,  -495,  1342,
-     -27,  -495,  -495,  -495
+       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     3,     1,     4,     1,     3,     2,     2,     1,
+       1,     1,     2,     2,     2,     1,     2,     3,     2,     1,
+       1,     1,     2,     2,     2,     1,     1,     1,     1,     1,
+       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
+       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     2,     2,
+       4,     2,     3,     4,     2,     3,     4,     0,     6,     2,
+       3,     2,     1,     1,     2,     3,     3,     2,     3,     2,
+       1,     2,     1,     1,     1,     3,     4,     6,     5,     1,
+       2,     3,     5,     4,     1,     2,     1,     1,     1,     1,
+       1,     4,     1,     3,     1,     3,     1,     1,     1,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     4,     1,     3,     1,     2,     2,
+       3,     3,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
+       4,     1,     3,     1,     2,     1,     3,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
+       2,     3,     1,     2,     1,     2,     5,     3,     1,     1,
+       4,     0,     8,     0,     1,     3,     2,     0,     6,     0,
+       8,     0,     7,     1,     1,     1,     0,     2,     3,     2,
+       2,     2,     3,     2,     1,     2,     1,     1,     0,     3
 };
 
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   146,   147,   145,   179,   173,   174,   175,   176,   177,
-     178,   162,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   180,   181,   182,
-     201,   202,   203,   151,   149,   150,   148,   154,   152,   153,
-     155,   156,   157,   158,   159,   160,   161,   183,   184,   185,
-     213,   214,   215,   128,   127,   126,     0,   129,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   239,   240,
-     241,   242,   243,   244,   246,   247,   248,   249,   250,   251,
-     253,   254,   255,   256,   257,   258,   259,   237,   238,   245,
-     252,   260,   261,   262,   263,   264,   265,   334,   266,   267,
-     268,   269,   270,   271,   272,   273,   275,   276,   277,   278,
-     279,   280,   282,   283,   284,   285,   286,   287,   289,   290,
-     291,   292,   293,   294,   274,   281,   288,   295,   296,   297,
-     298,   299,   300,   335,   336,   337,   338,   339,   340,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,     0,   172,   342,   125,   136,   343,   344,   345,
-       0,   420,     0,   421,     0,   102,   101,     0,   113,   118,
-     143,   142,   140,   144,     0,   137,   139,   123,   166,   141,
-     341,     0,   417,   419,     0,     0,     0,   348,     0,     0,
-      90,    87,     0,   100,     0,   109,   103,   111,     0,   112,
-       0,    88,   119,     0,    93,   138,   124,     0,   167,     1,
-     418,   164,     0,   135,   133,     0,   131,   346,     0,     0,
-      91,     0,     0,   422,   104,   108,   110,   106,   114,   105,
-       0,   120,    96,     0,    94,     0,     2,     8,     9,     4,
-       5,     6,     7,    10,     0,     0,     0,   168,    36,    35,
-      37,    34,     3,    12,    30,    14,    19,    20,     0,     0,
-      24,     0,    38,     0,    42,    45,    48,    53,    56,    58,
-      60,    62,    64,    66,    68,     0,    28,     0,   163,     0,
-       0,   130,     0,     0,     0,     0,     0,   350,    89,    92,
-       0,     0,   402,     0,     0,     0,     0,     0,     0,     0,
-       0,   374,   383,   387,    38,    71,    84,     0,   363,     0,
-     123,   366,   385,   365,   364,     0,   367,   368,   369,   370,
-     371,   372,   107,     0,   115,     0,   358,   122,     0,     0,
-      98,     0,    95,    31,    32,     0,    16,    17,     0,     0,
-      22,    21,     0,   172,    25,    27,    33,     0,     0,     0,
+       0,   147,   148,   146,   181,   174,   175,   177,   178,   179,
+     180,   176,   163,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   182,   183,
+     184,   206,   207,   208,   152,   150,   151,   149,   155,   153,
+     154,   156,   157,   158,   159,   160,   161,   162,   185,   186,
+     187,   218,   219,   220,   188,   189,   190,   230,   231,   232,
+     129,   128,   127,     0,   130,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   256,   257,   258,   259,   260,   261,
+     263,   264,   265,   266,   267,   268,   270,   271,   272,   273,
+     274,   275,   276,   254,   255,   262,   269,   277,   278,   279,
+     280,   281,   282,   351,   283,   284,   285,   286,   287,   288,
+     289,   290,   292,   293,   294,   295,   296,   297,   299,   300,
+     301,   302,   303,   304,   306,   307,   308,   309,   310,   311,
+     291,   298,   305,   312,   313,   314,   315,   316,   317,   352,
+     353,   354,   355,   356,   357,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,   350,     0,   173,
+     359,   126,   137,   360,   361,   362,     0,   437,     0,   438,
+       0,   103,   102,     0,   114,   119,   144,   143,   141,   145,
+       0,   138,   140,   124,   167,   142,   358,     0,   434,   436,
+       0,     0,     0,   365,     0,     0,    91,    88,     0,   101,
+       0,   110,   104,   112,     0,   113,     0,    89,   120,     0,
+      94,   139,   125,     0,   168,     1,   435,   165,     0,   136,
+     134,     0,   132,   363,     0,     0,    92,     0,     0,   439,
+     105,   109,   111,   107,   115,   106,     0,   121,    97,     0,
+      95,     0,     2,     8,     9,     4,     5,     6,     7,    11,
+      10,     0,     0,     0,   169,    37,    36,    38,    35,     3,
+      13,    31,    15,    20,    21,     0,     0,    25,     0,    39,
+       0,    43,    46,    49,    54,    57,    59,    61,    63,    65,
+      67,    69,     0,    29,     0,   164,     0,     0,   131,     0,
+       0,     0,     0,     0,   367,    90,    93,     0,     0,   419,
+       0,     0,     0,     0,     0,     0,     0,     0,   391,   400,
+     404,    39,    72,    85,     0,   380,     0,   124,   383,   402,
+     382,   381,     0,   384,   385,   386,   387,   388,   389,   108,
+       0,   116,     0,   375,   123,     0,     0,    99,     0,    96,
+      32,    33,     0,    17,    18,     0,     0,    23,    22,     0,
+     173,    26,    28,    34,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,   169,   170,     0,
-     165,    86,   134,   132,     0,     0,   356,     0,   354,   349,
-     351,   413,   412,     0,   404,     0,   416,   414,     0,     0,
-       0,   399,   400,   373,     0,    74,    75,    77,    76,    79,
-      80,    81,    82,    83,    78,    73,     0,     0,   388,   384,
-     386,   117,     0,   361,     0,   121,     0,    99,    11,     0,
-      18,    15,    26,    39,    40,    41,    44,    43,    46,    47,
-      51,    52,    49,    50,    54,    55,    57,    59,    61,    63,
-      65,    67,     0,   171,   347,     0,   357,     0,   352,     0,
-       0,     0,   415,     0,   398,     0,   375,    72,    85,   116,
-     359,     0,    97,    13,     0,   353,   355,     0,   407,   406,
-     409,   381,   394,   392,     0,     0,     0,     0,   360,   362,
-       0,     0,   408,     0,     0,   391,     0,     0,   389,     0,
-       0,     0,   376,    70,     0,   410,     0,   381,   380,   382,
-     396,     0,   378,   401,   377,     0,   411,   405,   390,   397,
-       0,   393,   403,   395
+       0,     0,     0,    70,   170,   171,     0,   166,    87,   135,
+     133,     0,     0,   373,     0,   371,   366,   368,   430,   429,
+       0,   421,     0,   433,   431,     0,     0,     0,   416,   417,
+     390,     0,    75,    76,    78,    77,    80,    81,    82,    83,
+      84,    79,    74,     0,     0,   405,   401,   403,   118,     0,
+     378,     0,   122,     0,   100,    12,     0,    19,    16,    27,
+      40,    41,    42,    45,    44,    47,    48,    52,    53,    50,
+      51,    55,    56,    58,    60,    62,    64,    66,    68,     0,
+     172,   364,     0,   374,     0,   369,     0,     0,     0,   432,
+       0,   415,     0,   392,    73,    86,   117,   376,     0,    98,
+      14,     0,   370,   372,     0,   424,   423,   426,   398,   411,
+     409,     0,     0,     0,     0,   377,   379,     0,     0,   425,
+       0,     0,   408,     0,     0,   406,     0,     0,     0,   393,
+      71,     0,   427,     0,   398,   397,   399,   413,     0,   395,
+     418,   394,     0,   428,   422,   407,   414,     0,   410,   420,
+     412
 };
 
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,   -53,  -495,  -271,  -252,  -272,  -244,  -187,  -184,
-    -182,  -181,  -179,  -186,  -495,  -237,  -495,  -266,  -495,  -280,
-    -495,     3,  -495,  -495,  -495,     5,  -495,  -495,  -495,   -15,
-      -7,    -5,  -495,  -495,  -475,  -495,  -495,  -495,  -495,   -85,
-    -495,  -205,  -212,  -495,  -495,     0,  -221,  -495,    29,  -495,
-    -495,  -495,  -308,  -310,  -176,  -251,  -351,  -495,  -250,  -348,
-    -494,  -284,  -495,  -495,  -293,  -292,  -495,  -495,    12,  -423,
-    -243,  -495,  -495,  -264,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,    27,  -495,  -495
+      -1,   309,   310,   311,   476,   312,   313,   314,   315,   316,
+     317,   318,   361,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   362,   499,   363,   463,   364,
+     429,   365,   218,   386,   291,   366,   220,   221,   222,   251,
+     252,   253,   223,   224,   225,   226,   227,   228,   271,   272,
+     229,   230,   231,   232,   268,   333,   264,   234,   235,   236,
+     340,   274,   343,   344,   434,   435,   384,   471,   368,   369,
+     370,   371,   451,   534,   560,   542,   543,   544,   561,   372,
+     373,   374,   545,   533,   375,   546,   567,   376,   377,   512,
+     440,   507,   527,   540,   541,   378,   237,   238,   239,   248
 };
 
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -512
+static const yytype_int16 yypact[] =
+{
+    2538,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -235,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -201,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -203,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -153,  -512,  -210,  -220,
+    -152,  -189,  4119,  -160,  -512,  -128,  -512,  -512,  -512,  -512,
+    3079,  -512,  -512,  -512,  -122,  -512,  -512,   564,  -512,  -512,
+     -72,   -46,  -105,  -512,  6148,  -216,  -512,  -512,  -102,  -512,
+    4119,  -512,  -512,  -512,  4119,   -68,   -66,  -512,  -225,  -187,
+    -512,  -512,  -512,  4606,   -98,  -512,  -512,  -512,  -179,  -512,
+    -104,  -172,  -512,  -512,  4119,  -101,  -512,  -186,   846,  -512,
+    -512,  -512,  -512,  -122,  -233,  -512,  4870,  -217,  -512,   -63,
+    -512,  -151,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  5648,  5648,  5648,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -209,  -512,  -512,  -512,   -94,  -170,  5898,   -92,  -512,
+    5648,  -139,  -133,  -109,  -223,  -103,  -111,  -108,  -106,   -71,
+     -74,  -218,   -86,  -512,  5134,  -512,   -52,  5648,  -512,   -46,
+    4119,  4119,   -50,  3342,  -512,  -512,  -512,   -90,   -89,  -512,
+     -78,   -76,   -85,  5398,   -70,  5648,   -80,   -69,   -64,  -512,
+    -512,  -184,  -512,  -512,  -150,  -512,  -220,   -67,  -512,  -512,
+    -512,  -512,  1128,  -512,  -512,  -512,  -512,  -512,  -512,   -98,
+    4870,  -183,  4870,  -512,  -512,  4870,  4119,  -512,   -40,  -512,
+    -512,  -512,  -169,  -512,  -512,  5648,   -35,  -512,  -512,  5648,
+     -65,  -512,  -512,  -512,  5648,  5648,  5648,  5648,  5648,  5648,
+    5648,  5648,  5648,  5648,  5648,  5648,  5648,  5648,  5648,  5648,
+    5648,  5648,  5648,  -512,  -512,  -512,   -61,  -512,  -512,  -512,
+    -512,  3601,   -50,  -122,  -144,  -512,  -512,  -512,  -512,  -512,
+    1410,  -512,  5648,  -512,  -512,  -142,  5648,  -123,  -512,  -512,
+    -512,  1410,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  5648,  5648,  -512,  -512,  -512,  -512,  4870,
+    -512,  -226,  -512,  3860,  -512,  -512,   -60,   -62,  -512,  -512,
+    -512,  -512,  -512,  -139,  -139,  -133,  -133,  -109,  -109,  -109,
+    -109,  -223,  -223,  -103,  -111,  -108,  -106,   -71,   -74,  5648,
+    -512,  -512,  -138,   -98,   -50,  -512,   -33,  2256,  -168,  -512,
+    -167,  -512,  2798,  1410,  -512,  -512,  -512,  -512,  4342,  -512,
+    -512,  -121,  -512,  -512,   -56,  -512,  -512,  2798,   -58,  -512,
+     -62,   -32,  4119,   -49,   -51,  -512,  -512,  5648,  5648,  -512,
+     -57,   -45,   177,   -55,  1974,  -512,   -47,   -44,  1692,  -512,
+    -512,  -165,  5648,  1692,   -58,  -512,  -512,  1410,  4870,  -512,
+    -512,  -512,   -48,   -62,  -512,  -512,  1410,   -42,  -512,  -512,
+    -512
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-      -1,   292,   293,   294,   459,   295,   296,   297,   298,   299,
-     300,   301,   344,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   345,   482,   346,   446,   347,
-     412,   348,   202,   369,   275,   349,   204,   205,   206,   235,
-     236,   237,   207,   208,   209,   210,   211,   212,   255,   256,
-     213,   214,   215,   216,   252,   316,   248,   218,   219,   220,
-     323,   258,   326,   327,   417,   418,   367,   454,   351,   352,
-     353,   354,   434,   517,   543,   525,   526,   527,   544,   355,
-     356,   357,   528,   516,   358,   529,   550,   359,   360,   495,
-     423,   490,   510,   523,   524,   361,   221,   222,   223,   232
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,   -96,  -512,  -263,  -262,  -304,  -264,  -204,  -199,
+    -205,  -197,  -206,  -196,  -512,  -252,  -512,  -282,  -512,  -296,
+    -512,     3,  -512,  -512,  -512,     6,  -512,  -512,  -512,   -29,
+     -23,   -26,  -512,  -512,  -489,  -512,  -512,  -512,  -512,  -118,
+    -512,  -221,  -228,  -512,  -512,     0,  -240,  -512,    13,  -512,
+    -512,  -512,  -328,  -330,  -200,  -271,  -363,  -512,  -273,  -364,
+    -511,  -308,  -512,  -512,  -314,  -309,  -512,  -512,    -2,  -441,
+    -260,  -512,  -512,  -279,  -512,  -512,  -512,  -512,  -512,  -512,
+    -512,  -512,  -512,  -512,  -512,  -512,  -512,    12,  -512,  -512
 };
 
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -397
 static const yytype_int16 yytable[] =
 {
-     217,   238,   245,   201,   366,   203,   375,   450,   261,   253,
-     315,   496,   451,   405,   453,   414,   420,   455,   226,   229,
-     514,   271,   224,   247,   376,   377,   245,   394,   395,   238,
-     269,   260,   247,   539,   384,   514,   317,   542,   240,   270,
-     225,   241,   542,   -29,   329,   378,   362,   364,   406,   379,
-     392,   393,   227,   324,   318,   231,   428,   247,   430,   230,
-     319,   456,   396,   397,   363,   435,   436,   437,   438,   439,
-     440,   441,   442,   443,   444,   489,   398,   399,   317,   317,
-     409,   233,   321,   411,   445,   368,   452,   272,   322,   381,
-     273,   447,   494,   274,   458,   382,   234,   366,   460,   366,
-     447,   499,   366,   511,   420,   512,   390,   545,   391,   447,
-     242,   447,   245,   447,   447,   520,   462,   549,   324,   466,
-     467,   324,   470,   471,   472,   473,   371,   447,   487,   372,
-     448,   488,   447,   487,   247,   492,   505,   197,   198,   199,
-     468,   469,   387,   388,   389,   491,   420,   251,   450,   493,
-     519,   500,   257,   501,   474,   475,   262,   267,   268,   317,
-     320,   370,   380,   254,   324,   328,   385,   400,   401,   402,
-     403,   404,   407,   410,   416,   421,   431,   422,   424,   425,
-     497,   498,   426,   457,   429,   433,   366,   461,   447,   432,
-     551,   -23,   -28,   507,   302,   486,   521,   483,   503,   530,
-     537,   450,   504,  -379,   531,   532,   239,   535,   536,   324,
-     341,   552,   540,   476,   246,   513,   553,   477,   541,   481,
-     478,   217,   479,   265,   201,   480,   203,   264,   259,   228,
-     513,   373,   374,   266,   239,   366,   506,   413,   239,   485,
-     508,   534,   538,   547,   263,   548,   522,   509,   250,     0,
-     386,   324,     0,     0,   533,   546,     0,     0,   325,     0,
-       0,     0,   350,     0,   302,     0,     0,   302,     0,     0,
-       0,     0,     0,     0,     0,   366,     0,     0,     0,     0,
+     233,   254,   261,   217,   383,   277,   219,   392,   467,   269,
+     513,   332,   431,   437,   245,   411,   412,   468,   287,   470,
+     240,   242,   472,   531,   263,   422,   261,   393,   394,   254,
+     285,   380,   263,   556,   517,   401,   518,   559,   531,   286,
+     334,   263,   559,   379,   381,   247,   -30,   385,   395,   276,
+     413,   414,   396,   341,   241,   246,   243,   445,   473,   447,
+     423,   452,   453,   454,   455,   456,   457,   458,   459,   460,
+     461,   334,   288,   250,   334,   289,   506,   335,   290,   346,
+     462,   469,   426,   336,   338,   428,   398,   475,   528,   529,
+     339,   562,   399,   464,   464,   464,   258,   464,   383,   477,
+     383,   437,   256,   383,   249,   257,   516,   487,   488,   489,
+     490,   388,   464,   261,   389,   465,   566,   479,   504,   341,
+     464,   505,   341,   509,   504,   409,   410,   522,   213,   214,
+     215,   404,   405,   406,   407,   263,   408,   415,   416,   464,
+     511,   464,   537,   437,   483,   484,   508,   485,   486,   467,
+     510,   491,   492,   267,   273,   536,   283,   278,   284,   334,
+     337,   387,   397,   402,   345,   341,   417,   319,   418,   419,
+     421,   420,   424,   427,   433,   438,   439,   441,   270,   442,
+     443,   514,   515,   448,   474,   446,   449,   383,   -29,   478,
+     524,   -24,   547,   503,   554,   568,   450,   500,   520,   538,
+     464,  -396,   467,   521,   358,   390,   391,   548,   552,   549,
+     341,   553,   557,   493,   495,   497,   530,   569,   570,   494,
+     558,   430,   255,   496,   403,   281,   498,   280,   282,   244,
+     262,   530,   502,   523,   525,   555,   383,   233,   319,   564,
+     217,   319,   551,   219,   275,   565,   279,   526,   539,   266,
+     255,     0,   341,     0,   255,   550,   563,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     515,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   245,     0,   515,     0,     0,     0,     0,
+       0,     0,     0,     0,   342,     0,   383,     0,   367,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   325,   415,     0,   325,     0,     0,     0,
-       0,     0,     0,     0,   463,   464,   465,   302,   302,   302,
-     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
-     302,   302,   302,     0,     0,   350,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
+       0,   532,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   261,     0,   532,     0,   480,   481,
+     482,   319,   319,   319,   319,   319,   319,   319,   319,   319,
+     319,   319,   319,   319,   319,   319,   319,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     342,   432,     0,   342,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   367,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   342,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,     0,   350,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   350,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   342,     0,     0,     0,     0,     0,     0,     0,     0,
+     367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   367,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     350,     0,     0,     0,     0,   350,   350,     0,     0,     0,
+       0,     0,     0,   342,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     350,     0,     0,     0,     0,   246,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   350,     0,     0,
-       0,   350,     0,     0,     0,     0,   350,     0,     0,     0,
-     350,     0,     0,     0,     0,     0,     0,   249,     0,   350,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,     0,     0,   194,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   367,     0,     0,
+       0,     0,   367,   367,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   367,     0,     0,
+       0,     0,   262,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   367,     0,     0,     0,   367,     0,
+       0,     0,     0,   367,     0,     0,     0,   367,     0,     0,
+       0,     0,     0,     0,   265,     0,   367,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,     0,     0,   210,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
-     196,   197,   198,   199,   200,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   330,   331,   332,     0,   333,
-     334,   335,   336,   337,   338,   339,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   340,
-     276,   194,   277,   278,   279,   280,   281,   282,   283,     0,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,     0,     0,     0,   341,   342,     0,     0,     0,     0,
-     343,   288,   289,   290,   291,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   195,   196,   197,   198,   199,   200,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-     330,   331,   332,     0,   333,   334,   335,   336,   337,   338,
-     339,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   340,   276,   194,   277,   278,   279,
-     280,   281,   282,   283,     0,     0,   284,   285,     0,     0,
+       0,     0,     0,   211,   212,   213,   214,   215,   216,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     347,   348,   349,     0,   350,   351,   352,   353,   354,   355,
+     356,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   357,
+     292,   210,   293,   294,   295,   296,   297,   298,   299,   300,
+       0,     0,   301,   302,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,     0,     0,   341,
-     449,     0,     0,     0,     0,   343,   288,   289,   290,   291,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
-     196,   197,   198,   199,   200,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   330,   331,   332,     0,   333,
-     334,   335,   336,   337,   338,   339,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   340,
-     276,   194,   277,   278,   279,   280,   281,   282,   283,     0,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,   303,     0,     0,     0,   358,   359,     0,     0,     0,
+       0,   360,   305,   306,   307,   308,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   211,   212,   213,   214,   215,
+     216,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   347,   348,   349,     0,   350,   351,   352,   353,
+     354,   355,   356,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   357,   292,   210,   293,   294,   295,   296,   297,   298,
+     299,   300,     0,     0,   301,   302,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,     0,     0,     0,   341,     0,     0,     0,     0,     0,
-     343,   288,   289,   290,   291,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   195,   196,   197,   198,   199,   200,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-     330,   331,   332,     0,   333,   334,   335,   336,   337,   338,
-     339,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   340,   276,   194,   277,   278,   279,
-     280,   281,   282,   283,     0,     0,   284,   285,     0,     0,
+       0,     0,     0,   303,     0,     0,     0,   358,   466,     0,
+       0,     0,     0,   360,   305,   306,   307,   308,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   211,   212,   213,
+     214,   215,   216,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   347,   348,   349,     0,   350,   351,
+     352,   353,   354,   355,   356,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   357,   292,   210,   293,   294,   295,   296,
+     297,   298,   299,   300,     0,     0,   301,   302,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,     0,     0,   262,
-       0,     0,     0,     0,     0,   343,   288,   289,   290,   291,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
-     196,   197,   198,   199,   200,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   330,   331,   332,     0,   333,
-     334,   335,   336,   337,   338,   339,    11,    12,    13,    14,
+       0,     0,     0,     0,     0,   303,     0,     0,     0,   358,
+       0,     0,     0,     0,     0,   360,   305,   306,   307,   308,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   211,
+     212,   213,   214,   215,   216,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   347,   348,   349,     0,
+     350,   351,   352,   353,   354,   355,   356,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
@@ -1342,67 +1600,46 @@ static const yytype_int16 yytable[] =
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   340,
-     276,   194,   277,   278,   279,   280,   281,   282,   283,     0,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     343,   288,   289,   290,   291,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   195,   196,   197,   198,   199,   200,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,     0,   276,   194,   277,   278,   279,
-     280,   281,   282,   283,     0,     0,   284,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   343,   288,   289,   290,   291,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
-     196,   197,   198,   199,   200,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,     0,
-       0,   194,     0,     0,     0,     0,     0,     0,     0,     0,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   357,   292,   210,   293,   294,
+     295,   296,   297,   298,   299,   300,     0,     0,   301,   302,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   303,     0,     0,
+       0,   278,     0,     0,     0,     0,     0,   360,   305,   306,
+     307,   308,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   211,   212,   213,   214,   215,   216,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   347,   348,
+     349,     0,   350,   351,   352,   353,   354,   355,   356,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   357,   292,   210,
+     293,   294,   295,   296,   297,   298,   299,   300,     0,     0,
+     301,   302,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   303,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   360,
+     305,   306,   307,   308,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   211,   212,   213,   214,   215,   216,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,     0,
-       0,     0,     0,     0,   195,   196,   197,   198,   199,   200,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
@@ -1420,64 +1657,71 @@ static const yytype_int16 yytable[] =
      161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
      181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,     0,   276,   194,   277,   278,   279,   280,
-     281,   282,   283,     0,     0,   284,   285,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   288,   289,   290,   291,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   195,   196,
-     197,   198,   199,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,     0,   243,   194,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,     0,
+     292,   210,   293,   294,   295,   296,   297,   298,   299,   300,
+       0,     0,   301,   302,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   303,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   360,   305,   306,   307,   308,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   211,   212,   213,   214,   215,
+     216,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,     0,   210,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   244,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,     0,
-       0,     0,   195,   196,   197,   198,   199,     0,     0,     0,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,     0,     0,   194,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,   211,   212,   213,
+     214,   215,   216,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,   292,   210,   293,   294,   295,   296,   297,   298,
+     299,   300,     0,     0,   301,   302,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   419,
-       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,   195,   196,
-     197,   198,   199,    11,    12,    13,    14,    15,    16,    17,
+       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   305,   306,   307,   308,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   211,   212,   213,
+     214,   215,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
@@ -1495,13 +1739,15 @@ static const yytype_int16 yytable[] =
      158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
      168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
      178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,     0,     0,   194,     0,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,     0,   259,   210,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   484,     0,     0,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,   195,   196,   197,   198,   199,    11,    12,    13,    14,
+       0,     0,     0,     0,   260,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,     0,     0,   211,   212,
+     213,   214,   215,     0,     0,     0,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
@@ -1519,63 +1765,71 @@ static const yytype_int16 yytable[] =
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,     0,
-       0,   194,     0,     0,     0,     0,     0,     0,     0,     0,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,     0,     0,   210,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   502,     0,     0,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,     0,     0,
-       0,     0,     0,     0,   195,   196,   197,   198,   199,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,     0,     0,   194,     0,     0,     0,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   195,   196,   197,
-     198,   199,    47,    48,    49,    50,    51,    52,     0,     0,
-       0,     0,     0,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,     0,
-     276,   194,   277,   278,   279,   280,   281,   282,   283,     0,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,     0,     0,     0,   365,   518,     0,     0,     0,     0,
-       0,   288,   289,   290,   291,     4,     5,     6,     7,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+       0,     0,   436,     0,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+       0,   211,   212,   213,   214,   215,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,     0,     0,   210,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   501,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+     211,   212,   213,   214,   215,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,     0,     0,   210,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     519,     0,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,   211,
+     212,   213,   214,   215,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    47,
-      48,    49,    50,    51,    52,     0,     0,     0,     0,     0,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
@@ -1589,42 +1843,16 @@ static const yytype_int16 yytable[] =
      158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
      168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
      178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,     0,   276,   194,   277,
-     278,   279,   280,   281,   282,   283,     0,     0,   284,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,     0,     0,
-     287,     4,     5,     6,     7,     8,     9,    10,   288,   289,
-     290,   291,     0,     0,     0,     0,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    47,    48,    49,    50,    51,
-      52,     0,     0,     0,     0,     0,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,     0,   276,   194,   277,   278,   279,   280,   281,
-     282,   283,     0,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,     0,     0,   365,     0,     0,
-       0,     0,     0,     0,   288,   289,   290,   291,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,     0,     0,   210,     0,     0,     0,     4,     5,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    47,    48,    49,    50,    51,    52,     0,     0,
-       0,     0,     0,    58,    59,    60,    61,    62,    63,    64,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   211,   212,
+     213,   214,   215,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,     0,     0,     0,     0,     0,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
@@ -1637,65 +1865,74 @@ static const yytype_int16 yytable[] =
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,     0,
-     276,   194,   277,   278,   279,   280,   281,   282,   283,     0,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,     0,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,     0,   292,   210,   293,   294,
+     295,   296,   297,   298,   299,   300,     0,     0,   301,   302,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,     0,     0,   408,     4,     5,     6,     7,     8,     9,
-      10,   288,   289,   290,   291,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
-      49,    50,    51,    52,     0,     0,     0,     0,     0,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,     0,   276,   194,   277,   278,
-     279,   280,   281,   282,   283,     0,     0,   284,   285,     0,
+       0,     0,     0,     0,     0,     0,     0,   303,     0,     0,
+       0,   382,   535,     0,     0,     0,     0,     0,   305,   306,
+     307,   308,     4,     5,     6,     7,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   286,     4,     5,     6,
-       7,     8,     9,    10,     0,     0,   427,   288,   289,   290,
-     291,     0,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+       0,     0,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
+       0,     0,     0,     0,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,     0,
+     292,   210,   293,   294,   295,   296,   297,   298,   299,   300,
+       0,     0,   301,   302,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   303,     0,     0,   304,     0,     0,     0,     0,     0,
+       0,     0,   305,   306,   307,   308,     4,     5,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,     0,     0,     0,     0,     0,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,     0,   292,   210,   293,   294,   295,   296,
+     297,   298,   299,   300,     0,     0,   301,   302,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   303,     0,     0,     0,   382,
+       0,     0,     0,     0,     0,     0,   305,   306,   307,   308,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    47,    48,    49,    50,    51,    52,     0,     0,     0,
-       0,     0,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,     0,   276,
-     194,   277,   278,   279,   280,   281,   282,   283,     0,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
-       4,     5,     6,     7,     8,     9,    10,     0,     0,     0,
-     288,   289,   290,   291,     0,     0,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    47,    48,    49,    50,    51,    52,
-       0,     0,     0,     0,     0,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,     0,     0,     0,
+       0,     0,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
@@ -1708,301 +1945,207 @@ static const yytype_int16 yytable[] =
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     383,     0,   276,   194,   277,   278,   279,   280,   281,   282,
-     283,     0,     0,   284,   285,     0,     0,     0,     0,     0,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,     0,   292,   210,
+     293,   294,   295,   296,   297,   298,   299,   300,     0,     0,
+     301,   302,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   303,
+       0,     0,   425,     0,     0,     0,     0,     0,     0,     0,
+     305,   306,   307,   308,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,   292,   210,   293,   294,   295,   296,   297,   298,
+     299,   300,     0,     0,   301,   302,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   286,     4,     5,     6,     7,     8,     9,    10,
-       0,     0,     0,   288,   289,   290,   291,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    47,    48,    49,
-      50,    51,    52,     0,     0,     0,     0,     0,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,     0,     0,   194
+       0,     0,     0,   303,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,   444,   305,   306,   307,   308,     0,     0,
+       0,     0,     0,     0,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,   292,   210,   293,   294,   295,   296,   297,   298,
+     299,   300,     0,     0,   301,   302,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   303,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,   305,   306,   307,   308,     0,     0,
+       0,     0,     0,     0,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     400,     0,   292,   210,   293,   294,   295,   296,   297,   298,
+     299,   300,     0,     0,   301,   302,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   303,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,   305,   306,   307,   308,     0,     0,
+       0,     0,     0,     0,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,     0,   210
 };
 
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-512)))
+
+#define yytable_value_is_error(Yytable_value) \
+  YYID (0)
+
 static const yytype_int16 yycheck[] =
 {
-       0,   206,   214,     0,   270,     0,   286,   355,   229,    54,
-     247,   434,   363,   226,   365,   323,   326,   368,   208,   208,
-     495,   242,   238,   240,   219,   220,   238,   221,   222,   234,
-     238,   248,   240,   527,   300,   510,   240,   531,   245,   247,
-     238,   248,   536,   238,   248,   240,   267,   268,   261,   244,
-     217,   218,   242,   258,   239,   248,   336,   240,   338,   248,
-     245,   369,   256,   257,   247,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   423,   223,   224,   240,   240,
-     317,   239,   239,   320,   247,   247,   247,   242,   245,   239,
-     245,   245,   246,   248,   239,   245,   245,   363,   378,   365,
-     245,   452,   368,   239,   414,   239,   250,   239,   252,   245,
-     208,   245,   324,   245,   245,   246,   382,   540,   323,   390,
-     391,   326,   394,   395,   396,   397,   245,   245,   245,   248,
-     248,   248,   245,   245,   240,   248,   248,   264,   265,   266,
-     392,   393,   253,   254,   255,   425,   456,   209,   496,   429,
-     501,   243,   242,   245,   398,   399,   242,   208,   208,   240,
-     247,   208,   239,   208,   369,   248,   238,   260,   259,   258,
-     225,   227,   241,   209,   208,   248,   246,   248,   238,   238,
-     446,   447,   248,   208,   238,   243,   452,   208,   245,   238,
-     541,   239,   238,   207,   247,   416,   238,   241,   241,   208,
-      16,   549,   482,   242,   239,   243,   206,   248,   239,   414,
-     242,   248,   242,   400,   214,   495,   243,   401,   247,   405,
-     402,   221,   403,   238,   221,   404,   221,   234,   228,   200,
-     510,   284,   285,   238,   234,   501,   487,   322,   238,   415,
-     490,   521,   526,   536,   232,   537,   510,   490,   221,    -1,
-     303,   456,    -1,    -1,   520,   535,    -1,    -1,   258,    -1,
-      -1,    -1,   262,    -1,   317,    -1,    -1,   320,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   541,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     495,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   515,    -1,   510,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   323,   324,    -1,   326,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   387,   388,   389,   390,   391,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,    -1,    -1,   355,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   369,
+       0,   222,   230,     0,   286,   245,     0,   303,   372,    55,
+     451,   263,   340,   343,   224,   238,   239,   380,   258,   382,
+     255,   224,   385,   512,   257,   243,   254,   236,   237,   250,
+     255,   264,   257,   544,   260,   317,   262,   548,   527,   264,
+     257,   257,   553,   283,   284,   265,   255,   264,   257,   265,
+     273,   274,   261,   274,   255,   265,   259,   353,   386,   355,
+     278,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   257,   259,   262,   257,   262,   440,   256,   265,   265,
+     264,   264,   334,   262,   256,   337,   256,   256,   256,   256,
+     262,   256,   262,   262,   262,   262,   224,   262,   380,   395,
+     382,   431,   262,   385,   256,   265,   469,   411,   412,   413,
+     414,   262,   262,   341,   265,   265,   557,   399,   262,   340,
+     262,   265,   343,   265,   262,   234,   235,   265,   281,   282,
+     283,   270,   271,   272,   267,   257,   269,   240,   241,   262,
+     263,   262,   263,   473,   407,   408,   442,   409,   410,   513,
+     446,   415,   416,   225,   259,   518,   224,   259,   224,   257,
+     264,   224,   256,   255,   265,   386,   277,   263,   276,   275,
+     244,   242,   258,   225,   224,   265,   265,   255,   224,   255,
+     265,   463,   464,   263,   224,   255,   255,   469,   255,   224,
+     223,   256,   224,   433,    17,   558,   260,   258,   258,   255,
+     262,   259,   566,   499,   259,   301,   302,   256,   265,   260,
+     431,   256,   259,   417,   419,   421,   512,   265,   260,   418,
+     264,   339,   222,   420,   320,   254,   422,   250,   254,   216,
+     230,   527,   432,   504,   507,   543,   518,   237,   334,   553,
+     237,   337,   538,   237,   244,   554,   248,   507,   527,   237,
+     250,    -1,   473,    -1,   254,   537,   552,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   274,    -1,   558,    -1,   278,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   512,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   532,    -1,   527,    -1,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     340,   341,    -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   414,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   423,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   434,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   456,    -1,    -1,    -1,
+      -1,    -1,   372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     490,    -1,    -1,    -1,    -1,   495,   496,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     510,    -1,    -1,    -1,    -1,   515,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   527,    -1,    -1,
-      -1,   531,    -1,    -1,    -1,    -1,   536,    -1,    -1,    -1,
-     540,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,   549,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      -1,   431,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     440,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,    -1,    -1,   209,    -1,    -1,    -1,
+      -1,    -1,    -1,   473,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   507,    -1,    -1,
+      -1,    -1,   512,   513,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   527,    -1,    -1,
+      -1,    -1,   532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   544,    -1,    -1,    -1,   548,    -1,
+      -1,    -1,    -1,   553,    -1,    -1,    -1,   557,    -1,    -1,
+      -1,    -1,    -1,    -1,     0,    -1,   566,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,    -1,    -1,   225,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,
-     263,   264,   265,   266,   267,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,    -1,
-      -1,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     238,    -1,    -1,    -1,   242,   243,    -1,    -1,    -1,    -1,
-     248,   249,   250,   251,   252,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   262,   263,   264,   265,   266,   267,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,    -1,    -1,   219,   220,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   238,    -1,    -1,    -1,   242,
-     243,    -1,    -1,    -1,    -1,   248,   249,   250,   251,   252,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,
-     263,   264,   265,   266,   267,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,    -1,
-      -1,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     238,    -1,    -1,    -1,   242,    -1,    -1,    -1,    -1,    -1,
-     248,   249,   250,   251,   252,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   262,   263,   264,   265,   266,   267,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,    -1,    -1,   219,   220,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   238,    -1,    -1,    -1,   242,
-      -1,    -1,    -1,    -1,    -1,   248,   249,   250,   251,   252,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,
-     263,   264,   265,   266,   267,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,    -1,
-      -1,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     238,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     248,   249,   250,   251,   252,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   262,   263,   264,   265,   266,   267,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,    -1,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,    -1,    -1,   219,   220,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   238,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   248,   249,   250,   251,   252,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,
-     263,   264,   265,   266,   267,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,    -1,
-      -1,   209,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,   262,   263,   264,   265,   266,   267,
+      -1,    -1,    -1,   279,   280,   281,   282,   283,   284,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
@@ -2021,15 +2164,45 @@ static const yytype_int16 yycheck[] =
      174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
      184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,    -1,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,    -1,    -1,   219,   220,    -1,    -1,    -1,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+      -1,    -1,   236,   237,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   255,    -1,    -1,    -1,   259,   260,    -1,    -1,    -1,
+      -1,   265,   266,   267,   268,   269,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   279,   280,   281,   282,   283,
+     284,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,    -1,    -1,   236,   237,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   249,   250,   251,   252,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,   263,
-     264,   265,   266,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,   255,    -1,    -1,    -1,   259,   260,    -1,
+      -1,    -1,    -1,   265,   266,   267,   268,   269,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   279,   280,   281,
+     282,   283,   284,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
@@ -2047,14 +2220,74 @@ static const yytype_int16 yycheck[] =
      170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
      180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,    -1,   208,   209,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,    -1,    -1,   236,   237,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   255,    -1,    -1,    -1,   259,
+      -1,    -1,    -1,    -1,    -1,   265,   266,   267,   268,   269,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   279,
+     280,   281,   282,   283,   284,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,    -1,    -1,   236,   237,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   255,    -1,    -1,
+      -1,   259,    -1,    -1,    -1,    -1,    -1,   265,   266,   267,
+     268,   269,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   279,   280,   281,   282,   283,   284,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,    -1,    -1,
+     236,   237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   255,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,
+     266,   267,   268,   269,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   279,   280,   281,   282,   283,   284,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   248,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    -1,
-      -1,    -1,   262,   263,   264,   265,   266,    -1,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
@@ -2072,111 +2305,75 @@ static const yytype_int16 yycheck[] =
      174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
      184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,    -1,    -1,   209,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   243,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,   262,   263,
-     264,   265,   266,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,    -1,    -1,   209,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,    -1,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+      -1,    -1,   236,   237,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   255,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   265,   266,   267,   268,   269,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   279,   280,   281,   282,   283,
+     284,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,    -1,   225,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   243,    -1,    -1,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,   262,   263,   264,   265,   266,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,    -1,
-      -1,   209,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   243,    -1,    -1,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    -1,    -1,
-      -1,    -1,    -1,    -1,   262,   263,   264,   265,   266,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,    -1,    -1,   209,    -1,    -1,    -1,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   262,   263,   264,
-     265,   266,    60,    61,    62,    63,    64,    65,    -1,    -1,
-      -1,    -1,    -1,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,    -1,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,    -1,
-      -1,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,   279,   280,   281,
+     282,   283,   284,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,    -1,    -1,   236,   237,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     238,    -1,    -1,    -1,   242,   243,    -1,    -1,    -1,    -1,
-      -1,   249,   250,   251,   252,     6,     7,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   255,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   266,   267,   268,   269,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   279,   280,   281,
+     282,   283,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      61,    62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
@@ -2190,42 +2387,20 @@ static const yytype_int16 yycheck[] =
      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
      181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
      191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,    -1,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,    -1,    -1,   219,   220,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,    -1,   224,   225,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   238,    -1,    -1,
-     241,     6,     7,     8,     9,    10,    11,    12,   249,   250,
-     251,   252,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    60,    61,    62,    63,    64,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,    -1,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,    -1,    -1,   219,   220,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   238,    -1,    -1,    -1,   242,    -1,    -1,
-      -1,    -1,    -1,    -1,   249,   250,   251,   252,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    62,    63,    64,    65,    -1,    -1,
-      -1,    -1,    -1,    71,    72,    73,    74,    75,    76,    77,
+      -1,    -1,    -1,    -1,   265,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    -1,    -1,   279,   280,
+     281,   282,   283,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
       98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
@@ -2238,41 +2413,20 @@ static const yytype_int16 yycheck[] =
      168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
      178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
      188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,    -1,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,    -1,
-      -1,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,    -1,    -1,   225,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     238,    -1,    -1,   241,     6,     7,     8,     9,    10,    11,
-      12,   249,   250,   251,   252,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
-      62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,    -1,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,    -1,    -1,   219,   220,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   238,     6,     7,     8,
-       9,    10,    11,    12,    -1,    -1,   248,   249,   250,   251,
-     252,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    61,    62,    63,    64,    65,    -1,    -1,    -1,
-      -1,    -1,    71,    72,    73,    74,    75,    76,    77,    78,
+      -1,    -1,   260,    -1,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      -1,   279,   280,   281,   282,   283,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
       89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
@@ -2285,18 +2439,148 @@ static const yytype_int16 yycheck[] =
      169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
      179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
      189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,    -1,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,    -1,    -1,
-     219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   238,
-       6,     7,     8,     9,    10,    11,    12,    -1,    -1,    -1,
-     249,   250,   251,   252,    -1,    -1,    -1,    -1,    -1,    25,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,    -1,    -1,   225,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   260,    -1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+     279,   280,   281,   282,   283,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,    -1,    -1,   225,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     260,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   279,
+     280,   281,   282,   283,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,    -1,    -1,   225,    -1,    -1,    -1,     6,     7,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   279,   280,
+     281,   282,   283,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,    -1,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,    -1,    -1,   236,   237,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   255,    -1,    -1,
+      -1,   259,   260,    -1,    -1,    -1,    -1,    -1,   266,   267,
+     268,   269,     6,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,    -1,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+      -1,    -1,   236,   237,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   255,    -1,    -1,   258,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   266,   267,   268,   269,     6,     7,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,    -1,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,    -1,    -1,   236,   237,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   255,    -1,    -1,    -1,   259,
+      -1,    -1,    -1,    -1,    -1,    -1,   266,   267,   268,   269,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    61,    62,    63,    64,    65,
-      -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
@@ -2309,38 +2593,118 @@ static const yytype_int16 yycheck[] =
      176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
      186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
      196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,    -1,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,    -1,    -1,   219,   220,    -1,    -1,    -1,    -1,    -1,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,    -1,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,    -1,    -1,
+     236,   237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   255,
+      -1,    -1,   258,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     266,   267,   268,   269,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,    -1,    -1,   236,   237,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   238,     6,     7,     8,     9,    10,    11,    12,
-      -1,    -1,    -1,   249,   250,   251,   252,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    62,
-      63,    64,    65,    -1,    -1,    -1,    -1,    -1,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,    -1,    -1,   209
+      -1,    -1,    -1,   255,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,   265,   266,   267,   268,   269,    -1,    -1,
+      -1,    -1,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,    -1,    -1,   236,   237,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   255,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,   266,   267,   268,   269,    -1,    -1,
+      -1,    -1,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,    -1,    -1,   236,   237,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   255,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,   266,   267,   268,   269,    -1,    -1,
+      -1,    -1,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,    -1,    -1,   225
 };
 
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
@@ -2358,151 +2722,71 @@ static const yytype_uint16 yystos[] =
      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   209,   262,   263,   264,   265,   266,
-     267,   302,   303,   306,   307,   308,   309,   313,   314,   315,
-     316,   317,   318,   321,   322,   323,   324,   326,   328,   329,
-     330,   367,   368,   369,   238,   238,   208,   242,   329,   208,
-     248,   248,   370,   239,   245,   310,   311,   312,   322,   326,
-     245,   248,   208,   208,   248,   323,   326,   240,   327,     0,
-     368,   209,   325,    54,   208,   319,   320,   242,   332,   326,
-     248,   327,   242,   349,   311,   310,   312,   208,   208,   238,
-     247,   327,   242,   245,   248,   305,   208,   210,   211,   212,
-     213,   214,   215,   216,   219,   220,   238,   241,   249,   250,
-     251,   252,   272,   273,   274,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   326,   240,   239,   245,
-     247,   239,   245,   331,   322,   326,   333,   334,   248,   248,
-      13,    14,    15,    17,    18,    19,    20,    21,    22,    23,
-     207,   242,   243,   248,   283,   296,   298,   300,   302,   306,
-     326,   339,   340,   341,   342,   350,   351,   352,   355,   358,
-     359,   366,   327,   247,   327,   242,   298,   337,   247,   304,
-     208,   245,   248,   283,   283,   300,   219,   220,   240,   244,
-     239,   239,   245,   206,   298,   238,   283,   253,   254,   255,
-     250,   252,   217,   218,   221,   222,   256,   257,   223,   224,
-     260,   259,   258,   225,   227,   226,   261,   241,   241,   296,
-     209,   296,   301,   320,   333,   326,   208,   335,   336,   243,
-     334,   248,   248,   361,   238,   238,   248,   248,   300,   238,
-     300,   246,   238,   243,   343,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   247,   299,   245,   248,   243,
-     340,   337,   247,   337,   338,   337,   333,   208,   239,   275,
-     300,   208,   298,   283,   283,   283,   285,   285,   286,   286,
-     287,   287,   287,   287,   288,   288,   289,   290,   291,   292,
-     293,   294,   297,   241,   243,   335,   327,   245,   248,   340,
-     362,   300,   248,   300,   246,   360,   350,   298,   298,   337,
-     243,   245,   243,   241,   300,   248,   336,   207,   339,   351,
-     363,   239,   239,   300,   315,   322,   354,   344,   243,   337,
-     246,   238,   354,   364,   365,   346,   347,   348,   353,   356,
-     208,   239,   243,   298,   300,   248,   239,    16,   342,   341,
-     242,   247,   341,   345,   349,   239,   300,   345,   346,   350,
-     357,   337,   248,   243
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
-{
-       0,   271,   272,   273,   273,   273,   273,   273,   273,   273,
-     273,   273,   274,   274,   274,   274,   274,   274,   275,   276,
-     277,   278,   278,   279,   279,   280,   280,   281,   282,   282,
-     283,   283,   283,   283,   284,   284,   284,   284,   285,   285,
-     285,   285,   286,   286,   286,   287,   287,   287,   288,   288,
-     288,   288,   288,   289,   289,   289,   290,   290,   291,   291,
-     292,   292,   293,   293,   294,   294,   295,   295,   296,   297,
-     296,   298,   298,   299,   299,   299,   299,   299,   299,   299,
-     299,   299,   299,   299,   300,   300,   301,   302,   302,   302,
-     302,   302,   302,   302,   302,   302,   304,   303,   305,   305,
-     306,   307,   307,   308,   308,   309,   310,   310,   311,   311,
-     311,   311,   312,   313,   313,   313,   313,   313,   314,   314,
-     314,   314,   314,   315,   315,   316,   317,   317,   317,   317,
-     318,   319,   319,   320,   320,   320,   321,   322,   322,   323,
-     323,   323,   323,   323,   323,   324,   324,   324,   324,   324,
-     324,   324,   324,   324,   324,   324,   324,   324,   324,   324,
-     324,   324,   324,   324,   325,   325,   326,   326,   327,   327,
-     327,   327,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   329,   329,   329,   331,   330,   332,   330,
-     333,   333,   334,   334,   335,   335,   336,   336,   337,   337,
-     337,   338,   338,   339,   340,   340,   341,   341,   341,   341,
-     341,   341,   341,   342,   343,   344,   342,   345,   345,   347,
-     346,   348,   346,   349,   349,   350,   350,   351,   351,   352,
-     353,   353,   354,   354,   356,   355,   357,   357,   358,   358,
-     360,   359,   361,   359,   362,   359,   363,   363,   364,   364,
-     365,   365,   366,   366,   366,   366,   366,   367,   367,   368,
-     368,   370,   369
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     1,     4,     1,     3,     2,     2,     1,     1,
-       1,     2,     2,     2,     1,     2,     3,     2,     1,     1,
-       1,     2,     2,     2,     1,     1,     1,     1,     1,     3,
-       3,     3,     1,     3,     3,     1,     3,     3,     1,     3,
-       3,     3,     3,     1,     3,     3,     1,     3,     1,     3,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     0,
-       6,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     2,     2,     4,
-       2,     3,     4,     2,     3,     4,     0,     6,     2,     3,
-       2,     1,     1,     2,     3,     3,     2,     3,     2,     1,
-       2,     1,     1,     1,     3,     4,     6,     5,     1,     2,
-       3,     5,     4,     1,     2,     1,     1,     1,     1,     1,
-       4,     1,     3,     1,     3,     1,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     4,     1,     3,     1,     2,     2,     3,
-       3,     4,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     6,     0,     5,
-       1,     2,     3,     4,     1,     3,     1,     2,     1,     3,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
-       2,     0,     2,     2,     3,     1,     2,     1,     2,     5,
-       3,     1,     1,     4,     0,     8,     0,     1,     3,     2,
-       0,     6,     0,     8,     0,     7,     1,     1,     1,     0,
-       2,     3,     2,     2,     2,     3,     2,     1,     2,     1,
-       1,     0,     3
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     225,   279,   280,   281,   282,   283,   284,   319,   320,   323,
+     324,   325,   326,   330,   331,   332,   333,   334,   335,   338,
+     339,   340,   341,   343,   345,   346,   347,   384,   385,   386,
+     255,   255,   224,   259,   346,   224,   265,   265,   387,   256,
+     262,   327,   328,   329,   339,   343,   262,   265,   224,   224,
+     265,   340,   343,   257,   344,     0,   385,   225,   342,    55,
+     224,   336,   337,   259,   349,   343,   265,   344,   259,   366,
+     328,   327,   329,   224,   224,   255,   264,   344,   259,   262,
+     265,   322,   224,   226,   227,   228,   229,   230,   231,   232,
+     233,   236,   237,   255,   258,   266,   267,   268,   269,   289,
+     290,   291,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   343,   257,   256,   262,   264,   256,   262,
+     348,   339,   343,   350,   351,   265,   265,    14,    15,    16,
+      18,    19,    20,    21,    22,    23,    24,   223,   259,   260,
+     265,   300,   313,   315,   317,   319,   323,   343,   356,   357,
+     358,   359,   367,   368,   369,   372,   375,   376,   383,   344,
+     264,   344,   259,   315,   354,   264,   321,   224,   262,   265,
+     300,   300,   317,   236,   237,   257,   261,   256,   256,   262,
+     222,   315,   255,   300,   270,   271,   272,   267,   269,   234,
+     235,   238,   239,   273,   274,   240,   241,   277,   276,   275,
+     242,   244,   243,   278,   258,   258,   313,   225,   313,   318,
+     337,   350,   343,   224,   352,   353,   260,   351,   265,   265,
+     378,   255,   255,   265,   265,   317,   255,   317,   263,   255,
+     260,   360,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   264,   316,   262,   265,   260,   357,   354,   264,
+     354,   355,   354,   350,   224,   256,   292,   317,   224,   315,
+     300,   300,   300,   302,   302,   303,   303,   304,   304,   304,
+     304,   305,   305,   306,   307,   308,   309,   310,   311,   314,
+     258,   260,   352,   344,   262,   265,   357,   379,   317,   265,
+     317,   263,   377,   367,   315,   315,   354,   260,   262,   260,
+     258,   317,   265,   353,   223,   356,   368,   380,   256,   256,
+     317,   332,   339,   371,   361,   260,   354,   263,   255,   371,
+     381,   382,   363,   364,   365,   370,   373,   224,   256,   260,
+     315,   317,   265,   256,    17,   359,   358,   259,   264,   358,
+     362,   366,   256,   317,   362,   363,   367,   374,   354,   265,
+     260
 };
 
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -2519,15 +2803,27 @@ do                                                              \
   else                                                          \
     {                                                           \
       yyerror (pParseContext, YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
+      YYERROR;							\
+    }								\
+while (YYID (0))
 
 /* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
 
+/* YYLEX -- calling `yylex' with the right arguments.  */
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, parseContext)
+#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -2537,47 +2833,58 @@ while (0)
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value, pParseContext); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value, pParseContext); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    glslang::TParseContext* pParseContext;
+#endif
 {
   FILE *yyo = yyoutput;
   YYUSE (yyo);
-  YYUSE (pParseContext);
   if (!yyvaluep)
     return;
+  YYUSE (pParseContext);
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
 # endif
-  YYUSE (yytype);
+  switch (yytype)
+    {
+      default:
+        break;
+    }
 }
 
 
@@ -2585,11 +2892,23 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pParseContext)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    glslang::TParseContext* pParseContext;
+#endif
 {
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext);
   YYFPRINTF (yyoutput, ")");
@@ -2600,8 +2919,16 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, gls
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -2612,42 +2939,50 @@ yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pParseContext)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    glslang::TParseContext* pParseContext;
+#endif
 {
-  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
+  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
+	     yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              , pParseContext);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       , pParseContext);
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule, pParseContext); \
-} while (0)
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule, pParseContext); \
+} while (YYID (0))
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -2661,7 +2996,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
+#ifndef	YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -2684,8 +3019,15 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -2701,8 +3043,16 @@ yystrlen (const char *yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -2732,27 +3082,27 @@ yytnamerr (char *yyres, const char *yystr)
       char const *yyp = yystr;
 
       for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            /* Fall through.  */
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
     do_not_strip_quotes: ;
     }
 
@@ -2775,11 +3125,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -2787,6 +3137,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
   int yycount = 0;
 
   /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
      - If this state is a consistent state with a default action, then
        the only way this function was invoked is if the default action
        is an error action.  In that case, don't check for expected
@@ -2836,7 +3190,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -2903,18 +3257,33 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pParseContext)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    glslang::TParseContext* pParseContext;
+#endif
 {
   YYUSE (yyvaluep);
   YYUSE (pParseContext);
+
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
+  switch (yytype)
+    {
+
+      default:
+        break;
+    }
 }
 
 
@@ -2924,18 +3293,56 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseCon
 | yyparse.  |
 `----------*/
 
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (glslang::TParseContext* pParseContext)
+#else
+int
+yyparse (pParseContext)
+    glslang::TParseContext* pParseContext;
+#endif
+#endif
 {
 /* The lookahead symbol.  */
 int yychar;
 
 
-/* The semantic value of the lookahead symbol.  */
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
+#else
 /* Default value used for initialization, for pacifying older GCCs
    or non-GCC compilers.  */
-YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
-YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
+static YYSTYPE yyval_default;
+# define YY_INITIAL_VALUE(Value) = Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
 
     /* Number of syntax errors so far.  */
     int yynerrs;
@@ -2945,8 +3352,8 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
     int yyerrstatus;
 
     /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
+       `yyss': related to states.
+       `yyvs': related to semantic values.
 
        Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
@@ -3014,23 +3421,23 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 
 #ifdef yyoverflow
       {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
-                    &yystacksize);
-
-        yyss = yyss1;
-        yyvs = yyvs1;
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -3038,22 +3445,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
+	goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
+	yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -3062,10 +3469,10 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+		  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
+	YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -3094,7 +3501,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex (&yylval, parseContext);
+      yychar = YYLEX;
     }
 
   if (yychar <= YYEOF)
@@ -3159,7 +3566,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
+     `$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -3173,247 +3580,259 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 250 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[(1) - (1)].lex).loc, (yyvsp[(1) - (1)].lex).symbol, (yyvsp[(1) - (1)].lex).string);
     }
-#line 3181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 256 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 255 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 259 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).i, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 262 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).u, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 266 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).i64, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 270 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).u64, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 270 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 274 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtFloat, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 277 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtDouble, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 281 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtFloat16, (yyvsp[(1) - (1)].lex).loc, true);
+#endif
     }
-#line 3249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 287 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
-        if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
-            (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).b, (yyvsp[(1) - (1)].lex).loc, true);
     }
-#line 3259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 288 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 290 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
+        if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
+            (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 291 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 298 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 301 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode));
     }
-#line 3283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 304 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 307 "glslang.y"
     {
-        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
-        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[(3) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode), *(yyvsp[(3) - (3)].lex).string);
     }
-#line 3301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 310 "glslang.y"
     {
-        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
-        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
+        parseContext.variableCheck((yyvsp[(1) - (2)].interm.intermTypedNode));
+        parseContext.lValueErrorCheck((yyvsp[(2) - (2)].lex).loc, "++", (yyvsp[(1) - (2)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(2) - (2)].lex).loc, "++", EOpPostIncrement, (yyvsp[(1) - (2)].interm.intermTypedNode));
     }
-#line 3311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 315 "glslang.y"
     {
-        parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        parseContext.variableCheck((yyvsp[(1) - (2)].interm.intermTypedNode));
+        parseContext.lValueErrorCheck((yyvsp[(2) - (2)].lex).loc, "--", (yyvsp[(1) - (2)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(2) - (2)].lex).loc, "--", EOpPostDecrement, (yyvsp[(1) - (2)].interm.intermTypedNode));
     }
-#line 3320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 323 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
-        delete (yyvsp[0].interm).function;
+        parseContext.integerCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]");
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 330 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[(1) - (1)].interm).loc, (yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).intermNode);
+        delete (yyvsp[(1) - (1)].interm).function;
     }
-#line 3337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 337 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
-#line 3346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 343 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+        (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
     }
-#line 3355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 347 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+        (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
     }
-#line 3363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 354 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
     }
-#line 3371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 357 "glslang.y"
     {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-1].interm).function->addParameter(param);
-        (yyval.interm).function = (yyvsp[-1].interm).function;
-        (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
-#line 3383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 363 "glslang.y"
     {
         TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-2].interm).function->addParameter(param);
-        (yyval.interm).function = (yyvsp[-2].interm).function;
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
+        param.type->shallowCopy((yyvsp[(2) - (2)].interm.intermTypedNode)->getType());
+        (yyvsp[(1) - (2)].interm).function->addParameter(param);
+        (yyval.interm).function = (yyvsp[(1) - (2)].interm).function;
+        (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode);
     }
-#line 3395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 370 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-1].interm);
+        TParameter param = { 0, new TType };
+        param.type->shallowCopy((yyvsp[(3) - (3)].interm.intermTypedNode)->getType());
+        (yyvsp[(1) - (3)].interm).function->addParameter(param);
+        (yyval.interm).function = (yyvsp[(1) - (3)].interm).function;
+        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 380 "glslang.y"
+    {
+        (yyval.interm) = (yyvsp[(1) - (2)].interm);
+    }
+    break;
+
+  case 29:
+/* Line 1792 of yacc.c  */
+#line 388 "glslang.y"
     {
         // Constructor
         (yyval.interm).intermNode = 0;
-        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
+        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type));
     }
-#line 3413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 29:
-#line 383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 30:
+/* Line 1792 of yacc.c  */
+#line 393 "glslang.y"
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -3421,18 +3840,18 @@ yyreduce:
         (yyval.interm).function = 0;
         (yyval.interm).intermNode = 0;
 
-        TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode();
+        TIntermMethod* method = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsMethodNode();
         if (method) {
             (yyval.interm).function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength);
             (yyval.interm).intermNode = method->getObject();
         } else {
-            TIntermSymbol* symbol = (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode();
+            TIntermSymbol* symbol = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsSymbolNode();
             if (symbol) {
                 parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
                 TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
                 (yyval.interm).function = function;
             } else
-                parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
+                parseContext.error((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
         }
 
         if ((yyval.interm).function == 0) {
@@ -3441,3709 +3860,3916 @@ yyreduce:
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 30:
-#line 413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 31:
+/* Line 1792 of yacc.c  */
+#line 423 "glslang.y"
     {
-        parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
-            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
+        parseContext.variableCheck((yyvsp[(1) - (1)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        if (TIntermMethod* method = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsMethodNode())
+            parseContext.error((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 3456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 32:
+/* Line 1792 of yacc.c  */
+#line 429 "glslang.y"
     {
-        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
+        parseContext.lValueErrorCheck((yyvsp[(1) - (2)].lex).loc, "++", (yyvsp[(2) - (2)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].lex).loc, "++", EOpPreIncrement, (yyvsp[(2) - (2)].interm.intermTypedNode));
     }
-#line 3465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 32:
-#line 423 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 33:
+/* Line 1792 of yacc.c  */
+#line 433 "glslang.y"
     {
-        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
+        parseContext.lValueErrorCheck((yyvsp[(1) - (2)].lex).loc, "--", (yyvsp[(2) - (2)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].lex).loc, "--", EOpPreDecrement, (yyvsp[(2) - (2)].interm.intermTypedNode));
     }
-#line 3474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 33:
-#line 427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 34:
+/* Line 1792 of yacc.c  */
+#line 437 "glslang.y"
     {
-        if ((yyvsp[-1].interm).op != EOpNull) {
+        if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
-            switch((yyvsp[-1].interm).op) {
+            switch((yyvsp[(1) - (2)].interm).op) {
             case EOpNegative:   errorOp[0] = '-'; break;
             case EOpLogicalNot: errorOp[0] = '!'; break;
             case EOpBitwiseNot: errorOp[0] = '~'; break;
             default: break; // some compilers want this
             }
-            (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].interm).loc, errorOp, (yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode));
+            (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].interm).loc, errorOp, (yyvsp[(1) - (2)].interm).op, (yyvsp[(2) - (2)].interm.intermTypedNode));
         } else {
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
             if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 3495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 34:
-#line 447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 3501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 457 "glslang.y"
+    { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpNull; }
     break;
 
   case 36:
-#line 449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 3513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 458 "glslang.y"
+    { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpNegative; }
     break;
 
   case 37:
-#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 3520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 459 "glslang.y"
+    { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLogicalNot; }
     break;
 
   case 38:
-#line 456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 460 "glslang.y"
+    { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise not"); }
     break;
 
   case 39:
-#line 457 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-        if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-    }
-#line 3536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 466 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 40:
-#line 462 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 467 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "*", EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 472 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "/", EOpDiv, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 43:
-#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 477 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "%");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "%", EOpMod, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 43:
+/* Line 1792 of yacc.c  */
+#line 486 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 44:
-#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 487 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "+", EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 46:
-#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 492 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "-", EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 46:
+/* Line 1792 of yacc.c  */
+#line 500 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 47:
-#line 497 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 501 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bit shift left");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<<", EOpLeftShift, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 49:
-#line 507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 507 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bit shift right");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">>", EOpRightShift, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 49:
+/* Line 1792 of yacc.c  */
+#line 516 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 50:
-#line 512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 517 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<", EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 522 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">", EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 527 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<=", EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 532 "glslang.y"
     {
-        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
-        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
-        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 54:
+/* Line 1792 of yacc.c  */
+#line 540 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 55:
-#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 541 "glslang.y"
     {
-        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
-        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
-        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.arrayObjectCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array comparison");
+        parseContext.opaqueCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "==");
+        parseContext.specializationCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "==");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "==", EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 549 "glslang.y"
+    {
+        parseContext.arrayObjectCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array comparison");
+        parseContext.opaqueCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "!=");
+        parseContext.specializationCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "!=");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "!=", EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+        if ((yyval.interm.intermTypedNode) == 0)
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+    }
     break;
 
   case 57:
-#line 551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 560 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 58:
+/* Line 1792 of yacc.c  */
+#line 561 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise and");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "&", EOpAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 59:
+/* Line 1792 of yacc.c  */
+#line 570 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 59:
-#line 561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 60:
+/* Line 1792 of yacc.c  */
+#line 571 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise exclusive or");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "^", EOpExclusiveOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 61:
+/* Line 1792 of yacc.c  */
+#line 580 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 61:
-#line 571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 62:
+/* Line 1792 of yacc.c  */
+#line 581 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise inclusive or");
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "|", EOpInclusiveOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
     }
-#line 3740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 63:
+/* Line 1792 of yacc.c  */
+#line 590 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 63:
-#line 581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 64:
+/* Line 1792 of yacc.c  */
+#line 591 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "&&", EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 65:
+/* Line 1792 of yacc.c  */
+#line 599 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 65:
-#line 590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 66:
+/* Line 1792 of yacc.c  */
+#line 600 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "^^", EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 67:
+/* Line 1792 of yacc.c  */
+#line 608 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 67:
-#line 599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 68:
+/* Line 1792 of yacc.c  */
+#line 609 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "||", EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
-            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
     }
-#line 3788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 69:
+/* Line 1792 of yacc.c  */
+#line 617 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 69:
-#line 608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 70:
+/* Line 1792 of yacc.c  */
+#line 618 "glslang.y"
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 3802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 71:
+/* Line 1792 of yacc.c  */
+#line 621 "glslang.y"
     {
         --parseContext.controlFlowNestingLevel;
-        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
+        parseContext.boolCheck((yyvsp[(2) - (6)].lex).loc, (yyvsp[(1) - (6)].interm.intermTypedNode));
+        parseContext.rValueErrorCheck((yyvsp[(2) - (6)].lex).loc, "?", (yyvsp[(1) - (6)].interm.intermTypedNode));
+        parseContext.rValueErrorCheck((yyvsp[(5) - (6)].lex).loc, ":", (yyvsp[(4) - (6)].interm.intermTypedNode));
+        parseContext.rValueErrorCheck((yyvsp[(5) - (6)].lex).loc, ":", (yyvsp[(6) - (6)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[(1) - (6)].interm.intermTypedNode), (yyvsp[(4) - (6)].interm.intermTypedNode), (yyvsp[(6) - (6)].interm.intermTypedNode), (yyvsp[(2) - (6)].lex).loc);
         if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+            parseContext.binaryOpError((yyvsp[(2) - (6)].lex).loc, ":", (yyvsp[(4) - (6)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(6) - (6)].interm.intermTypedNode)->getCompleteString());
+            (yyval.interm.intermTypedNode) = (yyvsp[(6) - (6)].interm.intermTypedNode);
         }
     }
-#line 3819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
-        parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
-        parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
-        parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
-        parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].interm).loc);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
-        }
-    }
-#line 3842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 636 "glslang.y"
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 73:
-#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpAssign;
+/* Line 1792 of yacc.c  */
+#line 637 "glslang.y"
+    {
+        parseContext.arrayObjectCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array assignment");
+        parseContext.opaqueCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "=");
+        parseContext.specializationCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "=");
+        parseContext.lValueErrorCheck((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode));
+        parseContext.rValueErrorCheck((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(3) - (3)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].interm).loc);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            parseContext.assignError((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+        }
     }
-#line 3851 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 652 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpMulAssign;
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpAssign;
     }
-#line 3860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 656 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpDivAssign;
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpMulAssign;
     }
-#line 3869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 660 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpModAssign;
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpDivAssign;
     }
-#line 3879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 664 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpAddAssign;
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "%=");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpModAssign;
     }
-#line 3888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 669 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-        (yyval.interm).op = EOpSubAssign;
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpAddAssign;
     }
-#line 3897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 673 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm).op = EOpSubAssign;
     }
-#line 3906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 677 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift left assign");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 3915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 681 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift right assign");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 3924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 685 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-and assign");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 3933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 689 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
-        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-xor assign");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 693 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-or assign");
+        (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 3950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 700 "glslang.y"
     {
-        parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
-        if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
-            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        }
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 703 "glslang.y"
     {
-        parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        parseContext.samplerConstructorLocationCheck((yyvsp[(2) - (3)].lex).loc, ",", (yyvsp[(3) - (3)].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).loc);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            parseContext.binaryOpError((yyvsp[(2) - (3)].lex).loc, ",", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            (yyval.interm.intermTypedNode) = (yyvsp[(3) - (3)].interm.intermTypedNode);
+        }
     }
-#line 3972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 714 "glslang.y"
     {
-        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
-        (yyval.interm.intermNode) = 0;
-        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
+        parseContext.constantValueCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "");
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 3982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 721 "glslang.y"
     {
-        if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
-            (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
+        parseContext.handleFunctionDeclarator((yyvsp[(1) - (2)].interm).loc, *(yyvsp[(1) - (2)].interm).function, true /* prototype */);
+        (yyval.interm.intermNode) = 0;
+        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 3992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 721 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 726 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
-
-        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
-        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
-        parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
-        (yyval.interm.intermNode) = 0;
+        if ((yyvsp[(1) - (2)].interm).intermNode && (yyvsp[(1) - (2)].interm).intermNode->getAsAggregate())
+            (yyvsp[(1) - (2)].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (2)].interm).intermNode;
     }
-#line 4005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 731 "glslang.y"
     {
-        parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
+        parseContext.profileRequires((yyvsp[(1) - (4)].lex).loc, ENoProfile, 130, 0, "precision statement");
+
+        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
+        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
+        parseContext.setDefaultPrecision((yyvsp[(1) - (4)].lex).loc, (yyvsp[(3) - (4)].interm.type), (yyvsp[(2) - (4)].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 739 "glslang.y"
     {
-        parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
+        parseContext.declareBlock((yyvsp[(1) - (2)].interm).loc, *(yyvsp[(1) - (2)].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 743 "glslang.y"
     {
-        parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
+        parseContext.declareBlock((yyvsp[(1) - (3)].interm).loc, *(yyvsp[(1) - (3)].interm).typeList, (yyvsp[(2) - (3)].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 747 "glslang.y"
     {
-        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
-        parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
+        parseContext.declareBlock((yyvsp[(1) - (4)].interm).loc, *(yyvsp[(1) - (4)].interm).typeList, (yyvsp[(2) - (4)].lex).string, (yyvsp[(3) - (4)].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 751 "glslang.y"
     {
-        parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
-        parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
+        parseContext.globalQualifierFixCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier);
+        parseContext.updateStandaloneQualifierDefaults((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 756 "glslang.y"
     {
-        parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
-        (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
-        parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).shaderQualifiers);
+        parseContext.addQualifierToExisting((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).qualifier, *(yyvsp[(2) - (3)].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 761 "glslang.y"
+    {
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).shaderQualifiers);
+        (yyvsp[(3) - (4)].interm.identifierList)->push_back((yyvsp[(2) - (4)].lex).string);
+        parseContext.addQualifierToExisting((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).qualifier, *(yyvsp[(3) - (4)].interm.identifierList));
+        (yyval.interm.intermNode) = 0;
+    }
     break;
 
   case 97:
-#line 760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        --parseContext.structNestingLevel;
-        parseContext.blockName = (yyvsp[-4].lex).string;
-        parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
-        parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
-        parseContext.currentBlockQualifier = (yyvsp[-5].interm.type).qualifier;
-        (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
-        (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
-    }
-#line 4083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 770 "glslang.y"
+    { parseContext.nestedBlockCheck((yyvsp[(1) - (3)].interm.type).loc); }
     break;
 
   case 98:
-#line 771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 770 "glslang.y"
     {
-        (yyval.interm.identifierList) = new TIdentifierList;
-        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
+        --parseContext.structNestingLevel;
+        parseContext.blockName = (yyvsp[(2) - (6)].lex).string;
+        parseContext.globalQualifierFixCheck((yyvsp[(1) - (6)].interm.type).loc, (yyvsp[(1) - (6)].interm.type).qualifier);
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (6)].interm.type).loc, (yyvsp[(1) - (6)].interm.type).shaderQualifiers);
+        parseContext.currentBlockQualifier = (yyvsp[(1) - (6)].interm.type).qualifier;
+        (yyval.interm).loc = (yyvsp[(1) - (6)].interm.type).loc;
+        (yyval.interm).typeList = (yyvsp[(5) - (6)].interm.typeList);
     }
-#line 4092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 781 "glslang.y"
     {
-        (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
-        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
+        (yyval.interm.identifierList) = new TIdentifierList;
+        (yyval.interm.identifierList)->push_back((yyvsp[(2) - (2)].lex).string);
     }
-#line 4101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 785 "glslang.y"
     {
-        (yyval.interm).function = (yyvsp[-1].interm.function);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
+        (yyval.interm.identifierList) = (yyvsp[(1) - (3)].interm.identifierList);
+        (yyval.interm.identifierList)->push_back((yyvsp[(3) - (3)].lex).string);
     }
-#line 4110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 792 "glslang.y"
     {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
+        (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
+        (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
     }
-#line 4118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 799 "glslang.y"
     {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
     }
-#line 4126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 802 "glslang.y"
+    {
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+    }
+    break;
+
+  case 104:
+/* Line 1792 of yacc.c  */
+#line 809 "glslang.y"
     {
         // Add the parameter
-        (yyval.interm.function) = (yyvsp[-1].interm.function);
-        if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
-            (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
+        (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
+        if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
+            (yyvsp[(1) - (2)].interm.function)->addParameter((yyvsp[(2) - (2)].interm).param);
         else
-            delete (yyvsp[0].interm).param.type;
+            delete (yyvsp[(2) - (2)].interm).param.type;
     }
-#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+/* Line 1792 of yacc.c  */
+#line 817 "glslang.y"
     {
         //
         // Only first parameter of one-parameter functions can be void
         // The check for named parameters not being void is done in parameter_declarator
         //
-        if ((yyvsp[0].interm).param.type->getBasicType() == EbtVoid) {
+        if ((yyvsp[(3) - (3)].interm).param.type->getBasicType() == EbtVoid) {
             //
             // This parameter > first is void
             //
-            parseContext.error((yyvsp[-1].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
-            delete (yyvsp[0].interm).param.type;
+            parseContext.error((yyvsp[(2) - (3)].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
+            delete (yyvsp[(3) - (3)].interm).param.type;
         } else {
             // Add the parameter
-            (yyval.interm.function) = (yyvsp[-2].interm.function);
-            (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
+            (yyval.interm.function) = (yyvsp[(1) - (3)].interm.function);
+            (yyvsp[(1) - (3)].interm.function)->addParameter((yyvsp[(3) - (3)].interm).param);
         }
     }
-#line 4161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 106:
+/* Line 1792 of yacc.c  */
+#line 837 "glslang.y"
     {
-        if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
-            parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
-                               GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
+        if ((yyvsp[(1) - (3)].interm.type).qualifier.storage != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier.storage != EvqTemporary) {
+            parseContext.error((yyvsp[(2) - (3)].lex).loc, "no qualifiers allowed for function return",
+                               GetStorageQualifierString((yyvsp[(1) - (3)].interm.type).qualifier.storage), "");
         }
-        if ((yyvsp[-2].interm.type).arraySizes)
-            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
+        if ((yyvsp[(1) - (3)].interm.type).arraySizes)
+            parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
 
         // Add the function as a prototype after parsing it (we do not support recursion)
         TFunction *function;
-        TType type((yyvsp[-2].interm.type));
-        function = new TFunction((yyvsp[-1].lex).string, type);
+        TType type((yyvsp[(1) - (3)].interm.type));
+        function = new TFunction((yyvsp[(2) - (3)].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 107:
+/* Line 1792 of yacc.c  */
+#line 855 "glslang.y"
     {
-        if ((yyvsp[-1].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck((yyvsp[-1].interm.type).loc, *(yyvsp[-1].interm.type).arraySizes);
+        if ((yyvsp[(1) - (2)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(1) - (2)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(1) - (2)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+            parseContext.arraySizeRequiredCheck((yyvsp[(1) - (2)].interm.type).loc, *(yyvsp[(1) - (2)].interm.type).arraySizes);
         }
-        if ((yyvsp[-1].interm.type).basicType == EbtVoid) {
-            parseContext.error((yyvsp[0].lex).loc, "illegal use of type 'void'", (yyvsp[0].lex).string->c_str(), "");
+        if ((yyvsp[(1) - (2)].interm.type).basicType == EbtVoid) {
+            parseContext.error((yyvsp[(2) - (2)].lex).loc, "illegal use of type 'void'", (yyvsp[(2) - (2)].lex).string->c_str(), "");
         }
-        parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
+        parseContext.reservedErrorCheck((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string);
 
-        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type))};
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
+        TParameter param = {(yyvsp[(2) - (2)].lex).string, new TType((yyvsp[(1) - (2)].interm.type))};
+        (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 860 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 108:
+/* Line 1792 of yacc.c  */
+#line 870 "glslang.y"
     {
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
+        if ((yyvsp[(1) - (3)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+            parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
         }
-        parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.type).arraySizes, (yyvsp[0].interm).arraySizes);
+        parseContext.arrayDimCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.type).arraySizes, (yyvsp[(3) - (3)].interm).arraySizes);
 
-        parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
-        parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
+        parseContext.arraySizeRequiredCheck((yyvsp[(3) - (3)].interm).loc, *(yyvsp[(3) - (3)].interm).arraySizes);
+        parseContext.reservedErrorCheck((yyvsp[(2) - (3)].lex).loc, *(yyvsp[(2) - (3)].lex).string);
 
-        (yyvsp[-2].interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
+        (yyvsp[(1) - (3)].interm.type).arraySizes = (yyvsp[(3) - (3)].interm).arraySizes;
 
-        TParameter param = { (yyvsp[-1].lex).string, new TType((yyvsp[-2].interm.type))};
-        (yyval.interm).loc = (yyvsp[-1].lex).loc;
+        TParameter param = { (yyvsp[(2) - (3)].lex).string, new TType((yyvsp[(1) - (3)].interm.type))};
+        (yyval.interm).loc = (yyvsp[(2) - (3)].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 109:
+/* Line 1792 of yacc.c  */
+#line 893 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
-        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
-            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
+        if ((yyvsp[(1) - (2)].interm.type).qualifier.precision != EpqNone)
+            (yyval.interm).param.type->getQualifier().precision = (yyvsp[(1) - (2)].interm.type).qualifier.precision;
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
 
-        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
-        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
-
-    }
-#line 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 109:
-#line 894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
+        parseContext.parameterTypeCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(1) - (2)].interm.type).qualifier.storage, *(yyval.interm).param.type);
+        parseContext.paramCheckFix((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, *(yyval.interm).param.type);
 
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
-        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 904 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
-        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
-            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
-        parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
 
-        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
-        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
+        parseContext.parameterTypeCheck((yyvsp[(1) - (1)].interm).loc, EvqIn, *(yyvsp[(1) - (1)].interm).param.type);
+        parseContext.paramCheckFix((yyvsp[(1) - (1)].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 914 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
+        if ((yyvsp[(1) - (2)].interm.type).qualifier.precision != EpqNone)
+            (yyval.interm).param.type->getQualifier().precision = (yyvsp[(1) - (2)].interm.type).qualifier.precision;
+        parseContext.precisionQualifierCheck((yyvsp[(1) - (2)].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
 
-        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
-        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
+        parseContext.parameterTypeCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(1) - (2)].interm.type).qualifier.storage, *(yyval.interm).param.type);
+        parseContext.paramCheckFix((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 4277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 924 "glslang.y"
     {
-        TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
-        (yyval.interm).param = param;
-        if ((yyvsp[0].interm.type).arraySizes)
-            parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
+
+        parseContext.parameterTypeCheck((yyvsp[(1) - (1)].interm).loc, EvqIn, *(yyvsp[(1) - (1)].interm).param.type);
+        parseContext.paramCheckFix((yyvsp[(1) - (1)].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 934 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
+        (yyval.interm).param = param;
+        if ((yyvsp[(1) - (1)].interm.type).arraySizes)
+            parseContext.arraySizeRequiredCheck((yyvsp[(1) - (1)].interm.type).loc, *(yyvsp[(1) - (1)].interm.type).arraySizes);
     }
-#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 943 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-2].interm);
-        parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
+        (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
-#line 4305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 946 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-3].interm);
-        parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
+        (yyval.interm) = (yyvsp[(1) - (3)].interm);
+        parseContext.declareVariable((yyvsp[(3) - (3)].lex).loc, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm).type);
     }
-#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 950 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-5].interm).type;
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
+        (yyval.interm) = (yyvsp[(1) - (4)].interm);
+        parseContext.declareVariable((yyvsp[(3) - (4)].lex).loc, *(yyvsp[(3) - (4)].lex).string, (yyvsp[(1) - (4)].interm).type, (yyvsp[(4) - (4)].interm).arraySizes);
     }
-#line 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 954 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-4].interm).type;
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
+        (yyval.interm).type = (yyvsp[(1) - (6)].interm).type;
+        TIntermNode* initNode = parseContext.declareVariable((yyvsp[(3) - (6)].lex).loc, *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, (yyvsp[(4) - (6)].interm).arraySizes, (yyvsp[(6) - (6)].interm.intermTypedNode));
+        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (6)].interm).intermNode, initNode, (yyvsp[(5) - (6)].lex).loc);
     }
-#line 4334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 957 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 959 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[0].interm.type);
-        (yyval.interm).intermNode = 0;
-        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
+        (yyval.interm).type = (yyvsp[(1) - (5)].interm).type;
+        TIntermNode* initNode = parseContext.declareVariable((yyvsp[(3) - (5)].lex).loc, *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, 0, (yyvsp[(5) - (5)].interm.intermTypedNode));
+        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (5)].interm).intermNode, initNode, (yyvsp[(4) - (5)].lex).loc);
     }
-#line 4344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 967 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-1].interm.type);
+        (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
         (yyval.interm).intermNode = 0;
-        parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
+        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 4354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 972 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-2].interm.type);
+        (yyval.interm).type = (yyvsp[(1) - (2)].interm.type);
         (yyval.interm).intermNode = 0;
-        parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
+        parseContext.declareVariable((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string, (yyvsp[(1) - (2)].interm.type));
     }
-#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 977 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-4].interm.type);
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
+        (yyval.interm).type = (yyvsp[(1) - (3)].interm.type);
+        (yyval.interm).intermNode = 0;
+        parseContext.declareVariable((yyvsp[(2) - (3)].lex).loc, *(yyvsp[(2) - (3)].lex).string, (yyvsp[(1) - (3)].interm.type), (yyvsp[(3) - (3)].interm).arraySizes);
     }
-#line 4374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 982 "glslang.y"
     {
-        (yyval.interm).type = (yyvsp[-3].interm.type);
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
-        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
+        (yyval.interm).type = (yyvsp[(1) - (5)].interm.type);
+        TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (5)].lex).loc, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), (yyvsp[(3) - (5)].interm).arraySizes, (yyvsp[(5) - (5)].interm.intermTypedNode));
+        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[(4) - (5)].lex).loc);
     }
-#line 4384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 987 "glslang.y"
+    {
+        (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
+        TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (4)].lex).loc, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), 0, (yyvsp[(4) - (4)].interm.intermTypedNode));
+        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[(3) - (4)].lex).loc);
+    }
+    break;
+
+  case 124:
+/* Line 1792 of yacc.c  */
+#line 996 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
 
-        parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
-        if ((yyvsp[0].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+        parseContext.globalQualifierTypeCheck((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type).qualifier, (yyval.interm.type));
+        if ((yyvsp[(1) - (1)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(1) - (1)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(1) - (1)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
         }
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 125:
+/* Line 1792 of yacc.c  */
+#line 1007 "glslang.y"
     {
-        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
-        parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
+        parseContext.globalQualifierFixCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier);
+        parseContext.globalQualifierTypeCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type));
 
-        if ((yyvsp[0].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+        if ((yyvsp[(2) - (2)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(2) - (2)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(2) - (2)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
         }
 
-        if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
-            (yyvsp[0].interm.type).arraySizes = 0;
+        if ((yyvsp[(2) - (2)].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier))
+            (yyvsp[(2) - (2)].interm.type).arraySizes = 0;
 
-        parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
-        (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
-        parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true);
-        parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier);
+        parseContext.checkNoShaderLayouts((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
+        (yyvsp[(2) - (2)].interm.type).shaderQualifiers.merge((yyvsp[(1) - (2)].interm.type).shaderQualifiers);
+        parseContext.mergeQualifiers((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(1) - (2)].interm.type).qualifier, true);
+        parseContext.precisionQualifierCheck((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(2) - (2)].interm.type).basicType, (yyvsp[(2) - (2)].interm.type).qualifier);
 
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
 
         if (! (yyval.interm.type).qualifier.isInterpolation() &&
             ((parseContext.language == EShLangVertex   && (yyval.interm.type).qualifier.storage == EvqVaryingOut) ||
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 125:
-#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
-        parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.invariant = true;
-    }
-#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1034 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.smooth = true;
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "invariant");
+        parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.invariant = true;
     }
-#line 4452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1043 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.flat = true;
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "smooth");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "smooth");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "smooth");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1050 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
-        parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.nopersp = true;
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "flat");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "flat");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "flat");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.flat = true;
     }
-#line 4476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1057 "glslang.y"
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.explicitInterp = true;
-#endif
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "noperspective");
+        parseContext.requireProfile((yyvsp[(1) - (1)].lex).loc, ~EEsProfile, "noperspective");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "noperspective");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1064 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
+#ifdef AMD_EXTENSIONS
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "__explicitInterpAMD");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.explicitInterp = true;
+#endif
     }
-#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1076 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(3) - (4)].interm.type);
     }
-#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1075 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1082 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[-2].interm.type);
-        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
-        parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1085 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
+        (yyval.interm.type) = (yyvsp[(1) - (3)].interm.type);
+        (yyval.interm.type).shaderQualifiers.merge((yyvsp[(3) - (3)].interm.type).shaderQualifiers);
+        parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[(3) - (3)].interm.type).qualifier, false);
     }
-#line 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1092 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[-2].lex).loc);
-        parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), *(yyvsp[(1) - (1)].lex).string);
     }
-#line 4534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { // because "shared" is both an identifier and a keyword
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        TString strShared("shared");
-        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
+/* Line 1792 of yacc.c  */
+#line 1096 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (3)].lex).loc);
+        parseContext.setLayoutQualifier((yyvsp[(1) - (3)].lex).loc, (yyval.interm.type), *(yyvsp[(1) - (3)].lex).string, (yyvsp[(3) - (3)].interm.intermTypedNode));
     }
-#line 4544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.noContraction = true;
+/* Line 1792 of yacc.c  */
+#line 1100 "glslang.y"
+    { // because "shared" is both an identifier and a keyword
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        TString strShared("shared");
+        parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), strShared);
     }
-#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1108 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 4563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1117 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-        if ((yyval.interm.type).basicType == EbtVoid)
-            (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
-
-        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
-        parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1120 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type);
+        if ((yyval.interm.type).basicType == EbtVoid)
+            (yyval.interm.type).basicType = (yyvsp[(2) - (2)].interm.type).basicType;
+
+        (yyval.interm.type).shaderQualifiers.merge((yyvsp[(2) - (2)].interm.type).shaderQualifiers);
+        parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).qualifier, false);
     }
-#line 4584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1131 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1134 "glslang.y"
     {
-        parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1137 "glslang.y"
     {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        parseContext.checkPrecisionQualifier((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type).qualifier.precision);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1135 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1141 "glslang.y"
     {
         // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1145 "glslang.y"
     {
         // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1149 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
-#line 4637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 1156 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
+    }
+    break;
+
+  case 147:
+/* Line 1792 of yacc.c  */
+#line 1160 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangVertex, "attribute");
+        parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 130, "attribute");
+        parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, "attribute");
+        parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 420, "attribute");
+        parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, "attribute");
 
-        parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "attribute");
 
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 1162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 148:
+/* Line 1792 of yacc.c  */
+#line 1172 "glslang.y"
     {
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
-        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
-        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
+        parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, "varying");
+        parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 130, "varying");
+        parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 420, "varying");
+        parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, "varying");
 
-        parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "varying");
 
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         if (parseContext.language == EShLangVertex)
             (yyval.interm.type).qualifier.storage = EvqVaryingOut;
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4673 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 148:
-#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 149:
+/* Line 1792 of yacc.c  */
+#line 1186 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "inout");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 4683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 150:
+/* Line 1792 of yacc.c  */
+#line 1191 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "in");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 4694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 151:
+/* Line 1792 of yacc.c  */
+#line 1197 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "out");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 4705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 152:
+/* Line 1792 of yacc.c  */
+#line 1203 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
-        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 120, 0, "centroid");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "centroid");
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "centroid");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 4717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 153:
+/* Line 1792 of yacc.c  */
+#line 1210 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "patch");
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 4728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 154:
+/* Line 1792 of yacc.c  */
+#line 1216 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "sample");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 4738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 155:
+/* Line 1792 of yacc.c  */
+#line 1221 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "uniform");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 4748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1216 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 156:
+/* Line 1792 of yacc.c  */
+#line 1226 "glslang.y"
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "buffer");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 4758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1221 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+/* Line 1792 of yacc.c  */
+#line 1231 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 310, 0, "shared");
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangCompute, "shared");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+/* Line 1792 of yacc.c  */
+#line 1238 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 4779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+/* Line 1792 of yacc.c  */
+#line 1242 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 4788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+/* Line 1792 of yacc.c  */
+#line 1246 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+/* Line 1792 of yacc.c  */
+#line 1250 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 4806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+/* Line 1792 of yacc.c  */
+#line 1254 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 4815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1248 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+/* Line 1792 of yacc.c  */
+#line 1258 "glslang.y"
     {
-        parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
-        parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.spvRemoved((yyvsp[(1) - (1)].lex).loc, "subroutine");
+        parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "subroutine");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 4826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+/* Line 1792 of yacc.c  */
+#line 1264 "glslang.y"
     {
-        parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
-        parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
-        (yyval.interm.type).init((yyvsp[-3].lex).loc);
+        parseContext.spvRemoved((yyvsp[(1) - (4)].lex).loc, "subroutine");
+        parseContext.globalCheck((yyvsp[(1) - (4)].lex).loc, "subroutine");
+        (yyval.interm.type).init((yyvsp[(1) - (4)].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+/* Line 1792 of yacc.c  */
+#line 1276 "glslang.y"
     {
         // TODO: 4.0 functionality: subroutine type to list
     }
-#line 4848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+/* Line 1792 of yacc.c  */
+#line 1279 "glslang.y"
     {
     }
-#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+/* Line 1792 of yacc.c  */
+#line 1284 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 4864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1278 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+/* Line 1792 of yacc.c  */
+#line 1288 "glslang.y"
     {
-        parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
+        parseContext.arrayDimCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(2) - (2)].interm).arraySizes, 0);
+        (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
-        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
+        (yyval.interm.type).arraySizes = (yyvsp[(2) - (2)].interm).arraySizes;
     }
-#line 4875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 169:
+/* Line 1792 of yacc.c  */
+#line 1297 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[-1].lex).loc;
+        (yyval.interm).loc = (yyvsp[(1) - (2)].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 4885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 170:
+/* Line 1792 of yacc.c  */
+#line 1302 "glslang.y"
     {
-        (yyval.interm).loc = (yyvsp[-2].lex).loc;
+        (yyval.interm).loc = (yyvsp[(1) - (3)].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
 
         TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+        parseContext.arraySizeCheck((yyvsp[(2) - (3)].interm.intermTypedNode)->getLoc(), (yyvsp[(2) - (3)].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 4898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+/* Line 1792 of yacc.c  */
+#line 1310 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-2].interm);
+        (yyval.interm) = (yyvsp[(1) - (3)].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 4907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 172:
+/* Line 1792 of yacc.c  */
+#line 1314 "glslang.y"
     {
-        (yyval.interm) = (yyvsp[-3].interm);
+        (yyval.interm) = (yyvsp[(1) - (4)].interm);
 
         TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+        parseContext.arraySizeCheck((yyvsp[(3) - (4)].interm.intermTypedNode)->getLoc(), (yyvsp[(3) - (4)].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 4919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+/* Line 1792 of yacc.c  */
+#line 1324 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 4928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+/* Line 1792 of yacc.c  */
+#line 1328 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 4937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+/* Line 1792 of yacc.c  */
+#line 1332 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 4947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+/* Line 1792 of yacc.c  */
+#line 1337 "glslang.y"
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+#endif
+    }
+    break;
+
+  case 177:
+/* Line 1792 of yacc.c  */
+#line 1344 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 4956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+/* Line 1792 of yacc.c  */
+#line 1348 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 4966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+/* Line 1792 of yacc.c  */
+#line 1353 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 4976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+/* Line 1792 of yacc.c  */
+#line 1358 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 4986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+/* Line 1792 of yacc.c  */
+#line 1363 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 4995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+/* Line 1792 of yacc.c  */
+#line 1367 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 5005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+/* Line 1792 of yacc.c  */
+#line 1372 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 5015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+/* Line 1792 of yacc.c  */
+#line 1377 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 5025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+/* Line 1792 of yacc.c  */
+#line 1382 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 5036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 186:
+/* Line 1792 of yacc.c  */
+#line 1388 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+/* Line 1792 of yacc.c  */
+#line 1394 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+/* Line 1792 of yacc.c  */
+#line 1400 "glslang.y"
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(2);
+#endif
+    }
+    break;
+
+  case 189:
+/* Line 1792 of yacc.c  */
+#line 1408 "glslang.y"
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(3);
+#endif
+    }
+    break;
+
+  case 190:
+/* Line 1792 of yacc.c  */
+#line 1416 "glslang.y"
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(4);
+#endif
+    }
+    break;
+
+  case 191:
+/* Line 1792 of yacc.c  */
+#line 1424 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 5068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+/* Line 1792 of yacc.c  */
+#line 1429 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 5078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+/* Line 1792 of yacc.c  */
+#line 1434 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+/* Line 1792 of yacc.c  */
+#line 1439 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 5098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+/* Line 1792 of yacc.c  */
+#line 1444 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+/* Line 1792 of yacc.c  */
+#line 1449 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 5118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 197:
+/* Line 1792 of yacc.c  */
+#line 1454 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 5129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 198:
+/* Line 1792 of yacc.c  */
+#line 1460 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 5140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+/* Line 1792 of yacc.c  */
+#line 1466 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 5151 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+/* Line 1792 of yacc.c  */
+#line 1472 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 5162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 1437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 201:
+/* Line 1792 of yacc.c  */
+#line 1478 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 5173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 202:
+/* Line 1792 of yacc.c  */
+#line 1484 "glslang.y"
     {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 5184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 1449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 203:
+/* Line 1792 of yacc.c  */
+#line 1490 "glslang.y"
+    {
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
+    }
+    break;
+
+  case 204:
+/* Line 1792 of yacc.c  */
+#line 1496 "glslang.y"
+    {
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
+    }
+    break;
+
+  case 205:
+/* Line 1792 of yacc.c  */
+#line 1502 "glslang.y"
+    {
+        parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(4);
+    }
+    break;
+
+  case 206:
+/* Line 1792 of yacc.c  */
+#line 1508 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+    break;
+
+  case 207:
+/* Line 1792 of yacc.c  */
+#line 1513 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+    break;
+
+  case 208:
+/* Line 1792 of yacc.c  */
+#line 1518 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+    break;
+
+  case 209:
+/* Line 1792 of yacc.c  */
+#line 1523 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+    break;
+
+  case 210:
+/* Line 1792 of yacc.c  */
+#line 1528 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+    break;
+
+  case 211:
+/* Line 1792 of yacc.c  */
+#line 1533 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+    break;
+
+  case 212:
+/* Line 1792 of yacc.c  */
+#line 1538 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+    break;
+
+  case 213:
+/* Line 1792 of yacc.c  */
+#line 1543 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+    break;
+
+  case 214:
+/* Line 1792 of yacc.c  */
+#line 1548 "glslang.y"
+    {
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+    break;
+
+  case 215:
+/* Line 1792 of yacc.c  */
+#line 1553 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(2);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
     }
-#line 5195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 216:
+/* Line 1792 of yacc.c  */
+#line 1558 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 217:
+/* Line 1792 of yacc.c  */
+#line 1563 "glslang.y"
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 218:
+/* Line 1792 of yacc.c  */
+#line 1568 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 219:
+/* Line 1792 of yacc.c  */
+#line 1574 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 220:
+/* Line 1792 of yacc.c  */
+#line 1580 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 1482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+/* Line 1792 of yacc.c  */
+#line 1586 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 1487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+/* Line 1792 of yacc.c  */
+#line 1592 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 5267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+/* Line 1792 of yacc.c  */
+#line 1598 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 5277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 1497 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 224:
+/* Line 1792 of yacc.c  */
+#line 1604 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 5287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 1502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 225:
+/* Line 1792 of yacc.c  */
+#line 1610 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 226:
+/* Line 1792 of yacc.c  */
+#line 1616 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 5307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 1512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 227:
+/* Line 1792 of yacc.c  */
+#line 1622 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 5317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 1517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 228:
+/* Line 1792 of yacc.c  */
+#line 1628 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+/* Line 1792 of yacc.c  */
+#line 1634 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 1527 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+/* Line 1792 of yacc.c  */
+#line 1640 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
+#endif
     }
-#line 5348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 1533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+/* Line 1792 of yacc.c  */
+#line 1648 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
+#endif
     }
-#line 5359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 1539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+/* Line 1792 of yacc.c  */
+#line 1656 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
+#endif
     }
-#line 5370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 1545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+/* Line 1792 of yacc.c  */
+#line 1664 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
+#endif
     }
-#line 5381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 1551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+/* Line 1792 of yacc.c  */
+#line 1672 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
+#endif
     }
-#line 5392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 1557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+/* Line 1792 of yacc.c  */
+#line 1680 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
+#endif
     }
-#line 5403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 1563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 236:
+/* Line 1792 of yacc.c  */
+#line 1688 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
+#endif
     }
-#line 5414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 237:
+/* Line 1792 of yacc.c  */
+#line 1696 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
+#endif
     }
-#line 5425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 238:
+/* Line 1792 of yacc.c  */
+#line 1704 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
+#endif
     }
-#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 1581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+/* Line 1792 of yacc.c  */
+#line 1712 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
+#endif
     }
-#line 5447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 1587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+/* Line 1792 of yacc.c  */
+#line 1720 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
+#endif
     }
-#line 5458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 1593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+/* Line 1792 of yacc.c  */
+#line 1728 "glslang.y"
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+#ifdef AMD_EXTENSIONS
+        parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
+#endif
     }
-#line 5469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 1599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+/* Line 1792 of yacc.c  */
+#line 1736 "glslang.y"
     {
-        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.vulkanRemoved((yyvsp[(1) - (1)].lex).loc, "atomic counter types");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 5479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 1604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+/* Line 1792 of yacc.c  */
+#line 1741 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 1609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+/* Line 1792 of yacc.c  */
+#line 1746 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 5499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+/* Line 1792 of yacc.c  */
+#line 1751 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 5509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+/* Line 1792 of yacc.c  */
+#line 1756 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 5519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 247:
+/* Line 1792 of yacc.c  */
+#line 1761 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 1629 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 248:
+/* Line 1792 of yacc.c  */
+#line 1766 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 5539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 1634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 249:
+/* Line 1792 of yacc.c  */
+#line 1771 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 5549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 250:
+/* Line 1792 of yacc.c  */
+#line 1776 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 251:
+/* Line 1792 of yacc.c  */
+#line 1781 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 5569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 1649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 252:
+/* Line 1792 of yacc.c  */
+#line 1786 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 5579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 253:
+/* Line 1792 of yacc.c  */
+#line 1791 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 5589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 254:
+/* Line 1792 of yacc.c  */
+#line 1796 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 5599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 255:
+/* Line 1792 of yacc.c  */
+#line 1801 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 5609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1669 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 256:
+/* Line 1792 of yacc.c  */
+#line 1806 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 5619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 257:
+/* Line 1792 of yacc.c  */
+#line 1811 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 5629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 258:
+/* Line 1792 of yacc.c  */
+#line 1816 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 259:
+/* Line 1792 of yacc.c  */
+#line 1821 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 5649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1689 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 260:
+/* Line 1792 of yacc.c  */
+#line 1826 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 5659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 261:
+/* Line 1792 of yacc.c  */
+#line 1831 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 5669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 262:
+/* Line 1792 of yacc.c  */
+#line 1836 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 263:
+/* Line 1792 of yacc.c  */
+#line 1841 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1709 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 264:
+/* Line 1792 of yacc.c  */
+#line 1846 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 5699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 265:
+/* Line 1792 of yacc.c  */
+#line 1851 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 5709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 266:
+/* Line 1792 of yacc.c  */
+#line 1856 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 5719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 267:
+/* Line 1792 of yacc.c  */
+#line 1861 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 5729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 268:
+/* Line 1792 of yacc.c  */
+#line 1866 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 5739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 269:
+/* Line 1792 of yacc.c  */
+#line 1871 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 270:
+/* Line 1792 of yacc.c  */
+#line 1876 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 5759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 271:
+/* Line 1792 of yacc.c  */
+#line 1881 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 272:
+/* Line 1792 of yacc.c  */
+#line 1886 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 5779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 273:
+/* Line 1792 of yacc.c  */
+#line 1891 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 5789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 274:
+/* Line 1792 of yacc.c  */
+#line 1896 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 5799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 275:
+/* Line 1792 of yacc.c  */
+#line 1901 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1769 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 276:
+/* Line 1792 of yacc.c  */
+#line 1906 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 5819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 277:
+/* Line 1792 of yacc.c  */
+#line 1911 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 5829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 278:
+/* Line 1792 of yacc.c  */
+#line 1916 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 279:
+/* Line 1792 of yacc.c  */
+#line 1921 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 5849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 280:
+/* Line 1792 of yacc.c  */
+#line 1926 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 5859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 281:
+/* Line 1792 of yacc.c  */
+#line 1931 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 5869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 282:
+/* Line 1792 of yacc.c  */
+#line 1936 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 5879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1804 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 283:
+/* Line 1792 of yacc.c  */
+#line 1941 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 284:
+/* Line 1792 of yacc.c  */
+#line 1946 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 5899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 285:
+/* Line 1792 of yacc.c  */
+#line 1951 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 5909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 286:
+/* Line 1792 of yacc.c  */
+#line 1956 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 5919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 287:
+/* Line 1792 of yacc.c  */
+#line 1961 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 5929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 288:
+/* Line 1792 of yacc.c  */
+#line 1966 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 5939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 289:
+/* Line 1792 of yacc.c  */
+#line 1971 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 5949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 290:
+/* Line 1792 of yacc.c  */
+#line 1976 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 5959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 291:
+/* Line 1792 of yacc.c  */
+#line 1981 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 5969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 292:
+/* Line 1792 of yacc.c  */
+#line 1986 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 5979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 293:
+/* Line 1792 of yacc.c  */
+#line 1991 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 5989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 294:
+/* Line 1792 of yacc.c  */
+#line 1996 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 5999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 295:
+/* Line 1792 of yacc.c  */
+#line 2001 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 6009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 296:
+/* Line 1792 of yacc.c  */
+#line 2006 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 6019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 297:
+/* Line 1792 of yacc.c  */
+#line 2011 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 6029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 298:
+/* Line 1792 of yacc.c  */
+#line 2016 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 6039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 299:
+/* Line 1792 of yacc.c  */
+#line 2021 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 6049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 300:
+/* Line 1792 of yacc.c  */
+#line 2026 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 6059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 301:
+/* Line 1792 of yacc.c  */
+#line 2031 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 6069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 302:
+/* Line 1792 of yacc.c  */
+#line 2036 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 6079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 303:
+/* Line 1792 of yacc.c  */
+#line 2041 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 304:
+/* Line 1792 of yacc.c  */
+#line 2046 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 6099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 305:
+/* Line 1792 of yacc.c  */
+#line 2051 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 6109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 306:
+/* Line 1792 of yacc.c  */
+#line 2056 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 307:
+/* Line 1792 of yacc.c  */
+#line 2061 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 6129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 308:
+/* Line 1792 of yacc.c  */
+#line 2066 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 6139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+/* Line 1792 of yacc.c  */
+#line 2071 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 6149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 310:
+/* Line 1792 of yacc.c  */
+#line 2076 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 6159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 311:
+/* Line 1792 of yacc.c  */
+#line 2081 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 6169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 312:
+/* Line 1792 of yacc.c  */
+#line 2086 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 6179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+/* Line 1792 of yacc.c  */
+#line 2091 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 6189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+/* Line 1792 of yacc.c  */
+#line 2096 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 6199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+/* Line 1792 of yacc.c  */
+#line 2101 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 6209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+/* Line 1792 of yacc.c  */
+#line 2106 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 6219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+/* Line 1792 of yacc.c  */
+#line 2111 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 6229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 318:
+/* Line 1792 of yacc.c  */
+#line 2116 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 6239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+/* Line 1792 of yacc.c  */
+#line 2121 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 6249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+/* Line 1792 of yacc.c  */
+#line 2126 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+/* Line 1792 of yacc.c  */
+#line 2131 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 6269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+/* Line 1792 of yacc.c  */
+#line 2136 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+/* Line 1792 of yacc.c  */
+#line 2141 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 6289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+/* Line 1792 of yacc.c  */
+#line 2146 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+/* Line 1792 of yacc.c  */
+#line 2151 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 6309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+/* Line 1792 of yacc.c  */
+#line 2156 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 6319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+/* Line 1792 of yacc.c  */
+#line 2161 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 6329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+/* Line 1792 of yacc.c  */
+#line 2166 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 6339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+/* Line 1792 of yacc.c  */
+#line 2171 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 6349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+/* Line 1792 of yacc.c  */
+#line 2176 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+/* Line 1792 of yacc.c  */
+#line 2181 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 6369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+/* Line 1792 of yacc.c  */
+#line 2186 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 6379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 333:
+/* Line 1792 of yacc.c  */
+#line 2191 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 6389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 334:
+/* Line 1792 of yacc.c  */
+#line 2196 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 6399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+/* Line 1792 of yacc.c  */
+#line 2201 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 6409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+/* Line 1792 of yacc.c  */
+#line 2206 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 6419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+/* Line 1792 of yacc.c  */
+#line 2211 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 6429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+/* Line 1792 of yacc.c  */
+#line 2216 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 6439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+/* Line 1792 of yacc.c  */
+#line 2221 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 6449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+/* Line 1792 of yacc.c  */
+#line 2226 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 6459 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+/* Line 1792 of yacc.c  */
+#line 2231 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 6469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+/* Line 1792 of yacc.c  */
+#line 2236 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 6479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+/* Line 1792 of yacc.c  */
+#line 2241 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 6489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+/* Line 1792 of yacc.c  */
+#line 2246 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 6499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+/* Line 1792 of yacc.c  */
+#line 2251 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 6509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 346:
+/* Line 1792 of yacc.c  */
+#line 2256 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 6519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+/* Line 1792 of yacc.c  */
+#line 2261 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 6529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+/* Line 1792 of yacc.c  */
+#line 2266 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 6539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+/* Line 1792 of yacc.c  */
+#line 2271 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 6549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+/* Line 1792 of yacc.c  */
+#line 2276 "glslang.y"
     {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 6559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+/* Line 1792 of yacc.c  */
+#line 2281 "glslang.y"
     {  // GL_OES_EGL_image_external
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+/* Line 1792 of yacc.c  */
+#line 2287 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 6581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+/* Line 1792 of yacc.c  */
+#line 2293 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 6592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+/* Line 1792 of yacc.c  */
+#line 2299 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2168 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+/* Line 1792 of yacc.c  */
+#line 2305 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 6614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+/* Line 1792 of yacc.c  */
+#line 2311 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 6625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+/* Line 1792 of yacc.c  */
+#line 2317 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+/* Line 1792 of yacc.c  */
+#line 2323 "glslang.y"
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 6646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+/* Line 1792 of yacc.c  */
+#line 2328 "glslang.y"
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
         // type.
         //
-        if (const TVariable* variable = ((yyvsp[0].lex).symbol)->getAsVariable()) {
+        if (const TVariable* variable = ((yyvsp[(1) - (1)].lex).symbol)->getAsVariable()) {
             const TType& structure = variable->getType();
-            (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+            (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
             (yyval.interm.type).basicType = EbtStruct;
             (yyval.interm.type).userDef = &structure;
         } else
-            parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
+            parseContext.error((yyvsp[(1) - (1)].lex).loc, "expected type name", (yyvsp[(1) - (1)].lex).string->c_str(), "");
     }
-#line 6664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+/* Line 1792 of yacc.c  */
+#line 2344 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 6674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+/* Line 1792 of yacc.c  */
+#line 2349 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 6684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+/* Line 1792 of yacc.c  */
+#line 2354 "glslang.y"
     {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
+        parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
+        (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 6700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 363:
+/* Line 1792 of yacc.c  */
+#line 2362 "glslang.y"
+    { parseContext.nestedStructCheck((yyvsp[(1) - (3)].lex).loc); }
     break;
 
-  case 347:
-#line 2225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+/* Line 1792 of yacc.c  */
+#line 2362 "glslang.y"
     {
-        TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
-        parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
-        TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
+        TType* structure = new TType((yyvsp[(5) - (6)].interm.typeList), *(yyvsp[(2) - (6)].lex).string);
+        parseContext.structArrayCheck((yyvsp[(2) - (6)].lex).loc, *structure);
+        TVariable* userTypeDef = new TVariable((yyvsp[(2) - (6)].lex).string, *structure, true);
         if (! parseContext.symbolTable.insert(*userTypeDef))
-            parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
-        (yyval.interm.type).init((yyvsp[-5].lex).loc);
+            parseContext.error((yyvsp[(2) - (6)].lex).loc, "redefinition", (yyvsp[(2) - (6)].lex).string->c_str(), "struct");
+        (yyval.interm.type).init((yyvsp[(1) - (6)].lex).loc);
         (yyval.interm.type).basicType = EbtStruct;
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 6722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 365:
+/* Line 1792 of yacc.c  */
+#line 2373 "glslang.y"
+    { parseContext.nestedStructCheck((yyvsp[(1) - (2)].lex).loc); }
     break;
 
-  case 349:
-#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+/* Line 1792 of yacc.c  */
+#line 2373 "glslang.y"
     {
-        TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
-        (yyval.interm.type).init((yyvsp[-4].lex).loc);
+        TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
+        (yyval.interm.type).init((yyvsp[(1) - (5)].lex).loc);
         (yyval.interm.type).basicType = EbtStruct;
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 6734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+/* Line 1792 of yacc.c  */
+#line 2383 "glslang.y"
     {
-        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
+        (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
-#line 6742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+/* Line 1792 of yacc.c  */
+#line 2386 "glslang.y"
     {
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
-        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
+        (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
+        for (unsigned int i = 0; i < (yyvsp[(2) - (2)].interm.typeList)->size(); ++i) {
             for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
-                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
-                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
+                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName())
+                    parseContext.error((*(yyvsp[(2) - (2)].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName().c_str());
             }
-            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
+            (yyval.interm.typeList)->push_back((*(yyvsp[(2) - (2)].interm.typeList))[i]);
         }
     }
-#line 6757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+/* Line 1792 of yacc.c  */
+#line 2399 "glslang.y"
     {
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+        if ((yyvsp[(1) - (3)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
             if (parseContext.profile == EEsProfile)
-                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
+                parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
         }
 
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
+        (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
 
-        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
-        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
+        parseContext.voidErrorCheck((yyvsp[(1) - (3)].interm.type).loc, (*(yyvsp[(2) - (3)].interm.typeList))[0].type->getFieldName(), (yyvsp[(1) - (3)].interm.type).basicType);
+        parseContext.precisionQualifierCheck((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).basicType, (yyvsp[(1) - (3)].interm.type).qualifier);
 
         for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            parseContext.arrayDimCheck((yyvsp[-2].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
-            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
+            parseContext.arrayDimCheck((yyvsp[(1) - (3)].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[(1) - (3)].interm.type).arraySizes);
+            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[(1) - (3)].interm.type));
         }
     }
-#line 6780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 370:
+/* Line 1792 of yacc.c  */
+#line 2417 "glslang.y"
     {
-        parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
-        if ((yyvsp[-2].interm.type).arraySizes) {
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
-            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+        parseContext.globalQualifierFixCheck((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).qualifier);
+        if ((yyvsp[(2) - (4)].interm.type).arraySizes) {
+            parseContext.profileRequires((yyvsp[(2) - (4)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires((yyvsp[(2) - (4)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
             if (parseContext.profile == EEsProfile)
-                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
+                parseContext.arraySizeRequiredCheck((yyvsp[(2) - (4)].interm.type).loc, *(yyvsp[(2) - (4)].interm.type).arraySizes);
         }
 
-        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
+        (yyval.interm.typeList) = (yyvsp[(3) - (4)].interm.typeList);
 
-        parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
-        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
-        parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
-        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
+        parseContext.checkNoShaderLayouts((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).shaderQualifiers);
+        parseContext.voidErrorCheck((yyvsp[(2) - (4)].interm.type).loc, (*(yyvsp[(3) - (4)].interm.typeList))[0].type->getFieldName(), (yyvsp[(2) - (4)].interm.type).basicType);
+        parseContext.mergeQualifiers((yyvsp[(2) - (4)].interm.type).loc, (yyvsp[(2) - (4)].interm.type).qualifier, (yyvsp[(1) - (4)].interm.type).qualifier, true);
+        parseContext.precisionQualifierCheck((yyvsp[(2) - (4)].interm.type).loc, (yyvsp[(2) - (4)].interm.type).basicType, (yyvsp[(2) - (4)].interm.type).qualifier);
 
         for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            parseContext.arrayDimCheck((yyvsp[-3].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
-            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
+            parseContext.arrayDimCheck((yyvsp[(1) - (4)].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[(2) - (4)].interm.type).arraySizes);
+            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[(2) - (4)].interm.type));
         }
     }
-#line 6806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 371:
+/* Line 1792 of yacc.c  */
+#line 2441 "glslang.y"
     {
         (yyval.interm.typeList) = new TTypeList;
-        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
+        (yyval.interm.typeList)->push_back((yyvsp[(1) - (1)].interm.typeLine));
     }
-#line 6815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 372:
+/* Line 1792 of yacc.c  */
+#line 2445 "glslang.y"
     {
-        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
+        (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
-#line 6823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+/* Line 1792 of yacc.c  */
+#line 2451 "glslang.y"
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
-        (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
-        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
+        (yyval.interm.typeLine).loc = (yyvsp[(1) - (1)].lex).loc;
+        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (1)].lex).string);
     }
-#line 6833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 374:
+/* Line 1792 of yacc.c  */
+#line 2456 "glslang.y"
     {
-        parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
+        parseContext.arrayDimCheck((yyvsp[(1) - (2)].lex).loc, (yyvsp[(2) - (2)].interm).arraySizes, 0);
 
         (yyval.interm.typeLine).type = new TType(EbtVoid);
-        (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
-        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
-        (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
+        (yyval.interm.typeLine).loc = (yyvsp[(1) - (2)].lex).loc;
+        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (2)].lex).string);
+        (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[(2) - (2)].interm).arraySizes);
     }
-#line 6846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+/* Line 1792 of yacc.c  */
+#line 2467 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 6854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+/* Line 1792 of yacc.c  */
+#line 2470 "glslang.y"
     {
         const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
+        parseContext.requireProfile((yyvsp[(1) - (3)].lex).loc, ~EEsProfile, initFeature);
+        parseContext.profileRequires((yyvsp[(1) - (3)].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+        (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
     }
-#line 6865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 377:
+/* Line 1792 of yacc.c  */
+#line 2476 "glslang.y"
     {
         const char* initFeature = "{ } style initializers";
-        parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
-        parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
-        (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+        parseContext.requireProfile((yyvsp[(1) - (4)].lex).loc, ~EEsProfile, initFeature);
+        parseContext.profileRequires((yyvsp[(1) - (4)].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+        (yyval.interm.intermTypedNode) = (yyvsp[(2) - (4)].interm.intermTypedNode);
     }
-#line 6876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 378:
+/* Line 1792 of yacc.c  */
+#line 2485 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[(1) - (1)].interm.intermTypedNode), (yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc());
     }
-#line 6884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 379:
+/* Line 1792 of yacc.c  */
+#line 2488 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
     }
-#line 6892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 380:
+/* Line 1792 of yacc.c  */
+#line 2494 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 364:
-#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 381:
+/* Line 1792 of yacc.c  */
+#line 2498 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 365:
-#line 2362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 382:
+/* Line 1792 of yacc.c  */
+#line 2499 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 366:
-#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 383:
+/* Line 1792 of yacc.c  */
+#line 2505 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 367:
-#line 2369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 384:
+/* Line 1792 of yacc.c  */
+#line 2506 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 368:
-#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 385:
+/* Line 1792 of yacc.c  */
+#line 2507 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 369:
-#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 386:
+/* Line 1792 of yacc.c  */
+#line 2508 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 370:
-#line 2372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 387:
+/* Line 1792 of yacc.c  */
+#line 2509 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 371:
-#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 388:
+/* Line 1792 of yacc.c  */
+#line 2510 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 372:
-#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 389:
+/* Line 1792 of yacc.c  */
+#line 2511 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 373:
-#line 2378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+/* Line 1792 of yacc.c  */
+#line 2515 "glslang.y"
     { (yyval.interm.intermNode) = 0; }
-#line 6958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+/* Line 1792 of yacc.c  */
+#line 2516 "glslang.y"
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 6967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+/* Line 1792 of yacc.c  */
+#line 2520 "glslang.y"
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 6976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+/* Line 1792 of yacc.c  */
+#line 2524 "glslang.y"
     {
-        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
-            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
+        if ((yyvsp[(3) - (5)].interm.intermNode) && (yyvsp[(3) - (5)].interm.intermNode)->getAsAggregate())
+            (yyvsp[(3) - (5)].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+        (yyval.interm.intermNode) = (yyvsp[(3) - (5)].interm.intermNode);
     }
-#line 6986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 394:
+/* Line 1792 of yacc.c  */
+#line 2532 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 378:
-#line 2396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 395:
+/* Line 1792 of yacc.c  */
+#line 2533 "glslang.y"
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 379:
-#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 396:
+/* Line 1792 of yacc.c  */
+#line 2537 "glslang.y"
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+/* Line 1792 of yacc.c  */
+#line 2540 "glslang.y"
     {
         --parseContext.controlFlowNestingLevel;
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode);
     }
-#line 7015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+/* Line 1792 of yacc.c  */
+#line 2544 "glslang.y"
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+/* Line 1792 of yacc.c  */
+#line 2549 "glslang.y"
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode);
     }
-#line 7036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+/* Line 1792 of yacc.c  */
+#line 2558 "glslang.y"
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+/* Line 1792 of yacc.c  */
+#line 2561 "glslang.y"
     {
-        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
-            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
-        (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
+        if ((yyvsp[(2) - (3)].interm.intermNode) && (yyvsp[(2) - (3)].interm.intermNode)->getAsAggregate())
+            (yyvsp[(2) - (3)].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+        (yyval.interm.intermNode) = (yyvsp[(2) - (3)].interm.intermNode);
     }
-#line 7054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+/* Line 1792 of yacc.c  */
+#line 2569 "glslang.y"
     {
-        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
-        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence(0, (yyvsp[0].interm.intermNode));
+        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode));
+        if ((yyvsp[(1) - (1)].interm.intermNode) && (yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode() && ((yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
+                                            (yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+            parseContext.wrapupSwitchSubsequence(0, (yyvsp[(1) - (1)].interm.intermNode));
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+/* Line 1792 of yacc.c  */
+#line 2577 "glslang.y"
     {
-        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
-                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
-            parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
+        if ((yyvsp[(2) - (2)].interm.intermNode) && (yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode() && ((yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
+                                            (yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+            parseContext.wrapupSwitchSubsequence((yyvsp[(1) - (2)].interm.intermNode) ? (yyvsp[(1) - (2)].interm.intermNode)->getAsAggregate() : 0, (yyvsp[(2) - (2)].interm.intermNode));
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         } else
-            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
+            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode));
     }
-#line 7080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+/* Line 1792 of yacc.c  */
+#line 2588 "glslang.y"
     { (yyval.interm.intermNode) = 0; }
-#line 7086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2452 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 7092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+  case 405:
+/* Line 1792 of yacc.c  */
+#line 2589 "glslang.y"
+    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 389:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+/* Line 1792 of yacc.c  */
+#line 2593 "glslang.y"
     {
-        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
-        (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
+        parseContext.boolCheck((yyvsp[(1) - (5)].lex).loc, (yyvsp[(3) - (5)].interm.intermTypedNode));
+        (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.nodePair), (yyvsp[(1) - (5)].lex).loc);
     }
-#line 7101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2463 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+/* Line 1792 of yacc.c  */
+#line 2600 "glslang.y"
     {
-        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
-        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
+        (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermNode);
     }
-#line 7110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 408:
+/* Line 1792 of yacc.c  */
+#line 2604 "glslang.y"
     {
-        (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+/* Line 1792 of yacc.c  */
+#line 2612 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-        parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        parseContext.boolCheck((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), (yyvsp[(1) - (1)].interm.intermTypedNode));
     }
-#line 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+/* Line 1792 of yacc.c  */
+#line 2616 "glslang.y"
     {
-        parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
+        parseContext.boolCheck((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].interm.type));
 
-        TType type((yyvsp[-3].interm.type));
-        TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
+        TType type((yyvsp[(1) - (4)].interm.type));
+        TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (4)].lex).loc, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), 0, (yyvsp[(4) - (4)].interm.intermTypedNode));
         if (initNode)
             (yyval.interm.intermTypedNode) = initNode->getAsTyped();
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 7143 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+/* Line 1792 of yacc.c  */
+#line 2629 "glslang.y"
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -7152,13 +7778,13 @@ yyreduce:
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 7156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+/* Line 1792 of yacc.c  */
+#line 2637 "glslang.y"
     {
-        (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
+        (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[(1) - (8)].lex).loc, (yyvsp[(3) - (8)].interm.intermTypedNode), (yyvsp[(7) - (8)].interm.intermNode) ? (yyvsp[(7) - (8)].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
         parseContext.switchSequenceStack.pop_back();
         parseContext.switchLevel.pop_back();
@@ -7166,287 +7792,287 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+/* Line 1792 of yacc.c  */
+#line 2649 "glslang.y"
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+/* Line 1792 of yacc.c  */
+#line 2652 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
-#line 7186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+/* Line 1792 of yacc.c  */
+#line 2658 "glslang.y"
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
-            parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
+            parseContext.error((yyvsp[(1) - (3)].lex).loc, "cannot appear outside switch statement", "case", "");
         else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error((yyvsp[-2].lex).loc, "cannot be nested inside control flow", "case", "");
+            parseContext.error((yyvsp[(1) - (3)].lex).loc, "cannot be nested inside control flow", "case", "");
         else {
-            parseContext.constantValueCheck((yyvsp[-1].interm.intermTypedNode), "case");
-            parseContext.integerCheck((yyvsp[-1].interm.intermTypedNode), "case");
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
+            parseContext.constantValueCheck((yyvsp[(2) - (3)].interm.intermTypedNode), "case");
+            parseContext.integerCheck((yyvsp[(2) - (3)].interm.intermTypedNode), "case");
+            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).loc);
         }
     }
-#line 7203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 416:
+/* Line 1792 of yacc.c  */
+#line 2670 "glslang.y"
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
-            parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "cannot appear outside switch statement", "default", "");
         else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
-            parseContext.error((yyvsp[-1].lex).loc, "cannot be nested inside control flow", "default", "");
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "cannot be nested inside control flow", "default", "");
         else
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
+            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[(1) - (2)].lex).loc);
     }
-#line 7217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+/* Line 1792 of yacc.c  */
+#line 2682 "glslang.y"
     {
         if (! parseContext.limits.whileLoops)
-            parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "while loops not available", "limitation", "");
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+/* Line 1792 of yacc.c  */
+#line 2690 "glslang.y"
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
+        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[(6) - (6)].interm.intermNode), (yyvsp[(4) - (6)].interm.intermTypedNode), 0, true, (yyvsp[(1) - (6)].lex).loc);
         --parseContext.loopNestingLevel;
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+/* Line 1792 of yacc.c  */
+#line 2697 "glslang.y"
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 420:
+/* Line 1792 of yacc.c  */
+#line 2702 "glslang.y"
     {
         if (! parseContext.limits.whileLoops)
-            parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
+            parseContext.error((yyvsp[(1) - (8)].lex).loc, "do-while loops not available", "limitation", "");
 
-        parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
+        parseContext.boolCheck((yyvsp[(8) - (8)].lex).loc, (yyvsp[(6) - (8)].interm.intermTypedNode));
 
-        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
+        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[(3) - (8)].interm.intermNode), (yyvsp[(6) - (8)].interm.intermTypedNode), 0, false, (yyvsp[(4) - (8)].lex).loc);
         --parseContext.loopNestingLevel;
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+/* Line 1792 of yacc.c  */
+#line 2713 "glslang.y"
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+/* Line 1792 of yacc.c  */
+#line 2719 "glslang.y"
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
-        TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc);
+        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[(4) - (7)].interm.intermNode), (yyvsp[(2) - (7)].lex).loc);
+        TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[(7) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), true, (yyvsp[(1) - (7)].lex).loc);
         if (! parseContext.limits.nonInductiveForLoops)
-            parseContext.inductiveLoopCheck((yyvsp[-6].lex).loc, (yyvsp[-3].interm.intermNode), forLoop);
-        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[-6].lex).loc);
+            parseContext.inductiveLoopCheck((yyvsp[(1) - (7)].lex).loc, (yyvsp[(4) - (7)].interm.intermNode), forLoop);
+        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[(1) - (7)].lex).loc);
         (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         --parseContext.loopNestingLevel;
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+/* Line 1792 of yacc.c  */
+#line 2734 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
-#line 7304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2600 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+/* Line 1792 of yacc.c  */
+#line 2737 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
-#line 7312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+/* Line 1792 of yacc.c  */
+#line 2743 "glslang.y"
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
-#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+/* Line 1792 of yacc.c  */
+#line 2746 "glslang.y"
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+/* Line 1792 of yacc.c  */
+#line 2752 "glslang.y"
     {
-        (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+/* Line 1792 of yacc.c  */
+#line 2756 "glslang.y"
     {
-        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
-        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
+        (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermTypedNode);
     }
-#line 7346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+/* Line 1792 of yacc.c  */
+#line 2763 "glslang.y"
     {
         if (parseContext.loopNestingLevel <= 0)
-            parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "continue statement only allowed in loops", "", "");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[(1) - (2)].lex).loc);
     }
-#line 7356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+/* Line 1792 of yacc.c  */
+#line 2768 "glslang.y"
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
-            parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "break statement only allowed in switch and loops", "", "");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[(1) - (2)].lex).loc);
     }
-#line 7366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+/* Line 1792 of yacc.c  */
+#line 2773 "glslang.y"
     {
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
-            parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
+            parseContext.error((yyvsp[(1) - (2)].lex).loc, "non-void function must return a value", "return", "");
         if (parseContext.inMain)
             parseContext.postMainReturn = true;
     }
-#line 7378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+/* Line 1792 of yacc.c  */
+#line 2780 "glslang.y"
     {
-        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
+        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[(1) - (3)].lex).loc, (yyvsp[(2) - (3)].interm.intermTypedNode));
     }
-#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+/* Line 1792 of yacc.c  */
+#line 2783 "glslang.y"
     {
-        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
-        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
+        parseContext.requireStage((yyvsp[(1) - (2)].lex).loc, EShLangFragment, "discard");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[(1) - (2)].lex).loc);
     }
-#line 7395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+/* Line 1792 of yacc.c  */
+#line 2792 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+/* Line 1792 of yacc.c  */
+#line 2796 "glslang.y"
     {
-        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
+        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode));
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+/* Line 1792 of yacc.c  */
+#line 2803 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
-#line 7421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2669 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+/* Line 1792 of yacc.c  */
+#line 2806 "glslang.y"
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
-#line 7429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+/* Line 1792 of yacc.c  */
+#line 2812 "glslang.y"
     {
-        (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
-        (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
+        (yyvsp[(1) - (1)].interm).function = parseContext.handleFunctionDeclarator((yyvsp[(1) - (1)].interm).loc, *(yyvsp[(1) - (1)].interm).function, false /* not prototype */);
+        (yyvsp[(1) - (1)].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[(1) - (1)].interm).loc, *(yyvsp[(1) - (1)].interm).function);
     }
-#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+/* Line 1792 of yacc.c  */
+#line 2816 "glslang.y"
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
-            parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
+            parseContext.error((yyvsp[(1) - (3)].interm).loc, "function does not return a value:", "", (yyvsp[(1) - (3)].interm).function->getName().c_str());
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
-        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode));
-        parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc);
-        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str());
+        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermNode));
+        parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[(1) - (3)].interm).function->getType(), (yyvsp[(1) - (3)].interm).loc);
+        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[(1) - (3)].interm).function->getMangledName().c_str());
 
         // store the pragma information for debug and optimize and other vendor specific
         // information. This information can be queried from the parse tree
@@ -7454,11 +8080,11 @@ yyreduce:
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 7462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+/* Line 1792 of yacc.c  */
+#line 8088 "glslang_tab.cpp"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -7480,7 +8106,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now 'shift' the result of the reduction.  Determine what state
+  /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -7495,9 +8121,9 @@ yyreduce:
   goto yynewstate;
 
 
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -7548,20 +8174,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
+	 error, discard it.  */
 
       if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
       else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval, pParseContext);
-          yychar = YYEMPTY;
-        }
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval, pParseContext);
+	  yychar = YYEMPTY;
+	}
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -7580,7 +8206,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule whose action triggered
+  /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -7593,29 +8219,29 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-        YYABORT;
+	YYABORT;
 
 
       yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp, pParseContext);
+		  yystos[yystate], yyvsp, pParseContext);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -7666,14 +8292,14 @@ yyreturn:
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval, pParseContext);
     }
-  /* Do not reclaim the symbols of the rule whose action triggered
+  /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp, pParseContext);
+		  yystos[*yyssp], yyvsp, pParseContext);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -7684,7 +8310,11 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  return yyresult;
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
 }
-#line 2696 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+
+
+/* Line 2055 of yacc.c  */
+#line 2833 "glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 2d8276af56835235446ef16f30c270003069e785..b6d27993c96c8c68c0e5164a84119b84d54cda9e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 2.7.  */
 
 /* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,13 +26,13 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-/* Debug traces.  */
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+/* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
 #endif
@@ -40,288 +40,306 @@
 extern int yydebug;
 #endif
 
-/* Token type.  */
+/* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-  enum yytokentype
-  {
-    ATTRIBUTE = 258,
-    VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
-    DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    BREAK = 268,
-    CONTINUE = 269,
-    DO = 270,
-    ELSE = 271,
-    FOR = 272,
-    IF = 273,
-    DISCARD = 274,
-    RETURN = 275,
-    SWITCH = 276,
-    CASE = 277,
-    DEFAULT = 278,
-    SUBROUTINE = 279,
-    BVEC2 = 280,
-    BVEC3 = 281,
-    BVEC4 = 282,
-    IVEC2 = 283,
-    IVEC3 = 284,
-    IVEC4 = 285,
-    I64VEC2 = 286,
-    I64VEC3 = 287,
-    I64VEC4 = 288,
-    UVEC2 = 289,
-    UVEC3 = 290,
-    UVEC4 = 291,
-    U64VEC2 = 292,
-    U64VEC3 = 293,
-    U64VEC4 = 294,
-    VEC2 = 295,
-    VEC3 = 296,
-    VEC4 = 297,
-    MAT2 = 298,
-    MAT3 = 299,
-    MAT4 = 300,
-    CENTROID = 301,
-    IN = 302,
-    OUT = 303,
-    INOUT = 304,
-    UNIFORM = 305,
-    PATCH = 306,
-    SAMPLE = 307,
-    BUFFER = 308,
-    SHARED = 309,
-    COHERENT = 310,
-    VOLATILE = 311,
-    RESTRICT = 312,
-    READONLY = 313,
-    WRITEONLY = 314,
-    DVEC2 = 315,
-    DVEC3 = 316,
-    DVEC4 = 317,
-    DMAT2 = 318,
-    DMAT3 = 319,
-    DMAT4 = 320,
-    NOPERSPECTIVE = 321,
-    FLAT = 322,
-    SMOOTH = 323,
-    LAYOUT = 324,
-    __EXPLICITINTERPAMD = 325,
-    MAT2X2 = 326,
-    MAT2X3 = 327,
-    MAT2X4 = 328,
-    MAT3X2 = 329,
-    MAT3X3 = 330,
-    MAT3X4 = 331,
-    MAT4X2 = 332,
-    MAT4X3 = 333,
-    MAT4X4 = 334,
-    DMAT2X2 = 335,
-    DMAT2X3 = 336,
-    DMAT2X4 = 337,
-    DMAT3X2 = 338,
-    DMAT3X3 = 339,
-    DMAT3X4 = 340,
-    DMAT4X2 = 341,
-    DMAT4X3 = 342,
-    DMAT4X4 = 343,
-    ATOMIC_UINT = 344,
-    SAMPLER1D = 345,
-    SAMPLER2D = 346,
-    SAMPLER3D = 347,
-    SAMPLERCUBE = 348,
-    SAMPLER1DSHADOW = 349,
-    SAMPLER2DSHADOW = 350,
-    SAMPLERCUBESHADOW = 351,
-    SAMPLER1DARRAY = 352,
-    SAMPLER2DARRAY = 353,
-    SAMPLER1DARRAYSHADOW = 354,
-    SAMPLER2DARRAYSHADOW = 355,
-    ISAMPLER1D = 356,
-    ISAMPLER2D = 357,
-    ISAMPLER3D = 358,
-    ISAMPLERCUBE = 359,
-    ISAMPLER1DARRAY = 360,
-    ISAMPLER2DARRAY = 361,
-    USAMPLER1D = 362,
-    USAMPLER2D = 363,
-    USAMPLER3D = 364,
-    USAMPLERCUBE = 365,
-    USAMPLER1DARRAY = 366,
-    USAMPLER2DARRAY = 367,
-    SAMPLER2DRECT = 368,
-    SAMPLER2DRECTSHADOW = 369,
-    ISAMPLER2DRECT = 370,
-    USAMPLER2DRECT = 371,
-    SAMPLERBUFFER = 372,
-    ISAMPLERBUFFER = 373,
-    USAMPLERBUFFER = 374,
-    SAMPLERCUBEARRAY = 375,
-    SAMPLERCUBEARRAYSHADOW = 376,
-    ISAMPLERCUBEARRAY = 377,
-    USAMPLERCUBEARRAY = 378,
-    SAMPLER2DMS = 379,
-    ISAMPLER2DMS = 380,
-    USAMPLER2DMS = 381,
-    SAMPLER2DMSARRAY = 382,
-    ISAMPLER2DMSARRAY = 383,
-    USAMPLER2DMSARRAY = 384,
-    SAMPLEREXTERNALOES = 385,
-    SAMPLER = 386,
-    SAMPLERSHADOW = 387,
-    TEXTURE1D = 388,
-    TEXTURE2D = 389,
-    TEXTURE3D = 390,
-    TEXTURECUBE = 391,
-    TEXTURE1DARRAY = 392,
-    TEXTURE2DARRAY = 393,
-    ITEXTURE1D = 394,
-    ITEXTURE2D = 395,
-    ITEXTURE3D = 396,
-    ITEXTURECUBE = 397,
-    ITEXTURE1DARRAY = 398,
-    ITEXTURE2DARRAY = 399,
-    UTEXTURE1D = 400,
-    UTEXTURE2D = 401,
-    UTEXTURE3D = 402,
-    UTEXTURECUBE = 403,
-    UTEXTURE1DARRAY = 404,
-    UTEXTURE2DARRAY = 405,
-    TEXTURE2DRECT = 406,
-    ITEXTURE2DRECT = 407,
-    UTEXTURE2DRECT = 408,
-    TEXTUREBUFFER = 409,
-    ITEXTUREBUFFER = 410,
-    UTEXTUREBUFFER = 411,
-    TEXTURECUBEARRAY = 412,
-    ITEXTURECUBEARRAY = 413,
-    UTEXTURECUBEARRAY = 414,
-    TEXTURE2DMS = 415,
-    ITEXTURE2DMS = 416,
-    UTEXTURE2DMS = 417,
-    TEXTURE2DMSARRAY = 418,
-    ITEXTURE2DMSARRAY = 419,
-    UTEXTURE2DMSARRAY = 420,
-    SUBPASSINPUT = 421,
-    SUBPASSINPUTMS = 422,
-    ISUBPASSINPUT = 423,
-    ISUBPASSINPUTMS = 424,
-    USUBPASSINPUT = 425,
-    USUBPASSINPUTMS = 426,
-    IMAGE1D = 427,
-    IIMAGE1D = 428,
-    UIMAGE1D = 429,
-    IMAGE2D = 430,
-    IIMAGE2D = 431,
-    UIMAGE2D = 432,
-    IMAGE3D = 433,
-    IIMAGE3D = 434,
-    UIMAGE3D = 435,
-    IMAGE2DRECT = 436,
-    IIMAGE2DRECT = 437,
-    UIMAGE2DRECT = 438,
-    IMAGECUBE = 439,
-    IIMAGECUBE = 440,
-    UIMAGECUBE = 441,
-    IMAGEBUFFER = 442,
-    IIMAGEBUFFER = 443,
-    UIMAGEBUFFER = 444,
-    IMAGE1DARRAY = 445,
-    IIMAGE1DARRAY = 446,
-    UIMAGE1DARRAY = 447,
-    IMAGE2DARRAY = 448,
-    IIMAGE2DARRAY = 449,
-    UIMAGE2DARRAY = 450,
-    IMAGECUBEARRAY = 451,
-    IIMAGECUBEARRAY = 452,
-    UIMAGECUBEARRAY = 453,
-    IMAGE2DMS = 454,
-    IIMAGE2DMS = 455,
-    UIMAGE2DMS = 456,
-    IMAGE2DMSARRAY = 457,
-    IIMAGE2DMSARRAY = 458,
-    UIMAGE2DMSARRAY = 459,
-    STRUCT = 460,
-    VOID = 461,
-    WHILE = 462,
-    IDENTIFIER = 463,
-    TYPE_NAME = 464,
-    FLOATCONSTANT = 465,
-    DOUBLECONSTANT = 466,
-    INTCONSTANT = 467,
-    UINTCONSTANT = 468,
-    INT64CONSTANT = 469,
-    UINT64CONSTANT = 470,
-    BOOLCONSTANT = 471,
-    LEFT_OP = 472,
-    RIGHT_OP = 473,
-    INC_OP = 474,
-    DEC_OP = 475,
-    LE_OP = 476,
-    GE_OP = 477,
-    EQ_OP = 478,
-    NE_OP = 479,
-    AND_OP = 480,
-    OR_OP = 481,
-    XOR_OP = 482,
-    MUL_ASSIGN = 483,
-    DIV_ASSIGN = 484,
-    ADD_ASSIGN = 485,
-    MOD_ASSIGN = 486,
-    LEFT_ASSIGN = 487,
-    RIGHT_ASSIGN = 488,
-    AND_ASSIGN = 489,
-    XOR_ASSIGN = 490,
-    OR_ASSIGN = 491,
-    SUB_ASSIGN = 492,
-    LEFT_PAREN = 493,
-    RIGHT_PAREN = 494,
-    LEFT_BRACKET = 495,
-    RIGHT_BRACKET = 496,
-    LEFT_BRACE = 497,
-    RIGHT_BRACE = 498,
-    DOT = 499,
-    COMMA = 500,
-    COLON = 501,
-    EQUAL = 502,
-    SEMICOLON = 503,
-    BANG = 504,
-    DASH = 505,
-    TILDE = 506,
-    PLUS = 507,
-    STAR = 508,
-    SLASH = 509,
-    PERCENT = 510,
-    LEFT_ANGLE = 511,
-    RIGHT_ANGLE = 512,
-    VERTICAL_BAR = 513,
-    CARET = 514,
-    AMPERSAND = 515,
-    QUESTION = 516,
-    INVARIANT = 517,
-    PRECISE = 518,
-    HIGH_PRECISION = 519,
-    MEDIUM_PRECISION = 520,
-    LOW_PRECISION = 521,
-    PRECISION = 522,
-    PACKED = 523,
-    RESOURCE = 524,
-    SUPERP = 525
-  };
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ATTRIBUTE = 258,
+     VARYING = 259,
+     CONST = 260,
+     BOOL = 261,
+     FLOAT = 262,
+     DOUBLE = 263,
+     INT = 264,
+     UINT = 265,
+     INT64_T = 266,
+     UINT64_T = 267,
+     FLOAT16_T = 268,
+     BREAK = 269,
+     CONTINUE = 270,
+     DO = 271,
+     ELSE = 272,
+     FOR = 273,
+     IF = 274,
+     DISCARD = 275,
+     RETURN = 276,
+     SWITCH = 277,
+     CASE = 278,
+     DEFAULT = 279,
+     SUBROUTINE = 280,
+     BVEC2 = 281,
+     BVEC3 = 282,
+     BVEC4 = 283,
+     IVEC2 = 284,
+     IVEC3 = 285,
+     IVEC4 = 286,
+     I64VEC2 = 287,
+     I64VEC3 = 288,
+     I64VEC4 = 289,
+     UVEC2 = 290,
+     UVEC3 = 291,
+     UVEC4 = 292,
+     U64VEC2 = 293,
+     U64VEC3 = 294,
+     U64VEC4 = 295,
+     VEC2 = 296,
+     VEC3 = 297,
+     VEC4 = 298,
+     MAT2 = 299,
+     MAT3 = 300,
+     MAT4 = 301,
+     CENTROID = 302,
+     IN = 303,
+     OUT = 304,
+     INOUT = 305,
+     UNIFORM = 306,
+     PATCH = 307,
+     SAMPLE = 308,
+     BUFFER = 309,
+     SHARED = 310,
+     COHERENT = 311,
+     VOLATILE = 312,
+     RESTRICT = 313,
+     READONLY = 314,
+     WRITEONLY = 315,
+     DVEC2 = 316,
+     DVEC3 = 317,
+     DVEC4 = 318,
+     DMAT2 = 319,
+     DMAT3 = 320,
+     DMAT4 = 321,
+     F16VEC2 = 322,
+     F16VEC3 = 323,
+     F16VEC4 = 324,
+     F16MAT2 = 325,
+     F16MAT3 = 326,
+     F16MAT4 = 327,
+     NOPERSPECTIVE = 328,
+     FLAT = 329,
+     SMOOTH = 330,
+     LAYOUT = 331,
+     __EXPLICITINTERPAMD = 332,
+     MAT2X2 = 333,
+     MAT2X3 = 334,
+     MAT2X4 = 335,
+     MAT3X2 = 336,
+     MAT3X3 = 337,
+     MAT3X4 = 338,
+     MAT4X2 = 339,
+     MAT4X3 = 340,
+     MAT4X4 = 341,
+     DMAT2X2 = 342,
+     DMAT2X3 = 343,
+     DMAT2X4 = 344,
+     DMAT3X2 = 345,
+     DMAT3X3 = 346,
+     DMAT3X4 = 347,
+     DMAT4X2 = 348,
+     DMAT4X3 = 349,
+     DMAT4X4 = 350,
+     F16MAT2X2 = 351,
+     F16MAT2X3 = 352,
+     F16MAT2X4 = 353,
+     F16MAT3X2 = 354,
+     F16MAT3X3 = 355,
+     F16MAT3X4 = 356,
+     F16MAT4X2 = 357,
+     F16MAT4X3 = 358,
+     F16MAT4X4 = 359,
+     ATOMIC_UINT = 360,
+     SAMPLER1D = 361,
+     SAMPLER2D = 362,
+     SAMPLER3D = 363,
+     SAMPLERCUBE = 364,
+     SAMPLER1DSHADOW = 365,
+     SAMPLER2DSHADOW = 366,
+     SAMPLERCUBESHADOW = 367,
+     SAMPLER1DARRAY = 368,
+     SAMPLER2DARRAY = 369,
+     SAMPLER1DARRAYSHADOW = 370,
+     SAMPLER2DARRAYSHADOW = 371,
+     ISAMPLER1D = 372,
+     ISAMPLER2D = 373,
+     ISAMPLER3D = 374,
+     ISAMPLERCUBE = 375,
+     ISAMPLER1DARRAY = 376,
+     ISAMPLER2DARRAY = 377,
+     USAMPLER1D = 378,
+     USAMPLER2D = 379,
+     USAMPLER3D = 380,
+     USAMPLERCUBE = 381,
+     USAMPLER1DARRAY = 382,
+     USAMPLER2DARRAY = 383,
+     SAMPLER2DRECT = 384,
+     SAMPLER2DRECTSHADOW = 385,
+     ISAMPLER2DRECT = 386,
+     USAMPLER2DRECT = 387,
+     SAMPLERBUFFER = 388,
+     ISAMPLERBUFFER = 389,
+     USAMPLERBUFFER = 390,
+     SAMPLERCUBEARRAY = 391,
+     SAMPLERCUBEARRAYSHADOW = 392,
+     ISAMPLERCUBEARRAY = 393,
+     USAMPLERCUBEARRAY = 394,
+     SAMPLER2DMS = 395,
+     ISAMPLER2DMS = 396,
+     USAMPLER2DMS = 397,
+     SAMPLER2DMSARRAY = 398,
+     ISAMPLER2DMSARRAY = 399,
+     USAMPLER2DMSARRAY = 400,
+     SAMPLEREXTERNALOES = 401,
+     SAMPLER = 402,
+     SAMPLERSHADOW = 403,
+     TEXTURE1D = 404,
+     TEXTURE2D = 405,
+     TEXTURE3D = 406,
+     TEXTURECUBE = 407,
+     TEXTURE1DARRAY = 408,
+     TEXTURE2DARRAY = 409,
+     ITEXTURE1D = 410,
+     ITEXTURE2D = 411,
+     ITEXTURE3D = 412,
+     ITEXTURECUBE = 413,
+     ITEXTURE1DARRAY = 414,
+     ITEXTURE2DARRAY = 415,
+     UTEXTURE1D = 416,
+     UTEXTURE2D = 417,
+     UTEXTURE3D = 418,
+     UTEXTURECUBE = 419,
+     UTEXTURE1DARRAY = 420,
+     UTEXTURE2DARRAY = 421,
+     TEXTURE2DRECT = 422,
+     ITEXTURE2DRECT = 423,
+     UTEXTURE2DRECT = 424,
+     TEXTUREBUFFER = 425,
+     ITEXTUREBUFFER = 426,
+     UTEXTUREBUFFER = 427,
+     TEXTURECUBEARRAY = 428,
+     ITEXTURECUBEARRAY = 429,
+     UTEXTURECUBEARRAY = 430,
+     TEXTURE2DMS = 431,
+     ITEXTURE2DMS = 432,
+     UTEXTURE2DMS = 433,
+     TEXTURE2DMSARRAY = 434,
+     ITEXTURE2DMSARRAY = 435,
+     UTEXTURE2DMSARRAY = 436,
+     SUBPASSINPUT = 437,
+     SUBPASSINPUTMS = 438,
+     ISUBPASSINPUT = 439,
+     ISUBPASSINPUTMS = 440,
+     USUBPASSINPUT = 441,
+     USUBPASSINPUTMS = 442,
+     IMAGE1D = 443,
+     IIMAGE1D = 444,
+     UIMAGE1D = 445,
+     IMAGE2D = 446,
+     IIMAGE2D = 447,
+     UIMAGE2D = 448,
+     IMAGE3D = 449,
+     IIMAGE3D = 450,
+     UIMAGE3D = 451,
+     IMAGE2DRECT = 452,
+     IIMAGE2DRECT = 453,
+     UIMAGE2DRECT = 454,
+     IMAGECUBE = 455,
+     IIMAGECUBE = 456,
+     UIMAGECUBE = 457,
+     IMAGEBUFFER = 458,
+     IIMAGEBUFFER = 459,
+     UIMAGEBUFFER = 460,
+     IMAGE1DARRAY = 461,
+     IIMAGE1DARRAY = 462,
+     UIMAGE1DARRAY = 463,
+     IMAGE2DARRAY = 464,
+     IIMAGE2DARRAY = 465,
+     UIMAGE2DARRAY = 466,
+     IMAGECUBEARRAY = 467,
+     IIMAGECUBEARRAY = 468,
+     UIMAGECUBEARRAY = 469,
+     IMAGE2DMS = 470,
+     IIMAGE2DMS = 471,
+     UIMAGE2DMS = 472,
+     IMAGE2DMSARRAY = 473,
+     IIMAGE2DMSARRAY = 474,
+     UIMAGE2DMSARRAY = 475,
+     STRUCT = 476,
+     VOID = 477,
+     WHILE = 478,
+     IDENTIFIER = 479,
+     TYPE_NAME = 480,
+     FLOATCONSTANT = 481,
+     DOUBLECONSTANT = 482,
+     INTCONSTANT = 483,
+     UINTCONSTANT = 484,
+     INT64CONSTANT = 485,
+     UINT64CONSTANT = 486,
+     BOOLCONSTANT = 487,
+     FLOAT16CONSTANT = 488,
+     LEFT_OP = 489,
+     RIGHT_OP = 490,
+     INC_OP = 491,
+     DEC_OP = 492,
+     LE_OP = 493,
+     GE_OP = 494,
+     EQ_OP = 495,
+     NE_OP = 496,
+     AND_OP = 497,
+     OR_OP = 498,
+     XOR_OP = 499,
+     MUL_ASSIGN = 500,
+     DIV_ASSIGN = 501,
+     ADD_ASSIGN = 502,
+     MOD_ASSIGN = 503,
+     LEFT_ASSIGN = 504,
+     RIGHT_ASSIGN = 505,
+     AND_ASSIGN = 506,
+     XOR_ASSIGN = 507,
+     OR_ASSIGN = 508,
+     SUB_ASSIGN = 509,
+     LEFT_PAREN = 510,
+     RIGHT_PAREN = 511,
+     LEFT_BRACKET = 512,
+     RIGHT_BRACKET = 513,
+     LEFT_BRACE = 514,
+     RIGHT_BRACE = 515,
+     DOT = 516,
+     COMMA = 517,
+     COLON = 518,
+     EQUAL = 519,
+     SEMICOLON = 520,
+     BANG = 521,
+     DASH = 522,
+     TILDE = 523,
+     PLUS = 524,
+     STAR = 525,
+     SLASH = 526,
+     PERCENT = 527,
+     LEFT_ANGLE = 528,
+     RIGHT_ANGLE = 529,
+     VERTICAL_BAR = 530,
+     CARET = 531,
+     AMPERSAND = 532,
+     QUESTION = 533,
+     INVARIANT = 534,
+     PRECISE = 535,
+     HIGH_PRECISION = 536,
+     MEDIUM_PRECISION = 537,
+     LOW_PRECISION = 538,
+     PRECISION = 539,
+     PACKED = 540,
+     RESOURCE = 541,
+     SUPERP = 542
+   };
 #endif
 
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
 {
-#line 66 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+/* Line 2058 of yacc.c  */
+#line 66 "glslang.y"
 
     struct {
         glslang::TSourceLoc loc;
@@ -355,16 +373,28 @@ union YYSTYPE
         };
     } interm;
 
-#line 359 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
-};
 
-typedef union YYSTYPE YYSTYPE;
+/* Line 2058 of yacc.c  */
+#line 379 "glslang_tab.cpp.h"
+} YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
 int yyparse (glslang::TParseContext* pParseContext);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 0ef37c471bc99359ca70494bb86f28e38cb4d978..f8c963b72e7781ee6d1a3b608ff28720b6651753 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -163,6 +163,8 @@ bool TOutputTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node)
     case EOpGreaterThan:      out.debug << "Compare Greater Than";          break;
     case EOpLessThanEqual:    out.debug << "Compare Less Than or Equal";    break;
     case EOpGreaterThanEqual: out.debug << "Compare Greater Than or Equal"; break;
+    case EOpVectorEqual:      out.debug << "Equal";                         break;
+    case EOpVectorNotEqual:   out.debug << "NotEqual";                      break;
 
     case EOpVectorTimesScalar: out.debug << "vector-scale";          break;
     case EOpVectorTimesMatrix: out.debug << "vector-times-matrix";   break;
@@ -304,6 +306,11 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
     case EOpPackUint2x32:     out.debug << "packUint2x32";       break;
     case EOpUnpackUint2x32:   out.debug << "unpackUint2x32";     break;
 
+#ifdef AMD_EXTENSIONS
+    case EOpPackFloat2x16:    out.debug << "packFloat2x16";      break;
+    case EOpUnpackFloat2x16:  out.debug << "unpackFloat2x16";    break;
+#endif
+
     case EOpLength:         out.debug << "length";               break;
     case EOpNormalize:      out.debug << "normalize";            break;
     case EOpDPdx:           out.debug << "dPdx";                 break;
@@ -373,6 +380,21 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
 
     case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";         break;
     case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";         break;
+
+    case EOpConvBoolToFloat16:      out.debug << "Convert bool to float16";     break;
+    case EOpConvIntToFloat16:       out.debug << "Convert int to float16";      break;
+    case EOpConvUintToFloat16:      out.debug << "Convert uint to float16";     break;
+    case EOpConvFloatToFloat16:     out.debug << "Convert float to float16";    break;
+    case EOpConvDoubleToFloat16:    out.debug << "Convert double to float16";   break;
+    case EOpConvInt64ToFloat16:     out.debug << "Convert int64 to float16";    break;
+    case EOpConvUint64ToFloat16:    out.debug << "Convert uint64 to float16";   break;
+    case EOpConvFloat16ToBool:      out.debug << "Convert float16 to bool";     break;
+    case EOpConvFloat16ToInt:       out.debug << "Convert float16 to int";      break;
+    case EOpConvFloat16ToUint:      out.debug << "Convert float16 to uint";     break;
+    case EOpConvFloat16ToFloat:     out.debug << "Convert float16 to float";    break;
+    case EOpConvFloat16ToDouble:    out.debug << "Convert float16 to double";   break;
+    case EOpConvFloat16ToInt64:     out.debug << "Convert float16 to int64";    break;
+    case EOpConvFloat16ToUint64:    out.debug << "Convert float16 to uint64";   break;
 #endif
 
     default: out.debug.message(EPrefixError, "Bad unary op");
@@ -447,6 +469,21 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
     case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break;
     case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break;
     case EOpConstructDMat4x4: out.debug << "Construct dmat4";   break;
+#ifdef AMD_EXTENSIONS
+    case EOpConstructFloat16:   out.debug << "Construct float16_t"; break;
+    case EOpConstructF16Vec2:   out.debug << "Construct f16vec2";   break;
+    case EOpConstructF16Vec3:   out.debug << "Construct f16vec3";   break;
+    case EOpConstructF16Vec4:   out.debug << "Construct f16vec4";   break;
+    case EOpConstructF16Mat2x2: out.debug << "Construct f16mat2";   break;
+    case EOpConstructF16Mat2x3: out.debug << "Construct f16mat2x3"; break;
+    case EOpConstructF16Mat2x4: out.debug << "Construct f16mat2x4"; break;
+    case EOpConstructF16Mat3x2: out.debug << "Construct f16mat3x2"; break;
+    case EOpConstructF16Mat3x3: out.debug << "Construct f16mat3";   break;
+    case EOpConstructF16Mat3x4: out.debug << "Construct f16mat3x4"; break;
+    case EOpConstructF16Mat4x2: out.debug << "Construct f16mat4x2"; break;
+    case EOpConstructF16Mat4x3: out.debug << "Construct f16mat4x3"; break;
+    case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4";   break;
+#endif
     case EOpConstructStruct:  out.debug << "Construct structure";  break;
     case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
 
@@ -636,6 +673,9 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const
             break;
         case EbtFloat:
         case EbtDouble:
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+#endif
             {
                 const double value = constUnion[i].getDConst();
                 // Print infinity in a portable way, for test stability.
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..269d65495458a22c95d1ab368ef17a262ed97bc9
--- /dev/null
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -0,0 +1,404 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "../Include/Common.h"
+#include "../Include/InfoSink.h"
+#include "iomapper.h"
+#include "LiveTraverser.h"
+#include "localintermediate.h"
+
+#include "gl_types.h"
+
+#include <unordered_set>
+#include <unordered_map>
+
+//
+// Map IO bindings.
+//
+// High-level algorithm for one stage:
+//
+// 1. Traverse all code (live+dead) to find the explicitly provided bindings.
+//
+// 2. Traverse (just) the live code to determine which non-provided bindings
+//    require auto-numbering.  We do not auto-number dead ones.
+//
+// 3. Traverse all the code to apply the bindings:
+//    a. explicitly given bindings are offset according to their type
+//    b. implicit live bindings are auto-numbered into the holes, using
+//       any open binding slot.
+//    c. implicit dead bindings are left un-bound.
+//
+
+
+namespace glslang {
+
+struct TVarEntryInfo
+{
+    int             id;
+    TIntermSymbol*  symbol;
+    bool            live;
+    int             newBinding;
+    int             newSet;
+
+    struct TOrderById
+    {
+      inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
+      {
+        return l.id < r.id;
+      }
+    };
+
+    struct TOrderByPriority
+    {
+        // ordering:
+        // 1) has both binding and set
+        // 2) has binding but no set
+        // 3) has no binding but set
+        // 4) has no binding and no set
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
+        {
+            const TQualifier& lq = l.symbol->getQualifier();
+            const TQualifier& rq = r.symbol->getQualifier();
+
+            // simple rules:
+            // has binding gives 2 points
+            // has set gives 1 point
+            // who has the most points is more important.
+            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
+            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
+
+            if (lPoints == rPoints)
+              return l.id < r.id;
+            return lPoints > rPoints;
+        }
+    };
+};
+
+
+
+typedef std::vector<TVarEntryInfo> TVarLiveMap;
+
+class TVarGatherTraverser : public TLiveTraverser
+{
+public:
+    TVarGatherTraverser(const TIntermediate& i, TVarLiveMap& vars, bool traverseDeadCode)
+      : TLiveTraverser(i, traverseDeadCode, true, true, false)
+      , varLiveList(vars)
+    {
+    }
+
+
+    virtual void visitSymbol(TIntermSymbol* base)
+    {
+        if (base->getQualifier().storage == EvqUniform) {
+            TVarEntryInfo ent = { base->getId(), base, !traverseAll };
+            TVarLiveMap::iterator at = std::lower_bound(varLiveList.begin(), varLiveList.end(), ent, TVarEntryInfo::TOrderById());
+            if (at != varLiveList.end() && at->id == ent.id)
+              at->live = at->live || !traverseAll; // update live state
+            else
+              varLiveList.insert(at, ent);
+        }
+    }
+
+private:
+    TVarLiveMap&    varLiveList;
+};
+
+class TVarSetTraverser : public TLiveTraverser
+{
+public:
+    TVarSetTraverser(const TIntermediate& i, const TVarLiveMap& vars)
+      : TLiveTraverser(i, true, true, true, false)
+      , varLiveList(vars)
+    {
+    }
+
+
+    virtual void visitSymbol(TIntermSymbol* base)
+    {
+        TVarEntryInfo ent = { base->getId() };
+        TVarLiveMap::const_iterator at = std::lower_bound(varLiveList.begin(), varLiveList.end(), ent, TVarEntryInfo::TOrderById());
+        if (at == varLiveList.end())
+            return;
+        if (!(at->id == ent.id))
+            return;
+
+        if (at->newBinding != -1)
+            base->getWritableType().getQualifier().layoutBinding = at->newBinding;
+        if (at->newSet != -1)
+            base->getWritableType().getQualifier().layoutSet = at->newSet;
+    }
+
+  private:
+    const TVarLiveMap&    varLiveList;
+};
+
+struct TResolverAdaptor
+{
+    TResolverAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
+      : resolver(r)
+      , stage(s)
+      , infoSink(i)
+      , error(e)
+    {
+    }
+
+    inline void operator()(TVarEntryInfo& ent)
+    {
+        const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+        if (isValid) {
+            ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+            ent.newSet = resolver.resolveSet(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+
+            if (ent.newBinding != -1) {
+                if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
+                    TString err = "mapped binding out of range: " + ent.symbol->getName();
+
+                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                    error = true;
+                }
+            }
+            if (ent.newSet != -1) {
+                if (ent.newSet >= int(TQualifier::layoutSetEnd)) {
+                    TString err = "mapped set out of range: " + ent.symbol->getName();
+
+                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                    error = true;
+                }
+            }
+        } else {
+            TString errorMsg = "Invalid binding: " + ent.symbol->getName();
+            infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+            error = true;
+        }
+    }
+
+    EShLanguage     stage;
+    TIoMapResolver& resolver;
+    TInfoSink&      infoSink;
+    bool&           error;
+};
+
+/*
+ * Basic implementation of glslang::TIoMapResolver that replaces the
+ * previous offset behaviour.
+ * It does the same, uses the offsets for th corresponding uniform
+ * types. Also respects the EOptionAutoMapBindings flag and binds
+ * them if needed.
+ */
+struct TDefaultIoResolver : public glslang::TIoMapResolver
+{
+    int baseSamplerBinding;
+    int baseTextureBinding;
+    int baseImageBinding;
+    int baseUboBinding;
+    bool doAutoMapping;
+    typedef std::vector<int> TSlotSet;
+    typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
+    TSlotSetMap slots;
+
+    TSlotSet::iterator findSlot(int set, int slot)
+    {
+        return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
+    }
+
+    bool checkEmpty(int set, int slot)
+    {
+        TSlotSet::iterator at = findSlot(set, slot);
+        return !(at != slots[set].end() && *at == slot);
+    }
+
+    int reserveSlot(int set, int slot)
+    {
+        TSlotSet::iterator at = findSlot(set, slot);
+        slots[set].insert(at, slot);
+        return slot;
+    }
+
+    int getFreeSlot(int set, int base)
+    {
+        TSlotSet::iterator at = findSlot(set, base);
+        if (at == slots[set].end())
+            return reserveSlot(set, base);
+
+        // look in locksteps, if they not match, then there is a free slot
+        for (; at != slots[set].end(); ++at, ++base)
+            if (*at != base)
+                break;
+        return reserveSlot(set, base);
+    }
+
+    bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+    {
+        if (type.getQualifier().hasBinding()) {
+            int set;
+            if (type.getQualifier().hasSet())
+                set = type.getQualifier().layoutSet;
+            else
+                set = 0;
+
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isPureSampler())
+                    return checkEmpty(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isTexture())
+                    return checkEmpty(set, baseTextureBinding + type.getQualifier().layoutBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return checkEmpty(set, baseUboBinding + type.getQualifier().layoutBinding);
+        }
+        return true;
+    }
+
+    int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
+    {
+        int set;
+        if (type.getQualifier().hasSet())
+            set = type.getQualifier().layoutSet;
+        else
+            set = 0;
+
+        if (type.getQualifier().hasBinding()) {
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isImage())
+                    return reserveSlot(set, baseImageBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isPureSampler())
+                    return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isTexture())
+                    return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding);
+        } else if (is_live && doAutoMapping) {
+            // find free slot, the caller did make sure it passes all vars with binding
+            // first and now all are passed that do not have a binding and needs one
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isImage())
+                    return getFreeSlot(set, baseImageBinding);
+
+                if (sampler.isPureSampler())
+                    return getFreeSlot(set, baseSamplerBinding);
+
+                if (sampler.isTexture())
+                    return getFreeSlot(set, baseTextureBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return getFreeSlot(set, baseUboBinding);
+        }
+
+        return -1;
+    }
+
+    int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+    {
+        if (type.getQualifier().hasSet())
+            return type.getQualifier().layoutSet;
+        return 0;
+    }
+};
+
+// Map I/O variables to provided offsets, and make bindings for
+// unbound but live variables.
+//
+// Returns false if the input is too malformed to do this.
+bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSink &infoSink, TIoMapResolver *resolver)
+{
+    // Trivial return if there is nothing to do.
+    if (intermediate.getShiftSamplerBinding() == 0 &&
+        intermediate.getShiftTextureBinding() == 0 &&
+        intermediate.getShiftImageBinding() == 0 &&
+        intermediate.getShiftUboBinding() == 0 &&
+        intermediate.getAutoMapBindings() == false &&
+        resolver == nullptr)
+        return true;
+
+    if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
+        return false;
+
+    TIntermNode* root = intermediate.getTreeRoot();
+    if (root == nullptr)
+        return false;
+
+    // if no resolver is provided, use the default resolver with the given shifts and auto map settings
+    TDefaultIoResolver defaultResolver;
+    if (resolver == nullptr) {
+        defaultResolver.baseSamplerBinding = intermediate.getShiftSamplerBinding();
+        defaultResolver.baseTextureBinding = intermediate.getShiftTextureBinding();
+        defaultResolver.baseImageBinding = intermediate.getShiftImageBinding();
+        defaultResolver.baseUboBinding = intermediate.getShiftUboBinding();
+        defaultResolver.doAutoMapping = intermediate.getAutoMapBindings();
+
+        resolver = &defaultResolver;
+    }
+
+    TVarLiveMap varMap;
+    TVarGatherTraverser iter_binding_all(intermediate, varMap, true);
+    TVarGatherTraverser iter_binding_live(intermediate, varMap, false);
+
+    root->traverse(&iter_binding_all);
+    iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
+
+    while (!iter_binding_live.functions.empty()) {
+        TIntermNode* function = iter_binding_live.functions.back();
+        iter_binding_live.functions.pop_back();
+        function->traverse(&iter_binding_live);
+    }
+
+    // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
+    std::sort(varMap.begin(), varMap.end(), TVarEntryInfo::TOrderByPriority());
+
+    bool hadError = false;
+    TResolverAdaptor doResolve(stage, *resolver, infoSink, hadError);
+    std::for_each(varMap.begin(), varMap.end(), doResolve);
+
+    if (!hadError) {
+        // sort by id again, so we can use lower bound to find entries
+        std::sort(varMap.begin(), varMap.end(), TVarEntryInfo::TOrderById());
+        TVarSetTraverser iter_iomap(intermediate, varMap);
+        root->traverse(&iter_iomap);
+    }
+
+    return !hadError;
+}
+
+} // end namespace glslang
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
new file mode 100644
index 0000000000000000000000000000000000000000..ff47543d2c5f3a03930122c623ba4a052b615534
--- /dev/null
+++ b/glslang/MachineIndependent/iomapper.h
@@ -0,0 +1,63 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef _IOMAPPER_INCLUDED
+#define _IOMAPPER_INCLUDED
+
+#include "../Public/ShaderLang.h"
+
+//
+// A reflection database and its interface, consistent with the OpenGL API reflection queries.
+//
+
+class TInfoSink;
+
+namespace glslang {
+
+class TIntermediate;
+
+// I/O mapper
+class TIoMapper {
+public:
+    TIoMapper() {}
+    virtual ~TIoMapper() {}
+
+    // grow the reflection stage by stage
+    bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+};
+
+} // end namespace glslang
+
+#endif // _IOMAPPER_INCLUDED
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index f213dd6cf37c5e945921731f69b1f87e93a25ac7..3834fde32b0811f245370ba48deadf712eea6159 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -60,6 +60,13 @@ void TIntermediate::error(TInfoSink& infoSink, const char* message)
     ++numErrors;
 }
 
+// Link-time warning.
+void TIntermediate::warn(TInfoSink& infoSink, const char* message)
+{
+    infoSink.info.prefix(EPrefixWarning);
+    infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+}
+
 // TODO: 4.4 offset/align:  "Two blocks linked together in the same program with the same block 
 // name must have the exact same set of members qualified with offset and their integral-constant 
 // expression values must be the same, or a link-time error results."
@@ -75,19 +82,21 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
     if (source != unit.source)
         error(infoSink, "can't link compilation units from different source languages");
 
-    if (source == EShSourceHlsl && unit.getNumEntryPoints() > 0) {
+    if (unit.getNumEntryPoints() > 0) {
         if (getNumEntryPoints() > 0)
             error(infoSink, "can't handle multiple entry points per stage");
-        else
-            entryPointName = unit.entryPointName;
+        else {
+            entryPointName = unit.getEntryPointName();
+            entryPointMangledName = unit.getEntryPointMangledName();
+        }
     }
-    numEntryPoints += unit.numEntryPoints;
-    numErrors += unit.numErrors;
+    numEntryPoints += unit.getNumEntryPoints();
+    numErrors += unit.getNumErrors();
     numPushConstants += unit.numPushConstants;
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 
     if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger)
-        error(infoSink, "gl_FragCoord redeclarations must match across shaders\n");
+        error(infoSink, "gl_FragCoord redeclarations must match across shaders");
 
     if (! earlyFragmentTests)
         earlyFragmentTests = unit.earlyFragmentTests;
@@ -368,16 +377,24 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
 //
 // Also, lock in defaults of things not set, including array sizes.
 //
-void TIntermediate::finalCheck(TInfoSink& infoSink)
+void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
 {
-    if (source == EShSourceGlsl && numEntryPoints < 1)
-        error(infoSink, "Missing entry point: Each stage requires one entry point");
+    if (getTreeRoot() == nullptr)
+        return;
+
+    if (numEntryPoints < 1) {
+        if (source == EShSourceGlsl)
+            error(infoSink, "Missing entry point: Each stage requires one entry point");
+        else
+            warn(infoSink, "Entry point not found");
+    }
 
     if (numPushConstants > 1)
         error(infoSink, "Only one push_constant block is allowed per stage");
 
-    // recursion checking
+    // recursion and missing body checking
     checkCallGraphCycles(infoSink);
+    checkCallGraphBodies(infoSink, keepUncalled);
 
     // overlap/alias/missing I/O, etc.
     inOutLocationCheck(infoSink);
@@ -488,7 +505,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink)
 //
 void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink)
 {
-    // Reset everything, once.
+    // Clear fields we'll use for this.
     for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
         call->visited = false;
         call->currentPath = false;
@@ -563,6 +580,85 @@ void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink)
     } while (newRoot);  // redundant loop check; should always exit via the 'break' above
 }
 
+//
+// See which functions are reachable from the entry point and which have bodies.
+// Reachable ones with missing bodies are errors.
+// Unreachable bodies are dead code.
+//
+void TIntermediate::checkCallGraphBodies(TInfoSink& infoSink, bool keepUncalled)
+{
+    // Clear fields we'll use for this.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        call->visited = false;
+        call->calleeBodyPosition = -1;
+    }
+
+    // The top level of the AST includes function definitions (bodies).
+    // Compare these to function calls in the call graph.
+    // We'll end up knowing which have bodies, and if so,
+    // how to map the call-graph node to the location in the AST.
+    TIntermSequence &functionSequence = getTreeRoot()->getAsAggregate()->getSequence();
+    std::vector<bool> reachable(functionSequence.size(), true); // so that non-functions are reachable
+    for (int f = 0; f < (int)functionSequence.size(); ++f) {
+        glslang::TIntermAggregate* node = functionSequence[f]->getAsAggregate();
+        if (node && (node->getOp() == glslang::EOpFunction)) {
+            if (node->getName().compare(getEntryPointMangledName().c_str()) != 0)
+                reachable[f] = false; // so that function bodies are unreachable, until proven otherwise
+            for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+                if (call->callee == node->getName())
+                    call->calleeBodyPosition = f;
+            }
+        }
+    }
+
+    // Start call-graph traversal by visiting the entry point nodes.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        if (call->caller.compare(getEntryPointMangledName().c_str()) == 0)
+            call->visited = true;
+    }
+
+    // Propagate 'visited' through the call-graph to every part of the graph it
+    // can reach (seeded with the entry-point setting above).
+    bool changed;
+    do {
+        changed = false;
+        for (auto call1 = callGraph.begin(); call1 != callGraph.end(); ++call1) {
+            if (call1->visited) {
+                for (TGraph::iterator call2 = callGraph.begin(); call2 != callGraph.end(); ++call2) {
+                    if (! call2->visited) {
+                        if (call1->callee == call2->caller) {
+                            changed = true;
+                            call2->visited = true;
+                        }
+                    }
+                }
+            }
+        }
+    } while (changed);
+
+    // Any call-graph node set to visited but without a callee body is an error.
+    for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
+        if (call->visited) {
+            if (call->calleeBodyPosition == -1) {
+                error(infoSink, "No function definition (body) found: ");
+                infoSink.info << "    " << call->callee << "\n";
+            } else
+                reachable[call->calleeBodyPosition] = true;
+        }
+    }
+
+    // Bodies in the AST not reached by the call graph are dead;
+    // clear them out, since they can't be reached and also can't
+    // be translated further due to possibility of being ill defined.
+    if (! keepUncalled) {
+        for (int f = 0; f < (int)functionSequence.size(); ++f) {
+            if (! reachable[f])
+                functionSequence[f] = nullptr;
+        }
+        functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end());
+    }
+}
+
 //
 // Satisfy rules for location qualifiers on inputs and outputs
 //
@@ -950,6 +1046,9 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
     case EbtInt64:
     case EbtUint64:
     case EbtDouble:  size = 8; return 8;
+#ifdef AMD_EXTENSIONS
+    case EbtFloat16: size = 2; return 2;
+#endif
     default:         size = 4; return 4;
     }
 }
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 3ce615ee2d3885175edfc6c1e6a09e80da27c0fd..6f6db92d5fd6c1471e2996ea9deacf16797a5464 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -67,7 +67,9 @@ struct TVectorFields {
 // by TIntermediate.
 //
 
-// Used for detecting recursion:  A "call" is a pair: <caller, callee>.
+// Used for call-graph algorithms for detecting recursion, missing bodies, and dead bodies.
+// A "call" is a pair: <caller, callee>.
+// There can be duplicates. General assumption is the list is small.
 struct TCall {
     TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { }
     TString caller;
@@ -75,6 +77,7 @@ struct TCall {
     bool visited;
     bool currentPath;
     bool errorGiven;
+    int calleeBodyPosition;
 };
 
 // A generic 1-D range.
@@ -141,7 +144,14 @@ public:
         invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), inputPrimitive(ElgNone), outputPrimitive(ElgNone),
         pixelCenterInteger(false), originUpperLeft(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false), depthLayout(EldNone), depthReplacing(false), blendEquations(0),
-        multiStream(false), xfbMode(false)
+        multiStream(false), xfbMode(false),
+        shiftSamplerBinding(0),
+        shiftTextureBinding(0),
+        shiftImageBinding(0),
+        shiftUboBinding(0),
+        autoMapBindings(false),
+        flattenUniformArrays(false),
+        useUnknownFormat(false)
     {
         localSize[0] = 1;
         localSize[1] = 1;
@@ -163,6 +173,22 @@ public:
     void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
     const std::string& getEntryPointName() const { return entryPointName; }
     const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
+
+    void setShiftSamplerBinding(unsigned int shift) { shiftSamplerBinding = shift; }
+    unsigned int getShiftSamplerBinding() const { return shiftSamplerBinding; }
+    void setShiftTextureBinding(unsigned int shift) { shiftTextureBinding = shift; }
+    unsigned int getShiftTextureBinding() const { return shiftTextureBinding; }
+    void setShiftImageBinding(unsigned int shift) { shiftImageBinding = shift; }
+    unsigned int getShiftImageBinding() const { return shiftImageBinding; }
+    void setShiftUboBinding(unsigned int shift)     { shiftUboBinding = shift; }
+    unsigned int getShiftUboBinding()     const { return shiftUboBinding; }
+    void setAutoMapBindings(bool map)               { autoMapBindings = map; }
+    bool getAutoMapBindings()             const { return autoMapBindings; }
+    void setFlattenUniformArrays(bool flatten)      { flattenUniformArrays = flatten; }
+    bool getFlattenUniformArrays()        const { return flattenUniformArrays; }
+    void setNoStorageFormat(bool b)             { useUnknownFormat = b; }
+    bool getNoStorageFormat()             const { return useUnknownFormat; }
+    
     void setVersion(int v) { version = v; }
     int getVersion() const { return version; }
     void setProfile(EProfile p) { profile = p; }
@@ -184,6 +210,7 @@ public:
     TIntermSymbol* addSymbol(const TVariable&);
     TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
+    TIntermSymbol* addSymbol(const TIntermSymbol&);
     TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
     TIntermTyped* addShapeConversion(TOperator, const TType&, TIntermTyped*);
     TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
@@ -197,6 +224,7 @@ public:
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
     TIntermAggregate* makeAggregate(TIntermNode* node);
     TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&);
+    TIntermAggregate* makeAggregate(const TSourceLoc&);
     TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, TSourceLoc);
     bool areAllChildConst(TIntermAggregate* aggrNode);
     TIntermNode*  addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&);
@@ -218,6 +246,16 @@ public:
     TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&);
     TIntermTyped* addSwizzle(TVectorFields&, const TSourceLoc&);
 
+    // Low level functions to add nodes (no conversions or other higher level transformations)
+    // If a type is provided, the node's type will be set to it.
+    TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc) const;
+    TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc, const TType&) const;
+    TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const;
+    TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const;
+
+    // Add conversion from node's type to given basic type.
+    TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const;
+
     // Constant folding (in Constant.cpp)
     TIntermTyped* fold(TIntermAggregate* aggrNode);
     TIntermTyped* foldConstructor(TIntermAggregate* aggrNode);
@@ -229,7 +267,6 @@ public:
 
     // Linkage related
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
-    void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&);
 
     bool setInvocations(int i) 
@@ -327,7 +364,7 @@ public:
 
     void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee);
     void merge(TInfoSink&, TIntermediate&);
-    void finalCheck(TInfoSink&);
+    void finalCheck(TInfoSink&, bool keepUncalled);
 
     void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
     bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
@@ -348,25 +385,40 @@ public:
     int addXfbBufferOffset(const TType&);
     unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
     static int getBaseAlignment(const TType&, int& size, int& stride, bool std140, bool rowMajor);
+    bool promote(TIntermOperator*);
 
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
     void error(TInfoSink& infoSink, const char*);
+    void warn(TInfoSink& infoSink, const char*);
     void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects);
     void mergeImplicitArraySizes(TType&, const TType&);
     void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage);
     void checkCallGraphCycles(TInfoSink&);
+    void checkCallGraphBodies(TInfoSink&, bool keepUncalled);
     void inOutLocationCheck(TInfoSink&);
     TIntermSequence& findLinkerObjects() const;
     bool userOutputUsed() const;
     static int getBaseAlignmentScalar(const TType&, int& size);
     bool isSpecializationOperation(const TIntermOperator&) const;
-
+    bool promoteUnary(TIntermUnary&);
+    bool promoteBinary(TIntermBinary&);
+    void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
+    bool promoteAggregate(TIntermAggregate&);
+    
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
     std::string entryPointName;
     std::string entryPointMangledName;
+    unsigned int shiftSamplerBinding;
+    unsigned int shiftTextureBinding;
+    unsigned int shiftImageBinding;
+    unsigned int shiftUboBinding;
+    bool autoMapBindings;
+    bool flattenUniformArrays;
+    bool useUnknownFormat;
+
     EProfile profile;
     int version;
     SpvVersion spvVersion;
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index dc51682beb274634c8dbc4669f7ef7acd5f02463..acb57507a468886cd34944a5254f0c5a4bf1303f 100755
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -76,6 +76,9 @@ public:
     virtual void updateExtensionBehavior(int line, const char* const extension, const char* behavior);
     virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
     virtual void doubleCheck(const TSourceLoc&, const char* op);
+#ifdef AMD_EXTENSIONS
+    virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+#endif
     virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void spvRemoved(const TSourceLoc&, const char* op);
     virtual void vulkanRemoved(const TSourceLoc&, const char* op);
@@ -107,6 +110,7 @@ public:
     void getPreamble(std::string&);
     bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
     bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
+    bool isReadingHLSL()    const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
 
     TInfoSink& infoSink;
 
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index d28e7bebd872584090a2db51c9e160a87b08bc87..1985b8bccf71b9ab4a519e0abfd6d346193b953d 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -705,6 +705,9 @@ int TPpContext::CPPerror(TPpToken* ppToken)
     while (token != '\n' && token != EndOfInput) {
         if (token == PpAtomConstInt   || token == PpAtomConstUint   ||
             token == PpAtomConstInt64 || token == PpAtomConstUint64 ||
+#ifdef AMD_EXTENSIONS
+            token == PpAtomConstFloat16 ||
+#endif
             token == PpAtomConstFloat || token == PpAtomConstDouble) {
                 message.append(ppToken->name);
         } else if (token == PpAtomIdentifier || token == PpAtomConstString) {
@@ -739,6 +742,9 @@ int TPpContext::CPPpragma(TPpToken* ppToken)
         case PpAtomConstUint64:
         case PpAtomConstFloat:
         case PpAtomConstDouble:
+#ifdef AMD_EXTENSIONS
+        case PpAtomConstFloat16:
+#endif
             tokens.push_back(ppToken->name);
             break;
         default:
@@ -891,7 +897,9 @@ int TPpContext::readCPPline(TPpToken* ppToken)
             token = CPPifdef(0, ppToken);
             break;
         case PpAtomInclude:
-            parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
+            if(!parseContext.isReadingHLSL()) {
+                parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
+            }
             token = CPPinclude(ppToken);
             break;
         case PpAtomLine:
@@ -925,36 +933,38 @@ int TPpContext::readCPPline(TPpToken* ppToken)
     return token;
 }
 
-TPpContext::TokenStream* TPpContext::PrescanMacroArg(TokenStream* a, TPpToken* ppToken, bool newLineOkay)
+// Macro-expand a macro argument 'arg' to create 'expandedArg'.
+// Does not replace 'arg'.
+// Returns nullptr if no expanded argument is created.
+TPpContext::TokenStream* TPpContext::PrescanMacroArg(TokenStream* arg, TPpToken* ppToken, bool newLineOkay)
 {
     int token;
-    TokenStream *n;
-    RewindTokenStream(a);
+    RewindTokenStream(arg);
     do {
-        token = ReadToken(a, ppToken);
+        token = ReadToken(arg, ppToken);
         if (token == PpAtomIdentifier && LookUpSymbol(ppToken->atom))
             break;
     } while (token != EndOfInput);
 
     if (token == EndOfInput)
-        return a;
+        return nullptr;
 
-    n = new TokenStream;
+    TokenStream* expandedArg = new TokenStream;
     pushInput(new tMarkerInput(this));
-    pushTokenStreamInput(a);
+    pushTokenStreamInput(arg);
     while ((token = scanToken(ppToken)) != tMarkerInput::marker) {
         if (token == PpAtomIdentifier && MacroExpand(ppToken->atom, ppToken, false, newLineOkay) != 0)
             continue;
-        RecordToken(n, token, ppToken);
+        RecordToken(expandedArg, token, ppToken);
     }
     popInput();
-    delete a;
 
-    return n;
+    return expandedArg;
 }
 
 // 
-// Return the next token for a macro expansion, handling macro args.
+// Return the next token for a macro expansion, handling macro arguments,
+// whose semantics are dependent on being adjacent to ##.
 //
 int TPpContext::tMacroInput::scan(TPpToken* ppToken)
 {
@@ -963,6 +973,39 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
         token = pp->ReadToken(mac->body, ppToken);
     } while (token == ' ');  // handle white space in macro
 
+    // Hash operators basically turn off a round of macro substitution
+    // (the round done on the argument before the round done on the RHS of the
+    // macro definition):
+    //
+    // "A parameter in the replacement list, unless preceded by a # or ##
+    // preprocessing token or followed by a ## preprocessing token (see below),
+    // is replaced by the corresponding argument after all macros contained
+    // therein have been expanded."
+    //
+    // "If, in the replacement list, a parameter is immediately preceded or
+    // followed by a ## preprocessing token, the parameter is replaced by the
+    // corresponding argument's preprocessing token sequence."
+
+    bool pasting = false;
+    if (postpaste) {
+        // don't expand next token
+        pasting = true;
+        postpaste = false;
+    }
+
+    if (prepaste) {
+        // already know we should be on a ##, verify
+        assert(token == PpAtomPaste);
+        prepaste = false;
+        postpaste = true;
+    }
+
+    // see if are preceding a ##
+    if (peekMacPasting()) {
+        prepaste = true;
+        pasting = true;
+    }
+
     // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
     if (token == PpAtomIdentifier) {
         int i;
@@ -970,7 +1013,10 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
             if (mac->args[i] == ppToken->atom) 
                 break;
         if (i >= 0) {
-            pp->pushTokenStreamInput(args[i]);
+            TokenStream* arg = expandedArgs[i];
+            if (arg == nullptr || pasting)
+                arg = args[i];
+            pp->pushTokenStreamInput(arg, prepaste);
 
             return pp->scanToken(ppToken);
         }
@@ -982,6 +1028,31 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
     return token;
 }
 
+// See if the next non-white-space token in the macro is ##
+bool TPpContext::tMacroInput::peekMacPasting()
+{
+    // don't return early, have to restore this
+    size_t savePos = mac->body->current;
+
+    // skip white-space
+    int ltoken;
+    do {
+        ltoken = pp->lReadByte(mac->body);
+    } while (ltoken == ' ');
+
+    // check for ##
+    bool pasting = false;
+    if (ltoken == '#') {
+        ltoken = pp->lReadByte(mac->body);
+        if (ltoken == '#')
+            pasting = true;
+    }
+
+    mac->body->current = savePos;
+
+    return pasting;
+}
+
 // return a textual zero, for scanning a macro that was never defined
 int TPpContext::tZeroInput::scan(TPpToken* ppToken)
 {
@@ -1072,6 +1143,9 @@ int TPpContext::MacroExpand(int atom, TPpToken* ppToken, bool expandUndef, bool
         in->args.resize(in->mac->argc);
         for (int i = 0; i < in->mac->argc; i++)
             in->args[i] = new TokenStream;
+        in->expandedArgs.resize(in->mac->argc);
+        for (int i = 0; i < in->mac->argc; i++)
+            in->expandedArgs[i] = nullptr;
         int arg = 0;
         bool tokenRecorded = false;
         do {
@@ -1135,8 +1209,11 @@ int TPpContext::MacroExpand(int atom, TPpToken* ppToken, bool expandUndef, bool
             }
             parseContext.ppError(loc, "Too many args in macro", "macro expansion", GetAtomString(atom));
         }
+
+        // We need both expanded and non-expanded forms of the argument, for whether or
+        // not token pasting is in play.
         for (int i = 0; i < in->mac->argc; i++)
-            in->args[i] = PrescanMacroArg(in->args[i], ppToken, newLineOkay);
+            in->expandedArgs[i] = PrescanMacroArg(in->args[i], ppToken, newLineOkay);
     }
 
     pushInput(in);
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index 013c90e5675a5c7ff9184b8450a7f7e5386fd79f..707280f0f5869b4b7980e2c3e06c92e05315ec93 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -129,6 +129,7 @@ public:
     void setPreamble(const char* preamble, size_t length);
 
     const char* tokenize(TPpToken* ppToken);
+    int tokenPaste(TPpToken&);
 
     class tInput {
     public:
@@ -138,6 +139,8 @@ public:
         virtual int scan(TPpToken*) = 0;
         virtual int getch() = 0;
         virtual void ungetch() = 0;
+        virtual bool peekPasting() { return false; }          // true when about to see ##
+        virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define)
 
         // Will be called when we start reading tokens from this instance
         virtual void notifyActivated() {}
@@ -235,6 +238,8 @@ protected:
     }
     int  getChar() { return inputStack.back()->getch(); }
     void ungetChar() { inputStack.back()->ungetch(); }
+    bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
+    bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); }
 
     static const int maxMacroArgs = 64;
     static const int maxIfNesting = 64;
@@ -245,18 +250,29 @@ protected:
 
     class tMacroInput : public tInput {
     public:
-        tMacroInput(TPpContext* pp) : tInput(pp) { }
+        tMacroInput(TPpContext* pp) : tInput(pp), prepaste(false), postpaste(false) { }
         virtual ~tMacroInput()
         {
             for (size_t i = 0; i < args.size(); ++i)
                 delete args[i];
+            for (size_t i = 0; i < expandedArgs.size(); ++i)
+                delete expandedArgs[i];
         }
 
         virtual int scan(TPpToken*);
         virtual int getch() { assert(0); return EndOfInput; }
         virtual void ungetch() { assert(0); }
+        bool peekPasting() override { return prepaste; }
+        bool endOfReplacementList() override { return mac->body->current >= mac->body->data.size(); }
+
         MacroSymbol *mac;
         TVector<TokenStream*> args;
+        TVector<TokenStream*> expandedArgs;
+
+    protected:
+        bool peekMacPasting();
+        bool prepaste;         // true if we are just before ##
+        bool postpaste;        // true if we are right after ##
     };
 
     class tMarkerInput : public tInput {
@@ -329,17 +345,19 @@ protected:
     void RecordToken(TokenStream* pTok, int token, TPpToken* ppToken);
     void RewindTokenStream(TokenStream *pTok);
     int ReadToken(TokenStream* pTok, TPpToken* ppToken);
-    void pushTokenStreamInput(TokenStream *ts);
+    void pushTokenStreamInput(TokenStream *ts, bool pasting = false);
     void UngetToken(int token, TPpToken* ppToken);
     
     class tTokenInput : public tInput {
     public:
-        tTokenInput(TPpContext* pp, TokenStream* t) : tInput(pp), tokens(t) { }
+        tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) : tInput(pp), tokens(t), lastTokenPastes(prepasting) { }
         virtual int scan(TPpToken *);
         virtual int getch() { assert(0); return EndOfInput; }
         virtual void ungetch() { assert(0); }
+        virtual bool peekPasting() override;
     protected:
         TokenStream *tokens;
+        bool lastTokenPastes;     // true if the last token in the input is to be pasted, rather than consumed as a token
     };
 
     class tUngotTokenInput : public tInput {
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index 7daebb3dbac8d397a474095a63e7fcf117261b45..bc5c08661e7e2042145692b426694a54089c6a81 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -117,6 +117,10 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
     int declen;
     int str_len;
     int isDouble = 0;
+#ifdef AMD_EXTENSIONS
+    int isFloat16 = 0;
+    bool enableFloat16 = parseContext.version >= 450 && parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float);
+#endif
 
     declen = 0;
 
@@ -200,6 +204,28 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
                     len = 1,str_len=1;
                 }
             }
+#ifdef AMD_EXTENSIONS
+        } else if (enableFloat16 && (ch == 'h' || ch == 'H')) {
+            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
+            if (!HasDecimalOrExponent)
+                parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
+            int ch2 = getChar();
+            if (ch2 != 'f' && ch2 != 'F') {
+                ungetChar();
+                ungetChar();
+            }
+            else {
+                if (len < MaxTokenLength) {
+                    str[len++] = (char)ch;
+                    str[len++] = (char)ch2;
+                    isFloat16 = 1;
+                }
+                else {
+                    parseContext.ppError(ppToken->loc, "float literal too long", "", "");
+                    len = 1, str_len = 1;
+                }
+            }
+#endif
         } else if (ch == 'f' || ch == 'F') {
             parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
             if (! parseContext.relaxedErrors())
@@ -222,6 +248,10 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
 
     if (isDouble)
         return PpAtomConstDouble;
+#ifdef AMD_EXTENSIONS
+    else if (isFloat16)
+        return PpAtomConstFloat16;
+#endif
     else
         return PpAtomConstFloat;
 }
@@ -709,6 +739,11 @@ const char* TPpContext::tokenize(TPpToken* ppToken)
     for(;;) {
         token = scanToken(ppToken);
         ppToken->token = token;
+
+        // Handle token-pasting logic
+        token = tokenPaste(*ppToken);
+        ppToken->token = token;
+
         if (token == EndOfInput) {
             missingEndifCheck();
             return nullptr;
@@ -744,6 +779,9 @@ const char* TPpContext::tokenize(TPpToken* ppToken)
         case PpAtomConstInt64:
         case PpAtomConstUint64:
         case PpAtomConstDouble:
+#ifdef AMD_EXTENSIONS
+        case PpAtomConstFloat16:
+#endif
             tokenString = ppToken->name;
             break;
         case PpAtomConstString:
@@ -767,6 +805,47 @@ const char* TPpContext::tokenize(TPpToken* ppToken)
     }
 }
 
+//
+// Do all token-pasting related combining of two pasted tokens when getting a
+// stream of tokens from a replacement list. Degenerates to no processing if a
+// replacement list is not the source of the token stream.
+//
+int TPpContext::tokenPaste(TPpToken& ppToken)
+{
+    // starting with ## is illegal, skip to next token
+    if (ppToken.token == PpAtomPaste) {
+        parseContext.ppError(ppToken.loc, "unexpected location", "##", "");
+        ppToken.token = scanToken(&ppToken);
+    }
+
+    // ## can be chained, process all in the chain at once
+    while (peekPasting()) {
+        TPpToken pastedPpToken;
+
+        // next token has to be ##
+        pastedPpToken.token = scanToken(&pastedPpToken);
+        assert(pastedPpToken.token == PpAtomPaste);
+
+        if (endOfReplacementList()) {
+            parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", "");
+            break;
+        }
+
+        // get the token after the ##
+        scanToken(&pastedPpToken);
+
+        // combine the tokens
+        if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength)
+            parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
+        strncat(ppToken.name, pastedPpToken.name, MaxTokenLength - strlen(ppToken.name));
+        ppToken.atom = LookUpAddString(ppToken.name);
+        if (ppToken.token != PpAtomIdentifier)
+            parseContext.ppError(ppToken.loc, "only supported for preprocessing identifiers", "##", "");
+    }
+
+    return ppToken.token;
+}
+
 // Checks if we've seen balanced #if...#endif
 void TPpContext::missingEndifCheck()
 {
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index f5a0513c2b06c0c2a08c0a9c6b8d04cbcb5aeab0..724cedd0b8798f8aa278e407f9c01e99bc2a03f4 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -144,6 +144,9 @@ void TPpContext::RecordToken(TokenStream *pTok, int token, TPpToken* ppToken)
     case PpAtomConstUint64:
     case PpAtomConstFloat:
     case PpAtomConstDouble:
+#ifdef AMD_EXTENSIONS
+    case PpAtomConstFloat16:
+#endif
         str = ppToken->name;
         while (*str) {
             lAddByte(pTok, (unsigned char) *str);
@@ -157,7 +160,7 @@ void TPpContext::RecordToken(TokenStream *pTok, int token, TPpToken* ppToken)
 }
 
 /*
-* Reset a token stream in preperation for reading.
+* Reset a token stream in preparation for reading.
 */
 void TPpContext::RewindTokenStream(TokenStream *pTok)
 {
@@ -184,9 +187,7 @@ int TPpContext::ReadToken(TokenStream *pTok, TPpToken *ppToken)
             if (lReadByte(pTok) == '#') {
                 parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
                 parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
-                parseContext.error(ppToken->loc, "token pasting not implemented (internal error)", "##", "");
-                //return PpAtomPaste;
-                return ReadToken(pTok, ppToken);
+                ltoken = PpAtomPaste;
             } else
                 lUnreadByte(pTok);
         }
@@ -195,6 +196,9 @@ int TPpContext::ReadToken(TokenStream *pTok, TPpToken *ppToken)
     case PpAtomIdentifier:
     case PpAtomConstFloat:
     case PpAtomConstDouble:
+#ifdef AMD_EXTENSIONS
+    case PpAtomConstFloat16:
+#endif
     case PpAtomConstInt:
     case PpAtomConstUint:
     case PpAtomConstInt64:
@@ -221,14 +225,17 @@ int TPpContext::ReadToken(TokenStream *pTok, TPpToken *ppToken)
             break;
         case PpAtomConstFloat:
         case PpAtomConstDouble:
+#ifdef AMD_EXTENSIONS
+        case PpAtomConstFloat16:
+#endif
             ppToken->dval = atof(ppToken->name);
             break;
         case PpAtomConstInt:
             if (len > 0 && tokenText[0] == '0') {
                 if (len > 1 && (tokenText[1] == 'x' || tokenText[1] == 'X'))
-                    ppToken->ival = strtol(ppToken->name, 0, 16);
+                    ppToken->ival = (int)strtol(ppToken->name, 0, 16);
                 else
-                    ppToken->ival = strtol(ppToken->name, 0, 8);
+                    ppToken->ival = (int)strtol(ppToken->name, 0, 8);
             } else
                 ppToken->ival = atoi(ppToken->name);
             break;
@@ -270,9 +277,34 @@ int TPpContext::tTokenInput::scan(TPpToken* ppToken)
     return pp->ReadToken(tokens, ppToken);
 }
 
-void TPpContext::pushTokenStreamInput(TokenStream* ts)
+// We are pasting if the entire macro is preceding a pasting operator
+// (lastTokenPastes) and we are also on the last token.
+bool TPpContext::tTokenInput::peekPasting()
+{
+    if (! lastTokenPastes)
+        return false;
+    // Getting here means the last token will be pasted.
+
+    // Are we at the last non-whitespace token?
+    size_t savePos = tokens->current;
+    bool moreTokens = false;
+    do {
+        int byte = pp->lReadByte(tokens);
+        if (byte == EndOfInput)
+            break;
+        if (byte != ' ') {
+            moreTokens = true;
+            break;
+        }
+    } while (true);
+    tokens->current = savePos;
+
+    return !moreTokens;
+}
+
+void TPpContext::pushTokenStreamInput(TokenStream* ts, bool prepasting)
 {
-    pushInput(new tTokenInput(this, ts));
+    pushInput(new tTokenInput(this, ts, prepasting));
     RewindTokenStream(ts);
 }
 
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.h b/glslang/MachineIndependent/preprocessor/PpTokens.h
index fd4d40767c37477a439b379fcb608661967862d5..c84431d3685ac340385e9179f9ecb89547e01611 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -123,6 +123,9 @@ enum EFixedAtoms {
     PpAtomConstUint64,
     PpAtomConstFloat,
     PpAtomConstDouble,
+#ifdef AMD_EXTENSIONS
+    PpAtomConstFloat16,
+#endif
     PpAtomConstString,
 
     // Identifiers 
diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp
index e599f4d9ff105259bbf9e08fe8311e3fa68764b7..caa6e200d5e97c47840492e88fd23407ad99ffc1 100644
--- a/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -670,7 +670,7 @@ protected:
             // Gets the struct dereference index that leads to 'precise' object.
             ObjectAccessChain precise_accesschain_index_str =
                 getFrontElement(remained_accesschain_);
-            unsigned precise_accesschain_index = strtoul(precise_accesschain_index_str.c_str(), nullptr, 10);
+            unsigned precise_accesschain_index = (unsigned)strtoul(precise_accesschain_index_str.c_str(), nullptr, 10);
             // Gets the node pointed by the access chain index extracted before.
             glslang::TIntermTyped* potential_precise_node =
                 node->getSequence()[precise_accesschain_index]->getAsTyped();
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index d557765635464291699bdbebcccead3a93d46698..31bd1725571665d9c9ca1e440a1d2698e2de2156 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -109,7 +109,7 @@ public:
             TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
             if (it == reflection.nameToIndex.end()) {
                 reflection.nameToIndex[name] = (int)reflection.indexToAttribute.size();
-                reflection.indexToAttribute.push_back(TObjectReflection(name, 0, mapToGlType(type), 0, 0));
+                reflection.indexToAttribute.push_back(TObjectReflection(name, type, 0, mapToGlType(type), 0, 0));
             }
         }
     }
@@ -245,7 +245,8 @@ public:
         TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
         if (it == reflection.nameToIndex.end()) {
             reflection.nameToIndex[name] = (int)reflection.indexToUniform.size();
-            reflection.indexToUniform.push_back(TObjectReflection(name, offset, mapToGlType(*terminalType), arraySize, blockIndex));
+            reflection.indexToUniform.push_back(TObjectReflection(name, *terminalType, offset, mapToGlType(*terminalType),
+                                                                  arraySize, blockIndex));
         } else if (arraySize > 1) {
             int& reflectedArraySize = reflection.indexToUniform[it->second].size;
             reflectedArraySize = std::max(arraySize, reflectedArraySize);
@@ -296,12 +297,18 @@ public:
         if (block) {
             offset = 0;
             anonymous = IsAnonymous(base->getName());
+
+            const TString& blockName = base->getType().getTypeName();
+
             if (base->getType().isArray()) {
+                TType derefType(base->getType(), 0);
+
                 assert(! anonymous);
                 for (int e = 0; e < base->getType().getCumulativeArraySize(); ++e)
-                    blockIndex = addBlockName(base->getType().getTypeName() + "[" + String(e) + "]", getBlockSize(base->getType()));
+                    blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType,
+                                              getBlockSize(base->getType()));
             } else
-                blockIndex = addBlockName(base->getType().getTypeName(), getBlockSize(base->getType()));
+                blockIndex = addBlockName(blockName, base->getType(), getBlockSize(base->getType()));
         }
 
         // Process the dereference chain, backward, accumulating the pieces for later forward traversal.
@@ -334,14 +341,14 @@ public:
         blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize);
     }
 
-    int addBlockName(const TString& name, int size)
+    int addBlockName(const TString& name, const TType& type, int size)
     {
         int blockIndex;
         TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
         if (reflection.nameToIndex.find(name) == reflection.nameToIndex.end()) {
             blockIndex = (int)reflection.indexToUniformBlock.size();
             reflection.nameToIndex[name] = blockIndex;
-            reflection.indexToUniformBlock.push_back(TObjectReflection(name, -1, -1, size, -1));
+            reflection.indexToUniformBlock.push_back(TObjectReflection(name, type, -1, -1, size, -1));
         } else
             blockIndex = it->second;
 
@@ -529,6 +536,9 @@ public:
             switch (type.getBasicType()) {
             case EbtFloat:      return GL_FLOAT_VEC2                  + offset;
             case EbtDouble:     return GL_DOUBLE_VEC2                 + offset;
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:    return GL_FLOAT16_VEC2_NV             + offset;
+#endif
             case EbtInt:        return GL_INT_VEC2                    + offset;
             case EbtUint:       return GL_UNSIGNED_INT_VEC2           + offset;
             case EbtInt64:      return GL_INT64_ARB                   + offset;
@@ -588,6 +598,32 @@ public:
                     default:   return 0;
                     }
                 }
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+                switch (type.getMatrixCols()) {
+                case 2:
+                    switch (type.getMatrixRows()) {
+                    case 2:    return GL_FLOAT16_MAT2_AMD;
+                    case 3:    return GL_FLOAT16_MAT2x3_AMD;
+                    case 4:    return GL_FLOAT16_MAT2x4_AMD;
+                    default:   return 0;
+                    }
+                case 3:
+                    switch (type.getMatrixRows()) {
+                    case 2:    return GL_FLOAT16_MAT3x2_AMD;
+                    case 3:    return GL_FLOAT16_MAT3_AMD;
+                    case 4:    return GL_FLOAT16_MAT3x4_AMD;
+                    default:   return 0;
+                    }
+                case 4:
+                    switch (type.getMatrixRows()) {
+                    case 2:    return GL_FLOAT16_MAT4x2_AMD;
+                    case 3:    return GL_FLOAT16_MAT4x3_AMD;
+                    case 4:    return GL_FLOAT16_MAT4_AMD;
+                    default:   return 0;
+                    }
+                }
+#endif
             default:
                 return 0;
             }
@@ -596,6 +632,9 @@ public:
             switch (type.getBasicType()) {
             case EbtFloat:      return GL_FLOAT;
             case EbtDouble:     return GL_DOUBLE;
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:    return GL_FLOAT16_NV;
+#endif
             case EbtInt:        return GL_INT;
             case EbtUint:       return GL_UNSIGNED_INT;
             case EbtInt64:      return GL_INT64_ARB;
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 8880602c99df84b1d105990b5d7494a15af7db6e..13f5177c0f44d160535c27b5a3a4b4e659bd96f5 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -1,5 +1,5 @@
 //
-//Copyright (C) 2013 LunarG, Inc.
+//Copyright (C) 2013-2016 LunarG, Inc.
 //
 //All rights reserved.
 //
@@ -37,6 +37,7 @@
 #define _REFLECTION_INCLUDED
 
 #include "../Public/ShaderLang.h"
+#include "../Include/Types.h"
 
 #include <list>
 #include <set>
@@ -54,20 +55,41 @@ class TReflectionTraverser;
 // Data needed for just a single object at the granularity exchanged by the reflection API
 class TObjectReflection {
 public:
-    TObjectReflection(const TString& pName, int pOffset, int pGLDefineType, int pSize, int pIndex) : 
-        name(pName), offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex) { }
-    void dump() const { printf("%s: offset %d, type %x, size %d, index %d\n", name.c_str(), offset, glDefineType, size, index); }
+    TObjectReflection(const TString& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex) : 
+        name(pName), type(pType.clone()),
+        offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex) { }
+
+    void dump() const {
+        printf("%s: offset %d, type %x, size %d, index %d, binding %d\n",
+               name.c_str(), offset, glDefineType, size, index, getBinding() );
+    }
+
+    const TType* const getType() const { return type; }
+
     TString name;
     int offset;
     int glDefineType;
     int size;         // data size in bytes for a block, array size for a (non-block) object that's an array
     int index;
+
+    static TObjectReflection badReflection() { return TObjectReflection(); }
+
+protected:
+    int getBinding() const {
+        if (type == nullptr || type->getQualifier().layoutBinding == TQualifier::layoutBindingEnd)
+            return -1;
+        return type->getQualifier().layoutBinding;
+    }
+
+    TObjectReflection() : type(nullptr), offset(-1), glDefineType(-1), size(-1), index(-1) { }
+
+    const TType* type;
 };
 
 // The full reflection database
 class TReflection {
 public:
-    TReflection() : badReflection("__bad__", -1, -1, -1, -1) {}
+    TReflection() : badReflection(TObjectReflection::badReflection()) { }
     virtual ~TReflection() {}
 
     // grow the reflection stage by stage
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index 8e583ea78f0fe1e4fe17b841639940fb48fed331..7e84d4eb2335c4e281261ac8e702f4ba2ac1084b 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -165,11 +165,29 @@ bool OS_FreeTLSIndex(OS_TLSIndex nIndex)
 		return false;
 }
 
-// TODO: non-windows: if we need these on linux, flesh them out
-void InitGlobalLock() { }
-void GetGlobalLock() { }
-void ReleaseGlobalLock() { }
+namespace {
+pthread_mutex_t gMutex;
+}
+
+void InitGlobalLock()
+{
+  pthread_mutexattr_t mutexattr;
+  pthread_mutexattr_init(&mutexattr);
+  pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
+  pthread_mutex_init(&gMutex, &mutexattr);
+}
+
+void GetGlobalLock()
+{
+  pthread_mutex_lock(&gMutex);
+}
+
+void ReleaseGlobalLock()
+{
+  pthread_mutex_unlock(&gMutex);
+}
 
+// TODO: non-windows: if we need these on linux, flesh them out
 void* OS_CreateThread(TThreadEntrypoint /*entry*/)
 {
     return 0;
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index d1121595866f5bb62cdfc361349034f95ccaed70..afdc7d1eb26e3b0f160c980c85c3a2b01c2d349a 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -1,5 +1,7 @@
 //
 //Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+//Copyright (C) 2013-2016 LunarG, Inc.
+//
 //All rights reserved.
 //
 //Redistribution and use in source and binary forms, with or without
@@ -101,6 +103,8 @@ typedef enum {
 
 namespace glslang {
 
+class TType;
+
 typedef enum {
     EShSourceNone,
     EShSourceGlsl,
@@ -142,6 +146,7 @@ enum EShMessages {
     EShMsgOnlyPreprocessor = (1 << 5),  // only print out errors produced by the preprocessor
     EShMsgReadHlsl         = (1 << 6),  // use HLSL parsing rules and semantics
     EShMsgCascadingErrors  = (1 << 7),  // get cascading errors; risks error-recovery issues, instead of an early exit
+    EShMsgKeepUncalled     = (1 << 8),  // for testing, don't eliminate uncalled functions
 };
 
 //
@@ -300,6 +305,14 @@ public:
         const char* const* s, const int* l, const char* const* names, int n);
     void setPreamble(const char* s) { preamble = s; }
     void setEntryPoint(const char* entryPoint);
+    void setSourceEntryPoint(const char* sourceEntryPointName);
+    void setShiftSamplerBinding(unsigned int base);
+    void setShiftTextureBinding(unsigned int base);
+    void setShiftImageBinding(unsigned int base);
+    void setShiftUboBinding(unsigned int base);
+    void setAutoMapBindings(bool map);
+    void setFlattenUniformArrays(bool flatten);
+    void setNoStorageFormat(bool useUnknownFormat);
 
     // Interface to #include handlers.
     //
@@ -363,9 +376,7 @@ public:
         // Signals that the parser will no longer use the contents of the
         // specified IncludeResult.
         virtual void releaseInclude(IncludeResult* result) = 0;
-#ifdef __ANDROID__
-        virtual ~Includer() {} // Pacify -Werror=non-virtual-dtor
-#endif
+        virtual ~Includer() {}
     };
 
     // Returns an error message for any #include directive.
@@ -426,6 +437,9 @@ protected:
     const char* preamble;
     int numStrings;
 
+    // a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
+    std::string sourceEntryPointName;
+
     friend class TProgram;
 
 private:
@@ -433,8 +447,38 @@ private:
 };
 
 class TReflection;
+class TIoMapper;
+
+// Allows to customize the binding layout after linking.
+// All used uniform variables will invoke at least validateBinding.
+// If validateBinding returned true then the other resolveBinding
+// and resolveSet are invoked to resolve the binding and descriptor
+// set index respectively.
+// Invocations happen in a particular order:
+// 1) var with binding and set already defined
+// 2) var with binding but no set defined
+// 3) var with set but no binding defined
+// 4) var with no binding and no set defined
+//
+// NOTE: that still limit checks are applied to bindings and sets
+// and may result in an error.
+class TIoMapResolver
+{
+public:
+  virtual ~TIoMapResolver() {}
+
+  // Should return true if the resulting/current binding would be ok.
+  // Basic idea is to do aliasing binding checks with this.
+  virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+  // Should return a value >= 0 if the current binding should be overridden.
+  // Return -1 if the current binding (including no binding) should be kept.
+  virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+  // Should return a value >= 0 if the current set should be overriden.
+  // Return -1 if the current set (including no set) should be kept.
+  virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+};
 
-// Make one TProgram per set of shaders that will get linked together.  Add all 
+// Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
 // for all shaders, call link().
 //
@@ -455,21 +499,30 @@ public:
 
     // Reflection Interface
     bool buildReflection();                          // call first, to do liveness analysis, index mapping, etc.; returns false on failure
-    int getNumLiveUniformVariables();                // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
-    int getNumLiveUniformBlocks();                   // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
-    const char* getUniformName(int index);           // can be used for "name" part of glGetActiveUniform()
-    const char* getUniformBlockName(int blockIndex); // can be used for glGetActiveUniformBlockName()
-    int getUniformBlockSize(int blockIndex);         // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
-    int getUniformIndex(const char* name);           // can be used for glGetUniformIndices()
-    int getUniformBlockIndex(int index);             // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
-    int getUniformType(int index);                   // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
-    int getUniformBufferOffset(int index);           // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
-    int getUniformArraySize(int index);              // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
-    int getNumLiveAttributes();                      // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
-    const char *getAttributeName(int index);         // can be used for glGetActiveAttrib()
-    int getAttributeType(int index);                 // can be used for glGetActiveAttrib()
+    int getNumLiveUniformVariables() const;                // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
+    int getNumLiveUniformBlocks() const;                   // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
+    const char* getUniformName(int index) const;           // can be used for "name" part of glGetActiveUniform()
+    const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName()
+    int getUniformBlockSize(int blockIndex) const;         // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
+    int getUniformIndex(const char* name) const;           // can be used for glGetUniformIndices()
+    int getUniformBlockIndex(int index) const;             // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
+    int getUniformType(int index) const;                   // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
+    int getUniformBufferOffset(int index) const;           // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
+    int getUniformArraySize(int index) const;              // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
+    int getNumLiveAttributes() const;                      // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
+    const char *getAttributeName(int index) const;         // can be used for glGetActiveAttrib()
+    int getAttributeType(int index) const;                 // can be used for glGetActiveAttrib()
+    const TType* getUniformTType(int index) const;         // returns a TType*
+    const TType* getUniformBlockTType(int index) const;    // returns a TType*    
+    const TType* getAttributeTType(int index) const;       // returns a TType*
+
     void dumpReflection();
 
+    // I/O mapping: apply base offsets and map live unbound variables
+    // If resolver is not provided it uses the previous approach
+    // and respects auto assignment and offsets.
+    bool mapIO(TIoMapResolver* resolver = NULL);
+
 protected:
     bool linkStage(EShLanguage, EShMessages);
 
@@ -479,6 +532,7 @@ protected:
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     TInfoSink* infoSink;
     TReflection* reflection;
+    TIoMapper* ioMapper;
     bool linked;
 
 private:
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 7c31df01348d10a970e22efad3c0b41def4a32c1..70705337f52a8bb14862536fa85ebfed262d69e1 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -43,7 +43,7 @@ using CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
 TEST_P(CompileToAstTest, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::OpenGL,
                             Target::AST);
 }
@@ -178,6 +178,7 @@ INSTANTIATE_TEST_CASE_P(
         "syntaxError.frag",
         "test.frag",
         "texture.frag",
+        "tokenPaste.vert",
         "types.frag",
         "uniformArray.frag",
         "variableArrayIndex.frag",
diff --git a/gtests/BuiltInResource.FromFile.cpp b/gtests/BuiltInResource.FromFile.cpp
index 4d68d873bbfa754883e47cfeff45283fd0a24220..da81fe98c39fd289d30d34cffd5af1603fbdc0c8 100644
--- a/gtests/BuiltInResource.FromFile.cpp
+++ b/gtests/BuiltInResource.FromFile.cpp
@@ -46,7 +46,7 @@ using DefaultResourceTest = GlslangTest<::testing::Test>;
 
 TEST_F(DefaultResourceTest, FromFile)
 {
-    const std::string path = GLSLANG_TEST_DIRECTORY "/baseResults/test.conf";
+    const std::string path = GlobalTestSettings.testRoot + "/baseResults/test.conf";
     std::string expectedConfig;
     tryLoadFile(path, "expected resource limit", &expectedConfig);
     const std::string realConfig = glslang::GetDefaultTBuiltInResourceString();
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index 8a91eef3a8a2065d07bbbe11e3953dc618a3d7bd..268caff7f934d2100616c668cea03f89fc4eee2b 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -14,6 +14,7 @@ if (TARGET gmock)
     ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
@@ -28,8 +29,12 @@ if (TARGET gmock)
   install(TARGETS glslangtests
         RUNTIME DESTINATION bin)
 
+  set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
+  # Supply a default test root directory, so that manual testing
+  # doesn't have to specify the --test-root option in the normal
+  # case that you want to use the tests from the same source tree.
   target_compile_definitions(glslangtests
-    PRIVATE GLSLANG_TEST_DIRECTORY="${CMAKE_CURRENT_SOURCE_DIR}/../Test")
+    PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
   target_include_directories(glslangtests PRIVATE
     ${CMAKE_CURRENT_SOURCE_DIR}
     ${PROJECT_SOURCE_DIR}
@@ -38,5 +43,6 @@ if (TARGET gmock)
   target_link_libraries(glslangtests PRIVATE
     SPVRemapper glslang OSDependent OGLCompiler HLSL glslang
     SPIRV glslang-default-resource-limits gmock)
-  add_test(NAME glslang-gtests COMMAND glslangtests)
+  add_test(NAME glslang-gtests
+	   COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
 endif()
diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp
index 7bc6a70e2139a48e3d46ea10dfb16c6ddbae40f1..a6e93dcfa9beb210b0dbe082e073489b1a7c113e 100644
--- a/gtests/Config.FromFile.cpp
+++ b/gtests/Config.FromFile.cpp
@@ -54,8 +54,8 @@ TEST_P(ConfigTest, FromFile)
 
     // Get the contents for input shader and limit configurations.
     std::string shaderContents, configContents;
-    tryLoadFile(GLSLANG_TEST_DIRECTORY "/" + testCase.input, "input", &shaderContents);
-    tryLoadFile(GLSLANG_TEST_DIRECTORY "/" + testCase.config, "limits config", &configContents);
+    tryLoadFile(GlobalTestSettings.testRoot + "/" + testCase.input, "input", &shaderContents);
+    tryLoadFile(GlobalTestSettings.testRoot + "/" + testCase.config, "limits config", &configContents);
 
     // Decode limit configurations.
     TBuiltInResource resources = {};
@@ -86,7 +86,7 @@ TEST_P(ConfigTest, FromFile)
 
     // Check with expected results.
     const std::string expectedOutputFname =
-        GLSLANG_TEST_DIRECTORY "/baseResults/" + testCase.output;
+        GlobalTestSettings.testRoot + "/baseResults/" + testCase.output;
     std::string expectedOutput;
     tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
diff --git a/gtests/HexFloat.cpp b/gtests/HexFloat.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ddbee1f4641e14473487fa7bde113f31d21d8716
--- /dev/null
+++ b/gtests/HexFloat.cpp
@@ -0,0 +1,1231 @@
+// Copyright (c) 2015-2016 The Khronos Group Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <cfloat>
+#include <cmath>
+#include <cstdio>
+#include <sstream>
+#include <string>
+#include <tuple>
+
+#include <gmock/gmock.h>
+#include "SPIRV/hex_float.h"
+
+namespace {
+using ::testing::Eq;
+using spvutils::BitwiseCast;
+using spvutils::Float16;
+using spvutils::FloatProxy;
+using spvutils::HexFloat;
+using spvutils::ParseNormalFloat;
+
+// In this file "encode" means converting a number into a string,
+// and "decode" means converting a string into a number.
+
+using HexFloatTest =
+    ::testing::TestWithParam<std::pair<FloatProxy<float>, std::string>>;
+using DecodeHexFloatTest =
+    ::testing::TestWithParam<std::pair<std::string, FloatProxy<float>>>;
+using HexDoubleTest =
+    ::testing::TestWithParam<std::pair<FloatProxy<double>, std::string>>;
+using DecodeHexDoubleTest =
+    ::testing::TestWithParam<std::pair<std::string, FloatProxy<double>>>;
+
+// Hex-encodes a float value.
+template <typename T>
+std::string EncodeViaHexFloat(const T& value) {
+  std::stringstream ss;
+  ss << spvutils::HexFloat<T>(value);
+  return ss.str();
+}
+
+// The following two tests can't be DRY because they take different parameter
+// types.
+
+TEST_P(HexFloatTest, EncodeCorrectly) {
+  EXPECT_THAT(EncodeViaHexFloat(GetParam().first), Eq(GetParam().second));
+}
+
+TEST_P(HexDoubleTest, EncodeCorrectly) {
+  EXPECT_THAT(EncodeViaHexFloat(GetParam().first), Eq(GetParam().second));
+}
+
+// Decodes a hex-float string.
+template <typename T>
+FloatProxy<T> Decode(const std::string& str) {
+  spvutils::HexFloat<FloatProxy<T>> decoded(0.f);
+  EXPECT_TRUE((std::stringstream(str) >> decoded).eof());
+  return decoded.value();
+}
+
+TEST_P(HexFloatTest, DecodeCorrectly) {
+  EXPECT_THAT(Decode<float>(GetParam().second), Eq(GetParam().first));
+}
+
+TEST_P(HexDoubleTest, DecodeCorrectly) {
+  EXPECT_THAT(Decode<double>(GetParam().second), Eq(GetParam().first));
+}
+
+INSTANTIATE_TEST_CASE_P(
+    Float32Tests, HexFloatTest,
+    ::testing::ValuesIn(std::vector<std::pair<FloatProxy<float>, std::string>>({
+        {0.f, "0x0p+0"},
+        {1.f, "0x1p+0"},
+        {2.f, "0x1p+1"},
+        {3.f, "0x1.8p+1"},
+        {0.5f, "0x1p-1"},
+        {0.25f, "0x1p-2"},
+        {0.75f, "0x1.8p-1"},
+        {-0.f, "-0x0p+0"},
+        {-1.f, "-0x1p+0"},
+        {-0.5f, "-0x1p-1"},
+        {-0.25f, "-0x1p-2"},
+        {-0.75f, "-0x1.8p-1"},
+
+        // Larger numbers
+        {512.f, "0x1p+9"},
+        {-512.f, "-0x1p+9"},
+        {1024.f, "0x1p+10"},
+        {-1024.f, "-0x1p+10"},
+        {1024.f + 8.f, "0x1.02p+10"},
+        {-1024.f - 8.f, "-0x1.02p+10"},
+
+        // Small numbers
+        {1.0f / 512.f, "0x1p-9"},
+        {1.0f / -512.f, "-0x1p-9"},
+        {1.0f / 1024.f, "0x1p-10"},
+        {1.0f / -1024.f, "-0x1p-10"},
+        {1.0f / 1024.f + 1.0f / 8.f, "0x1.02p-3"},
+        {1.0f / -1024.f - 1.0f / 8.f, "-0x1.02p-3"},
+
+        // lowest non-denorm
+        {float(ldexp(1.0f, -126)), "0x1p-126"},
+        {float(ldexp(-1.0f, -126)), "-0x1p-126"},
+
+        // Denormalized values
+        {float(ldexp(1.0f, -127)), "0x1p-127"},
+        {float(ldexp(1.0f, -127) / 2.0f), "0x1p-128"},
+        {float(ldexp(1.0f, -127) / 4.0f), "0x1p-129"},
+        {float(ldexp(1.0f, -127) / 8.0f), "0x1p-130"},
+        {float(ldexp(-1.0f, -127)), "-0x1p-127"},
+        {float(ldexp(-1.0f, -127) / 2.0f), "-0x1p-128"},
+        {float(ldexp(-1.0f, -127) / 4.0f), "-0x1p-129"},
+        {float(ldexp(-1.0f, -127) / 8.0f), "-0x1p-130"},
+
+        {float(ldexp(1.0, -127) + (ldexp(1.0, -127) / 2.0f)), "0x1.8p-127"},
+        {float(ldexp(1.0, -127) / 2.0 + (ldexp(1.0, -127) / 4.0f)),
+         "0x1.8p-128"},
+
+    })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float32NanTests, HexFloatTest,
+    ::testing::ValuesIn(std::vector<std::pair<FloatProxy<float>, std::string>>({
+        // Various NAN and INF cases
+        {uint32_t(0xFF800000), "-0x1p+128"},         // -inf
+        {uint32_t(0x7F800000), "0x1p+128"},          // inf
+        {uint32_t(0xFFC00000), "-0x1.8p+128"},       // -nan
+        {uint32_t(0xFF800100), "-0x1.0002p+128"},    // -nan
+        {uint32_t(0xFF800c00), "-0x1.0018p+128"},    // -nan
+        {uint32_t(0xFF80F000), "-0x1.01ep+128"},     // -nan
+        {uint32_t(0xFFFFFFFF), "-0x1.fffffep+128"},  // -nan
+        {uint32_t(0x7FC00000), "0x1.8p+128"},        // +nan
+        {uint32_t(0x7F800100), "0x1.0002p+128"},     // +nan
+        {uint32_t(0x7f800c00), "0x1.0018p+128"},     // +nan
+        {uint32_t(0x7F80F000), "0x1.01ep+128"},      // +nan
+        {uint32_t(0x7FFFFFFF), "0x1.fffffep+128"},   // +nan
+    })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float64Tests, HexDoubleTest,
+    ::testing::ValuesIn(
+        std::vector<std::pair<FloatProxy<double>, std::string>>({
+            {0., "0x0p+0"},
+            {1., "0x1p+0"},
+            {2., "0x1p+1"},
+            {3., "0x1.8p+1"},
+            {0.5, "0x1p-1"},
+            {0.25, "0x1p-2"},
+            {0.75, "0x1.8p-1"},
+            {-0., "-0x0p+0"},
+            {-1., "-0x1p+0"},
+            {-0.5, "-0x1p-1"},
+            {-0.25, "-0x1p-2"},
+            {-0.75, "-0x1.8p-1"},
+
+            // Larger numbers
+            {512., "0x1p+9"},
+            {-512., "-0x1p+9"},
+            {1024., "0x1p+10"},
+            {-1024., "-0x1p+10"},
+            {1024. + 8., "0x1.02p+10"},
+            {-1024. - 8., "-0x1.02p+10"},
+
+            // Large outside the range of normal floats
+            {ldexp(1.0, 128), "0x1p+128"},
+            {ldexp(1.0, 129), "0x1p+129"},
+            {ldexp(-1.0, 128), "-0x1p+128"},
+            {ldexp(-1.0, 129), "-0x1p+129"},
+            {ldexp(1.0, 128) + ldexp(1.0, 90), "0x1.0000000004p+128"},
+            {ldexp(1.0, 129) + ldexp(1.0, 120), "0x1.008p+129"},
+            {ldexp(-1.0, 128) + ldexp(1.0, 90), "-0x1.fffffffff8p+127"},
+            {ldexp(-1.0, 129) + ldexp(1.0, 120), "-0x1.ffp+128"},
+
+            // Small numbers
+            {1.0 / 512., "0x1p-9"},
+            {1.0 / -512., "-0x1p-9"},
+            {1.0 / 1024., "0x1p-10"},
+            {1.0 / -1024., "-0x1p-10"},
+            {1.0 / 1024. + 1.0 / 8., "0x1.02p-3"},
+            {1.0 / -1024. - 1.0 / 8., "-0x1.02p-3"},
+
+            // Small outside the range of normal floats
+            {ldexp(1.0, -128), "0x1p-128"},
+            {ldexp(1.0, -129), "0x1p-129"},
+            {ldexp(-1.0, -128), "-0x1p-128"},
+            {ldexp(-1.0, -129), "-0x1p-129"},
+            {ldexp(1.0, -128) + ldexp(1.0, -90), "0x1.0000000004p-90"},
+            {ldexp(1.0, -129) + ldexp(1.0, -120), "0x1.008p-120"},
+            {ldexp(-1.0, -128) + ldexp(1.0, -90), "0x1.fffffffff8p-91"},
+            {ldexp(-1.0, -129) + ldexp(1.0, -120), "0x1.ffp-121"},
+
+            // lowest non-denorm
+            {ldexp(1.0, -1022), "0x1p-1022"},
+            {ldexp(-1.0, -1022), "-0x1p-1022"},
+
+            // Denormalized values
+            {ldexp(1.0, -1023), "0x1p-1023"},
+            {ldexp(1.0, -1023) / 2.0, "0x1p-1024"},
+            {ldexp(1.0, -1023) / 4.0, "0x1p-1025"},
+            {ldexp(1.0, -1023) / 8.0, "0x1p-1026"},
+            {ldexp(-1.0, -1024), "-0x1p-1024"},
+            {ldexp(-1.0, -1024) / 2.0, "-0x1p-1025"},
+            {ldexp(-1.0, -1024) / 4.0, "-0x1p-1026"},
+            {ldexp(-1.0, -1024) / 8.0, "-0x1p-1027"},
+
+            {ldexp(1.0, -1023) + (ldexp(1.0, -1023) / 2.0), "0x1.8p-1023"},
+            {ldexp(1.0, -1023) / 2.0 + (ldexp(1.0, -1023) / 4.0),
+             "0x1.8p-1024"},
+
+        })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float64NanTests, HexDoubleTest,
+    ::testing::ValuesIn(std::vector<
+                        std::pair<FloatProxy<double>, std::string>>({
+        // Various NAN and INF cases
+        {uint64_t(0xFFF0000000000000LL), "-0x1p+1024"},                //-inf
+        {uint64_t(0x7FF0000000000000LL), "0x1p+1024"},                 //+inf
+        {uint64_t(0xFFF8000000000000LL), "-0x1.8p+1024"},              // -nan
+        {uint64_t(0xFFF0F00000000000LL), "-0x1.0fp+1024"},             // -nan
+        {uint64_t(0xFFF0000000000001LL), "-0x1.0000000000001p+1024"},  // -nan
+        {uint64_t(0xFFF0000300000000LL), "-0x1.00003p+1024"},          // -nan
+        {uint64_t(0xFFFFFFFFFFFFFFFFLL), "-0x1.fffffffffffffp+1024"},  // -nan
+        {uint64_t(0x7FF8000000000000LL), "0x1.8p+1024"},               // +nan
+        {uint64_t(0x7FF0F00000000000LL), "0x1.0fp+1024"},              // +nan
+        {uint64_t(0x7FF0000000000001LL), "0x1.0000000000001p+1024"},   // -nan
+        {uint64_t(0x7FF0000300000000LL), "0x1.00003p+1024"},           // -nan
+        {uint64_t(0x7FFFFFFFFFFFFFFFLL), "0x1.fffffffffffffp+1024"},   // -nan
+    })),);
+
+TEST(HexFloatStreamTest, OperatorLeftShiftPreservesFloatAndFill) {
+  std::stringstream s;
+  s << std::setw(4) << std::oct << std::setfill('x') << 8 << " "
+    << FloatProxy<float>(uint32_t(0xFF800100)) << " " << std::setw(4) << 9;
+  EXPECT_THAT(s.str(), Eq(std::string("xx10 -0x1.0002p+128 xx11")));
+}
+
+TEST(HexDoubleStreamTest, OperatorLeftShiftPreservesFloatAndFill) {
+  std::stringstream s;
+  s << std::setw(4) << std::oct << std::setfill('x') << 8 << " "
+    << FloatProxy<double>(uint64_t(0x7FF0F00000000000LL)) << " " << std::setw(4)
+    << 9;
+  EXPECT_THAT(s.str(), Eq(std::string("xx10 0x1.0fp+1024 xx11")));
+}
+
+TEST_P(DecodeHexFloatTest, DecodeCorrectly) {
+  EXPECT_THAT(Decode<float>(GetParam().first), Eq(GetParam().second));
+}
+
+TEST_P(DecodeHexDoubleTest, DecodeCorrectly) {
+  EXPECT_THAT(Decode<double>(GetParam().first), Eq(GetParam().second));
+}
+
+INSTANTIATE_TEST_CASE_P(
+    Float32DecodeTests, DecodeHexFloatTest,
+    ::testing::ValuesIn(std::vector<std::pair<std::string, FloatProxy<float>>>({
+        {"0x0p+000", 0.f},
+        {"0x0p0", 0.f},
+        {"0x0p-0", 0.f},
+
+        // flush to zero cases
+        {"0x1p-500", 0.f},  // Exponent underflows.
+        {"-0x1p-500", -0.f},
+        {"0x0.00000000001p-126", 0.f},  // Fraction causes underflow.
+        {"-0x0.0000000001p-127", -0.f},
+        {"-0x0.01p-142", -0.f},  // Fraction causes additional underflow.
+        {"0x0.01p-142", 0.f},
+
+        // Some floats that do not encode the same way as they decode.
+        {"0x2p+0", 2.f},
+        {"0xFFp+0", 255.f},
+        {"0x0.8p+0", 0.5f},
+        {"0x0.4p+0", 0.25f},
+    })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float32DecodeInfTests, DecodeHexFloatTest,
+    ::testing::ValuesIn(std::vector<std::pair<std::string, FloatProxy<float>>>({
+        // inf cases
+        {"-0x1p+128", uint32_t(0xFF800000)},   // -inf
+        {"0x32p+127", uint32_t(0x7F800000)},   // inf
+        {"0x32p+500", uint32_t(0x7F800000)},   // inf
+        {"-0x32p+127", uint32_t(0xFF800000)},  // -inf
+    })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float64DecodeTests, DecodeHexDoubleTest,
+    ::testing::ValuesIn(
+        std::vector<std::pair<std::string, FloatProxy<double>>>({
+            {"0x0p+000", 0.},
+            {"0x0p0", 0.},
+            {"0x0p-0", 0.},
+
+            // flush to zero cases
+            {"0x1p-5000", 0.},  // Exponent underflows.
+            {"-0x1p-5000", -0.},
+            {"0x0.0000000000000001p-1023", 0.},  // Fraction causes underflow.
+            {"-0x0.000000000000001p-1024", -0.},
+            {"-0x0.01p-1090", -0.f},  // Fraction causes additional underflow.
+            {"0x0.01p-1090", 0.},
+
+            // Some floats that do not encode the same way as they decode.
+            {"0x2p+0", 2.},
+            {"0xFFp+0", 255.},
+            {"0x0.8p+0", 0.5},
+            {"0x0.4p+0", 0.25},
+        })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float64DecodeInfTests, DecodeHexDoubleTest,
+    ::testing::ValuesIn(
+        std::vector<std::pair<std::string, FloatProxy<double>>>({
+            // inf cases
+            {"-0x1p+1024", uint64_t(0xFFF0000000000000)},   // -inf
+            {"0x32p+1023", uint64_t(0x7FF0000000000000)},   // inf
+            {"0x32p+5000", uint64_t(0x7FF0000000000000)},   // inf
+            {"-0x32p+1023", uint64_t(0xFFF0000000000000)},  // -inf
+        })),);
+
+TEST(FloatProxy, ValidConversion) {
+  EXPECT_THAT(FloatProxy<float>(1.f).getAsFloat(), Eq(1.0f));
+  EXPECT_THAT(FloatProxy<float>(32.f).getAsFloat(), Eq(32.0f));
+  EXPECT_THAT(FloatProxy<float>(-1.f).getAsFloat(), Eq(-1.0f));
+  EXPECT_THAT(FloatProxy<float>(0.f).getAsFloat(), Eq(0.0f));
+  EXPECT_THAT(FloatProxy<float>(-0.f).getAsFloat(), Eq(-0.0f));
+  EXPECT_THAT(FloatProxy<float>(1.2e32f).getAsFloat(), Eq(1.2e32f));
+
+  EXPECT_TRUE(std::isinf(FloatProxy<float>(uint32_t(0xFF800000)).getAsFloat()));
+  EXPECT_TRUE(std::isinf(FloatProxy<float>(uint32_t(0x7F800000)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0xFFC00000)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0xFF800100)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0xFF800c00)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0xFF80F000)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0xFFFFFFFF)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0x7FC00000)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0x7F800100)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0x7f800c00)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0x7F80F000)).getAsFloat()));
+  EXPECT_TRUE(std::isnan(FloatProxy<float>(uint32_t(0x7FFFFFFF)).getAsFloat()));
+
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFF800000)).data(), Eq(0xFF800000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7F800000)).data(), Eq(0x7F800000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFFC00000)).data(), Eq(0xFFC00000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFF800100)).data(), Eq(0xFF800100u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFF800c00)).data(), Eq(0xFF800c00u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFF80F000)).data(), Eq(0xFF80F000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0xFFFFFFFF)).data(), Eq(0xFFFFFFFFu));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7FC00000)).data(), Eq(0x7FC00000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7F800100)).data(), Eq(0x7F800100u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7f800c00)).data(), Eq(0x7f800c00u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7F80F000)).data(), Eq(0x7F80F000u));
+  EXPECT_THAT(FloatProxy<float>(uint32_t(0x7FFFFFFF)).data(), Eq(0x7FFFFFFFu));
+}
+
+TEST(FloatProxy, Nan) {
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0xFFC00000)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0xFF800100)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0xFF800c00)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0xFF80F000)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0xFFFFFFFF)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0x7FC00000)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0x7F800100)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0x7f800c00)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0x7F80F000)).isNan());
+  EXPECT_TRUE(FloatProxy<float>(uint32_t(0x7FFFFFFF)).isNan());
+}
+
+TEST(FloatProxy, Negation) {
+  EXPECT_THAT((-FloatProxy<float>(1.f)).getAsFloat(), Eq(-1.0f));
+  EXPECT_THAT((-FloatProxy<float>(0.f)).getAsFloat(), Eq(-0.0f));
+
+  EXPECT_THAT((-FloatProxy<float>(-1.f)).getAsFloat(), Eq(1.0f));
+  EXPECT_THAT((-FloatProxy<float>(-0.f)).getAsFloat(), Eq(0.0f));
+
+  EXPECT_THAT((-FloatProxy<float>(32.f)).getAsFloat(), Eq(-32.0f));
+  EXPECT_THAT((-FloatProxy<float>(-32.f)).getAsFloat(), Eq(32.0f));
+
+  EXPECT_THAT((-FloatProxy<float>(1.2e32f)).getAsFloat(), Eq(-1.2e32f));
+  EXPECT_THAT((-FloatProxy<float>(-1.2e32f)).getAsFloat(), Eq(1.2e32f));
+
+  EXPECT_THAT(
+      (-FloatProxy<float>(std::numeric_limits<float>::infinity())).getAsFloat(),
+      Eq(-std::numeric_limits<float>::infinity()));
+  EXPECT_THAT((-FloatProxy<float>(-std::numeric_limits<float>::infinity()))
+                  .getAsFloat(),
+              Eq(std::numeric_limits<float>::infinity()));
+}
+
+// Test conversion of FloatProxy values to strings.
+//
+// In previous cases, we always wrapped the FloatProxy value in a HexFloat
+// before conversion to a string.  In the following cases, the FloatProxy
+// decides for itself whether to print as a regular number or as a hex float.
+
+using FloatProxyFloatTest =
+    ::testing::TestWithParam<std::pair<FloatProxy<float>, std::string>>;
+using FloatProxyDoubleTest =
+    ::testing::TestWithParam<std::pair<FloatProxy<double>, std::string>>;
+
+// Converts a float value to a string via a FloatProxy.
+template <typename T>
+std::string EncodeViaFloatProxy(const T& value) {
+  std::stringstream ss;
+  ss << value;
+  return ss.str();
+}
+
+// Converts a floating point string so that the exponent prefix
+// is 'e', and the exponent value does not have leading zeros.
+// The Microsoft runtime library likes to write things like "2.5E+010".
+// Convert that to "2.5e+10".
+// We don't care what happens to strings that are not floating point
+// strings.
+std::string NormalizeExponentInFloatString(std::string in) {
+  std::string result;
+  // Reserve one spot for the terminating null, even when the sscanf fails.
+  std::vector<char> prefix(in.size() + 1);
+  char e;
+  char plus_or_minus;
+  int exponent;  // in base 10
+  if ((4 == std::sscanf(in.c_str(), "%[-+.0123456789]%c%c%d", prefix.data(), &e,
+                        &plus_or_minus, &exponent)) &&
+      (e == 'e' || e == 'E') &&
+      (plus_or_minus == '-' || plus_or_minus == '+')) {
+    // It looks like a floating point value with exponent.
+    std::stringstream out;
+    out << prefix.data() << 'e' << plus_or_minus << exponent;
+    result = out.str();
+  } else {
+    result = in;
+  }
+  return result;
+}
+
+TEST(NormalizeFloat, Sample) {
+  EXPECT_THAT(NormalizeExponentInFloatString(""), Eq(""));
+  EXPECT_THAT(NormalizeExponentInFloatString("1e-12"), Eq("1e-12"));
+  EXPECT_THAT(NormalizeExponentInFloatString("1E+14"), Eq("1e+14"));
+  EXPECT_THAT(NormalizeExponentInFloatString("1e-0012"), Eq("1e-12"));
+  EXPECT_THAT(NormalizeExponentInFloatString("1.263E+014"), Eq("1.263e+14"));
+}
+
+// The following two tests can't be DRY because they take different parameter
+// types.
+TEST_P(FloatProxyFloatTest, EncodeCorrectly) {
+  EXPECT_THAT(
+      NormalizeExponentInFloatString(EncodeViaFloatProxy(GetParam().first)),
+      Eq(GetParam().second));
+}
+
+TEST_P(FloatProxyDoubleTest, EncodeCorrectly) {
+  EXPECT_THAT(
+      NormalizeExponentInFloatString(EncodeViaFloatProxy(GetParam().first)),
+      Eq(GetParam().second));
+}
+
+INSTANTIATE_TEST_CASE_P(
+    Float32Tests, FloatProxyFloatTest,
+    ::testing::ValuesIn(std::vector<std::pair<FloatProxy<float>, std::string>>({
+        // Zero
+        {0.f, "0"},
+        // Normal numbers
+        {1.f, "1"},
+        {-0.25f, "-0.25"},
+        {1000.0f, "1000"},
+
+        // Still normal numbers, but with large magnitude exponents.
+        {float(ldexp(1.f, 126)), "8.50706e+37"},
+        {float(ldexp(-1.f, -126)), "-1.17549e-38"},
+
+        // denormalized values are printed as hex floats.
+        {float(ldexp(1.0f, -127)), "0x1p-127"},
+        {float(ldexp(1.5f, -128)), "0x1.8p-128"},
+        {float(ldexp(1.25, -129)), "0x1.4p-129"},
+        {float(ldexp(1.125, -130)), "0x1.2p-130"},
+        {float(ldexp(-1.0f, -127)), "-0x1p-127"},
+        {float(ldexp(-1.0f, -128)), "-0x1p-128"},
+        {float(ldexp(-1.0f, -129)), "-0x1p-129"},
+        {float(ldexp(-1.5f, -130)), "-0x1.8p-130"},
+
+        // NaNs
+        {FloatProxy<float>(uint32_t(0xFFC00000)), "-0x1.8p+128"},
+        {FloatProxy<float>(uint32_t(0xFF800100)), "-0x1.0002p+128"},
+
+        {std::numeric_limits<float>::infinity(), "0x1p+128"},
+        {-std::numeric_limits<float>::infinity(), "-0x1p+128"},
+    })),);
+
+INSTANTIATE_TEST_CASE_P(
+    Float64Tests, FloatProxyDoubleTest,
+    ::testing::ValuesIn(
+        std::vector<std::pair<FloatProxy<double>, std::string>>({
+            {0., "0"},
+            {1., "1"},
+            {-0.25, "-0.25"},
+            {1000.0, "1000"},
+
+            // Large outside the range of normal floats
+            {ldexp(1.0, 128), "3.40282366920938e+38"},
+            {ldexp(1.5, 129), "1.02084710076282e+39"},
+            {ldexp(-1.0, 128), "-3.40282366920938e+38"},
+            {ldexp(-1.5, 129), "-1.02084710076282e+39"},
+
+            // Small outside the range of normal floats
+            {ldexp(1.5, -129), "2.20405190779179e-39"},
+            {ldexp(-1.5, -129), "-2.20405190779179e-39"},
+
+            // lowest non-denorm
+            {ldexp(1.0, -1022), "2.2250738585072e-308"},
+            {ldexp(-1.0, -1022), "-2.2250738585072e-308"},
+
+            // Denormalized values
+            {ldexp(1.125, -1023), "0x1.2p-1023"},
+            {ldexp(-1.375, -1024), "-0x1.6p-1024"},
+
+            // NaNs
+            {uint64_t(0x7FF8000000000000LL), "0x1.8p+1024"},
+            {uint64_t(0xFFF0F00000000000LL), "-0x1.0fp+1024"},
+
+            // Infinity
+            {std::numeric_limits<double>::infinity(), "0x1p+1024"},
+            {-std::numeric_limits<double>::infinity(), "-0x1p+1024"},
+
+        })),);
+
+// double is used so that unbiased_exponent can be used with the output
+// of ldexp directly.
+int32_t unbiased_exponent(double f) {
+  return spvutils::HexFloat<spvutils::FloatProxy<float>>(
+      static_cast<float>(f)).getUnbiasedNormalizedExponent();
+}
+
+int16_t unbiased_half_exponent(uint16_t f) {
+  return spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>(f)
+      .getUnbiasedNormalizedExponent();
+}
+
+TEST(HexFloatOperationTest, UnbiasedExponent) {
+  // Float cases
+  EXPECT_EQ(0, unbiased_exponent(ldexp(1.0f, 0)));
+  EXPECT_EQ(-32, unbiased_exponent(ldexp(1.0f, -32)));
+  EXPECT_EQ(42, unbiased_exponent(ldexp(1.0f, 42)));
+  EXPECT_EQ(125, unbiased_exponent(ldexp(1.0f, 125)));
+  // Saturates to 128
+  EXPECT_EQ(128, unbiased_exponent(ldexp(1.0f, 256)));
+
+  EXPECT_EQ(-100, unbiased_exponent(ldexp(1.0f, -100)));
+  EXPECT_EQ(-127, unbiased_exponent(ldexp(1.0f, -127))); // First denorm
+  EXPECT_EQ(-128, unbiased_exponent(ldexp(1.0f, -128)));
+  EXPECT_EQ(-129, unbiased_exponent(ldexp(1.0f, -129)));
+  EXPECT_EQ(-140, unbiased_exponent(ldexp(1.0f, -140)));
+  // Smallest representable number
+  EXPECT_EQ(-126 - 23, unbiased_exponent(ldexp(1.0f, -126 - 23)));
+  // Should get rounded to 0 first.
+  EXPECT_EQ(0, unbiased_exponent(ldexp(1.0f, -127 - 23)));
+
+  // Float16 cases
+  // The exponent is represented in the bits 0x7C00
+  // The offset is -15
+  EXPECT_EQ(0, unbiased_half_exponent(0x3C00));
+  EXPECT_EQ(3, unbiased_half_exponent(0x4800));
+  EXPECT_EQ(-1, unbiased_half_exponent(0x3800));
+  EXPECT_EQ(-14, unbiased_half_exponent(0x0400));
+  EXPECT_EQ(16, unbiased_half_exponent(0x7C00));
+  EXPECT_EQ(10, unbiased_half_exponent(0x6400));
+
+  // Smallest representable number
+  EXPECT_EQ(-24, unbiased_half_exponent(0x0001));
+}
+
+// Creates a float that is the sum of 1/(2 ^ fractions[i]) for i in factions
+float float_fractions(const std::vector<uint32_t>& fractions) {
+  float f = 0;
+  for(int32_t i: fractions) {
+    f += std::ldexp(1.0f, -i);
+  }
+  return f;
+}
+
+// Returns the normalized significand of a HexFloat<FloatProxy<float>>
+// that was created by calling float_fractions with the input fractions,
+// raised to the power of exp.
+uint32_t normalized_significand(const std::vector<uint32_t>& fractions, uint32_t exp) {
+  return spvutils::HexFloat<spvutils::FloatProxy<float>>(
+             static_cast<float>(ldexp(float_fractions(fractions), exp)))
+      .getNormalizedSignificand();
+}
+
+// Sets the bits from MSB to LSB of the significand part of a float.
+// For example 0 would set the bit 23 (counting from LSB to MSB),
+// and 1 would set the 22nd bit.
+uint32_t bits_set(const std::vector<uint32_t>& bits) {
+  const uint32_t top_bit = 1u << 22u;
+  uint32_t val= 0;
+  for(uint32_t i: bits) {
+    val |= top_bit >> i;
+  }
+  return val;
+}
+
+// The same as bits_set but for a Float16 value instead of 32-bit floating
+// point.
+uint16_t half_bits_set(const std::vector<uint32_t>& bits) {
+  const uint32_t top_bit = 1u << 9u;
+  uint32_t val= 0;
+  for(uint32_t i: bits) {
+    val |= top_bit >> i;
+  }
+  return static_cast<uint16_t>(val);
+}
+
+TEST(HexFloatOperationTest, NormalizedSignificand) {
+  // For normalized numbers (the following) it should be a simple matter
+  // of getting rid of the top implicit bit
+  EXPECT_EQ(bits_set({}), normalized_significand({0}, 0));
+  EXPECT_EQ(bits_set({0}), normalized_significand({0, 1}, 0));
+  EXPECT_EQ(bits_set({0, 1}), normalized_significand({0, 1, 2}, 0));
+  EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 0));
+  EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 32));
+  EXPECT_EQ(bits_set({1}), normalized_significand({0, 2}, 126));
+
+  // For denormalized numbers we expect the normalized significand to
+  // shift as if it were normalized. This means, in practice that the
+  // top_most set bit will be cut off. Looks very similar to above (on purpose)
+  EXPECT_EQ(bits_set({}), normalized_significand({0}, -127));
+  EXPECT_EQ(bits_set({3}), normalized_significand({0, 4}, -128));
+  EXPECT_EQ(bits_set({3}), normalized_significand({0, 4}, -127));
+  EXPECT_EQ(bits_set({}), normalized_significand({22}, -127));
+  EXPECT_EQ(bits_set({0}), normalized_significand({21, 22}, -127));
+}
+
+// Returns the 32-bit floating point value created by
+// calling setFromSignUnbiasedExponentAndNormalizedSignificand
+// on a HexFloat<FloatProxy<float>>
+float set_from_sign(bool negative, int32_t unbiased_exponent,
+                   uint32_t significand, bool round_denorm_up) {
+  spvutils::HexFloat<spvutils::FloatProxy<float>>  f(0.f);
+  f.setFromSignUnbiasedExponentAndNormalizedSignificand(
+      negative, unbiased_exponent, significand, round_denorm_up);
+  return f.value().getAsFloat();
+}
+
+TEST(HexFloatOperationTests,
+     SetFromSignUnbiasedExponentAndNormalizedSignificand) {
+
+  EXPECT_EQ(1.f, set_from_sign(false, 0, 0, false));
+
+  // Tests insertion of various denormalized numbers with and without round up.
+  EXPECT_EQ(static_cast<float>(ldexp(1.f, -149)), set_from_sign(false, -149, 0, false));
+  EXPECT_EQ(static_cast<float>(ldexp(1.f, -149)), set_from_sign(false, -149, 0, true));
+  EXPECT_EQ(0.f, set_from_sign(false, -150, 1, false));
+  EXPECT_EQ(static_cast<float>(ldexp(1.f, -149)), set_from_sign(false, -150, 1, true));
+
+  EXPECT_EQ(ldexp(1.0f, -127), set_from_sign(false, -127, 0, false));
+  EXPECT_EQ(ldexp(1.0f, -128), set_from_sign(false, -128, 0, false));
+  EXPECT_EQ(float_fractions({0, 1, 2, 5}),
+            set_from_sign(false, 0, bits_set({0, 1, 4}), false));
+  EXPECT_EQ(ldexp(float_fractions({0, 1, 2, 5}), -32),
+            set_from_sign(false, -32, bits_set({0, 1, 4}), false));
+  EXPECT_EQ(ldexp(float_fractions({0, 1, 2, 5}), -128),
+            set_from_sign(false, -128, bits_set({0, 1, 4}), false));
+
+  // The negative cases from above.
+  EXPECT_EQ(-1.f, set_from_sign(true, 0, 0, false));
+  EXPECT_EQ(-ldexp(1.0, -127), set_from_sign(true, -127, 0, false));
+  EXPECT_EQ(-ldexp(1.0, -128), set_from_sign(true, -128, 0, false));
+  EXPECT_EQ(-float_fractions({0, 1, 2, 5}),
+            set_from_sign(true, 0, bits_set({0, 1, 4}), false));
+  EXPECT_EQ(-ldexp(float_fractions({0, 1, 2, 5}), -32),
+            set_from_sign(true, -32, bits_set({0, 1, 4}), false));
+  EXPECT_EQ(-ldexp(float_fractions({0, 1, 2, 5}), -128),
+            set_from_sign(true, -128, bits_set({0, 1, 4}), false));
+}
+
+TEST(HexFloatOperationTests, NonRounding) {
+  // Rounding from 32-bit hex-float to 32-bit hex-float should be trivial,
+  // except in the denorm case which is a bit more complex.
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  bool carry_bit = false;
+
+  spvutils::round_direction rounding[] = {
+      spvutils::kRoundToZero,
+      spvutils::kRoundToNearestEven,
+      spvutils::kRoundToPositiveInfinity,
+      spvutils::kRoundToNegativeInfinity};
+
+  // Everything fits, so this should be straight-forward
+  for (spvutils::round_direction round : rounding) {
+    EXPECT_EQ(bits_set({}), HF(0.f).getRoundedNormalizedSignificand<HF>(
+                                round, &carry_bit));
+    EXPECT_FALSE(carry_bit);
+
+    EXPECT_EQ(bits_set({0}),
+              HF(float_fractions({0, 1}))
+                  .getRoundedNormalizedSignificand<HF>(round, &carry_bit));
+    EXPECT_FALSE(carry_bit);
+
+    EXPECT_EQ(bits_set({1, 3}),
+              HF(float_fractions({0, 2, 4}))
+                  .getRoundedNormalizedSignificand<HF>(round, &carry_bit));
+    EXPECT_FALSE(carry_bit);
+
+    EXPECT_EQ(
+        bits_set({0, 1, 4}),
+        HF(static_cast<float>(-ldexp(float_fractions({0, 1, 2, 5}), -128)))
+            .getRoundedNormalizedSignificand<HF>(round, &carry_bit));
+    EXPECT_FALSE(carry_bit);
+
+    EXPECT_EQ(
+        bits_set({0, 1, 4, 22}),
+        HF(static_cast<float>(float_fractions({0, 1, 2, 5, 23})))
+            .getRoundedNormalizedSignificand<HF>(round, &carry_bit));
+    EXPECT_FALSE(carry_bit);
+  }
+}
+
+struct RoundSignificandCase {
+  float source_float;
+  std::pair<int16_t, bool> expected_results;
+  spvutils::round_direction round;
+};
+
+using HexFloatRoundTest =
+    ::testing::TestWithParam<RoundSignificandCase>;
+
+TEST_P(HexFloatRoundTest, RoundDownToFP16) {
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  using HF16 = spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>;
+
+  HF input_value(GetParam().source_float);
+  bool carry_bit = false;
+  EXPECT_EQ(GetParam().expected_results.first,
+            input_value.getRoundedNormalizedSignificand<HF16>(
+                GetParam().round, &carry_bit));
+  EXPECT_EQ(carry_bit, GetParam().expected_results.second);
+}
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatRoundTest,
+  ::testing::ValuesIn(std::vector<RoundSignificandCase>(
+  {
+    {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToZero},
+    {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToNearestEven},
+    {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+
+    {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+    {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1, 11}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNearestEven},
+
+    {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToZero},
+    {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 8}), false), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1, 10, 11}), std::make_pair(half_bits_set({0, 8}), false), spvutils::kRoundToNearestEven},
+
+    {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+    {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
+
+    {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+    {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToPositiveInfinity},
+    {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNegativeInfinity},
+    {-float_fractions({0, 1, 11, 12}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
+
+    {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+    {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1, 11, 22}), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
+
+    // Carries
+    {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), false), spvutils::kRoundToZero},
+    {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({}), true), spvutils::kRoundToPositiveInfinity},
+    {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), false), spvutils::kRoundToNegativeInfinity},
+    {float_fractions({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), std::make_pair(half_bits_set({}), true), spvutils::kRoundToNearestEven},
+
+    // Cases where original number was denorm. Note: this should have no effect
+    // the number is pre-normalized.
+    {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -128)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToZero},
+    {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -129)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
+    {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -131)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
+    {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -130)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
+  })),);
+// clang-format on
+
+struct UpCastSignificandCase {
+  uint16_t source_half;
+  uint32_t expected_result;
+};
+
+using HexFloatRoundUpSignificandTest =
+    ::testing::TestWithParam<UpCastSignificandCase>;
+TEST_P(HexFloatRoundUpSignificandTest, Widening) {
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  using HF16 = spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>;
+  bool carry_bit = false;
+
+  spvutils::round_direction rounding[] = {
+      spvutils::kRoundToZero,
+      spvutils::kRoundToNearestEven,
+      spvutils::kRoundToPositiveInfinity,
+      spvutils::kRoundToNegativeInfinity};
+
+  // Everything fits, so everything should just be bit-shifts.
+  for (spvutils::round_direction round : rounding) {
+    carry_bit = false;
+    HF16 input_value(GetParam().source_half);
+    EXPECT_EQ(
+        GetParam().expected_result,
+        input_value.getRoundedNormalizedSignificand<HF>(round, &carry_bit))
+        << std::hex << "0x"
+        << input_value.getRoundedNormalizedSignificand<HF>(round, &carry_bit)
+        << "  0x" << GetParam().expected_result;
+    EXPECT_FALSE(carry_bit);
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(F16toF32, HexFloatRoundUpSignificandTest,
+  // 0xFC00 of the source 16-bit hex value cover the sign and the exponent.
+  // They are ignored for this test.
+  ::testing::ValuesIn(std::vector<UpCastSignificandCase>(
+  {
+    {0x3F00, 0x600000},
+    {0x0F00, 0x600000},
+    {0x0F01, 0x602000},
+    {0x0FFF, 0x7FE000},
+  })),);
+
+struct DownCastTest {
+  float source_float;
+  uint16_t expected_half;
+  std::vector<spvutils::round_direction> directions;
+};
+
+std::string get_round_text(spvutils::round_direction direction) {
+#define CASE(round_direction) \
+  case round_direction:      \
+    return #round_direction
+
+  switch (direction) {
+    CASE(spvutils::kRoundToZero);
+    CASE(spvutils::kRoundToPositiveInfinity);
+    CASE(spvutils::kRoundToNegativeInfinity);
+    CASE(spvutils::kRoundToNearestEven);
+  }
+#undef CASE
+  return "";
+}
+
+using HexFloatFP32To16Tests = ::testing::TestWithParam<DownCastTest>;
+
+TEST_P(HexFloatFP32To16Tests, NarrowingCasts) {
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  using HF16 = spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>;
+  HF f(GetParam().source_float);
+  for (auto round : GetParam().directions) {
+    HF16 half(0);
+    f.castTo(half, round);
+    EXPECT_EQ(GetParam().expected_half, half.value().getAsFloat().get_value())
+        << get_round_text(round) << "  " << std::hex
+        << spvutils::BitwiseCast<uint32_t>(GetParam().source_float)
+        << " cast to: " << half.value().getAsFloat().get_value();
+  }
+}
+
+const uint16_t positive_infinity = 0x7C00;
+const uint16_t negative_infinity = 0xFC00;
+
+INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatFP32To16Tests,
+  ::testing::ValuesIn(std::vector<DownCastTest>(
+  {
+    // Exactly representable as half.
+    {0.f, 0x0, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {-0.f, 0x8000, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {1.0f, 0x3C00, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {-1.0f, 0xBC00, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+
+    {float_fractions({0, 1, 10}) , 0x3E01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {-float_fractions({0, 1, 10}) , 0xBE01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(ldexp(float_fractions({0, 1, 10}), 3)), 0x4A01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(-ldexp(float_fractions({0, 1, 10}), 3)), 0xCA01, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+
+
+    // Underflow
+    {static_cast<float>(ldexp(1.0f, -25)), 0x0, {spvutils::kRoundToZero, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(ldexp(1.0f, -25)), 0x1, {spvutils::kRoundToPositiveInfinity}},
+    {static_cast<float>(-ldexp(1.0f, -25)), 0x8000, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(-ldexp(1.0f, -25)), 0x8001, {spvutils::kRoundToNegativeInfinity}},
+    {static_cast<float>(ldexp(1.0f, -24)), 0x1, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+
+    // Overflow
+    {static_cast<float>(ldexp(1.0f, 16)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(ldexp(1.0f, 18)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(ldexp(1.3f, 16)), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(-ldexp(1.0f, 16)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(-ldexp(1.0f, 18)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {static_cast<float>(-ldexp(1.3f, 16)), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+
+    // Transfer of Infinities
+    {std::numeric_limits<float>::infinity(), positive_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+    {-std::numeric_limits<float>::infinity(), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
+
+    // Nans are below because we cannot test for equality.
+  })),);
+
+struct UpCastCase{
+  uint16_t source_half;
+  float expected_float;
+};
+
+using HexFloatFP16To32Tests = ::testing::TestWithParam<UpCastCase>;
+TEST_P(HexFloatFP16To32Tests, WideningCasts) {
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  using HF16 = spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>;
+  HF16 f(GetParam().source_half);
+
+  spvutils::round_direction rounding[] = {
+      spvutils::kRoundToZero,
+      spvutils::kRoundToNearestEven,
+      spvutils::kRoundToPositiveInfinity,
+      spvutils::kRoundToNegativeInfinity};
+
+  // Everything fits, so everything should just be bit-shifts.
+  for (spvutils::round_direction round : rounding) {
+    HF flt(0.f);
+    f.castTo(flt, round);
+    EXPECT_EQ(GetParam().expected_float, flt.value().getAsFloat())
+        << get_round_text(round) << "  " << std::hex
+        << spvutils::BitwiseCast<uint16_t>(GetParam().source_half)
+        << " cast to: " << flt.value().getAsFloat();
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(F16ToF32, HexFloatFP16To32Tests,
+  ::testing::ValuesIn(std::vector<UpCastCase>(
+  {
+    {0x0000, 0.f},
+    {0x8000, -0.f},
+    {0x3C00, 1.0f},
+    {0xBC00, -1.0f},
+    {0x3F00, float_fractions({0, 1, 2})},
+    {0xBF00, -float_fractions({0, 1, 2})},
+    {0x3F01, float_fractions({0, 1, 2, 10})},
+    {0xBF01, -float_fractions({0, 1, 2, 10})},
+
+    // denorm
+    {0x0001, static_cast<float>(ldexp(1.0, -24))},
+    {0x0002, static_cast<float>(ldexp(1.0, -23))},
+    {0x8001, static_cast<float>(-ldexp(1.0, -24))},
+    {0x8011, static_cast<float>(-ldexp(1.0, -20) + -ldexp(1.0, -24))},
+
+    // inf
+    {0x7C00, std::numeric_limits<float>::infinity()},
+    {0xFC00, -std::numeric_limits<float>::infinity()},
+  })),);
+
+TEST(HexFloatOperationTests, NanTests) {
+  using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
+  using HF16 = spvutils::HexFloat<spvutils::FloatProxy<spvutils::Float16>>;
+  spvutils::round_direction rounding[] = {
+      spvutils::kRoundToZero,
+      spvutils::kRoundToNearestEven,
+      spvutils::kRoundToPositiveInfinity,
+      spvutils::kRoundToNegativeInfinity};
+
+  // Everything fits, so everything should just be bit-shifts.
+  for (spvutils::round_direction round : rounding) {
+    HF16 f16(0);
+    HF f(0.f);
+    HF(std::numeric_limits<float>::quiet_NaN()).castTo(f16, round);
+    EXPECT_TRUE(f16.value().isNan());
+    HF(std::numeric_limits<float>::signaling_NaN()).castTo(f16, round);
+    EXPECT_TRUE(f16.value().isNan());
+
+    HF16(0x7C01).castTo(f, round);
+    EXPECT_TRUE(f.value().isNan());
+    HF16(0x7C11).castTo(f, round);
+    EXPECT_TRUE(f.value().isNan());
+    HF16(0xFC01).castTo(f, round);
+    EXPECT_TRUE(f.value().isNan());
+    HF16(0x7C10).castTo(f, round);
+    EXPECT_TRUE(f.value().isNan());
+    HF16(0xFF00).castTo(f, round);
+    EXPECT_TRUE(f.value().isNan());
+  }
+}
+
+// A test case for parsing good and bad HexFloat<FloatProxy<T>> literals.
+template <typename T>
+struct FloatParseCase {
+  std::string literal;
+  bool negate_value;
+  bool expect_success;
+  HexFloat<FloatProxy<T>> expected_value;
+};
+
+using ParseNormalFloatTest = ::testing::TestWithParam<FloatParseCase<float>>;
+
+TEST_P(ParseNormalFloatTest, Samples) {
+  std::stringstream input(GetParam().literal);
+  HexFloat<FloatProxy<float>> parsed_value(0.0f);
+  ParseNormalFloat(input, GetParam().negate_value, parsed_value);
+  EXPECT_NE(GetParam().expect_success, input.fail())
+      << " literal: " << GetParam().literal
+      << " negate: " << GetParam().negate_value;
+  if (GetParam().expect_success) {
+    EXPECT_THAT(parsed_value.value(), Eq(GetParam().expected_value.value()))
+        << " literal: " << GetParam().literal
+        << " negate: " << GetParam().negate_value;
+  }
+}
+
+// Returns a FloatParseCase with expected failure.
+template <typename T>
+FloatParseCase<T> BadFloatParseCase(std::string literal, bool negate_value,
+                                    T expected_value) {
+  HexFloat<FloatProxy<T>> proxy_expected_value(expected_value);
+  return FloatParseCase<T>{literal, negate_value, false, proxy_expected_value};
+}
+
+// Returns a FloatParseCase that should successfully parse to a given value.
+template <typename T>
+FloatParseCase<T> GoodFloatParseCase(std::string literal, bool negate_value,
+                                     T expected_value) {
+  HexFloat<FloatProxy<T>> proxy_expected_value(expected_value);
+  return FloatParseCase<T>{literal, negate_value, true, proxy_expected_value};
+}
+
+INSTANTIATE_TEST_CASE_P(
+    FloatParse, ParseNormalFloatTest,
+    ::testing::ValuesIn(std::vector<FloatParseCase<float>>{
+        // Failing cases due to trivially incorrect syntax.
+        BadFloatParseCase("abc", false, 0.0f),
+        BadFloatParseCase("abc", true, 0.0f),
+
+        // Valid cases.
+        GoodFloatParseCase("0", false, 0.0f),
+        GoodFloatParseCase("0.0", false, 0.0f),
+        GoodFloatParseCase("-0.0", false, -0.0f),
+        GoodFloatParseCase("2.0", false, 2.0f),
+        GoodFloatParseCase("-2.0", false, -2.0f),
+        GoodFloatParseCase("+2.0", false, 2.0f),
+        // Cases with negate_value being true.
+        GoodFloatParseCase("0.0", true, -0.0f),
+        GoodFloatParseCase("2.0", true, -2.0f),
+
+        // When negate_value is true, we should not accept a
+        // leading minus or plus.
+        BadFloatParseCase("-0.0", true, 0.0f),
+        BadFloatParseCase("-2.0", true, 0.0f),
+        BadFloatParseCase("+0.0", true, 0.0f),
+        BadFloatParseCase("+2.0", true, 0.0f),
+
+        // Overflow is an error for 32-bit float parsing.
+        BadFloatParseCase("1e40", false, FLT_MAX),
+        BadFloatParseCase("1e40", true, -FLT_MAX),
+        BadFloatParseCase("-1e40", false, -FLT_MAX),
+        // We can't have -1e40 and negate_value == true since
+        // that represents an original case of "--1e40" which
+        // is invalid.
+  }),);
+
+using ParseNormalFloat16Test =
+    ::testing::TestWithParam<FloatParseCase<Float16>>;
+
+TEST_P(ParseNormalFloat16Test, Samples) {
+  std::stringstream input(GetParam().literal);
+  HexFloat<FloatProxy<Float16>> parsed_value(0);
+  ParseNormalFloat(input, GetParam().negate_value, parsed_value);
+  EXPECT_NE(GetParam().expect_success, input.fail())
+      << " literal: " << GetParam().literal
+      << " negate: " << GetParam().negate_value;
+  if (GetParam().expect_success) {
+    EXPECT_THAT(parsed_value.value(), Eq(GetParam().expected_value.value()))
+        << " literal: " << GetParam().literal
+        << " negate: " << GetParam().negate_value;
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(
+    Float16Parse, ParseNormalFloat16Test,
+    ::testing::ValuesIn(std::vector<FloatParseCase<Float16>>{
+        // Failing cases due to trivially incorrect syntax.
+        BadFloatParseCase<Float16>("abc", false, uint16_t{0}),
+        BadFloatParseCase<Float16>("abc", true, uint16_t{0}),
+
+        // Valid cases.
+        GoodFloatParseCase<Float16>("0", false, uint16_t{0}),
+        GoodFloatParseCase<Float16>("0.0", false, uint16_t{0}),
+        GoodFloatParseCase<Float16>("-0.0", false, uint16_t{0x8000}),
+        GoodFloatParseCase<Float16>("2.0", false, uint16_t{0x4000}),
+        GoodFloatParseCase<Float16>("-2.0", false, uint16_t{0xc000}),
+        GoodFloatParseCase<Float16>("+2.0", false, uint16_t{0x4000}),
+        // Cases with negate_value being true.
+        GoodFloatParseCase<Float16>("0.0", true, uint16_t{0x8000}),
+        GoodFloatParseCase<Float16>("2.0", true, uint16_t{0xc000}),
+
+        // When negate_value is true, we should not accept a leading minus or
+        // plus.
+        BadFloatParseCase<Float16>("-0.0", true, uint16_t{0}),
+        BadFloatParseCase<Float16>("-2.0", true, uint16_t{0}),
+        BadFloatParseCase<Float16>("+0.0", true, uint16_t{0}),
+        BadFloatParseCase<Float16>("+2.0", true, uint16_t{0}),
+    }),);
+
+// A test case for detecting infinities.
+template <typename T>
+struct OverflowParseCase {
+  std::string input;
+  bool expect_success;
+  T expected_value;
+};
+
+using FloatProxyParseOverflowFloatTest =
+    ::testing::TestWithParam<OverflowParseCase<float>>;
+
+TEST_P(FloatProxyParseOverflowFloatTest, Sample) {
+  std::istringstream input(GetParam().input);
+  HexFloat<FloatProxy<float>> value(0.0f);
+  input >> value;
+  EXPECT_NE(GetParam().expect_success, input.fail());
+  if (GetParam().expect_success) {
+    EXPECT_THAT(value.value().getAsFloat(), GetParam().expected_value);
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(
+    FloatOverflow, FloatProxyParseOverflowFloatTest,
+    ::testing::ValuesIn(std::vector<OverflowParseCase<float>>({
+        {"0", true, 0.0f},
+        {"0.0", true, 0.0f},
+        {"1.0", true, 1.0f},
+        {"1e38", true, 1e38f},
+        {"-1e38", true, -1e38f},
+        {"1e40", false, FLT_MAX},
+        {"-1e40", false, -FLT_MAX},
+        {"1e400", false, FLT_MAX},
+        {"-1e400", false, -FLT_MAX},
+    })),);
+
+using FloatProxyParseOverflowDoubleTest =
+    ::testing::TestWithParam<OverflowParseCase<double>>;
+
+TEST_P(FloatProxyParseOverflowDoubleTest, Sample) {
+  std::istringstream input(GetParam().input);
+  HexFloat<FloatProxy<double>> value(0.0);
+  input >> value;
+  EXPECT_NE(GetParam().expect_success, input.fail());
+  if (GetParam().expect_success) {
+    EXPECT_THAT(value.value().getAsFloat(), Eq(GetParam().expected_value));
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(
+    DoubleOverflow, FloatProxyParseOverflowDoubleTest,
+    ::testing::ValuesIn(std::vector<OverflowParseCase<double>>({
+        {"0", true, 0.0},
+        {"0.0", true, 0.0},
+        {"1.0", true, 1.0},
+        {"1e38", true, 1e38},
+        {"-1e38", true, -1e38},
+        {"1e40", true, 1e40},
+        {"-1e40", true, -1e40},
+        {"1e400", false, DBL_MAX},
+        {"-1e400", false, -DBL_MAX},
+    })),);
+
+using FloatProxyParseOverflowFloat16Test =
+    ::testing::TestWithParam<OverflowParseCase<uint16_t>>;
+
+TEST_P(FloatProxyParseOverflowFloat16Test, Sample) {
+  std::istringstream input(GetParam().input);
+  HexFloat<FloatProxy<Float16>> value(0);
+  input >> value;
+  EXPECT_NE(GetParam().expect_success, input.fail()) << " literal: "
+                                                     << GetParam().input;
+  if (GetParam().expect_success) {
+    EXPECT_THAT(value.value().data(), Eq(GetParam().expected_value))
+        << " literal: " << GetParam().input;
+  }
+}
+
+INSTANTIATE_TEST_CASE_P(
+    Float16Overflow, FloatProxyParseOverflowFloat16Test,
+    ::testing::ValuesIn(std::vector<OverflowParseCase<uint16_t>>({
+        {"0", true, uint16_t{0}},
+        {"0.0", true, uint16_t{0}},
+        {"1.0", true, uint16_t{0x3c00}},
+        // Overflow for 16-bit float is an error, and returns max or
+        // lowest value.
+        {"1e38", false, uint16_t{0x7bff}},
+        {"1e40", false, uint16_t{0x7bff}},
+        {"1e400", false, uint16_t{0x7bff}},
+        {"-1e38", false, uint16_t{0xfbff}},
+        {"-1e40", false, uint16_t{0xfbff}},
+        {"-1e400", false, uint16_t{0xfbff}},
+    })),);
+
+TEST(FloatProxy, Max) {
+  EXPECT_THAT(FloatProxy<Float16>::max().getAsFloat().get_value(),
+              Eq(uint16_t{0x7bff}));
+  EXPECT_THAT(FloatProxy<float>::max().getAsFloat(),
+              Eq(std::numeric_limits<float>::max()));
+  EXPECT_THAT(FloatProxy<double>::max().getAsFloat(),
+              Eq(std::numeric_limits<double>::max()));
+}
+
+TEST(FloatProxy, Lowest) {
+  EXPECT_THAT(FloatProxy<Float16>::lowest().getAsFloat().get_value(),
+              Eq(uint16_t{0xfbff}));
+  EXPECT_THAT(FloatProxy<float>::lowest().getAsFloat(),
+              Eq(std::numeric_limits<float>::lowest()));
+  EXPECT_THAT(FloatProxy<double>::lowest().getAsFloat(),
+              Eq(std::numeric_limits<double>::lowest()));
+}
+
+// TODO(awoloszyn): Add fp16 tests and HexFloatTraits.
+}  // anonymous namespace
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 01cc0323edd7e5e130f88c354cc54a05a2e8f091..f0332aac611a530100e9b89a977f472d8bbb072b 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -58,27 +58,42 @@ std::string FileNameAsCustomTestSuffix(
 }
 
 using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 
 // Compiling HLSL to SPIR-V under Vulkan semantics. Expected to successfully
 // generate both AST and SPIR-V.
 TEST_P(HlslCompileTest, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
                             Source::HLSL, Semantics::Vulkan,
                             Target::BothASTAndSpv, GetParam().entryPoint);
 }
 
+TEST_P(HlslCompileAndFlattenTest, FromFile)
+{
+    loadFileCompileFlattenUniformsAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                                           Source::HLSL, Semantics::Vulkan,
+                                           Target::BothASTAndSpv, GetParam().entryPoint);
+}
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     ToSpirv, HlslCompileTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"hlsl.amend.frag", "f1"},
         {"hlsl.array.frag", "PixelShaderFunction"},
+        {"hlsl.array.implicit-size.frag", "PixelShaderFunction"},
+        {"hlsl.array.multidim.frag", "main"},
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
+        {"hlsl.attribute.expression.comp", "main"},
+        {"hlsl.basic.comp", "main"},
+        {"hlsl.basic.geom", "main"},
         {"hlsl.buffer.frag", "PixelShaderFunction"},
         {"hlsl.calculatelod.dx10.frag", "main"},
         {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.comparison.vec.frag", "main"},
         {"hlsl.conditional.frag", "PixelShaderFunction"},
         {"hlsl.constructexpr.frag", "main"},
         {"hlsl.depthGreater.frag", "PixelShaderFunction"},
@@ -89,6 +104,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.entry-out.frag", "PixelShaderFunction"},
         {"hlsl.float1.frag", "PixelShaderFunction"},
         {"hlsl.float4.frag", "PixelShaderFunction"},
+        {"hlsl.flatten.return.frag", "main"},
         {"hlsl.forLoop.frag", "PixelShaderFunction"},
         {"hlsl.gather.array.dx10.frag", "main"},
         {"hlsl.gather.basic.dx10.frag", "main"},
@@ -100,8 +116,10 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.gatherRGBA.offset.dx10.frag", "main"},
         {"hlsl.gatherRGBA.offsetarray.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.frag", "main"},
+        {"hlsl.getdimensions.rw.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.vert", "main"},
         {"hlsl.getsampleposition.dx10.frag", "main"},
+        {"hlsl.identifier.sample.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
         {"hlsl.inoutquals.frag", "main"},
         {"hlsl.init.frag", "ShaderFunction"},
@@ -116,21 +134,44 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
+        {"hlsl.intrinsics.promote.frag", "main"},
+        {"hlsl.intrinsics.promote.down.frag", "main"},
+        {"hlsl.intrinsics.promote.outputs.frag", "main"},
         {"hlsl.layout.frag", "main"},
         {"hlsl.load.2dms.dx10.frag", "main"},
         {"hlsl.load.array.dx10.frag", "main"},
         {"hlsl.load.basic.dx10.frag", "main"},
         {"hlsl.load.basic.dx10.vert", "main"},
         {"hlsl.load.buffer.dx10.frag", "main"},
+        {"hlsl.load.buffer.float.dx10.frag", "main"},
+        {"hlsl.load.rwbuffer.dx10.frag", "main"},
+        {"hlsl.load.rwtexture.dx10.frag", "main"},
+        {"hlsl.load.rwtexture.array.dx10.frag", "main"},
         {"hlsl.load.offset.dx10.frag", "main"},
         {"hlsl.load.offsetarray.dx10.frag", "main"},
+        {"hlsl.logical.unary.frag", "main"},
+        {"hlsl.logical.binary.frag", "main"},
+        {"hlsl.logical.binary.vec.frag", "main"},
+        {"hlsl.matNx1.frag", "main"},
+        {"hlsl.mintypes.frag", "main"},
         {"hlsl.multiEntry.vert", "RealEntrypoint"},
+        {"hlsl.multiReturn.frag", "main"},
         {"hlsl.matrixindex.frag", "main"},
         {"hlsl.numericsuffixes.frag", "main"},
+        {"hlsl.numthreads.comp", "main_aux1"},
         {"hlsl.overload.frag", "PixelShaderFunction"},
+        {"hlsl.partialInit.frag", "PixelShaderFunction"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
+        {"hlsl.promote.atomic.frag", "main"},
+        {"hlsl.promote.binary.frag", "main"},
+        {"hlsl.promote.vec1.frag", "main"},
         {"hlsl.promotions.frag", "main"},
+        {"hlsl.rw.atomics.frag", "main"},
+        {"hlsl.rw.bracket.frag", "main"},
+        {"hlsl.rw.register.frag", "main"},
+        {"hlsl.rw.scalar.bracket.frag", "main"},
+        {"hlsl.rw.vec2.bracket.frag", "main"},
         {"hlsl.sample.array.dx10.frag", "main"},
         {"hlsl.sample.basic.dx10.frag", "main"},
         {"hlsl.sample.offset.dx10.frag", "main"},
@@ -157,13 +198,19 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.samplelevel.basic.dx10.vert", "main"},
         {"hlsl.samplelevel.offset.dx10.frag", "main"},
         {"hlsl.samplelevel.offsetarray.dx10.frag", "main"},
+        {"hlsl.sample.sub-vec4.dx10.frag", "main"},
         {"hlsl.semicolons.frag", "main"},
         {"hlsl.shapeConv.frag", "main"},
+        {"hlsl.shapeConvRet.frag", "main"},
         {"hlsl.stringtoken.frag", "main"},
         {"hlsl.string.frag", "main"},
+        {"hlsl.structarray.flatten.frag", "main"},
+        {"hlsl.structarray.flatten.geom", "main"},
         {"hlsl.structin.vert", "main"},
         {"hlsl.intrinsics.vert", "VertexShaderFunction"},
         {"hlsl.matType.frag", "PixelShaderFunction"},
+        {"hlsl.matType.bool.frag", "main"},
+        {"hlsl.matType.int.frag", "main"},
         {"hlsl.max.frag", "PixelShaderFunction"},
         {"hlsl.precedence.frag", "PixelShaderFunction"},
         {"hlsl.precedence2.frag", "PixelShaderFunction"},
@@ -173,6 +220,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.switch.frag", "PixelShaderFunction"},
         {"hlsl.swizzle.frag", "PixelShaderFunction"},
         {"hlsl.templatetypes.frag", "PixelShaderFunction"},
+        {"hlsl.tx.bracket.frag", "main"},
         {"hlsl.typedef.frag", "PixelShaderFunction"},
         {"hlsl.whileLoop.frag", "PixelShaderFunction"},
         {"hlsl.void.frag", "PixelShaderFunction"},
@@ -181,5 +229,15 @@ INSTANTIATE_TEST_CASE_P(
 );
 // clang-format on
 
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    ToSpirv, HlslCompileAndFlattenTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"hlsl.array.flatten.frag", "main"},
+    }),
+    FileNameAsCustomTestSuffix
+);
+
+// clang-format on
 }  // anonymous namespace
 }  // namespace glslangtest
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
index b324b9ab07e306567e4dc10a38cadc787330dbb0..ab845bf59e70cd91713c4eee7c7f897a203a3362 100644
--- a/gtests/Link.FromFile.cpp
+++ b/gtests/Link.FromFile.cpp
@@ -55,7 +55,7 @@ TEST_P(LinkTest, FromFile)
     std::vector<std::unique_ptr<glslang::TShader>> shaders;
     for (size_t i = 0; i < fileCount; ++i) {
         std::string contents;
-        tryLoadFile(GLSLANG_TEST_DIRECTORY "/" + fileNames[i],
+        tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i],
                     "input", &contents);
         shaders.emplace_back(
                 new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i]))));
@@ -77,7 +77,7 @@ TEST_P(LinkTest, FromFile)
 
     // Check with expected results.
     const std::string expectedOutputFname =
-        GLSLANG_TEST_DIRECTORY "/baseResults/" + fileNames.front() + ".out";
+        GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out";
     std::string expectedOutput;
     tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
@@ -99,6 +99,7 @@ INSTANTIATE_TEST_CASE_P(
         {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"},
         {"max_vertices_0.geom"},
         {"es-link1.frag", "es-link2.frag"},
+        {"missingBodies.vert"}
     })),
 );
 // clang-format on
diff --git a/gtests/Pp.FromFile.cpp b/gtests/Pp.FromFile.cpp
index 04ac3f757844a2c6259b4ca5f062f90017ba26f0..13daac0d6715ac24849a8eb212eb2bcb0a4123d9 100644
--- a/gtests/Pp.FromFile.cpp
+++ b/gtests/Pp.FromFile.cpp
@@ -43,7 +43,7 @@ using PreprocessingTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
 TEST_P(PreprocessingTest, FromFile)
 {
-    loadFilePreprocessAndCheck(GLSLANG_TEST_DIRECTORY, GetParam());
+    loadFilePreprocessAndCheck(GlobalTestSettings.testRoot, GetParam());
 }
 
 // clang-format off
diff --git a/gtests/Remap.FromFile.cpp b/gtests/Remap.FromFile.cpp
index cd246ea2f670cdc916003dcb24cf8ff54b9ddb77..9f25a6f2277d088d2d037897d8b72b8a7388b3ca 100644
--- a/gtests/Remap.FromFile.cpp
+++ b/gtests/Remap.FromFile.cpp
@@ -60,17 +60,17 @@ std::string FileNameAsCustomTestSuffix(
 
 using RemapTest = GlslangTest<::testing::TestWithParam<RemapTestArgs>>;
 
-// Remapping SPIR-V modules. 
+// Remapping SPIR-V modules.
 TEST_P(RemapTest, FromFile)
 {
     if (GetSuffix(GetParam().fileName) == "spv") {
-        loadFileRemapAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
+        loadFileRemapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
                               GetParam().sourceLanguage,
                               Semantics::Vulkan,
                               Target::Spv,
                               GetParam().remapOpts);
     } else {
-        loadFileCompileRemapAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
+        loadFileCompileRemapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
                                      GetParam().sourceLanguage,
                                      Semantics::Vulkan,
                                      Target::Spv,
diff --git a/gtests/Settings.cpp b/gtests/Settings.cpp
index 4ba7989b4a35fc7c5975eb15183566f540669054..0ac58449c62a2761c45c70a3214839c288ca1011 100644
--- a/gtests/Settings.cpp
+++ b/gtests/Settings.cpp
@@ -36,6 +36,16 @@
 
 namespace glslangtest {
 
-GTestSettings GlobalTestSettings = {nullptr, false};
+// We need CMake to provide us the absolute path to the directory containing
+// test files, so we are certain to find those files no matter where the test
+// harness binary is generated. This provides out-of-source build capability.
+// This will be used as the default test root, but can be overridden with
+// the --test-root argument.
+#ifndef GLSLANG_TEST_DIRECTORY
+#error \
+    "GLSLANG_TEST_DIRECTORY needs to be defined for gtest to locate test files."
+#endif
+
+GTestSettings GlobalTestSettings = {nullptr, false, GLSLANG_TEST_DIRECTORY};
 
 }  // namespace glslangtest
diff --git a/gtests/Settings.h b/gtests/Settings.h
index 30056a7bacb45940315486ff0bfbca0997ebb4ba..c38474ccf996a4504a89372d2de161c9b44cc433 100644
--- a/gtests/Settings.h
+++ b/gtests/Settings.h
@@ -35,6 +35,8 @@
 #ifndef GLSLANG_GTESTS_SETTINGS_H
 #define GLSLANG_GTESTS_SETTINGS_H
 
+#include <string>
+
 namespace glslangtest {
 
 class GlslangInitializer;
@@ -45,6 +47,8 @@ struct GTestSettings {
     // An indicator of whether GTest should write real output to the file for
     // the expected output.
     bool updateMode;
+    // The root directory for test files.
+    std::string testRoot;
 };
 
 extern GTestSettings GlobalTestSettings;
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 45fed0449b2c6d67b3a0b97286ea742688e66b52..414fa7b7d5ad457e15fa467836446b4e6e8688a5 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -1,4 +1,4 @@
-//
+ //
 // Copyright (C) 2016 Google, Inc.
 //
 // All rights reserved.
@@ -41,17 +41,42 @@
 namespace glslangtest {
 namespace {
 
+struct IoMapData {
+    const char* fileName;
+    const char* entryPoint;
+    int baseSamplerBinding;
+    int baseTextureBinding;
+    int baseImageBinding;
+    int baseUboBinding;
+    bool autoMapBindings;
+    bool flattenUniforms;
+};
+
+std::string FileNameAsCustomTestSuffixIoMap(
+    const ::testing::TestParamInfo<IoMapData>& info) {
+    std::string name = info.param.fileName;
+    // A valid test case suffix cannot have '.' and '-' inside.
+    std::replace(name.begin(), name.end(), '.', '_');
+    std::replace(name.begin(), name.end(), '-', '_');
+    return name;
+}
+
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanAstSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
+using HlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
+using GlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
+#ifdef AMD_EXTENSIONS
+using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam<std::string>>;
+#endif
 
 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
 // generate SPIR-V.
 TEST_P(CompileVulkanToSpirvTest, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::Vulkan,
                             Target::Spv);
 }
@@ -60,7 +85,7 @@ TEST_P(CompileVulkanToSpirvTest, FromFile)
 // generate SPIR-V.
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::OpenGL,
                             Target::Spv);
 }
@@ -69,7 +94,7 @@ TEST_P(CompileOpenGLToSpirvTest, FromFile)
 // SPIR-V.
 TEST_P(VulkanSemantics, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::Vulkan,
                             Target::Spv);
 }
@@ -78,7 +103,7 @@ TEST_P(VulkanSemantics, FromFile)
 // SPIR-V.
 TEST_P(OpenGLSemantics, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::OpenGL,
                             Target::Spv);
 }
@@ -86,11 +111,50 @@ TEST_P(OpenGLSemantics, FromFile)
 // GLSL-level Vulkan semantics test that need to see the AST for validation.
 TEST_P(VulkanAstSemantics, FromFile)
 {
-    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::Vulkan,
                             Target::AST);
 }
 
+// HLSL-level Vulkan semantics tests.
+TEST_P(HlslIoMap, FromFile)
+{
+    loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                                 Source::HLSL, Semantics::Vulkan,
+                                 Target::Spv, GetParam().entryPoint,
+                                 GetParam().baseSamplerBinding,
+                                 GetParam().baseTextureBinding,
+                                 GetParam().baseImageBinding,
+                                 GetParam().baseUboBinding,
+                                 GetParam().autoMapBindings,
+                                 GetParam().flattenUniforms);
+}
+
+// GLSL-level Vulkan semantics tests.
+TEST_P(GlslIoMap, FromFile)
+{
+    loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                                 Source::GLSL, Semantics::Vulkan,
+                                 Target::Spv, GetParam().entryPoint,
+                                 GetParam().baseSamplerBinding,
+                                 GetParam().baseTextureBinding,
+                                 GetParam().baseImageBinding,
+                                 GetParam().baseUboBinding,
+                                 GetParam().autoMapBindings,
+                                 GetParam().flattenUniforms);
+}
+
+#ifdef AMD_EXTENSIONS
+// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled).
+// Expected to successfully generate SPIR-V.
+TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan,
+                            Target::Spv);
+}
+#endif
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileVulkanToSpirvTest,
@@ -169,12 +233,15 @@ INSTANTIATE_TEST_CASE_P(
         "spv.newTexture.frag",
         "spv.noDeadDecorations.vert",
         "spv.nonSquare.vert",
+        "spv.offsets.frag",
         "spv.Operations.frag",
         "spv.intOps.vert",
+        "spv.noWorkgroup.comp",
         "spv.precision.frag",
         "spv.prepost.frag",
         "spv.qualifiers.vert",
         "spv.shaderBallot.comp",
+        "spv.shaderDrawParams.vert",
         "spv.shaderGroupVote.comp",
         "spv.shiftOps.frag",
         "spv.simpleFunctionCall.frag",
@@ -216,6 +283,33 @@ INSTANTIATE_TEST_CASE_P(
     FileNameAsCustomTestSuffix
 );
 
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    Hlsl, HlslIoMap,
+    ::testing::ValuesIn(std::vector<IoMapData>{
+        { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, true, false },
+        { "spv.register.noautoassign.frag", "main_ep", 5, 10, 0, 15, false, false },
+        { "spv.register.autoassign-2.frag", "main", 5, 10, 0, 15, true, true },
+        { "spv.buffer.autoassign.frag", "main", 5, 10, 0, 15, true, true },
+        { "spv.rw.autoassign.frag", "main", 5, 10, 20, 15, true, true },
+        { "spv.register.autoassign.rangetest.frag", "main", 
+                glslang::TQualifier::layoutBindingEnd-2,
+                glslang::TQualifier::layoutBindingEnd+5,
+                20, true, false },
+    }),
+    FileNameAsCustomTestSuffixIoMap
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    Hlsl, GlslIoMap,
+    ::testing::ValuesIn(std::vector<IoMapData>{
+        { "spv.glsl.register.autoassign.frag", "main", 5, 10, 0, 20, true, false },
+        { "spv.glsl.register.noautoassign.frag", "main", 5, 10, 0, 15, false, false },
+    }),
+    FileNameAsCustomTestSuffixIoMap
+);
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileOpenGLToSpirvTest,
@@ -256,6 +350,16 @@ INSTANTIATE_TEST_CASE_P(
     })),
     FileNameAsCustomTestSuffix
 );
+
+#ifdef AMD_EXTENSIONS
+INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileVulkanToSpirvTestAMD,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.float16.frag",
+    })),
+    FileNameAsCustomTestSuffix
+);
+#endif
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index 1dff65aca07373d23fe321d8e1d2fa4162bdacb3..db2b81d1a0565c1be4e11f9f0e4158a8fcefe35c 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -74,7 +74,7 @@ EShMessages DeriveOptions(Source source, Semantics semantics, Target target)
         case Source::GLSL:
             break;
         case Source::HLSL:
-            result = EShMsgReadHlsl;
+            result = static_cast<EShMessages>(result | EShMsgReadHlsl);
             break;
     }
 
@@ -84,9 +84,11 @@ EShMessages DeriveOptions(Source source, Semantics semantics, Target target)
             break;
         case Target::Spv:
             result = static_cast<EShMessages>(result | EShMsgSpvRules);
+            result = static_cast<EShMessages>(result | EShMsgKeepUncalled);
             break;
         case Target::BothASTAndSpv:
             result = static_cast<EShMessages>(result | EShMsgSpvRules | EShMsgAST);
+            result = static_cast<EShMessages>(result | EShMsgKeepUncalled);
             break;
     };
 
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 81930125b201ea48b961af70d2d60d1d26d80d8c..e795e8dc90da56efc5ccca34a7abfabde20a791c 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -54,14 +54,6 @@
 #include "Initializer.h"
 #include "Settings.h"
 
-// We need CMake to provide us the absolute path to the directory containing
-// test files, so we are certain to find those files no matter where the test
-// harness binary is generated. This provides out-of-source build capability.
-#ifndef GLSLANG_TEST_DIRECTORY
-#error \
-    "GLSLANG_TEST_DIRECTORY needs to be defined for gtest to locate test files."
-#endif
-
 namespace glslangtest {
 
 // This function is used to provide custom test name suffixes based on the
@@ -204,11 +196,14 @@ public:
     // the result and returns disassembly text.
     GlslangResult compileAndLink(
             const std::string shaderName, const std::string& code,
-            const std::string& entryPointName, EShMessages controls)
+            const std::string& entryPointName, EShMessages controls,
+            bool flattenUniformArrays = false)
     {
         const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
 
         glslang::TShader shader(kind);
+        shader.setFlattenUniformArrays(flattenUniformArrays);
+
         bool success = compile(&shader, code, entryPointName, controls);
 
         glslang::TProgram program;
@@ -234,6 +229,58 @@ public:
         }
     }
 
+    // Compiles and links the given source |code| of the given shader
+    // |stage| into the target under the semantics specified via |controls|.
+    // Returns a GlslangResult instance containing all the information generated
+    // during the process. If the target includes SPIR-V, also disassembles
+    // the result and returns disassembly text.
+    GlslangResult compileLinkIoMap(
+            const std::string shaderName, const std::string& code,
+            const std::string& entryPointName, EShMessages controls,
+            int baseSamplerBinding,
+            int baseTextureBinding,
+            int baseImageBinding,
+            int baseUboBinding,
+            bool autoMapBindings,
+            bool flattenUniformArrays)
+    {
+        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+
+        glslang::TShader shader(kind);
+        shader.setShiftSamplerBinding(baseSamplerBinding);
+        shader.setShiftTextureBinding(baseTextureBinding);
+        shader.setShiftImageBinding(baseImageBinding);
+        shader.setShiftUboBinding(baseUboBinding);
+        shader.setAutoMapBindings(autoMapBindings);
+        shader.setFlattenUniformArrays(flattenUniformArrays);
+
+        bool success = compile(&shader, code, entryPointName, controls);
+
+        glslang::TProgram program;
+        program.addShader(&shader);
+        
+        success &= program.link(controls);
+        success &= program.mapIO();
+
+        spv::SpvBuildLogger logger;
+
+        if (success && (controls & EShMsgSpvRules)) {
+            std::vector<uint32_t> spirv_binary;
+            glslang::GlslangToSpv(*program.getIntermediate(kind),
+                                  spirv_binary, &logger);
+
+            std::ostringstream disassembly_stream;
+            spv::Parameterize();
+            spv::Disassemble(disassembly_stream, spirv_binary);
+            return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
+                    program.getInfoLog(), program.getInfoDebugLog(),
+                    logger.getAllMessages(), disassembly_stream.str()};
+        } else {
+            return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
+                    program.getInfoLog(), program.getInfoDebugLog(), "", ""};
+        }
+    }
+
     // This is like compileAndLink but with remapping of the SPV binary
     // through spirvbin_t::remap().  While technically this could be merged
     // with compileAndLink() above (with the remap step optionally being a no-op)
@@ -347,6 +394,67 @@ public:
                                     expectedOutputFname);
     }
 
+    void loadFileCompileFlattenUniformsAndCheck(const std::string& testDir,
+                                                const std::string& testName,
+                                                Source source,
+                                                Semantics semantics,
+                                                Target target,
+                                                const std::string& entryPointName="")
+    {
+        const std::string inputFname = testDir + "/" + testName;
+        const std::string expectedOutputFname =
+            testDir + "/baseResults/" + testName + ".out";
+        std::string input, expectedOutput;
+
+        tryLoadFile(inputFname, "input", &input);
+        tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
+
+        const EShMessages controls = DeriveOptions(source, semantics, target);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, true);
+
+        // Generate the hybrid output in the way of glslangValidator.
+        std::ostringstream stream;
+        outputResultToStream(&stream, result, controls);
+
+        checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
+                                    expectedOutputFname);
+    }
+
+    void loadFileCompileIoMapAndCheck(const std::string& testDir,
+                                      const std::string& testName,
+                                      Source source,
+                                      Semantics semantics,
+                                      Target target,
+                                      const std::string& entryPointName,
+                                      int baseSamplerBinding,
+                                      int baseTextureBinding,
+                                      int baseImageBinding,
+                                      int baseUboBinding,
+                                      bool autoMapBindings,
+                                      bool flattenUniformArrays)
+    {
+        const std::string inputFname = testDir + "/" + testName;
+        const std::string expectedOutputFname =
+            testDir + "/baseResults/" + testName + ".out";
+        std::string input, expectedOutput;
+
+        tryLoadFile(inputFname, "input", &input);
+        tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
+
+        const EShMessages controls = DeriveOptions(source, semantics, target);
+        GlslangResult result = compileLinkIoMap(testName, input, entryPointName, controls,
+                                                baseSamplerBinding, baseTextureBinding, baseImageBinding, baseUboBinding,
+                                                autoMapBindings,
+                                                flattenUniformArrays);
+
+        // Generate the hybrid output in the way of glslangValidator.
+        std::ostringstream stream;
+        outputResultToStream(&stream, result, controls);
+
+        checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
+                                    expectedOutputFname);
+    }
+
     void loadFileCompileRemapAndCheck(const std::string& testDir,
                                       const std::string& testName,
                                       Source source,
diff --git a/gtests/main.cpp b/gtests/main.cpp
index b9806aa255f12d12e09f451f76e719d246777398..35f30db9cfa134f00fcf3c52c8233e184878d663 100644
--- a/gtests/main.cpp
+++ b/gtests/main.cpp
@@ -33,6 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 
 #include <memory>
+#include <string>
 
 #include <gtest/gtest.h>
 
@@ -49,9 +50,19 @@ int main(int argc, char** argv)
     glslangtest::GlobalTestSettings.initializer = initializer.get();
 
     for (int i = 1; i < argc; ++i) {
-        if (!strncmp("--update-mode", argv[i], 13)) {
+        if (std::string("--update-mode") == argv[i]) {
             glslangtest::GlobalTestSettings.updateMode = true;
-            break;
+        }
+        if (std::string("--test-root") == argv[i]) {
+            // Allow the user set the tets root directory.  This is useful
+            // for testing with files from another source tree.
+            if (i + 1 < argc) {
+                glslangtest::GlobalTestSettings.testRoot = argv[i + 1];
+                i++;
+            } else {
+                printf("error: --test-root requires an argument\n");
+                return 1;
+            }
         }
     }
 
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index c7537e27126ae6c5fa9c57b77c80e76f434ab616..ec5f1a569ea6d174713134f48816e9b0c5275df7 100755
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -1,4 +1,5 @@
 set(SOURCES
+    hlslAttributes.cpp
     hlslParseHelper.cpp
     hlslScanContext.cpp
     hlslOpMap.cpp
@@ -6,7 +7,8 @@ set(SOURCES
     hlslGrammar.cpp
     hlslParseables.cpp)
 
-set(HEADERS
+  set(HEADERS
+    hlslAttributes.h
     hlslParseHelper.h
     hlslTokens.h
     hlslScanContext.h
diff --git a/hlsl/hlslAttributes.cpp b/hlsl/hlslAttributes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..966ff35210152713c2b761c71bc5a123a9822b0f
--- /dev/null
+++ b/hlsl/hlslAttributes.cpp
@@ -0,0 +1,110 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of Google, Inc., nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "hlslAttributes.h"
+#include <cstdlib>
+#include <cctype>
+
+namespace glslang {
+    // Map the given string to an attribute enum from TAttributeType,
+    // or EatNone if invalid.
+    TAttributeType TAttributeMap::attributeFromName(const TString& name)
+    {
+        // These are case insensitive.
+        TString lowername(name);
+        std::transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
+
+        if (lowername == "allow_uav_condition")
+            return EatAllow_uav_condition;
+        else if (lowername == "branch")
+            return EatBranch;
+        else if (lowername == "call")
+            return EatCall;
+        else if (lowername == "domain")
+            return EatDomain;
+        else if (lowername == "earlydepthstencil")
+            return EatEarlyDepthStencil;
+        else if (lowername == "fastopt")
+            return EatFastOpt;
+        else if (lowername == "flatten")
+            return EatFlatten;
+        else if (lowername == "forcecase")
+            return EatForceCase;
+        else if (lowername == "instance")
+            return EatInstance;
+        else if (lowername == "maxtessfactor")
+            return EatMaxTessFactor;
+        else if (lowername == "maxvertexcount")
+            return EatMaxVertexCount;
+        else if (lowername == "numthreads")
+            return EatNumThreads;
+        else if (lowername == "outputcontrolpoints")
+            return EatOutputControlPoints;
+        else if (lowername == "outputtopology")
+            return EatOutputTopology;
+        else if (lowername == "partitioning")
+            return EatPartitioning;
+        else if (lowername == "patchconstantfunc")
+            return EatPatchConstantFunc;
+        else if (lowername == "unroll")
+            return EatUnroll;
+        else
+            return EatNone;
+    }
+
+    // Look up entry, inserting if it's not there, and if name is a valid attribute name
+    // as known by attributeFromName.
+    TAttributeType TAttributeMap::setAttribute(const TString* name, TIntermAggregate* value)
+    {
+        if (name == nullptr)
+            return EatNone;
+
+        const TAttributeType attr = attributeFromName(*name);
+
+        if (attr != EatNone)
+            attributes[attr] = value;
+ 
+        return attr;
+    }
+
+    // Look up entry (const version), and return aggregate node.  This cannot change the map.
+    const TIntermAggregate* TAttributeMap::operator[](TAttributeType attr) const
+    {
+        const auto entry = attributes.find(attr);
+
+        return (entry == attributes.end()) ? nullptr : entry->second;
+    }
+    
+} // end namespace glslang
diff --git a/hlsl/hlslAttributes.h b/hlsl/hlslAttributes.h
new file mode 100644
index 0000000000000000000000000000000000000000..312a4564262277952d145914977adfc6f49e566b
--- /dev/null
+++ b/hlsl/hlslAttributes.h
@@ -0,0 +1,97 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of Google, Inc., nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef HLSLATTRIBUTES_H_
+#define HLSLATTRIBUTES_H_
+
+#include <unordered_map>
+#include <functional>
+#include "hlslScanContext.h"
+#include "../glslang/Include/Common.h"
+
+namespace glslang {
+    enum TAttributeType {
+        EatNone,
+        EatAllow_uav_condition,
+        EatBranch,
+        EatCall,
+        EatDomain,
+        EatEarlyDepthStencil,
+        EatFastOpt,
+        EatFlatten,
+        EatForceCase,
+        EatInstance,
+        EatMaxTessFactor,
+        EatNumThreads,
+        EatMaxVertexCount,
+        EatOutputControlPoints,
+        EatOutputTopology,
+        EatPartitioning,
+        EatPatchConstantFunc,
+        EatUnroll,
+    };
+}
+
+namespace std {
+    // Allow use of TAttributeType enum in hash_map without calling code having to cast.
+    template <> struct hash<glslang::TAttributeType> {
+        std::size_t operator()(glslang::TAttributeType attr) const {
+            return std::hash<int>()(int(attr));
+        }
+    };
+} // end namespace std
+
+namespace glslang {
+    class TIntermAggregate;
+
+    class TAttributeMap {
+    public:
+        // Search for and potentially add the attribute into the map.  Return the
+        // attribute type enum for it, if found, else EatNone.
+        TAttributeType setAttribute(const TString* name, TIntermAggregate* value);
+
+        // Const lookup: search for (but do not modify) the attribute in the map.
+        const TIntermAggregate* operator[](TAttributeType) const;
+
+    protected:
+        // Find an attribute enum given its name.
+        static TAttributeType attributeFromName(const TString&);
+
+        std::unordered_map<TAttributeType, TIntermAggregate*> attributes;
+    };
+} // end namespace glslang
+
+
+#endif // HLSLATTRIBUTES_H_
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index d458a882c307942a7356201334f86c832cf4eb90..b874aa8c9cb433008747a115cb14b8111e7660b7 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -53,6 +53,7 @@
 
 #include "hlslTokens.h"
 #include "hlslGrammar.h"
+#include "hlslAttributes.h"
 
 namespace glslang {
 
@@ -84,6 +85,20 @@ bool HlslGrammar::acceptIdentifier(HlslToken& idToken)
         return true;
     }
 
+    // Even though "sample" is a keyword (for interpolation modifiers), it IS still accepted as
+    // an identifier.  This appears to be a solitary exception: other interp modifier keywords such
+    // as "linear" or "centroid" NOT valid identifiers.  This code special cases "sample",
+    // so e.g, "int sample;" is accepted.
+    if (peekTokenClass(EHTokSample)) {
+        token.string     = NewPoolTString("sample");
+        token.tokenClass = EHTokIdentifier;
+        token.symbol     = nullptr;
+
+        idToken          = token;
+        advanceToken();
+        return true;
+    }
+
     return false;
 }
 
@@ -268,10 +283,14 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
     node = nullptr;
     bool list = false;
 
+    // attributes
+    TAttributeMap attributes;
+    acceptAttributes(attributes);
+
     // typedef
     bool typedefDecl = acceptTokenClass(EHTokTypedef);
 
-    TType type;
+    TType declaredType;
 
     // DX9 sampler declaration use a different syntax
     // DX9 shaders need to run through HLSL compiler (fxc) via a back compat mode, it isn't going to
@@ -280,29 +299,23 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
     // As such, the sampler keyword in D3D10+ turns into an automatic sampler type, and is commonly used
     // For that reason, this line is commented out 
 
-   // if (acceptSamplerDeclarationDX9(type))
+   // if (acceptSamplerDeclarationDX9(declaredType))
    //     return true;
 
     // fully_specified_type
-    if (! acceptFullySpecifiedType(type))
+    if (! acceptFullySpecifiedType(declaredType))
         return false;
 
-    if (type.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel()) {
-        if (type.getBasicType() == EbtSampler) {
-            // Sampler/textures are uniform by default (if no explicit qualifier is present) in
-            // HLSL.  This line silently converts samplers *explicitly* declared static to uniform,
-            // which is incorrect but harmless.
-            type.getQualifier().storage = EvqUniform; 
-        } else {
-            type.getQualifier().storage = EvqGlobal;
-        }
-    }
-
     // identifier
     HlslToken idToken;
     while (acceptIdentifier(idToken)) {
+        TString* fnName = idToken.string;
+
+        // Potentially rename shader entry point function.  No-op most of the time.
+        parseContext.renameShaderFunction(fnName);
+
         // function_parameters
-        TFunction& function = *new TFunction(idToken.string, type);
+        TFunction& function = *new TFunction(fnName, declaredType);
         if (acceptFunctionParameters(function)) {
             // post_decls
             acceptPostDecls(function.getWritableType().getQualifier());
@@ -313,27 +326,48 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
                     parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
-                return acceptFunctionDefinition(function, node);
+                return acceptFunctionDefinition(function, node, attributes);
             } else {
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
                 parseContext.handleFunctionDeclarator(idToken.loc, function, true);
             }
         } else {
-            // a variable declaration
+            // A variable declaration. Fix the storage qualifier if it's a global.
+            if (declaredType.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel())
+                declaredType.getQualifier().storage = EvqUniform;
 
-            // array_specifier
+            // We can handle multiple variables per type declaration, so 
+            // the number of types can expand when arrayness is different.
+            TType variableType;
+            variableType.shallowCopy(declaredType);
+
+            // recognize array_specifier
             TArraySizes* arraySizes = nullptr;
             acceptArraySpecifier(arraySizes);
 
+            // Fix arrayness in the variableType
+            if (declaredType.isImplicitlySizedArray()) {
+                // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
+                // of different sizes, for this case sharing the shallow copy of arrayness
+                // with the parseType oversubscribes it, so get a deep copy of the arrayness.
+                variableType.newArraySizes(declaredType.getArraySizes());
+            }
+            if (arraySizes || variableType.isArray()) {
+                // In the most general case, arrayness is potentially coming both from the
+                // declared type and from the variable: "int[] a[];" or just one or the other.
+                // Merge it all to the variableType, so all arrayness is part of the variableType.
+                parseContext.arrayDimMerge(variableType, arraySizes);
+            }
+
             // samplers accept immediate sampler state
-            if (type.getBasicType() == EbtSampler) {
+            if (variableType.getBasicType() == EbtSampler) {
                 if (! acceptSamplerState())
                     return false;
             }
 
             // post_decls
-            acceptPostDecls(type.getQualifier());
+            acceptPostDecls(variableType.getQualifier());
 
             // EQUAL assignment_expression
             TIntermTyped* expressionNode = nullptr;
@@ -346,18 +380,29 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
                 }
             }
 
-            if (typedefDecl)
-                parseContext.declareTypedef(idToken.loc, *idToken.string, type, arraySizes);
-            else if (type.getBasicType() == EbtBlock)
-                parseContext.declareBlock(idToken.loc, type, idToken.string);
-            else {
-                // Declare the variable and add any initializer code to the AST.
-                // The top-level node is always made into an aggregate, as that's
-                // historically how the AST has been.
-                node = intermediate.growAggregate(node,
-                                                  parseContext.declareVariable(idToken.loc, *idToken.string, type,
-                                                                               arraySizes, expressionNode),
-                                                  idToken.loc);
+            // Hand off the actual declaration
+
+            // TODO: things scoped within an annotation need their own name space;
+            // TODO: strings are not yet handled.
+            if (variableType.getBasicType() != EbtString && parseContext.getAnnotationNestingLevel() == 0) {
+                if (typedefDecl)
+                    parseContext.declareTypedef(idToken.loc, *idToken.string, variableType);
+                else if (variableType.getBasicType() == EbtBlock)
+                    parseContext.declareBlock(idToken.loc, variableType, idToken.string);
+                else {
+                    if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
+                        // this isn't really an individual variable, but a member of the $Global buffer
+                        parseContext.growGlobalUniformBlock(idToken.loc, variableType, *idToken.string);
+                    } else {
+                        // Declare the variable and add any initializer code to the AST.
+                        // The top-level node is always made into an aggregate, as that's
+                        // historically how the AST has been.
+                        node = intermediate.growAggregate(node,
+                                                          parseContext.declareVariable(idToken.loc, *idToken.string, variableType,
+                                                                                       expressionNode),
+                                                          idToken.loc);
+                    }
+                }
             }
         }
 
@@ -412,7 +457,7 @@ bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node)
         return false;
     }
 
-    node = parseContext.declareVariable(idToken.loc, *idToken.string, type, 0, expressionNode);
+    node = parseContext.declareVariable(idToken.loc, *idToken.string, type, expressionNode);
 
     return true;
 }
@@ -431,16 +476,34 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type)
     TSourceLoc loc = token.loc;
 
     // type_specifier
-    if (! acceptType(type))
+    if (! acceptType(type)) {
+        // If this is not a type, we may have inadvertently gone down a wrong path
+        // py parsing "sample", which can be treated like either an identifier or a
+        // qualifier.  Back it out, if we did.
+        if (qualifier.sample)
+            recedeToken();
+
         return false;
+    }
     if (type.getBasicType() == EbtBlock) {
         // the type was a block, which set some parts of the qualifier
         parseContext.mergeQualifiers(type.getQualifier(), qualifier);
         // further, it can create an anonymous instance of the block
         if (peekTokenClass(EHTokSemicolon))
             parseContext.declareBlock(loc, type);
-    } else
-        type.getQualifier() = qualifier;
+    } else {
+        // Some qualifiers are set when parsing the type.  Merge those with
+        // whatever comes from acceptQualifier.
+        assert(qualifier.layoutFormat == ElfNone);
+
+        qualifier.layoutFormat = type.getQualifier().layoutFormat;
+        qualifier.precision    = type.getQualifier().precision;
+
+        if (type.getQualifier().storage == EvqVaryingOut)
+            qualifier.storage      = type.getQualifier().storage;
+
+        type.getQualifier()    = qualifier;
+    }
 
     return true;
 }
@@ -455,7 +518,7 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
     do {
         switch (peek()) {
         case EHTokStatic:
-            // normal glslang default
+            qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
             break;
         case EHTokExtern:
             // TODO: no meaning in glslang?
@@ -491,10 +554,10 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
             qualifier.sample = true;
             break;
         case EHTokRowMajor:
-            qualifier.layoutMatrix = ElmRowMajor;
+            qualifier.layoutMatrix = ElmColumnMajor;
             break;
         case EHTokColumnMajor:
-            qualifier.layoutMatrix = ElmColumnMajor;
+            qualifier.layoutMatrix = ElmRowMajor;
             break;
         case EHTokPrecise:
             qualifier.noContraction = true;
@@ -512,6 +575,35 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
             if (! acceptLayoutQualifierList(qualifier))
                 return false;
             continue;
+
+        // GS geometries: these are specified on stage input variables, and are an error (not verified here)
+        // for output variables.
+        case EHTokPoint:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgPoints))
+                return false;
+            break;
+        case EHTokLine:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgLines))
+                return false;
+            break;
+        case EHTokTriangle:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgTriangles))
+                return false;
+            break;
+        case EHTokLineAdj:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgLinesAdjacency))
+                return false;
+            break; 
+        case EHTokTriangleAdj:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgTrianglesAdjacency))
+                return false;
+            break; 
+            
         default:
             return true;
         }
@@ -576,7 +668,7 @@ bool HlslGrammar::acceptLayoutQualifierList(TQualifier& qualifier)
 //      | UINT
 //      | BOOL
 //
-bool HlslGrammar::acceptTemplateType(TBasicType& basicType)
+bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType)
 {
     switch (peek()) {
     case EHTokFloat:
@@ -620,7 +712,7 @@ bool HlslGrammar::acceptVectorTemplateType(TType& type)
     }
 
     TBasicType basicType;
-    if (! acceptTemplateType(basicType)) {
+    if (! acceptTemplateVecMatBasicType(basicType)) {
         expected("scalar type");
         return false;
     }
@@ -672,7 +764,7 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type)
     }
 
     TBasicType basicType;
-    if (! acceptTemplateType(basicType)) {
+    if (! acceptTemplateVecMatBasicType(basicType)) {
         expected("scalar type");
         return false;
     }
@@ -721,6 +813,56 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type)
     return true;
 }
 
+// layout_geometry
+//      : LINESTREAM
+//      | POINTSTREAM
+//      | TRIANGLESTREAM
+//
+bool HlslGrammar::acceptOutputPrimitiveGeometry(TLayoutGeometry& geometry)
+{
+    // read geometry type
+    const EHlslTokenClass geometryType = peek();
+
+    switch (geometryType) {
+    case EHTokPointStream:    geometry = ElgPoints;        break;
+    case EHTokLineStream:     geometry = ElgLineStrip;     break;
+    case EHTokTriangleStream: geometry = ElgTriangleStrip; break;
+    default:
+        return false;  // not a layout geometry
+    }
+
+    advanceToken();  // consume the layout keyword
+    return true;
+}
+
+// stream_out_template_type
+//      : output_primitive_geometry_type LEFT_ANGLE type RIGHT_ANGLE
+//
+bool HlslGrammar::acceptStreamOutTemplateType(TType& type, TLayoutGeometry& geometry)
+{
+    geometry = ElgNone;
+
+    if (! acceptOutputPrimitiveGeometry(geometry))
+        return false;
+
+    if (! acceptTokenClass(EHTokLeftAngle))
+        return false;
+    
+    if (! acceptType(type)) {
+        expected("stream output type");
+        return false;
+    }
+
+    type.getQualifier().storage = EvqVaryingOut;
+
+    if (! acceptTokenClass(EHTokRightAngle)) {
+        expected("right angle bracket");
+        return false;
+    }
+
+    return true;
+}
+    
 // annotations
 //      : LEFT_ANGLE declaration SEMI_COLON ... declaration SEMICOLON RIGHT_ANGLE
 //
@@ -806,6 +948,13 @@ bool HlslGrammar::acceptSamplerType(TType& type)
 //      | TEXTURECUBEARRAY
 //      | TEXTURE2DMS
 //      | TEXTURE2DMSARRAY
+//      | RWBUFFER
+//      | RWTEXTURE1D
+//      | RWTEXTURE1DARRAY
+//      | RWTEXTURE2D
+//      | RWTEXTURE2DARRAY
+//      | RWTEXTURE3D
+
 bool HlslGrammar::acceptTextureType(TType& type)
 {
     const EHlslTokenClass textureType = peek();
@@ -813,6 +962,7 @@ bool HlslGrammar::acceptTextureType(TType& type)
     TSamplerDim dim = EsdNone;
     bool array = false;
     bool ms    = false;
+    bool image = false;
 
     switch (textureType) {
     case EHTokBuffer:            dim = EsdBuffer;                      break;
@@ -825,6 +975,12 @@ bool HlslGrammar::acceptTextureType(TType& type)
     case EHTokTextureCubearray:  dim = EsdCube; array = true;          break;
     case EHTokTexture2DMS:       dim = Esd2D; ms = true;               break;
     case EHTokTexture2DMSarray:  dim = Esd2D; array = true; ms = true; break;
+    case EHTokRWBuffer:          dim = EsdBuffer; image=true;          break;
+    case EHTokRWTexture1d:       dim = Esd1D; array=false; image=true; break;
+    case EHTokRWTexture1darray:  dim = Esd1D; array=true;  image=true; break;
+    case EHTokRWTexture2d:       dim = Esd2D; array=false; image=true; break;
+    case EHTokRWTexture2darray:  dim = Esd2D; array=true;  image=true; break;
+    case EHTokRWTexture3d:       dim = Esd3D; array=false; image=true; break;
     default:
         return false;  // not a texture declaration
     }
@@ -835,7 +991,7 @@ bool HlslGrammar::acceptTextureType(TType& type)
     
     TIntermTyped* msCount = nullptr;
 
-    // texture type: required for multisample types!
+    // texture type: required for multisample types and RWBuffer/RWTextures!
     if (acceptTokenClass(EHTokLeftAngle)) {
         if (! acceptType(txType)) {
             expected("scalar or vector type");
@@ -866,12 +1022,6 @@ bool HlslGrammar::acceptTextureType(TType& type)
             return false;
         }
 
-        if (txType.getVectorSize() != 1 && txType.getVectorSize() != 4) {
-            // TODO: handle vec2/3 types
-            expected("vector size not yet supported in texture type");
-            return false;
-        }
-
         if (ms && acceptTokenClass(EHTokComma)) {
             // read sample count for multisample types, if given
             if (! peekTokenClass(EHTokIntConstant)) {
@@ -890,22 +1040,38 @@ bool HlslGrammar::acceptTextureType(TType& type)
     } else if (ms) {
         expected("texture type for multisample");
         return false;
+    } else if (image) {
+        expected("type for RWTexture/RWBuffer");
+        return false;
     }
 
     TArraySizes* arraySizes = nullptr;
-    const bool shadow = txType.isScalar() || (txType.isVector() && txType.getVectorSize() == 1);
+    const bool shadow = false; // declared on the sampler
 
     TSampler sampler;
+    TLayoutFormat format = ElfNone;
 
-    // Buffers are combined.
-    if (dim == EsdBuffer) {
+    // Buffer, RWBuffer and RWTexture (images) require a TLayoutFormat.  We handle only a limit set.
+    if (image || dim == EsdBuffer)
+        format = parseContext.getLayoutFromTxType(token.loc, txType);
+
+    // Non-image Buffers are combined
+    if (dim == EsdBuffer && !image) {
         sampler.set(txType.getBasicType(), dim, array);
     } else {
         // DX10 textures are separated.  TODO: DX9.
-        sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms);
+        if (image) {
+            sampler.setImage(txType.getBasicType(), dim, array, shadow, ms);
+        } else {
+            sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms);
+        }
     }
+
+    // Remember the declared vector size.
+    sampler.vectorSize = txType.getVectorSize();
     
     type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
+    type.getQualifier().layoutFormat = format;
 
     return true;
 }
@@ -916,6 +1082,14 @@ bool HlslGrammar::acceptTextureType(TType& type)
 // Otherwise, return false, and don't advance
 bool HlslGrammar::acceptType(TType& type)
 {
+    // Basic types for min* types, broken out here in case of future
+    // changes, e.g, to use native halfs.
+    static const TBasicType min16float_bt = EbtFloat;
+    static const TBasicType min10float_bt = EbtFloat;
+    static const TBasicType min16int_bt   = EbtInt;
+    static const TBasicType min12int_bt   = EbtInt;
+    static const TBasicType min16uint_bt  = EbtUint;
+
     switch (peek()) {
     case EHTokVector:
         return acceptVectorTemplateType(type);
@@ -925,6 +1099,20 @@ bool HlslGrammar::acceptType(TType& type)
         return acceptMatrixTemplateType(type);
         break;
 
+    case EHTokPointStream:            // fall through
+    case EHTokLineStream:             // ...
+    case EHTokTriangleStream:         // ...
+        {
+            TLayoutGeometry geometry;
+            if (! acceptStreamOutTemplateType(type, geometry))
+                return false;
+
+            if (! parseContext.handleOutputGeometry(token.loc, geometry))
+                return false;
+            
+            return true;
+        }
+
     case EHTokSampler:                // fall through
     case EHTokSampler1d:              // ...
     case EHTokSampler2d:              // ...
@@ -945,6 +1133,12 @@ bool HlslGrammar::acceptType(TType& type)
     case EHTokTextureCubearray:       // ...
     case EHTokTexture2DMS:            // ...
     case EHTokTexture2DMSarray:       // ...
+    case EHTokRWTexture1d:            // ...
+    case EHTokRWTexture1darray:       // ...
+    case EHTokRWTexture2d:            // ...
+    case EHTokRWTexture2darray:       // ...
+    case EHTokRWTexture3d:            // ...
+    case EHTokRWBuffer:               // ...
         return acceptTextureType(type);
         break;
 
@@ -1061,6 +1255,91 @@ bool HlslGrammar::acceptType(TType& type)
         new(&type) TType(EbtBool, EvqTemporary, 4);
         break;
 
+    case EHTokMin16float:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16float1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16float2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16float3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16float4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin10float:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin10float1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin10float2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin10float3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin10float4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin16int:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16int1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16int2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16int3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16int4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin12int:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin12int1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin12int2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin12int3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin12int4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin16uint:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16uint1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16uint2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16uint3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16uint4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 4);
+        break;
+
     case EHTokInt1x1:
         new(&type) TType(EbtInt, EvqTemporary, 0, 1, 1);
         break;
@@ -1515,8 +1794,14 @@ bool HlslGrammar::acceptParameterDeclaration(TFunction& function)
     // array_specifier
     TArraySizes* arraySizes = nullptr;
     acceptArraySpecifier(arraySizes);
-    if (arraySizes)
+    if (arraySizes) {
+        if (arraySizes->isImplicit()) {
+            parseContext.error(token.loc, "function parameter array cannot be implicitly sized", "", "");
+            return false;
+        }
+
         type->newArraySizes(*arraySizes);
+    }
 
     // post_decls
     acceptPostDecls(type->getQualifier());
@@ -1531,13 +1816,13 @@ bool HlslGrammar::acceptParameterDeclaration(TFunction& function)
 
 // Do the work to create the function definition in addition to
 // parsing the body (compound_statement).
-bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node)
+bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node, const TAttributeMap& attributes)
 {
     TFunction& functionDeclarator = parseContext.handleFunctionDeclarator(token.loc, function, false /* not prototype */);
     TSourceLoc loc = token.loc;
 
     // This does a pushScope()
-    node = parseContext.handleFunctionDefinition(loc, functionDeclarator);
+    node = parseContext.handleFunctionDefinition(loc, functionDeclarator, attributes);
 
     // compound_statement
     TIntermNode* functionBody = nullptr;
@@ -1624,7 +1909,8 @@ bool HlslGrammar::acceptExpression(TIntermTyped*& node)
 }
 
 // initializer
-//      : LEFT_BRACE initializer_list RIGHT_BRACE
+//      : LEFT_BRACE RIGHT_BRACE
+//      | LEFT_BRACE initializer_list RIGHT_BRACE
 //
 // initializer_list
 //      : assignment_expression COMMA assignment_expression COMMA ...
@@ -1635,8 +1921,15 @@ bool HlslGrammar::acceptInitializer(TIntermTyped*& node)
     if (! acceptTokenClass(EHTokLeftBrace))
         return false;
 
-    // initializer_list
+    // RIGHT_BRACE
     TSourceLoc loc = token.loc;
+    if (acceptTokenClass(EHTokRightBrace)) {
+        // a zero-length initializer list
+        node = intermediate.makeAggregate(loc);
+        return true;
+    }
+
+    // initializer_list
     node = nullptr;
     do {
         // assignment_expression
@@ -1707,6 +2000,8 @@ bool HlslGrammar::acceptAssignmentExpression(TIntermTyped*& node)
     }
 
     node = parseContext.handleAssign(loc, assignOp, node, rightNode);
+    node = parseContext.handleLvalue(loc, "assign", node);
+
     if (node == nullptr) {
         parseContext.error(loc, "could not create assignment", "", "");
         return false;
@@ -1871,6 +2166,10 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node)
 
     node = intermediate.addUnaryMath(unaryOp, node, loc);
 
+    // These unary ops require lvalues
+    if (unaryOp == EOpPreIncrement || unaryOp == EOpPreDecrement)
+        node = parseContext.handleLvalue(loc, "unary operator", node);
+
     return node != nullptr;
 }
 
@@ -1912,7 +2211,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
     } else if (acceptIdentifier(idToken)) {
         // identifier or function_call name
         if (! peekTokenClass(EHTokLeftParen)) {
-            node = parseContext.handleVariable(idToken.loc, idToken.symbol, token.string);
+            node = parseContext.handleVariable(idToken.loc, idToken.symbol, idToken.string);
         } else if (acceptFunctionCall(idToken, node)) {
             // function_call (nothing else to do yet)
         } else {
@@ -1924,6 +2223,20 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
         return false;
     }
 
+    // This is to guarantee we do this no matter how we get out of the stack frame.
+    // This way there's no bug if an early return forgets to do it.
+    struct tFinalize {
+        tFinalize(HlslParseContext& p) : parseContext(p) { }
+        ~tFinalize() { parseContext.finalizeFlattening(); }
+       HlslParseContext& parseContext;
+    } finalize(parseContext);
+
+    // Initialize the flattening accumulation data, so we can track data across multiple bracket or
+    // dot operators.  This can also be nested, e.g, for [], so we have to track each nesting
+    // level: hence the init and finalize.  Even though in practice these must be
+    // constants, they are parsed no matter what.
+    parseContext.initFlattening();
+
     // Something was found, chain as many postfix operations as exist.
     do {
         TSourceLoc loc = token.loc;
@@ -1957,7 +2270,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
             node = parseContext.handleDotDereference(field.loc, node, *field.string);
 
             // In the event of a method node, we look for an open paren and accept the function call.
-            if (node->getAsMethodNode() != nullptr && peekTokenClass(EHTokLeftParen)) {
+            if (node != nullptr && node->getAsMethodNode() != nullptr && peekTokenClass(EHTokLeftParen)) {
                 if (! acceptFunctionCall(field, node, base)) {
                     expected("function parameters");
                     return false;
@@ -1985,6 +2298,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
         case EOpPostDecrement:
             // DEC_OP
             node = intermediate.addUnaryMath(postOp, node, loc);
+            node = parseContext.handleLvalue(loc, "unary operator", node);
             break;
         default:
             assert(0);
@@ -2181,7 +2495,8 @@ bool HlslGrammar::acceptStatement(TIntermNode*& statement)
     statement = nullptr;
 
     // attributes
-    acceptAttributes();
+    TAttributeMap attributes;
+    acceptAttributes(attributes);
 
     // attributed_statement
     switch (peek()) {
@@ -2254,42 +2569,70 @@ bool HlslGrammar::acceptStatement(TIntermNode*& statement)
 //      | FLATTEN
 //      | FORCECASE
 //      | CALL
-//
-void HlslGrammar::acceptAttributes()
+//      | DOMAIN
+//      | EARLYDEPTHSTENCIL
+//      | INSTANCE
+//      | MAXTESSFACTOR
+//      | OUTPUTCONTROLPOINTS
+//      | OUTPUTTOPOLOGY
+//      | PARTITIONING
+//      | PATCHCONSTANTFUNC
+//      | NUMTHREADS LEFT_PAREN x_size, y_size,z z_size RIGHT_PAREN
+//
+void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
 {
-    // For now, accept the [ XXX(X) ] syntax, but drop.
+    // For now, accept the [ XXX(X) ] syntax, but drop all but
+    // numthreads, which is used to set the CS local size.
     // TODO: subset to correct set?  Pass on?
     do {
+        HlslToken idToken;
+
         // LEFT_BRACKET?
         if (! acceptTokenClass(EHTokLeftBracket))
             return;
 
         // attribute
-        if (peekTokenClass(EHTokIdentifier)) {
-            // 'token.string' is the attribute
-            advanceToken();
+        if (acceptIdentifier(idToken)) {
+            // 'idToken.string' is the attribute
         } else if (! peekTokenClass(EHTokRightBracket)) {
             expected("identifier");
             advanceToken();
         }
 
-        // (x)
+        TIntermAggregate* expressions = nullptr;
+
+        // (x, ...)
         if (acceptTokenClass(EHTokLeftParen)) {
+            expressions = new TIntermAggregate;
+
             TIntermTyped* node;
-            if (! acceptLiteral(node))
-                expected("literal");
-            // 'node' has the literal in it
+            bool expectingExpression = false;
+            
+            while (acceptAssignmentExpression(node)) {
+                expectingExpression = false;
+                expressions->getSequence().push_back(node);
+                if (acceptTokenClass(EHTokComma))
+                    expectingExpression = true;
+            }
+
+            // 'expressions' is an aggregate with the expressions in it
             if (! acceptTokenClass(EHTokRightParen))
                 expected(")");
+
+            // Error for partial or missing expression
+            if (expectingExpression || expressions->getSequence().empty())
+                expected("expression");
         }
 
         // RIGHT_BRACKET
-        if (acceptTokenClass(EHTokRightBracket))
-            continue;
-
-        expected("]");
-        return;
+        if (!acceptTokenClass(EHTokRightBracket)) {
+            expected("]");
+            return;
+        }
 
+        // Add any values we found into the attribute map.  This accepts
+        // (and ignores) values not mapping to a known TAttributeType;
+        attributes.setAttribute(idToken.string, expressions);
     } while (true);
 }
 
@@ -2600,31 +2943,41 @@ bool HlslGrammar::acceptDefaultLabel(TIntermNode*& statement)
 }
 
 // array_specifier
-//      : LEFT_BRACKET integer_expression RGHT_BRACKET post_decls // optional
+//      : LEFT_BRACKET integer_expression RGHT_BRACKET ... // optional
+//      : LEFT_BRACKET RGHT_BRACKET // optional
 //
 void HlslGrammar::acceptArraySpecifier(TArraySizes*& arraySizes)
 {
     arraySizes = nullptr;
 
-    if (! acceptTokenClass(EHTokLeftBracket))
+    // Early-out if there aren't any array dimensions
+    if (!peekTokenClass(EHTokLeftBracket))
         return;
 
-    TSourceLoc loc = token.loc;
-    TIntermTyped* sizeExpr;
-    if (! acceptAssignmentExpression(sizeExpr)) {
-        expected("array-sizing expression");
-        return;
-    }
+    // If we get here, we have at least one array dimension.  This will track the sizes we find.
+    arraySizes = new TArraySizes;
 
-    if (! acceptTokenClass(EHTokRightBracket)) {
-        expected("]");
-        return;
-    }
+    // Collect each array dimension.
+    while (acceptTokenClass(EHTokLeftBracket)) {
+        TSourceLoc loc = token.loc;
+        TIntermTyped* sizeExpr = nullptr;
 
-    TArraySize arraySize;
-    parseContext.arraySizeCheck(loc, sizeExpr, arraySize);
-    arraySizes = new TArraySizes;
-    arraySizes->addInnerSize(arraySize);
+        // Array sizing expression is optional.  If ommitted, array will be later sized by initializer list.
+        const bool hasArraySize = acceptAssignmentExpression(sizeExpr);
+
+        if (! acceptTokenClass(EHTokRightBracket)) {
+            expected("]");
+            return;
+        }
+
+        if (hasArraySize) {
+            TArraySize arraySize;
+            parseContext.arraySizeCheck(loc, sizeExpr, arraySize);
+            arraySizes->addInnerSize(arraySize);
+        } else {
+            arraySizes->addInnerSize(0);  // sized by initializers.
+        }
+    }
 }
 
 // post_decls
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index 992eb5e986ad5eedc021af965397480d1dbbeec2..8804b217ec76ebdb1d11abac98ba299627cef68b 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -43,6 +43,8 @@
 
 namespace glslang {
 
+    class TAttributeMap; // forward declare
+    
     // Should just be the grammar aspect of HLSL.
     // Described in more detail in hlslGrammar.cpp.
 
@@ -70,9 +72,11 @@ namespace glslang {
         bool acceptQualifier(TQualifier&);
         bool acceptLayoutQualifierList(TQualifier&);
         bool acceptType(TType&);
-        bool acceptTemplateType(TBasicType&);
+        bool acceptTemplateVecMatBasicType(TBasicType&);
         bool acceptVectorTemplateType(TType&);
         bool acceptMatrixTemplateType(TType&);
+        bool acceptStreamOutTemplateType(TType&, TLayoutGeometry&);
+        bool acceptOutputPrimitiveGeometry(TLayoutGeometry&);
         bool acceptAnnotations(TQualifier&);
         bool acceptSamplerType(TType&);
         bool acceptTextureType(TType&);
@@ -80,7 +84,7 @@ namespace glslang {
         bool acceptStructDeclarationList(TTypeList*&);
         bool acceptFunctionParameters(TFunction&);
         bool acceptParameterDeclaration(TFunction&);
-        bool acceptFunctionDefinition(TFunction&, TIntermNode*&);
+        bool acceptFunctionDefinition(TFunction&, TIntermNode*&, const TAttributeMap&);
         bool acceptParenExpression(TIntermTyped*&);
         bool acceptExpression(TIntermTyped*&);
         bool acceptInitializer(TIntermTyped*&);
@@ -98,7 +102,7 @@ namespace glslang {
         bool acceptScopedStatement(TIntermNode*&);
         bool acceptScopedCompoundStatement(TIntermNode*&);
         bool acceptNestedStatement(TIntermNode*&);
-        void acceptAttributes();
+        void acceptAttributes(TAttributeMap&);
         bool acceptSelectionStatement(TIntermNode*&);
         bool acceptSwitchStatement(TIntermNode*&);
         bool acceptIterationStatement(TIntermNode*&);
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 63cd5ecf5a5df34af223790240017a54dd5f9e5f..62dac4bfa57bcc95d549ab9663b83d447d0abc82 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -37,37 +37,38 @@
 #include "hlslParseHelper.h"
 #include "hlslScanContext.h"
 #include "hlslGrammar.h"
+#include "hlslAttributes.h"
 
 #include "../glslang/MachineIndependent/Scan.h"
 #include "../glslang/MachineIndependent/preprocessor/PpContext.h"
 
 #include "../glslang/OSDependent/osinclude.h"
 
-#include <cstdarg>
 #include <algorithm>
+#include <functional>
+#include <cctype>
 
 namespace glslang {
 
-HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool /*parsingBuiltins*/,
+HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                                    int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
+                                   const TString sourceEntryPointName,
                                    bool forwardCompatible, EShMessages messages) :
-    TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
+    TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
     contextPragma(true, false),
     loopNestingLevel(0), annotationNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
-    postMainReturn(false),
+    postEntryPointReturn(false),
     limits(resources.limits),
     entryPointOutput(nullptr),
-    nextInLocation(0), nextOutLocation(0)
+    nextInLocation(0), nextOutLocation(0),
+    sourceEntryPointName(sourceEntryPointName)
 {
-    // ensure we always have a linkage node, even if empty, to simplify tree topology algorithms
-    linkage = new TIntermAggregate;
-
     globalUniformDefaults.clear();
-    globalUniformDefaults.layoutMatrix = ElmColumnMajor;
+    globalUniformDefaults.layoutMatrix = ElmRowMajor;
     globalUniformDefaults.layoutPacking = ElpStd140;
 
     globalBufferDefaults.clear();
-    globalBufferDefaults.layoutMatrix = ElmColumnMajor;
+    globalBufferDefaults.layoutMatrix = ElmRowMajor;
     globalBufferDefaults.layoutPacking = ElpStd430;
 
     globalInputDefaults.clear();
@@ -117,8 +118,6 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
     currentScanner = &input;
     ppContext.setInput(input, versionWillBeError);
 
-    HlslScanContext::fillInKeywordMap();      // TODO: right place, and include the delete too
-
     HlslScanContext scanContext(*this, ppContext);
     HlslGrammar grammar(scanContext, *this);
     if (!grammar.parse()) {
@@ -130,9 +129,304 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
         return false;
     }
 
+    finish();
+
     return numErrors == 0;
 }
 
+//
+// Return true if this l-value node should be converted in some manner.
+// For instance: turning a load aggregate into a store in an l-value.
+//
+bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const
+{
+    if (node == nullptr)
+        return false;
+
+    const TIntermAggregate* lhsAsAggregate = node->getAsAggregate();
+
+    if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad)
+        return true;
+
+    return false;
+}
+
+//
+// Return a TLayoutFormat corresponding to the given texture type.
+//
+TLayoutFormat HlslParseContext::getLayoutFromTxType(const TSourceLoc& loc, const TType& txType)
+{
+    const int components = txType.getVectorSize();
+
+    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
+        if (intermediate.getNoStorageFormat())
+            return ElfNone;
+
+        return components == 1 ? v1 :
+               components == 2 ? v2 : v4;
+    };
+
+    switch (txType.getBasicType()) {
+    case EbtFloat: return selectFormat(ElfR32f,  ElfRg32f,  ElfRgba32f);
+    case EbtInt:   return selectFormat(ElfR32i,  ElfRg32i,  ElfRgba32i);
+    case EbtUint:  return selectFormat(ElfR32ui, ElfRg32ui, ElfRgba32ui);
+    default:
+        error(loc, "unknown basic type in image format", "", "");
+        return ElfNone;
+    }
+}
+
+//
+// Both test and if necessary, spit out an error, to see if the node is really
+// an l-value that can be operated on this way.
+//
+// Returns true if there was an error.
+//
+bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
+{
+    if (shouldConvertLValue(node)) {
+        // if we're writing to a texture, it must be an RW form.
+
+        TIntermAggregate* lhsAsAggregate = node->getAsAggregate();
+        TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped();
+        
+        if (!object->getType().getSampler().isImage()) {
+            error(loc, "operator[] on a non-RW texture must be an r-value", "", "");
+            return true;
+        }
+    }
+
+    // Let the base class check errors
+    return TParseContextBase::lValueErrorCheck(loc, op, node);
+}
+
+//
+// This function handles l-value conversions and verifications.  It uses, but is not synonymous
+// with lValueErrorCheck.  That function accepts an l-value directly, while this one must be
+// given the surrounding tree - e.g, with an assignment, so we can convert the assign into a
+// series of other image operations.
+//
+// Most things are passed through unmodified, except for error checking.
+// 
+TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped* node)
+{
+    if (node == nullptr)
+        return nullptr;
+
+    TIntermBinary* nodeAsBinary = node->getAsBinaryNode();
+    TIntermUnary* nodeAsUnary = node->getAsUnaryNode();
+    TIntermAggregate* sequence = nullptr;
+
+    TIntermTyped* lhs = nodeAsUnary  ? nodeAsUnary->getOperand() :
+                        nodeAsBinary ? nodeAsBinary->getLeft() :
+                        nullptr;
+
+    // Early bail out if there is no conversion to apply
+    if (!shouldConvertLValue(lhs)) {
+        if (lhs != nullptr)
+            if (lValueErrorCheck(loc, op, lhs))
+                return nullptr;
+        return node;
+    }
+
+    // *** If we get here, we're going to apply some conversion to an l-value.
+
+    // Helper to create a load.
+    const auto makeLoad = [&](TIntermSymbol* rhsTmp, TIntermTyped* object, TIntermTyped* coord, const TType& derefType) {
+        TIntermAggregate* loadOp = new TIntermAggregate(EOpImageLoad);
+        loadOp->setLoc(loc);
+        loadOp->getSequence().push_back(object);
+        loadOp->getSequence().push_back(intermediate.addSymbol(*coord->getAsSymbolNode()));
+        loadOp->setType(derefType);
+
+        sequence = intermediate.growAggregate(sequence,
+                                              intermediate.addAssign(EOpAssign, rhsTmp, loadOp, loc),
+                                              loc);
+    };
+
+    // Helper to create a store.
+    const auto makeStore = [&](TIntermTyped* object, TIntermTyped* coord, TIntermSymbol* rhsTmp) {
+        TIntermAggregate* storeOp = new TIntermAggregate(EOpImageStore);
+        storeOp->getSequence().push_back(object);
+        storeOp->getSequence().push_back(coord);
+        storeOp->getSequence().push_back(intermediate.addSymbol(*rhsTmp));
+        storeOp->setLoc(loc);
+        storeOp->setType(TType(EbtVoid));
+
+        sequence = intermediate.growAggregate(sequence, storeOp);
+    };
+
+    // Helper to create an assign.
+    const auto makeBinary = [&](TOperator op, TIntermTyped* lhs, TIntermTyped* rhs) {
+        sequence = intermediate.growAggregate(sequence,
+                                              intermediate.addBinaryNode(op, lhs, rhs, loc, lhs->getType()),
+                                              loc);
+    };
+
+    // Helper to complete sequence by adding trailing variable, so we evaluate to the right value.
+    const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) -> TIntermAggregate* {
+        // Add a trailing use of the temp, so the sequence returns the proper value.
+        sequence = intermediate.growAggregate(sequence, intermediate.addSymbol(*rhsTmp));
+        sequence->setOperator(EOpSequence);
+        sequence->setLoc(loc);
+        sequence->setType(derefType);
+
+        return sequence;
+    };
+
+    // Helper to add unary op
+    const auto makeUnary = [&](TOperator op, TIntermSymbol* rhsTmp) {
+        sequence = intermediate.growAggregate(sequence,
+                                              intermediate.addUnaryNode(op, intermediate.addSymbol(*rhsTmp), loc,
+                                                                        rhsTmp->getType()),
+                                              loc);
+    };
+
+    // helper to create a temporary variable
+    const auto addTmpVar = [&](const char* name, const TType& derefType) -> TIntermSymbol* {
+        TVariable* tmpVar = makeInternalVariable(name, derefType);
+        tmpVar->getWritableType().getQualifier().makeTemporary();
+        return intermediate.addSymbol(*tmpVar, loc);
+    };
+    
+    TIntermAggregate* lhsAsAggregate = lhs->getAsAggregate();
+    TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped();
+    TIntermTyped* coord  = lhsAsAggregate->getSequence()[1]->getAsTyped();
+
+    const TSampler& texSampler = object->getType().getSampler();
+
+    const TType objDerefType(texSampler.type, EvqTemporary, texSampler.vectorSize);
+
+    if (nodeAsBinary) {
+        TIntermTyped* rhs = nodeAsBinary->getRight();
+        const TOperator assignOp = nodeAsBinary->getOp();
+
+        bool isModifyOp = false;
+
+        switch (assignOp) {
+        case EOpAddAssign:
+        case EOpSubAssign:
+        case EOpMulAssign:
+        case EOpVectorTimesMatrixAssign:
+        case EOpVectorTimesScalarAssign:
+        case EOpMatrixTimesScalarAssign:
+        case EOpMatrixTimesMatrixAssign:
+        case EOpDivAssign:
+        case EOpModAssign:
+        case EOpAndAssign:
+        case EOpInclusiveOrAssign:
+        case EOpExclusiveOrAssign:
+        case EOpLeftShiftAssign:
+        case EOpRightShiftAssign:
+            isModifyOp = true;
+            // fall through...
+        case EOpAssign:
+            {
+                // Since this is an lvalue, we'll convert an image load to a sequence like this (to still provide the value):
+                //   OpSequence
+                //      OpImageStore(object, lhs, rhs)
+                //      rhs
+                // But if it's not a simple symbol RHS (say, a fn call), we don't want to duplicate the RHS, so we'll convert
+                // instead to this:
+                //   OpSequence
+                //      rhsTmp = rhs
+                //      OpImageStore(object, coord, rhsTmp)
+                //      rhsTmp
+                // If this is a read-modify-write op, like +=, we issue:
+                //   OpSequence
+                //      coordtmp = load's param1
+                //      rhsTmp = OpImageLoad(object, coordTmp)
+                //      rhsTmp op= rhs
+                //      OpImageStore(object, coordTmp, rhsTmp)
+                //      rhsTmp
+
+                TIntermSymbol* rhsTmp = rhs->getAsSymbolNode();
+                TIntermTyped* coordTmp = coord;
+ 
+                if (rhsTmp == nullptr || isModifyOp) {
+                    rhsTmp = addTmpVar("storeTemp", objDerefType);
+
+                    // Assign storeTemp = rhs
+                    if (isModifyOp) {
+                        // We have to make a temp var for the coordinate, to avoid evaluating it twice.
+                        coordTmp = addTmpVar("coordTemp", coord->getType());
+                        makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1]
+                        makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
+                    }
+
+                    // rhsTmp op= rhs.
+                    makeBinary(assignOp, intermediate.addSymbol(*rhsTmp), rhs);
+                }
+                
+                makeStore(object, coordTmp, rhsTmp);         // add a store
+                return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence
+            }
+
+        default:
+            break;
+        }
+    }
+
+    if (nodeAsUnary) {
+        const TOperator assignOp = nodeAsUnary->getOp();
+
+        switch (assignOp) {
+        case EOpPreIncrement:
+        case EOpPreDecrement:
+            {
+                // We turn this into:
+                //   OpSequence
+                //      coordtmp = load's param1
+                //      rhsTmp = OpImageLoad(object, coordTmp)
+                //      rhsTmp op
+                //      OpImageStore(object, coordTmp, rhsTmp)
+                //      rhsTmp
+                
+                TIntermSymbol* rhsTmp = addTmpVar("storeTemp", objDerefType);
+                TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType());
+ 
+                makeBinary(EOpAssign, coordTmp, coord);           // coordtmp = load[param1]
+                makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
+                makeUnary(assignOp, rhsTmp);                      // op rhsTmp
+                makeStore(object, coordTmp, rhsTmp);              // OpImageStore(object, coordTmp, rhsTmp)
+                return finishSequence(rhsTmp, objDerefType);      // return rhsTmp from sequence
+            }
+
+        case EOpPostIncrement:
+        case EOpPostDecrement:
+            {
+                // We turn this into:
+                //   OpSequence
+                //      coordtmp = load's param1
+                //      rhsTmp1 = OpImageLoad(object, coordTmp)
+                //      rhsTmp2 = rhsTmp1
+                //      rhsTmp2 op
+                //      OpImageStore(object, coordTmp, rhsTmp2)
+                //      rhsTmp1 (pre-op value)
+                TIntermSymbol* rhsTmp1 = addTmpVar("storeTempPre",  objDerefType);
+                TIntermSymbol* rhsTmp2 = addTmpVar("storeTempPost", objDerefType);
+                TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType());
+
+                makeBinary(EOpAssign, coordTmp, coord);            // coordtmp = load[param1]
+                makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp)
+                makeBinary(EOpAssign, rhsTmp2, rhsTmp1);           // rhsTmp2 = rhsTmp1
+                makeUnary(assignOp, rhsTmp2);                      // rhsTmp op
+                makeStore(object, coordTmp, rhsTmp2);              // OpImageStore(object, coordTmp, rhsTmp2)
+                return finishSequence(rhsTmp1, objDerefType);      // return rhsTmp from sequence
+            }
+                
+        default:
+            break;
+        }
+    }
+
+    if (lhs)
+        if (lValueErrorCheck(loc, op, lhs))
+            return nullptr;
+ 
+    return node;
+}
+
 void HlslParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>& tokens)
 {
     if (pragmaCallback)
@@ -236,69 +530,6 @@ bool HlslParseContext::parseVectorFields(const TSourceLoc& loc, const TString& c
         return true;
 }
 
-//
-// Used to output syntax, parsing, and semantic errors.
-//
-
-void HlslParseContext::outputMessage(const TSourceLoc& loc, const char* szReason,
-    const char* szToken,
-    const char* szExtraInfoFormat,
-    TPrefixType prefix, va_list args)
-{
-    const int maxSize = MaxTokenLength + 200;
-    char szExtraInfo[maxSize];
-
-    safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
-
-    infoSink.info.prefix(prefix);
-    infoSink.info.location(loc);
-    infoSink.info << "'" << szToken << "' : " << szReason << " " << szExtraInfo << "\n";
-
-    if (prefix == EPrefixError) {
-        ++numErrors;
-    }
-}
-
-void C_DECL HlslParseContext::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
-    const char* szExtraInfoFormat, ...)
-{
-    if (messages & EShMsgOnlyPreprocessor)
-        return;
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
-    va_end(args);
-}
-
-void C_DECL HlslParseContext::warn(const TSourceLoc& loc, const char* szReason, const char* szToken,
-    const char* szExtraInfoFormat, ...)
-{
-    if (suppressWarnings())
-        return;
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
-    va_end(args);
-}
-
-void C_DECL HlslParseContext::ppError(const TSourceLoc& loc, const char* szReason, const char* szToken,
-    const char* szExtraInfoFormat, ...)
-{
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
-    va_end(args);
-}
-
-void C_DECL HlslParseContext::ppWarn(const TSourceLoc& loc, const char* szReason, const char* szToken,
-    const char* szExtraInfoFormat, ...)
-{
-    va_list args;
-    va_start(args, szExtraInfoFormat);
-    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
-    va_end(args);
-}
-
 //
 // Handle seeing a variable identifier in the grammar.
 //
@@ -315,19 +546,6 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* s
     if (symbol && symbol->getNumExtensions())
         requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
 
-    if (symbol && symbol->isReadOnly()) {
-        // All shared things containing an implicitly sized array must be copied up 
-        // on first use, so that all future references will share its array structure,
-        // so that editing the implicit size will effect all nodes consuming it,
-        // and so that editing the implicit size won't change the shared one.
-        //
-        // If this is a variable or a block, check it and all it contains, but if this 
-        // is a member of an anonymous block, check the whole block, as the whole block
-        // will need to be copied up if it contains an implicitly-sized array.
-        if (symbol->getType().containsImplicitlySizedArray() || (symbol->getAsAnonMember() && symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray()))
-            makeEditable(symbol);
-    }
-
     const TVariable* variable;
     const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
     TIntermTyped* node = nullptr;
@@ -361,8 +579,10 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* s
         }
 
         // Recovery, if it wasn't found or was not a variable.
-        if (! variable)
+        if (! variable) {
+            error(loc, "unknown variable", string->c_str(), "");
             variable = new TVariable(string, TType(EbtVoid));
+        }
 
         if (variable->getType().getQualifier().isFrontEndConstant())
             node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc);
@@ -376,13 +596,47 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* s
     return node;
 }
 
+//
+// Handle operator[] on any objects it applies to.  Currently:
+//    Textures
+//    Buffers
+//
+TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index)
+{
+    // handle r-value operator[] on textures and images.  l-values will be processed later.
+    if (base->getType().getBasicType() == EbtSampler && !base->isArray()) {
+        const TSampler& sampler = base->getType().getSampler();
+        if (sampler.isImage() || sampler.isTexture()) {
+            TIntermAggregate* load = new TIntermAggregate(sampler.isImage() ? EOpImageLoad : EOpTextureFetch);
+
+            load->setType(TType(sampler.type, EvqTemporary, sampler.vectorSize));
+            load->setLoc(loc);
+            load->getSequence().push_back(base);
+            load->getSequence().push_back(index);
+
+            // Textures need a MIP.  First indirection is always to mip 0.  If there's another, we'll add it
+            // later.
+            if (sampler.isTexture())
+                load->getSequence().push_back(intermediate.addConstantUnion(0, loc, true));
+
+            return load;
+        }
+    }
+
+    return nullptr;
+}
+
 //
 // Handle seeing a base[index] dereference in the grammar.
 //
 TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index)
 {
-    TIntermTyped* result = nullptr;
+    TIntermTyped* result = handleBracketOperator(loc, base, index);
 
+    if (result != nullptr)
+        return result;  // it was handled as an operator[]
+
+    bool flattened = false;
     int indexValue = 0;
     if (index->getQualifier().storage == EvqConst) {
         indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
@@ -400,15 +654,20 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
     else {
         // at least one of base and index is variable...
 
-        if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
-            handleIoResizeArrayAccess(loc, base);
+        if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlatten(base->getType()))) {
+            if (index->getQualifier().storage != EvqConst)
+                error(loc, "Invalid variable index to flattened uniform array", base->getAsSymbolNode()->getName().c_str(), "");
 
-        if (index->getQualifier().storage == EvqConst) {
-            if (base->getType().isImplicitlySizedArray())
-                updateImplicitArraySize(loc, base, indexValue);
-            result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
+            result = flattenAccess(loc, base, indexValue);
+            flattened = (result != base);
         } else {
-            result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
+            if (index->getQualifier().storage == EvqConst) {
+                if (base->getType().isImplicitlySizedArray())
+                    updateImplicitArraySize(loc, base, indexValue);
+                result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
+            } else {
+                result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
+            }
         }
     }
 
@@ -416,13 +675,18 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
         // Insert dummy error-recovery result
         result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
     } else {
-        // Insert valid dereferenced result
-        TType newType(base->getType(), 0);  // dereferenced type
-        if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst)
-            newType.getQualifier().storage = EvqConst;
-        else
-            newType.getQualifier().storage = EvqTemporary;
-        result->setType(newType);
+        // If the array reference was flattened, it has the correct type.  E.g, if it was
+        // a uniform array, it was flattened INTO a set of scalar uniforms, not scalar temps.
+        // In that case, we preserve the qualifiers.
+        if (!flattened) {
+            // Insert valid dereferenced result
+            TType newType(base->getType(), 0);  // dereferenced type
+            if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst)
+                newType.getQualifier().storage = EvqConst;
+            else
+                newType.getQualifier().storage = EvqTemporary;
+            result->setType(newType);
+        }
     }
 
     return result;
@@ -433,125 +697,6 @@ void HlslParseContext::checkIndex(const TSourceLoc& /*loc*/, const TType& /*type
     // HLSL todo: any rules for index fixups?
 }
 
-// Make a shared symbol have a non-shared version that can be edited by the current 
-// compile, such that editing its type will not change the shared version and will
-// effect all nodes sharing it.
-void HlslParseContext::makeEditable(TSymbol*& symbol)
-{
-    // copyUp() does a deep copy of the type.
-    symbol = symbolTable.copyUp(symbol);
-
-    // Also, see if it's tied to IO resizing
-    if (isIoResizeArray(symbol->getType()))
-        ioArraySymbolResizeList.push_back(symbol);
-
-    // Also, save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *symbol);
-}
-
-TVariable* HlslParseContext::getEditableVariable(const char* name)
-{
-    bool builtIn;
-    TSymbol* symbol = symbolTable.find(name, &builtIn);
-    if (builtIn)
-        makeEditable(symbol);
-
-    return symbol->getAsVariable();
-}
-
-// Return true if this is a geometry shader input array or tessellation control output array.
-bool HlslParseContext::isIoResizeArray(const TType& type) const
-{
-    return type.isArray() &&
-        ((language == EShLangGeometry    && type.getQualifier().storage == EvqVaryingIn) ||
-        (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch));
-}
-
-// If an array is not isIoResizeArray() but is an io array, make sure it has the right size
-void HlslParseContext::fixIoArraySize(const TSourceLoc& loc, TType& type)
-{
-    if (! type.isArray() || type.getQualifier().patch || symbolTable.atBuiltInLevel())
-        return;
-
-    assert(! isIoResizeArray(type));
-
-    if (type.getQualifier().storage != EvqVaryingIn || type.getQualifier().patch)
-        return;
-
-    if (language == EShLangTessControl || language == EShLangTessEvaluation) {
-        if (type.getOuterArraySize() != resources.maxPatchVertices) {
-            if (type.isExplicitlySizedArray())
-                error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", "");
-            type.changeOuterArraySize(resources.maxPatchVertices);
-        }
-    }
-}
-
-// Handle a dereference of a geometry shader input array or tessellation control output array.
-// See ioArraySymbolResizeList comment in ParseHelper.h.
-//
-void HlslParseContext::handleIoResizeArrayAccess(const TSourceLoc& /*loc*/, TIntermTyped* base)
-{
-    TIntermSymbol* symbolNode = base->getAsSymbolNode();
-    assert(symbolNode);
-    if (! symbolNode)
-        return;
-
-    // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
-    if (symbolNode->getType().isImplicitlySizedArray()) {
-        int newSize = getIoArrayImplicitSize();
-        if (newSize > 0)
-            symbolNode->getWritableType().changeOuterArraySize(newSize);
-    }
-}
-
-// If there has been an input primitive declaration (geometry shader) or an output
-// number of vertices declaration(tessellation shader), make sure all input array types
-// match it in size.  Types come either from nodes in the AST or symbols in the 
-// symbol table.
-//
-// Types without an array size will be given one.
-// Types already having a size that is wrong will get an error.
-//
-void HlslParseContext::checkIoArraysConsistency(const TSourceLoc& loc, bool tailOnly)
-{
-    int requiredSize = getIoArrayImplicitSize();
-    if (requiredSize == 0)
-        return;
-
-    const char* feature;
-    if (language == EShLangGeometry)
-        feature = TQualifier::getGeometryString(intermediate.getInputPrimitive());
-    else if (language == EShLangTessControl)
-        feature = "vertices";
-    else
-        feature = "unknown";
-
-    if (tailOnly) {
-        checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList.back()->getWritableType(), ioArraySymbolResizeList.back()->getName());
-        return;
-    }
-
-    for (size_t i = 0; i < ioArraySymbolResizeList.size(); ++i)
-        checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList[i]->getWritableType(), ioArraySymbolResizeList[i]->getName());
-}
-
-int HlslParseContext::getIoArrayImplicitSize() const
-{
-    if (language == EShLangGeometry)
-        return TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
-    else if (language == EShLangTessControl)
-        return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
-    else
-        return 0;
-}
-
-void HlslParseContext::checkIoArrayConsistency(const TSourceLoc& /*loc*/, int requiredSize, const char* /*feature*/, TType& type, const TString& /*name*/)
-{
-    if (type.isImplicitlySizedArray())
-        type.changeOuterArraySize(requiredSize);
-}
-
 // Handle seeing a binary node with a math operation.
 TIntermTyped* HlslParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right)
 {
@@ -612,12 +757,19 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
                field == "SampleLevel") {
         // If it's not a method on a sampler object, we fall through in case it is a struct member.
         if (base->getType().getBasicType() == EbtSampler) {
-            const TSampler& texType = base->getType().getSampler();
-            if (! texType.isPureSampler()) {
-                const int vecSize = texType.isShadow() ? 1 : 4;
-                return intermediate.addMethod(base, TType(texType.type, EvqTemporary, vecSize), &field, loc);
+            const TSampler& sampler = base->getType().getSampler();
+            if (! sampler.isPureSampler()) {
+                const int vecSize = sampler.isShadow() ? 1 : 4; // TODO: handle arbitrary sample return sizes
+                return intermediate.addMethod(base, TType(sampler.type, EvqTemporary, vecSize), &field, loc);
             }
         }
+    } else if (field == "Append" ||
+               field == "RestartStrip") {
+        // These methods only valid on stage in variables
+        // TODO: ... which are stream out types, if there's any way to test that here.
+        if (base->getType().getQualifier().storage == EvqVaryingOut) {
+            return intermediate.addMethod(base, TType(EbtVoid), &field, loc);
+        }
     }
 
     // It's not .length() if we get to here.
@@ -682,8 +834,8 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
             }
         }
         if (fieldFound) {
-            if (base->getAsSymbolNode() && shouldFlatten(base->getType()))
-                result = flattenAccess(base, member);
+            if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlatten(base->getType())))
+                result = flattenAccess(loc, base, member);
             else {
                 if (base->getType().getQualifier().storage == EvqConst)
                     result = intermediate.foldDereference(base, member, loc);
@@ -701,9 +853,15 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
     return result;
 }
 
-// Is this an aggregate that can't be passed down the stack?
-// E.g., pipeline inputs to the vertex stage and outputs from the fragment stage.
+// Determine whether we should flatten an arbitrary type.
 bool HlslParseContext::shouldFlatten(const TType& type) const
+{
+    return shouldFlattenIO(type) || shouldFlattenUniform(type); 
+}
+
+// Is this an IO variable that can't be passed down the stack?
+// E.g., pipeline inputs to the vertex stage and outputs from the fragment stage.
+bool HlslParseContext::shouldFlattenIO(const TType& type) const
 {
     if (! inEntryPoint)
         return false;
@@ -715,6 +873,105 @@ bool HlslParseContext::shouldFlatten(const TType& type) const
             qualifier == EvqVaryingOut);
 }
 
+// Is this a uniform array which should be flattened?
+bool HlslParseContext::shouldFlattenUniform(const TType& type) const
+{
+    const TStorageQualifier qualifier = type.getQualifier().storage;
+
+    return ((type.isArray() && intermediate.getFlattenUniformArrays()) || type.isStruct()) &&
+        qualifier == EvqUniform &&
+        type.containsOpaque();
+}
+
+// Top level variable flattening: construct data
+void HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable)
+{
+    const TType& type = variable.getType();
+
+    // emplace gives back a pair whose .first is an iterator to the item...
+    auto entry = flattenMap.emplace(variable.getUniqueId(), 
+                                    TFlattenData(type.getQualifier().layoutBinding));
+        
+    // ... and the item is a map pair, so first->second is the TFlattenData itself.
+    flatten(loc, variable, type, entry.first->second, "");
+}
+    
+// Recursively flatten the given variable at the provided type, building the flattenData as we go.
+//
+// This is mutually recursive with flattenStruct and flattenArray.
+// We are going to flatten an arbitrarily nested composite structure into a linear sequence of
+// members, and later on, we want to turn a path through the tree structure into a final
+// location in this linear sequence.
+//
+// If the tree was N-ary, that can be directly calculated.  However, we are dealing with
+// arbitrary numbers - peraps a struct of 7 members containing an array of 3.  Thus, we must
+// build a data structure to allow the sequence of bracket and dot operators on arrays and
+// structs to arrive at the proper member.
+//
+// To avoid storing a tree with pointers, we are going to flatten the tree into a vector of integers.
+// The leaves are the indexes into the flattened member array.
+// Each level will have the next location for the Nth item stored sequentially, so for instance:
+//
+// struct { float2 a[2]; int b; float4 c[3] };
+//
+// This will produce the following flattened tree:
+// Pos: 0  1   2    3  4    5  6   7     8   9  10   11  12 13
+//     (3, 7,  8,   5, 6,   0, 1,  2,   11, 12, 13,   3,  4, 5}
+//
+// Given a reference to mystruct.c[1], the access chain is (2,1), so we traverse:
+//   (0+2) = 8  -->  (8+1) = 12 -->   12 = 4
+//
+// so the 4th flattened member in traversal order is ours.
+//
+int HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable, const TType& type,
+                              TFlattenData& flattenData, TString name)
+{
+    // TODO: when struct splitting is in place we can remove this restriction.
+    if (language == EShLangGeometry) {
+        const TType derefType(type, 0);
+        if (!isFinalFlattening(derefType) && type.getQualifier().storage == EvqVaryingIn)
+            error(loc, "recursive type not yet supported in GS input", variable.getName().c_str(), "");
+    }
+
+    // If something is an arrayed struct, the array flattener will recursively call flatten()
+    // to then flatten the struct, so this is an "if else": we don't do both.
+    if (type.isArray())
+        return flattenArray(loc, variable, type, flattenData, name);
+    else if (type.isStruct())
+        return flattenStruct(loc, variable, type, flattenData, name);
+    else {
+        assert(0); // should never happen
+        return -1;
+    }
+}
+
+// Add a single flattened member to the flattened data being tracked for the composite
+// Returns true for the final flattening level.
+int HlslParseContext::addFlattenedMember(const TSourceLoc& loc, 
+                                          const TVariable& variable, const TType& type, TFlattenData& flattenData, 
+                                          const TString& memberName, bool track)
+{
+    if (isFinalFlattening(type)) {
+        // This is as far as we flatten.  Insert the variable.
+        TVariable* memberVariable = makeInternalVariable(memberName.c_str(), type);
+        mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
+
+        if (flattenData.nextBinding != TQualifier::layoutBindingEnd)
+            memberVariable->getWritableType().getQualifier().layoutBinding = flattenData.nextBinding++;
+
+        flattenData.offsets.push_back(static_cast<int>(flattenData.members.size()));
+        flattenData.members.push_back(memberVariable);
+
+        if (track)
+            trackLinkageDeferred(*memberVariable);
+
+        return static_cast<int>(flattenData.offsets.size())-1; // location of the member reference
+    } else {
+        // Further recursion required
+        return flatten(loc, variable, type, flattenData, memberName);
+    }
+}
+
 // Figure out the mapping between an aggregate's top members and an
 // equivalent set of individual variables.
 //
@@ -722,38 +979,103 @@ bool HlslParseContext::shouldFlatten(const TType& type) const
 //      effecting a transfer of this information to the flattened variable form.
 //
 // Assumes shouldFlatten() or equivalent was called first.
-//
-// TODO: generalize this to arbitrary nesting?
-void HlslParseContext::flatten(const TVariable& variable)
+int HlslParseContext::flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType& type, 
+                                     TFlattenData& flattenData, TString name)
 {
-    TVector<TVariable*> memberVariables;
+    assert(type.isStruct());
+
+    auto members = *type.getStruct();
+
+    // Reserve space for this tree level.
+    int start = static_cast<int>(flattenData.offsets.size());
+    int pos   = start;
+    flattenData.offsets.resize(int(pos + members.size()), -1);
 
-    auto members = *variable.getType().getStruct();
     for (int member = 0; member < (int)members.size(); ++member) {
-        TVariable* memberVariable = makeInternalVariable(members[member].type->getFieldName().c_str(),
-                                                         *members[member].type);
-        mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
-        memberVariables.push_back(memberVariable);
+        TType& dereferencedType = *members[member].type;
+        const TString memberName = name + (name.empty() ? "" : ".") + dereferencedType.getFieldName();
+
+        const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData, memberName, false);
+        flattenData.offsets[pos++] = mpos;
 
         // N.B. Erase I/O-related annotations from the source-type member.
-        members[member].type->getQualifier().makeTemporary();
+        dereferencedType.getQualifier().makeTemporary();
     }
 
-    flattenMap[variable.getUniqueId()] = memberVariables;
+    return start;
 }
 
-// Turn an access into aggregate that was flattened to instead be
-// an access to the individual variable the element/member was flattened to.
+// Figure out mapping between an array's members and an
+// equivalent set of individual variables.
+//
 // Assumes shouldFlatten() or equivalent was called first.
-TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member)
+int HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType& type, 
+                                   TFlattenData& flattenData, TString name)
+{
+    assert(type.isArray());
+
+    if (type.isImplicitlySizedArray())
+        error(loc, "cannot flatten implicitly sized array", variable.getName().c_str(), "");
+
+    const int size = type.getOuterArraySize();
+    const TType dereferencedType(type, 0);
+
+    if (name.empty())
+        name = variable.getName();
+
+    // Reserve space for this tree level.
+    int start = static_cast<int>(flattenData.offsets.size());
+    int pos   = start;
+    flattenData.offsets.resize(int(pos + size), -1);
+
+    for (int element=0; element < size; ++element) {      
+        char elementNumBuf[20];  // sufficient for MAXINT
+        snprintf(elementNumBuf, sizeof(elementNumBuf)-1, "[%d]", element);
+        const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData,
+                                            name + elementNumBuf, true);
+
+        flattenData.offsets[pos++] = mpos;
+    }
+
+    return start;
+}
+
+// Return true if we have flattened this node.
+bool HlslParseContext::wasFlattened(const TIntermTyped* node) const
 {
+    return node != nullptr &&
+        node->getAsSymbolNode() != nullptr &&
+        wasFlattened(node->getAsSymbolNode()->getId());
+}
+
+
+// Turn an access into an aggregate that was flattened to instead be
+// an access to the individual variable the member was flattened to.
+// Assumes shouldFlatten() or equivalent was called first.
+TIntermTyped* HlslParseContext::flattenAccess(const TSourceLoc&, TIntermTyped* base, int member)
+{
+    const TType dereferencedType(base->getType(), member);  // dereferenced type
+
     const TIntermSymbol& symbolNode = *base->getAsSymbolNode();
 
-    if (flattenMap.find(symbolNode.getId()) == flattenMap.end())
+    const auto flattenData = flattenMap.find(symbolNode.getId());
+
+    if (flattenData == flattenMap.end())
         return base;
 
-    const TVariable* memberVariable = flattenMap[symbolNode.getId()][member];
-    return intermediate.addSymbol(*memberVariable);
+    // Calculate new cumulative offset from the packed tree
+    flattenOffset.back() = flattenData->second.offsets[flattenOffset.back() + member];
+
+    if (isFinalFlattening(dereferencedType)) {
+        // Finished flattening: create symbol for variable
+        member = flattenData->second.offsets[flattenOffset.back()];
+        const TVariable* memberVariable = flattenData->second.members[member];
+        return intermediate.addSymbol(*memberVariable);
+    } else {
+        // If this is not the final flattening, accumulate the position and return
+        // an object of the partially dereferenced type.
+        return new TIntermSymbol(symbolNode.getId(), "flattenShadow", dereferencedType);
+    }
 }
 
 // Variables that correspond to the user-interface in and out of a stage
@@ -775,12 +1097,12 @@ void HlslParseContext::assignLocations(TVariable& variable)
                     nextOutLocation += intermediate.computeTypeLocationSize(variable.getType());
                 }
             }
-            intermediate.addSymbolLinkageNode(linkage, variable);
+            trackLinkage(variable);
         }
     };
 
-    if (shouldFlatten(variable.getType())) {
-        auto& memberList = flattenMap[variable.getUniqueId()];
+    if (wasFlattened(variable.getUniqueId())) {
+        auto& memberList = flattenMap[variable.getUniqueId()].members;
         for (auto member = memberList.begin(); member != memberList.end(); ++member)
             assignLocation(**member);
     } else
@@ -832,7 +1154,8 @@ TFunction& HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFu
 // Handle seeing the function prototype in front of a function definition in the grammar.  
 // The body is handled after this function returns.
 //
-TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function)
+TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function, 
+                                                             const TAttributeMap& attributes)
 {
     currentCaller = function.getMangledName();
     TSymbol* symbol = symbolTable.find(function.getMangledName());
@@ -864,12 +1187,17 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l
         remapEntryPointIO(function);
         if (entryPointOutput) {
             if (shouldFlatten(entryPointOutput->getType()))
-                flatten(*entryPointOutput);
+                flatten(loc, *entryPointOutput);
             assignLocations(*entryPointOutput);
         }
     } else
         remapNonEntryPointIO(function);
 
+    // Insert the $Global constant buffer.
+    // TODO: this design fails if new members are declared between function definitions.
+    if (! insertGlobalUniformBlock())
+        error(loc, "failed to insert the global constant buffer", "uniform", "");
+
     //
     // New symbol table scope for body of function plus its arguments
     //
@@ -896,7 +1224,7 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l
                 // get IO straightened out
                 if (inEntryPoint) {
                     if (shouldFlatten(*param.type))
-                        flatten(*variable);
+                        flatten(loc, *variable);
                     assignLocations(*variable);
                 }
 
@@ -914,7 +1242,23 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l
     intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc);
     loopNestingLevel = 0;
     controlFlowNestingLevel = 0;
-    postMainReturn = false;
+    postEntryPointReturn = false;
+
+    // Handle function attributes
+    if (inEntryPoint) {
+        const TIntermAggregate* numThreads = attributes[EatNumThreads];
+        if (numThreads != nullptr) {
+            const TIntermSequence& sequence = numThreads->getSequence();
+ 
+            for (int lid = 0; lid < int(sequence.size()); ++lid)
+                intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst());
+        }
+
+        const TIntermAggregate* maxVertexCount = attributes[EatMaxVertexCount];
+        if (maxVertexCount != nullptr) {
+            intermediate.setVertices(maxVertexCount->getSequence()[0]->getAsConstantUnion()->getConstArray()[0].getIConst());
+        }
+    }
 
     return paramNodes;
 }
@@ -996,18 +1340,17 @@ void HlslParseContext::remapNonEntryPointIO(TFunction& function)
 TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
 {
     functionReturnsValue = true;
-    TIntermTyped* converted = value;
 
     if (currentFunctionType->getBasicType() == EbtVoid) {
         error(loc, "void function cannot return a value", "return", "");
         return intermediate.addBranch(EOpReturn, loc);
     } else if (*currentFunctionType != value->getType()) {
-        converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
-        if (converted) {
-            return intermediate.addBranch(EOpReturn, converted, loc);
-        } else {
+        value = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
+        if (value && *currentFunctionType != value->getType())
+            value = intermediate.addShapeConversion(EOpReturn, *currentFunctionType, value);
+        if (value == nullptr) {
             error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
-            converted = value;
+            return value;
         }
     }
 
@@ -1020,9 +1363,9 @@ TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermT
         assert(entryPointOutput != nullptr); // should have been error tested at the beginning
         TIntermSymbol* left = new TIntermSymbol(entryPointOutput->getUniqueId(), entryPointOutput->getName(),
                                                 entryPointOutput->getType());
-        TIntermNode* returnSequence = handleAssign(loc, EOpAssign, left, converted);
+        TIntermNode* returnSequence = handleAssign(loc, EOpAssign, left, value);
         returnSequence = intermediate.makeAggregate(returnSequence);
-        returnSequence = intermediate.growAggregate(returnSequence, intermediate.addBranch(EOpReturn, loc));
+        returnSequence = intermediate.growAggregate(returnSequence, intermediate.addBranch(EOpReturn, loc), loc);
         returnSequence->getAsAggregate()->setOperator(EOpSequence);
 
         return returnSequence;
@@ -1046,45 +1389,142 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped*
 // to intermediate.addAssign().
 TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) const
 {
+    if (left == nullptr || right == nullptr)
+        return nullptr;
+
     const auto mustFlatten = [&](const TIntermTyped& node) {
-        return shouldFlatten(node.getType()) && node.getAsSymbolNode() &&
+        return wasFlattened(&node) && node.getAsSymbolNode() &&
                flattenMap.find(node.getAsSymbolNode()->getId()) != flattenMap.end();
     };
 
-    bool flattenLeft = mustFlatten(*left);
-    bool flattenRight = mustFlatten(*right);
-    if (! flattenLeft && ! flattenRight)
-        return intermediate.addAssign(op, left, right, loc);
+    const bool flattenLeft = mustFlatten(*left);
+    const bool flattenRight = mustFlatten(*right);
+    if (! flattenLeft && ! flattenRight)
+        return intermediate.addAssign(op, left, right, loc);
+
+    TIntermAggregate* assignList = nullptr;
+    const TVector<TVariable*>* leftVariables = nullptr;
+    const TVector<TVariable*>* rightVariables = nullptr;
+
+    // A temporary to store the right node's value, so we don't keep indirecting into it
+    // if it's not a simple symbol.
+    TVariable*     rhsTempVar   = nullptr;
+
+    // If the RHS is a simple symbol node, we'll copy it for each member.
+    TIntermSymbol* cloneSymNode = nullptr;
+
+    // Array structs are not yet handled in flattening.  (Compilation error upstream, so
+    // this should never fire).
+    assert(!(left->getType().isStruct() && left->getType().isArray()));
+
+    int memberCount = 0;
+
+    // Track how many items there are to copy.
+    if (left->getType().isStruct())
+        memberCount = (int)left->getType().getStruct()->size();
+    if (left->getType().isArray())
+        memberCount = left->getType().getCumulativeArraySize();
+
+    if (flattenLeft)
+        leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second.members;
+
+    if (flattenRight) {
+        rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second.members;
+    } else {
+        // The RHS is not flattened.  There are several cases:
+        // 1. 1 item to copy:  Use the RHS directly.
+        // 2. >1 item, simple symbol RHS: we'll create a new TIntermSymbol node for each, but no assign to temp.
+        // 3. >1 item, complex RHS: assign it to a new temp variable, and create a TIntermSymbol for each member.
+        
+        if (memberCount <= 1) {
+            // case 1: we'll use the symbol directly below.  Nothing to do.
+        } else {
+            if (right->getAsSymbolNode() != nullptr) {
+                // case 2: we'll copy the symbol per iteration below.
+                cloneSymNode = right->getAsSymbolNode();
+            } else {
+                // case 3: assign to a temp, and indirect into that.
+                rhsTempVar = makeInternalVariable("flattenTemp", right->getType());
+                rhsTempVar->getWritableType().getQualifier().makeTemporary();
+                TIntermTyped* noFlattenRHS = intermediate.addSymbol(*rhsTempVar, loc);
+
+                // Add this to the aggregate being built.
+                assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, noFlattenRHS, right, loc), loc);
+            }
+        }
+    }
+
+    int memberIdx = 0;
 
-    // If we get here, we are assigning to or from a whole struct that must be
-    // flattened, so have to do member-by-member assignment:
-    const auto& members = *left->getType().getStruct();
     const auto getMember = [&](bool flatten, TIntermTyped* node,
-                               const TVector<TVariable*>& memberVariables, int member) {
+                               const TVector<TVariable*>& memberVariables, int member,
+                               TOperator op, const TType& memberType) -> TIntermTyped * {
         TIntermTyped* subTree;
-        if (flatten)
-            subTree = intermediate.addSymbol(*memberVariables[member]);
-        else {
-            subTree = intermediate.addIndex(EOpIndexDirectStruct, node,
-                                            intermediate.addConstantUnion(member, loc), loc);
-            subTree->setType(*members[member].type);
+        if (flatten && isFinalFlattening(memberType)) {
+            subTree = intermediate.addSymbol(*memberVariables[memberIdx++]);
+        } else {
+            subTree = intermediate.addIndex(op, node, intermediate.addConstantUnion(member, loc), loc);
+            subTree->setType(memberType);
         }
 
         return subTree;
     };
-    
-    const TVector<TVariable*>* leftVariables = nullptr;
-    const TVector<TVariable*>* rightVariables = nullptr;
-    if (flattenLeft)
-        leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second;
-    if (flattenRight)
-        rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second;
-    TIntermAggregate* assignList = nullptr;
-    for (int member = 0; member < (int)members.size(); ++member) {
-        TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, member);
-        TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, member);
-        assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc));
-    }
+
+    // Cannot use auto here, because this is recursive, and auto can't work out the type without seeing the
+    // whole thing.  So, we'll resort to an explicit type via std::function.
+    const std::function<void(TIntermTyped* left, TIntermTyped* right)>
+    traverse = [&](TIntermTyped* left, TIntermTyped* right) -> void {
+        // If we get here, we are assigning to or from a whole array or struct that must be
+        // flattened, so have to do member-by-member assignment:
+
+        if (left->getType().isArray()) {
+            // array case
+            const TType dereferencedType(left->getType(), 0);
+
+            for (int element=0; element < left->getType().getOuterArraySize(); ++element) {
+                    // Add a new AST symbol node if we have a temp variable holding a complex RHS.
+                TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, element,
+                                                   EOpIndexDirect, dereferencedType);
+                TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, element,
+                                                  EOpIndexDirect, dereferencedType);
+
+                if (isFinalFlattening(dereferencedType))
+                    assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
+                else
+                    traverse(subLeft, subRight);
+            }
+        } else if (left->getType().isStruct()) {
+            // struct case
+            const auto& members = *left->getType().getStruct();
+
+            for (int member = 0; member < (int)members.size(); ++member) {
+                TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, member,
+                                                   EOpIndexDirectStruct, *members[member].type);
+                TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, member,
+                                                  EOpIndexDirectStruct, *members[member].type);
+
+                if (isFinalFlattening(*members[member].type))
+                    assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
+                else
+                    traverse(subLeft, subRight);
+            }
+        } else {
+            assert(0);  // we should never be called on a non-flattenable thing, because
+                        // that case bails out above to a simple copy.
+        }
+
+    };
+
+    // Use the proper RHS node: a new symbol from a TVariable, copy
+    // of an TIntermSymbol node, or sometimes the right node directly.
+    right = rhsTempVar   ? intermediate.addSymbol(*rhsTempVar, loc) :
+            cloneSymNode ? intermediate.addSymbol(*cloneSymNode) :
+            right;
+
+    // This makes the whole assignment, recursing through subtypes as needed.
+    traverse(left, right);
+
+    assert(assignList != nullptr);
     assignList->setOperator(EOpSequence);
 
     return assignList;
@@ -1098,13 +1538,13 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
 TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage)
 {
     switch (op) {
-    case EOpInterlockedAdd:             return isImage ? EOpImageAtomicAdd : EOpAtomicAdd;
-    case EOpInterlockedAnd:             return isImage ? EOpImageAtomicAnd : EOpAtomicAnd;
+    case EOpInterlockedAdd:             return isImage ? EOpImageAtomicAdd      : EOpAtomicAdd;
+    case EOpInterlockedAnd:             return isImage ? EOpImageAtomicAnd      : EOpAtomicAnd;
     case EOpInterlockedCompareExchange: return isImage ? EOpImageAtomicCompSwap : EOpAtomicCompSwap;
-    case EOpInterlockedMax:             return isImage ? EOpImageAtomicMax : EOpAtomicMax;
-    case EOpInterlockedMin:             return isImage ? EOpImageAtomicMin : EOpAtomicMin;
-    case EOpInterlockedOr:              return isImage ? EOpImageAtomicOr : EOpAtomicOr;
-    case EOpInterlockedXor:             return isImage ? EOpImageAtomicXor : EOpAtomicXor;
+    case EOpInterlockedMax:             return isImage ? EOpImageAtomicMax      : EOpAtomicMax;
+    case EOpInterlockedMin:             return isImage ? EOpImageAtomicMin      : EOpAtomicMin;
+    case EOpInterlockedOr:              return isImage ? EOpImageAtomicOr       : EOpAtomicOr;
+    case EOpInterlockedXor:             return isImage ? EOpImageAtomicXor      : EOpAtomicXor;
     case EOpInterlockedExchange:        return isImage ? EOpImageAtomicExchange : EOpAtomicExchange;
     case EOpInterlockedCompareStore:  // TODO: ... 
     default:
@@ -1141,6 +1581,23 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
     if (!node || !node->getAsOperator())
         return;
 
+    const auto clampReturn = [&loc, &node, this](TIntermTyped* result, const TSampler& sampler) -> TIntermTyped* {
+        // Sampler return must always be a vec4, but we can construct a shorter vector
+        result->setType(TType(node->getType().getBasicType(), EvqTemporary, node->getVectorSize()));
+
+        if (sampler.vectorSize < (unsigned)node->getVectorSize()) {
+            // Too many components.  Construct shorter vector from it.
+            const TType clampedType(result->getType().getBasicType(), EvqTemporary, sampler.vectorSize);
+
+            const TOperator op = intermediate.mapTypeToConstructorOp(clampedType);
+
+            result = constructBuiltIn(clampedType, op, result, loc, false);
+        }
+
+        result->setLoc(loc);
+        return result;
+    };
+
     const TOperator op  = node->getAsOperator()->getOp();
     const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
 
@@ -1149,10 +1606,8 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
     case EOpTexture:
         {
             // Texture with ddx & ddy is really gradient form in HLSL
-            if (argAggregate->getSequence().size() == 4) {
+            if (argAggregate->getSequence().size() == 4)
                 node->getAsAggregate()->setOperator(EOpTextureGrad);
-                break;
-            }
 
             break;
         }
@@ -1168,24 +1623,30 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             TIntermTyped* bias = intermediate.addIndex(EOpIndexDirect, arg1, w, loc);
 
             TOperator constructOp = EOpNull;
-            switch (arg0->getType().getSampler().dim) {
+            const TSampler& sampler = arg0->getType().getSampler();
+
+            switch (sampler.dim) {
             case Esd1D:   constructOp = EOpConstructFloat; break; // 1D
             case Esd2D:   constructOp = EOpConstructVec2;  break; // 2D
             case Esd3D:   constructOp = EOpConstructVec3;  break; // 3D
             case EsdCube: constructOp = EOpConstructVec3;  break; // also 3D
             default: break;
             }
-            
+
             TIntermAggregate* constructCoord = new TIntermAggregate(constructOp);
             constructCoord->getSequence().push_back(arg1);
             constructCoord->setLoc(loc);
 
+            // The input vector should never be less than 2, since there's always a bias.
+            // The max is for safety, and should be a no-op.
+            constructCoord->setType(TType(arg1->getBasicType(), EvqTemporary, std::max(arg1->getVectorSize() - 1, 0)));
+
             TIntermAggregate* tex = new TIntermAggregate(EOpTexture);
             tex->getSequence().push_back(arg0);           // sampler
             tex->getSequence().push_back(constructCoord); // coordinate
             tex->getSequence().push_back(bias);           // bias
-            tex->setLoc(loc);
-            node = tex;
+            
+            node = clampReturn(tex, sampler);
 
             break;
         }
@@ -1199,6 +1660,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
             TIntermTyped* argBias   = nullptr;
             TIntermTyped* argOffset = nullptr;
+            const TSampler& sampler = argTex->getType().getSampler();
 
             int nextArg = 3;
 
@@ -1224,9 +1686,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             if (argOffset != nullptr)
                 txsample->getSequence().push_back(argOffset);
 
-            txsample->setType(node->getType());
-            txsample->setLoc(loc);
-            node = txsample;
+            node = clampReturn(txsample, sampler);
 
             break;
         }
@@ -1239,6 +1699,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             TIntermTyped* argDDX    = argAggregate->getSequence()[3]->getAsTyped();
             TIntermTyped* argDDY    = argAggregate->getSequence()[4]->getAsTyped();
             TIntermTyped* argOffset = nullptr;
+            const TSampler& sampler = argTex->getType().getSampler();
 
             TOperator textureOp = EOpTextureGrad;
 
@@ -1258,9 +1719,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             if (argOffset != nullptr)
                 txsample->getSequence().push_back(argOffset);
 
-            txsample->setType(node->getType());
-            txsample->setLoc(loc);
-            node = txsample;
+            node = clampReturn(txsample, sampler);
 
             break;
         }
@@ -1279,30 +1738,32 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
 
             assert(texType.getBasicType() == EbtSampler);
 
-            const TSampler& texSampler = texType.getSampler();
-            const TSamplerDim dim = texSampler.dim;
+            const TSampler& sampler = texType.getSampler();
+            const TSamplerDim dim = sampler.dim;
+            const bool isImage = sampler.isImage();
             const int numArgs = (int)argAggregate->getSequence().size();
 
             int numDims = 0;
 
             switch (dim) {
-            case Esd1D:   numDims = 1; break; // W
-            case Esd2D:   numDims = 2; break; // W, H
-            case Esd3D:   numDims = 3; break; // W, H, D
-            case EsdCube: numDims = 2; break; // W, H (cube)
+            case Esd1D:     numDims = 1; break; // W
+            case Esd2D:     numDims = 2; break; // W, H
+            case Esd3D:     numDims = 3; break; // W, H, D
+            case EsdCube:   numDims = 2; break; // W, H (cube)
+            case EsdBuffer: numDims = 1; break; // W (buffers)
             default:
                 assert(0 && "unhandled texture dimension");
             }
 
             // Arrayed adds another dimension for the number of array elements
-            if (texSampler.isArrayed())
+            if (sampler.isArrayed())
                 ++numDims;
 
             // Establish whether we're querying mip levels
-            const bool mipQuery = (numArgs > (numDims + 1)) && (!texSampler.isMultiSample());
+            const bool mipQuery = (numArgs > (numDims + 1)) && (!sampler.isMultiSample());
 
             // AST assumes integer return.  Will be converted to float if required.
-            TIntermAggregate* sizeQuery = new TIntermAggregate(EOpTextureQuerySize);
+            TIntermAggregate* sizeQuery = new TIntermAggregate(isImage ? EOpImageQuerySize : EOpTextureQuerySize);
             sizeQuery->getSequence().push_back(argTex);
             // If we're querying an explicit LOD, add the LOD, which is always arg #1
             if (mipQuery) {
@@ -1315,9 +1776,9 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             // Return value from size query
             TVariable* tempArg = makeInternalVariable("sizeQueryTemp", sizeQuery->getType());
             tempArg->getWritableType().getQualifier().makeTemporary();
-            TIntermSymbol* sizeQueryReturn = intermediate.addSymbol(*tempArg, loc);
-
-            TIntermTyped* sizeQueryAssign = intermediate.addAssign(EOpAssign, sizeQueryReturn, sizeQuery, loc);
+            TIntermTyped* sizeQueryAssign = intermediate.addAssign(EOpAssign,
+                                                                   intermediate.addSymbol(*tempArg, loc),
+                                                                   sizeQuery, loc);
 
             // Compound statement for assigning outputs
             TIntermAggregate* compoundStatement = intermediate.makeAggregate(sizeQueryAssign, loc);
@@ -1326,6 +1787,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
 
             for (int compNum = 0; compNum < numDims; ++compNum) {
                 TIntermTyped* indexedOut = nullptr;
+                TIntermSymbol* sizeQueryReturn = intermediate.addSymbol(*tempArg, loc);
 
                 if (numDims > 1) {
                     TIntermTyped* component = intermediate.addConstantUnion(compNum, loc, true);
@@ -1356,7 +1818,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             }
 
             // 2DMS formats query # samples, which needs a different query op
-            if (texSampler.isMultiSample()) {
+            if (sampler.isMultiSample()) {
                 TIntermTyped* outParam = argAggregate->getSequence()[outParamBase + numDims]->getAsTyped();
 
                 TIntermAggregate* samplesQuery = new TIntermAggregate(EOpImageQuerySamples);
@@ -1408,6 +1870,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             if (coordDimWithCmpVal != 5) // cube array shadow is special.
                 coordWithCmp->getSequence().push_back(argCmpVal);
             coordWithCmp->setLoc(loc);
+            coordWithCmp->setType(TType(argCoord->getBasicType(), EvqTemporary, std::min(coordDimWithCmpVal, 4)));
 
             TOperator textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLod : EOpTexture);
             if (argOffset != nullptr)
@@ -1445,13 +1908,15 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             TIntermTyped* lodComponent = nullptr;
             TIntermTyped* coordSwizzle = nullptr;
 
-            const bool isMS = argTex->getType().getSampler().isMultiSample();
-            const bool isBuffer = argTex->getType().getSampler().dim == EsdBuffer;
+            const TSampler& sampler = argTex->getType().getSampler();
+            const bool isMS = sampler.isMultiSample();
+            const bool isBuffer = sampler.dim == EsdBuffer;
+            const bool isImage = sampler.isImage();
             const TBasicType coordBaseType = argCoord->getType().getBasicType();
 
             // Last component of coordinate is the mip level, for non-MS.  we separate them here:
-            if (isMS || isBuffer) {
-                // MS and Buffer have no LOD
+            if (isMS || isBuffer || isImage) {
+                // MS, Buffer, and Image have no LOD
                 coordSwizzle = argCoord;
             } else {
                 // Extract coordinate
@@ -1471,7 +1936,9 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             const bool hasOffset = ((!isMS && numArgs == 3) || (isMS && numArgs == 4));
 
             // Create texel fetch
-            const TOperator fetchOp = (hasOffset ? EOpTextureFetchOffset : EOpTextureFetch);
+            const TOperator fetchOp = (isImage   ? EOpImageLoad :
+                                       hasOffset ? EOpTextureFetchOffset :
+                                       EOpTextureFetch);
             TIntermAggregate* txfetch = new TIntermAggregate(fetchOp);
 
             // Build up the fetch
@@ -1484,6 +1951,8 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
                 txfetch->getSequence().push_back(argSampleIdx);
             } else if (isBuffer) {
                 // Nothing else to do for buffers.
+            } else if (isImage) {
+                // Nothing else to do for images.
             } else {
                 // 2DMS and buffer have no LOD, but everything else does.
                 txfetch->getSequence().push_back(lodComponent);
@@ -1496,9 +1965,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
                 txfetch->getSequence().push_back(argOffset);
             }
 
-            txfetch->setType(node->getType());
-            txfetch->setLoc(loc);
-            node = txfetch;
+            node = clampReturn(txfetch, sampler);
 
             break;
         }
@@ -1510,7 +1977,8 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
             TIntermTyped* argLod    = argAggregate->getSequence()[3]->getAsTyped();
             TIntermTyped* argOffset = nullptr;
-
+            const TSampler& sampler = argTex->getType().getSampler();
+            
             const int  numArgs = (int)argAggregate->getSequence().size();
 
             if (numArgs == 5) // offset, if present
@@ -1528,9 +1996,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             if (argOffset != nullptr)
                 txsample->getSequence().push_back(argOffset);
 
-            txsample->setType(node->getType());
-            txsample->setLoc(loc);
-            node = txsample;
+            node = clampReturn(txsample, sampler);
 
             break;
         }
@@ -1727,11 +2193,81 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
     }
 }
 
+//
+// Decompose geometry shader methods
+//
+void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
+{
+    if (!node || !node->getAsOperator())
+        return;
+
+    const TOperator op  = node->getAsOperator()->getOp();
+    const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
+
+    switch (op) {
+    case EOpMethodAppend:
+        if (argAggregate) {
+            TIntermAggregate* sequence = nullptr;
+            TIntermAggregate* emit = new TIntermAggregate(EOpEmitVertex);
+
+            emit->setLoc(loc);
+            emit->setType(TType(EbtVoid));
+
+            sequence = intermediate.growAggregate(sequence,
+                                                  intermediate.addAssign(EOpAssign, 
+                                                                         argAggregate->getSequence()[0]->getAsTyped(),
+                                                                         argAggregate->getSequence()[1]->getAsTyped(), loc),
+                                                  loc);
+
+            sequence = intermediate.growAggregate(sequence, emit);
+
+            sequence->setOperator(EOpSequence);
+            sequence->setLoc(loc);
+            sequence->setType(TType(EbtVoid));
+            node = sequence;
+        }
+        break;
+
+    case EOpMethodRestartStrip:
+        {
+            TIntermAggregate* cut = new TIntermAggregate(EOpEndPrimitive);
+            cut->setLoc(loc);
+            cut->setType(TType(EbtVoid));
+            node = cut;
+        }
+        break;
+
+    default:
+        break; // most pass through unchanged
+    }
+}
+
 //
 // Optionally decompose intrinsics to AST opcodes.
 //
 void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
 {
+    // Helper to find image data for image atomics:
+    // OpImageLoad(image[idx])
+    // We take the image load apart and add its params to the atomic op aggregate node
+    const auto imageAtomicParams = [this, &loc, &node](TIntermAggregate* atomic, TIntermTyped* load) {
+        TIntermAggregate* loadOp = load->getAsAggregate();
+        if (loadOp == nullptr) {
+            error(loc, "unknown image type in atomic operation", "", "");
+            node = nullptr;
+            return;
+        }
+
+        atomic->getSequence().push_back(loadOp->getSequence()[0]);
+        atomic->getSequence().push_back(loadOp->getSequence()[1]);
+    };
+
+    // Return true if this is an imageLoad, which we will change to an image atomic.
+    const auto isImageParam = [](TIntermTyped* image) -> bool {
+        TIntermAggregate* imageAggregate = image->getAsAggregate();
+        return imageAggregate != nullptr && imageAggregate->getOp() == EOpImageLoad;
+    };
+
     // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST
     // opcodes for compatibility with existing software stacks.
     static const bool decomposeHlslIntrinsics = true;
@@ -1912,27 +2448,43 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
     case EOpInterlockedXor: // ...
     case EOpInterlockedExchange: // always has output arg
         {
-            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
-            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
-
-            const bool isImage = arg0->getType().isImage();
-            const TOperator atomicOp = mapAtomicOp(loc, op, isImage);
+            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();  // dest
+            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();  // value
+            TIntermTyped* arg2 = nullptr;
 
-            if (argAggregate->getSequence().size() > 2) {
-                // optional output param is present.  return value goes to arg2.
-                TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped();
+            if (argAggregate->getSequence().size() > 2)
+                arg2 = argAggregate->getSequence()[2]->getAsTyped();
 
-                TIntermAggregate* atomic = new TIntermAggregate(atomicOp);
-                atomic->getSequence().push_back(arg0);
+            const bool isImage = isImageParam(arg0);
+            const TOperator atomicOp = mapAtomicOp(loc, op, isImage);
+            TIntermAggregate* atomic = new TIntermAggregate(atomicOp);
+            atomic->setType(arg0->getType());
+            atomic->getWritableType().getQualifier().makeTemporary();
+            atomic->setLoc(loc);
+ 
+            if (isImage) {
+                // orig_value = imageAtomicOp(image, loc, data)
+                imageAtomicParams(atomic, arg0);
                 atomic->getSequence().push_back(arg1);
-                atomic->setLoc(loc);
-                atomic->setType(arg0->getType());
-                atomic->getWritableType().getQualifier().makeTemporary();
 
-                node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                if (argAggregate->getSequence().size() > 2) {
+                    node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                } else {
+                    node = atomic; // no assignment needed, as there was no out var.
+                }
             } else {
-                // Set the matching operator.  Since output is absent, this is all we need to do.
-                node->getAsAggregate()->setOperator(atomicOp);
+                // Normal memory variable:
+                // arg0 = mem, arg1 = data, arg2(optional,out) = orig_value
+                if (argAggregate->getSequence().size() > 2) {
+                    // optional output param is present.  return value goes to arg2.
+                    atomic->getSequence().push_back(arg0);
+                    atomic->getSequence().push_back(arg1);
+
+                    node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                } else {
+                    // Set the matching operator.  Since output is absent, this is all we need to do.
+                    node->getAsAggregate()->setOperator(atomicOp);
+                }
             }
 
             break;
@@ -1945,15 +2497,20 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
             TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped();  // value
             TIntermTyped* arg3 = argAggregate->getSequence()[3]->getAsTyped();  // orig
 
-            const bool isImage = arg0->getType().isImage();
+            const bool isImage = isImageParam(arg0);
             TIntermAggregate* atomic = new TIntermAggregate(mapAtomicOp(loc, op, isImage));
-            atomic->getSequence().push_back(arg0);
-            atomic->getSequence().push_back(arg1);
-            atomic->getSequence().push_back(arg2);
             atomic->setLoc(loc);
             atomic->setType(arg2->getType());
             atomic->getWritableType().getQualifier().makeTemporary();
 
+            if (isImage) {
+                imageAtomicParams(atomic, arg0);
+            } else {
+                atomic->getSequence().push_back(arg0);
+            }
+
+            atomic->getSequence().push_back(arg1);
+            atomic->getSequence().push_back(arg2);
             node = intermediate.addAssign(EOpAssign, arg3, atomic, loc);
             
             break;
@@ -2114,7 +2671,7 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
         //
         const TFunction* fnCandidate;
         bool builtIn;
-        fnCandidate = findFunction(loc, *function, builtIn);
+        fnCandidate = findFunction(loc, *function, builtIn, arguments);
         if (fnCandidate) {
             // This is a declared function that might map to
             //  - a built-in operator,
@@ -2125,21 +2682,9 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
             if (builtIn && fnCandidate->getNumExtensions())
                 requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 
-            if (arguments) {
-                // Make sure qualifications work for these arguments.
-                //TIntermAggregate* aggregate = arguments->getAsAggregate();
-                //for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
-                //    // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
-                //    // is the single argument itself or its children are the arguments.  Only one argument
-                //    // means take 'arguments' itself as the one argument.
-                //    TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
-                //    TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
-                //    TQualifier& argQualifier = arg->getAsTyped()->getQualifier();
-                //}
-
-                // Convert 'in' arguments
-                addInputArgumentConversions(*fnCandidate, arguments);  // arguments may be modified if it's just a single argument node
-            }
+            // Convert 'in' arguments
+            if (arguments)
+                addInputArgumentConversions(*fnCandidate, arguments);
 
             op = fnCandidate->getBuiltInOp();
             if (builtIn && op != EOpNull) {
@@ -2168,20 +2713,27 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
                 }
             }
 
+            // for decompositions, since we want to operate on the function node, not the aggregate holding
+            // output conversions.
+            const TIntermTyped* fnNode = result; 
+
+            decomposeIntrinsic(loc, result, arguments);       // HLSL->AST intrinsic decompositions
+            decomposeSampleMethods(loc, result, arguments);   // HLSL->AST sample method decompositions
+            decomposeGeometryMethods(loc, result, arguments); // HLSL->AST geometry method decompositions
+
             // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
             // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
             // Also, build the qualifier list for user function calls, which are always called with an aggregate.
-            if (result->getAsAggregate()) {
+            // We don't do this is if there has been a decomposition, which will have added its own conversions
+            // for output parameters.
+            if (result == fnNode && result->getAsAggregate()) {
                 TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
                 for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
                     TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
                     qualifierList.push_back(qual);
                 }
-                result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
+                result = addOutputArgumentConversions(*fnCandidate, *result->getAsOperator());
             }
-
-            decomposeIntrinsic(loc, result, arguments);      // HLSL->AST intrinsic decompositions
-            decomposeSampleMethods(loc, result, arguments);  // HLSL->AST sample method decompositions
         }
     }
 
@@ -2210,22 +2762,6 @@ TIntermTyped* HlslParseContext::handleLengthMethod(const TSourceLoc& loc, TFunct
             if (type.isRuntimeSizedArray()) {
                 // Create a unary op and let the back end handle it
                 return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
-            } else if (type.isImplicitlySizedArray()) {
-                if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) {
-                    // We could be between a layout declaration that gives a built-in io array implicit size and 
-                    // a user redeclaration of that array, meaning we have to substitute its implicit size here 
-                    // without actually redeclaring the array.  (It is an error to use a member before the
-                    // redeclaration, but not an error to use the array name itself.)
-                    const TString& name = intermNode->getAsSymbolNode()->getName();
-                    if (name == "gl_in" || name == "gl_out")
-                        length = getIoArrayImplicitSize();
-                }
-                if (length == 0) {
-                    if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
-                        error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier");
-                    else
-                        error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method");
-                }
             } else
                 length = type.getOuterArraySize();
         } else if (type.isMatrix())
@@ -2247,7 +2783,7 @@ TIntermTyped* HlslParseContext::handleLengthMethod(const TSourceLoc& loc, TFunct
 //
 // Add any needed implicit conversions for function-call arguments to input parameters.
 //
-void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const
+void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments)
 {
     TIntermAggregate* aggregate = arguments->getAsAggregate();
     const auto setArg = [&](int argNum, TIntermNode* arg) {
@@ -2263,30 +2799,44 @@ void HlslParseContext::addInputArgumentConversions(const TFunction& function, TI
 
     // Process each argument's conversion
     for (int i = 0; i < function.getParamCount(); ++i) {
+        if (! function[i].type->getQualifier().isParamInput())
+            continue;
+
         // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
         // is the single argument itself or its children are the arguments.  Only one argument
         // means take 'arguments' itself as the one argument.
-        TIntermTyped* arg = function.getParamCount() == 1 ? arguments->getAsTyped() : (aggregate ? aggregate->getSequence()[i]->getAsTyped() : arguments->getAsTyped());
+        TIntermTyped* arg = function.getParamCount() == 1
+                                   ? arguments->getAsTyped()
+                                   : (aggregate ? aggregate->getSequence()[i]->getAsTyped() : arguments->getAsTyped());
         if (*function[i].type != arg->getType()) {
-            if (function[i].type->getQualifier().isParamInput()) {
-                // In-qualified arguments just need an extra node added above the argument to
-                // convert to the correct type.
-                arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
-                arg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, arg);
-                setArg(i, arg);
-            }
+            // In-qualified arguments just need an extra node added above the argument to
+            // convert to the correct type.
+            TIntermTyped* convArg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
+            if (convArg != nullptr)
+                convArg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, convArg);
+            if (convArg != nullptr)
+                setArg(i, convArg);
+            else
+                error(arg->getLoc(), "cannot convert input argument, argument", "", "%d", i);
         } else {
-            if (shouldFlatten(arg->getType())) {
-                TSourceLoc dummyLoc;
-                dummyLoc.init();
+            if (wasFlattened(arg)) {
+                // Will make a two-level subtree.
+                // The deepest will copy member-by-member to build the structure to pass.
+                // The level above that will be a two-operand EOpComma sequence that follows the copy by the
+                // object itself.
                 TVariable* internalAggregate = makeInternalVariable("aggShadow", *function[i].type);
                 internalAggregate->getWritableType().getQualifier().makeTemporary();
                 TIntermSymbol* internalSymbolNode = new TIntermSymbol(internalAggregate->getUniqueId(), 
                                                                       internalAggregate->getName(),
                                                                       internalAggregate->getType());
-                TIntermAggregate* assignAgg = handleAssign(dummyLoc, EOpAssign, internalSymbolNode, arg)->getAsAggregate();
-                assignAgg = intermediate.growAggregate(assignAgg, internalSymbolNode);
+                internalSymbolNode->setLoc(arg->getLoc());
+                // This makes the deepest level, the member-wise copy
+                TIntermAggregate* assignAgg = handleAssign(arg->getLoc(), EOpAssign, internalSymbolNode, arg)->getAsAggregate();
+
+                // Now, pair that with the resulting aggregate.
+                assignAgg = intermediate.growAggregate(assignAgg, internalSymbolNode, arg->getLoc());
                 assignAgg->setOperator(EOpComma);
+                assignAgg->setType(internalAggregate->getType());
                 setArg(i, assignAgg);
             }
         }
@@ -2300,14 +2850,30 @@ void HlslParseContext::addInputArgumentConversions(const TFunction& function, TI
 //
 // Returns a node of a subtree that evaluates to the return value of the function.
 //
-TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const
+TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermOperator& intermNode)
 {
-    TIntermSequence& arguments = intermNode.getSequence();
+    assert (intermNode.getAsAggregate() != nullptr || intermNode.getAsUnaryNode() != nullptr);
+
+    const TSourceLoc& loc = intermNode.getLoc();
+
+    TIntermSequence argSequence; // temp sequence for unary node args
+
+    if (intermNode.getAsUnaryNode())
+        argSequence.push_back(intermNode.getAsUnaryNode()->getOperand());
+
+    TIntermSequence& arguments = argSequence.empty() ? intermNode.getAsAggregate()->getSequence() : argSequence;
+
+    const auto needsConversion = [&](int argNum) {
+        return function[argNum].type->getQualifier().isParamOutput() &&
+               (*function[argNum].type != arguments[argNum]->getAsTyped()->getType() ||
+                shouldConvertLValue(arguments[argNum]) ||
+                wasFlattened(arguments[argNum]->getAsTyped()));
+    };
 
     // Will there be any output conversions?
     bool outputConversions = false;
     for (int i = 0; i < function.getParamCount(); ++i) {
-        if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().storage == EvqOut) {
+        if (needsConversion(i)) {
             outputConversions = true;
             break;
         }
@@ -2329,8 +2895,8 @@ TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& fu
     if (intermNode.getBasicType() != EbtVoid) {
         // do the "tempRet = function(...), " bit from above
         tempRet = makeInternalVariable("tempReturn", intermNode.getType());
-        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
-        conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, intermNode.getLoc());
+        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc);
+        conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, loc);
     } else
         conversionTree = &intermNode;
 
@@ -2338,28 +2904,33 @@ TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& fu
 
     // Process each argument's conversion
     for (int i = 0; i < function.getParamCount(); ++i) {
-        if (*function[i].type != arguments[i]->getAsTyped()->getType()) {
-            if (function[i].type->getQualifier().isParamOutput()) {
-                // Out-qualified arguments need to use the topology set up above.
-                // do the " ...(tempArg, ...), arg = tempArg" bit from above
-                TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type);
-                tempArg->getWritableType().getQualifier().makeTemporary();
-                TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
-                TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc());
-                conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
-                // replace the argument with another node for the same tempArg variable
-                arguments[i] = intermediate.addSymbol(*tempArg, intermNode.getLoc());
-            }
+        if (needsConversion(i)) {
+            // Out-qualified arguments needing conversion need to use the topology setup above.
+            // Do the " ...(tempArg, ...), arg = tempArg" bit from above.
+
+            // Make a temporary for what the function expects the argument to look like.
+            TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type);
+            tempArg->getWritableType().getQualifier().makeTemporary();
+            TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, loc);
+
+            // This makes the deepest level, the member-wise copy
+            TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(), tempArgNode);
+            tempAssign = handleLvalue(arguments[i]->getLoc(), "assign", tempAssign);
+            conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
+
+            // replace the argument with another node for the same tempArg variable
+            arguments[i] = intermediate.addSymbol(*tempArg, loc);
         }
     }
 
     // Finalize the tree topology (see bigger comment above).
     if (tempRet) {
         // do the "..., tempRet" bit from above
-        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
-        conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, intermNode.getLoc());
+        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, loc);
+        conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, loc);
     }
-    conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc());
+
+    conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), loc);
 
     return conversionTree;
 }
@@ -2623,6 +3194,8 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
         qualifier.builtIn = EbvTessLevelInner;
     else if (semanticUpperCase == "SV_GSINSTANCEID")
         qualifier.builtIn = EbvInvocationId;
+    else if (semanticUpperCase == "SV_DISPATCHTHREADID")
+        qualifier.builtIn = EbvLocalInvocationId;
     else if (semanticUpperCase == "SV_GROUPTHREADID")
         qualifier.builtIn = EbvLocalInvocationId;
     else if (semanticUpperCase == "SV_GROUPID")
@@ -2631,6 +3204,8 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
         qualifier.builtIn = EbvTessCoord;
     else if (semanticUpperCase == "SV_DEPTH")
         qualifier.builtIn = EbvFragDepth;
+    else if( semanticUpperCase == "SV_COVERAGE")
+        qualifier.builtIn = EbvSampleMask;
 
     //TODO, these need to get refined to be more specific 
     else if( semanticUpperCase == "SV_DEPTHGREATEREQUAL")
@@ -2638,9 +3213,9 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
     else if( semanticUpperCase == "SV_DEPTHLESSEQUAL")
         qualifier.builtIn = EbvFragDepthLesser;
     else if( semanticUpperCase == "SV_STENCILREF")
-        error(loc, "unimplemented", "SV_STENCILREF", "");
-    else if( semanticUpperCase == "SV_COVERAGE")
-        error(loc, "unimplemented", "SV_COVERAGE", "");
+        error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", "");
+    else if( semanticUpperCase == "SV_GROUPINDEX")
+        error(loc, "unimplemented", "SV_GROUPINDEX", "");
 }
 
 //
@@ -2711,11 +3286,12 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
     }
 
     // TODO: learn what all these really mean and how they interact with regNumber and subComponent
-    switch (desc[0]) {
+    switch (std::tolower(desc[0])) {
     case 'b':
     case 't':
     case 'c':
     case 's':
+    case 'u':
         qualifier.layoutBinding = regNumber + subComponent;
         break;
     default:
@@ -2725,7 +3301,7 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
 
     // space
     unsigned int setNumber;
-    const auto crackSpace = [&]() {
+    const auto crackSpace = [&]() -> bool {
         const int spaceLen = 5;
         if (spaceDesc->size() < spaceLen + 1)
             return false;
@@ -2846,7 +3422,7 @@ bool HlslParseContext::builtInName(const TString& /*identifier*/)
 //
 // Returns true if there was an error in construction.
 //
-bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*node*/, TFunction& function,
+bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function,
                                         TOperator op, TType& type)
 {
     type.shallowCopy(function.getType());
@@ -2942,7 +3518,7 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*no
 
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
-                error(loc, "array constructor argument not correct type to construct array element", "constructior", "");
+                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
@@ -2972,6 +3548,9 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*no
         return true;
     }
 
+    if (op == EOpConstructStruct && ! type.isArray() && isZeroConstructor(node))
+        return false;
+
     if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
         error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", "");
         return true;
@@ -2983,11 +3562,15 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*no
         return true;
     }
 
-    // TIntermTyped* typed = node->getAsTyped();
-
     return false;
 }
 
+bool HlslParseContext::isZeroConstructor(const TIntermNode* node)
+{
+    return node->getAsTyped()->isScalar() && node->getAsConstantUnion() &&
+           node->getAsConstantUnion()->getConstArray()[0].getIConst() == 0;
+}
+
 // Verify all the correct semantics for constructing a combined texture/sampler.
 // Return true if the semantics are incorrect.
 bool HlslParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const TFunction& function)
@@ -3214,7 +3797,7 @@ void HlslParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
 //
-void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool& newDeclaration)
+void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool track)
 {
     if (! symbol) {
         bool currentScope;
@@ -3231,15 +3814,8 @@ void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier,
             //
             symbol = new TVariable(&identifier, type);
             symbolTable.insert(*symbol);
-            newDeclaration = true;
-
-            if (! symbolTable.atBuiltInLevel()) {
-                if (isIoResizeArray(type)) {
-                    ioArraySymbolResizeList.push_back(symbol);
-                    checkIoArraysConsistency(loc, true);
-                } else
-                    fixIoArraySize(loc, symbol->getWritableType());
-            }
+            if (track && symbolTable.atGlobalLevel())
+                trackLinkageDeferred(*symbol);
 
             return;
         }
@@ -3262,18 +3838,12 @@ void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier,
     // redeclareBuiltinVariable() should have already done the copyUp()
     TType& existingType = symbol->getWritableType();
 
-
     if (existingType.isExplicitlySizedArray()) {
         // be more lenient for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
-        if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
-            error(loc, "redeclaration of array with size", identifier.c_str(), "");
         return;
     }
 
     existingType.updateArraySizes(type);
-
-    if (isIoResizeArray(type))
-        checkIoArraysConsistency(loc);
 }
 
 void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index)
@@ -3334,7 +3904,7 @@ void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNod
 //
 TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& /*loc*/, const TString& identifier,
                                                     const TQualifier& /*qualifier*/,
-                                                    const TShaderQualifiers& /*publicType*/, bool& /*newDeclaration*/)
+                                                    const TShaderQualifiers& /*publicType*/)
 {
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
@@ -3458,15 +4028,8 @@ void HlslParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& n
 
     symbolTable.insert(*block);
 
-    // Tracking for implicit sizing of array
-    if (isIoResizeArray(block->getType())) {
-        ioArraySymbolResizeList.push_back(block);
-        checkIoArraysConsistency(loc, true);
-    } else if (block->getType().isArray())
-        fixIoArraySize(loc, block->getWritableType());
-
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *block);
+    trackLinkageDeferred(*block);
 }
 
 void HlslParseContext::paramFix(TType& type)
@@ -3501,11 +4064,11 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qua
     std::transform(id.begin(), id.end(), id.begin(), ::tolower);
 
     if (id == TQualifier::getLayoutMatrixString(ElmColumnMajor)) {
-        qualifier.layoutMatrix = ElmColumnMajor;
+        qualifier.layoutMatrix = ElmRowMajor;
         return;
     }
     if (id == TQualifier::getLayoutMatrixString(ElmRowMajor)) {
-        qualifier.layoutMatrix = ElmRowMajor;
+        qualifier.layoutMatrix = ElmColumnMajor;
         return;
     }
     if (id == "push_constant") {
@@ -3920,7 +4483,8 @@ void HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQuali
 //
 // Return the function symbol if found, otherwise nullptr.
 //
-const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
+const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn,
+                                                TIntermNode* args)
 {
     // const TFunction* function = nullptr;
 
@@ -3940,8 +4504,18 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
     TVector<const TFunction*> candidateList;
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
     
+    // These builtin ops can accept any type, so we bypass the argument selection
+    if (candidateList.size() == 1 && builtIn &&
+        (candidateList[0]->getBuiltInOp() == EOpMethodAppend ||
+         candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip)) {
+
+        return candidateList[0];
+    }
+
+    bool allowOnlyUpConversions = true;
+
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to) {
+    const auto convertible = [&](const TType& from, const TType& to, TOperator op, int arg) -> bool {
         if (from == to)
             return true;
 
@@ -3950,13 +4524,37 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
             from.isStruct() || to.isStruct())
             return false;
 
+        switch (op) {
+        case EOpInterlockedAdd:
+        case EOpInterlockedAnd:
+        case EOpInterlockedCompareExchange:
+        case EOpInterlockedCompareStore:
+        case EOpInterlockedExchange:
+        case EOpInterlockedMax:
+        case EOpInterlockedMin:
+        case EOpInterlockedOr:
+        case EOpInterlockedXor:
+            // We do not promote the texture or image type for these ocodes.  Normally that would not
+            // be an issue because it's a buffer, but we haven't decomposed the opcode yet, and at this
+            // stage it's merely e.g, a basic integer type.
+            // 
+            // Instead, we want to promote other arguments, but stay within the same family.  In other
+            // words, InterlockedAdd(RWBuffer<int>, ...) will always use the int flavor, never the uint flavor,
+            // but it is allowed to promote its other arguments.
+            if (arg == 0)
+                return false;
+        default:
+            break;
+        }
+
         // basic types have to be convertible
-        if (! intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall))
-            return false;
+        if (allowOnlyUpConversions)
+            if (! intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall))
+                return false;
 
         // shapes have to be convertible
-        if ((from.isScalar() && to.isScalar()) ||
-            (from.isScalar() && to.isVector()) ||
+        if ((from.isScalarOrVec1() && to.isScalarOrVec1()) ||
+            (from.isScalarOrVec1() && to.isVector())    ||
             (from.isVector() && to.isVector() && from.getVectorSize() >= to.getVectorSize()))
             return true;
 
@@ -3968,7 +4566,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
     // Is 'to2' a better conversion than 'to1'?
     // Ties should not be considered as better.
     // Assumes 'convertible' already said true.
-    const auto better = [](const TType& from, const TType& to1, const TType& to2) {
+    const auto better = [](const TType& from, const TType& to1, const TType& to2) -> bool {
         // exact match is always better than mismatch
         if (from == to2)
             return from != to1;
@@ -3995,7 +4593,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
         //     - 32 vs. 64 bit (or width in general)
         //       - bool vs. non bool
         //         - signed vs. not signed
-        const auto linearize = [](const TBasicType& basicType) {
+        const auto linearize = [](const TBasicType& basicType) -> int {
             switch (basicType) {
             case EbtBool:     return 1;
             case EbtInt:      return 10;
@@ -4018,9 +4616,89 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
     // send to the generic selector
     const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
 
-    if (bestMatch == nullptr)
+    if (bestMatch == nullptr) {
+        // If there is nothing selected by allowing only up-conversions (to a larger linearize() value),
+        // we instead try down-conversions, which are valid in HLSL, but not preferred if there are any
+        // upconversions possible.
+        allowOnlyUpConversions = false;
+        bestMatch = selectFunction(candidateList, call, convertible, better, tie);
+    }
+
+    if (bestMatch == nullptr) {
         error(loc, "no matching overloaded function found", call.getName().c_str(), "");
-    else if (tie)
+        return nullptr;
+    }
+
+    // For builtins, we can convert across the arguments.  This will happen in several steps:
+    // Step 1:  If there's an exact match, use it.
+    // Step 2a: Otherwise, get the operator from the best match and promote arguments:
+    // Step 2b: reconstruct the TFunction based on the new arg types
+    // Step 3:  Re-select after type promotion is applied, to find proper candidate.
+    if (builtIn) {
+        // Step 1: If there's an exact match, use it.
+        if (call.getMangledName() == bestMatch->getMangledName())
+            return bestMatch;
+
+        // Step 2a: Otherwise, get the operator from the best match and promote arguments as if we
+        // are that kind of operator.
+        if (args != nullptr) {
+            // The arg list can be a unary node, or an aggregate.  We have to handle both.
+            // We will use the normal promote() facilities, which require an interm node.
+            TIntermOperator* promote = nullptr;
+
+            if (call.getParamCount() == 1) {
+                promote = new TIntermUnary(bestMatch->getBuiltInOp());
+                promote->getAsUnaryNode()->setOperand(args->getAsTyped());
+            } else {
+                promote = new TIntermAggregate(bestMatch->getBuiltInOp());
+                promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence());
+            }
+
+            if (! intermediate.promote(promote))
+                return nullptr;
+
+            // Obtain the promoted arg list.
+            if (call.getParamCount() == 1) {
+                args = promote->getAsUnaryNode()->getOperand();
+            } else {
+                promote->getAsAggregate()->getSequence().swap(args->getAsAggregate()->getSequence());
+            }
+        }
+
+        // Step 2b: reconstruct the TFunction based on the new arg types
+        TFunction convertedCall(&call.getName(), call.getType(), call.getBuiltInOp());
+
+        if (args->getAsAggregate()) {
+            // Handle aggregates: put all args into the new function call
+            for (int arg=0; arg<int(args->getAsAggregate()->getSequence().size()); ++arg) {
+                // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly.
+                TParameter param = { 0, new TType };
+                param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType());
+                convertedCall.addParameter(param);
+            }
+        } else if (args->getAsUnaryNode()) {
+            // Handle unaries: put all args into the new function call
+            TParameter param = { 0, new TType };
+            param.type->shallowCopy(args->getAsUnaryNode()->getOperand()->getAsTyped()->getType());
+            convertedCall.addParameter(param);
+        } else if (args->getAsTyped()) {
+            // Handle bare e.g, floats, not in an aggregate.
+            TParameter param = { 0, new TType };
+            param.type->shallowCopy(args->getAsTyped()->getType());
+            convertedCall.addParameter(param);
+        } else {
+            assert(0); // unknown argument list.
+            return nullptr;
+        }
+
+        // Step 3: Re-select after type promotion, to find proper candidate
+        // send to the generic selector
+        bestMatch = selectFunction(candidateList, convertedCall, convertible, better, tie);
+
+        // At this point, there should be no tie.
+    }
+
+    if (tie)
         error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
 
     return bestMatch;
@@ -4032,16 +4710,11 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
 // 'parseType' is the type part of the declaration (to the left)
 // 'arraySizes' is the arrayness tagged on the identifier (to the right)
 //
-void HlslParseContext::declareTypedef(const TSourceLoc& loc, TString& identifier, const TType& parseType, TArraySizes* arraySizes)
+void HlslParseContext::declareTypedef(const TSourceLoc& loc, TString& identifier, const TType& parseType, TArraySizes* /*arraySizes*/)
 {
     TType type;
     type.deepCopy(parseType);
 
-    // Arrayness is potentially coming both from the type and from the 
-    // variable: "int[] a[];" or just one or the other.
-    // Merge it all to the type, so all arrayness is part of the type.
-    arrayDimMerge(type, arraySizes);
-
     TVariable* typeSymbol = new TVariable(&identifier, type, true);
     if (! symbolTable.insert(*typeSymbol))
         error(loc, "name already defined", "typedef", identifier.c_str());
@@ -4058,56 +4731,42 @@ void HlslParseContext::declareTypedef(const TSourceLoc& loc, TString& identifier
 // 'parseType' is the type part of the declaration (to the left)
 // 'arraySizes' is the arrayness tagged on the identifier (to the right)
 //
-TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TType& parseType, TArraySizes* arraySizes, TIntermTyped* initializer)
+TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, TType& type, TIntermTyped* initializer)
 {
-    // TODO: things scoped within an annotation need their own name space;
-    // haven't done that yet
-    if (annotationNestingLevel > 0)
-        return nullptr;
-
-    // TODO: strings are not yet handled
-    if (parseType.getBasicType() == EbtString)
-        return nullptr;
-
-    TType type;
-    type.shallowCopy(parseType);
-    if (type.isImplicitlySizedArray()) {
-        // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
-        // of different sizes, for this case sharing the shallow copy of arrayness
-        // with the parseType oversubscribes it, so get a deep copy of the arrayness.
-        type.newArraySizes(*parseType.getArraySizes());
-    }
-
     if (voidErrorCheck(loc, identifier, type.getBasicType()))
         return nullptr;
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
-    bool newDeclaration = false;    // true if a new entry gets added to the symbol table
-    TSymbol* symbol = nullptr; // = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), parseType.shaderQualifiers, newDeclaration);
+    TSymbol* symbol = nullptr;
 
     inheritGlobalDefaults(type.getQualifier());
 
+    const bool flattenVar = shouldFlatten(type);
+
     // Declare the variable
-    if (arraySizes || type.isArray()) {
-        // Arrayness is potentially coming both from the type and from the 
-        // variable: "int[] a[];" or just one or the other.
-        // Merge it all to the type, so all arrayness is part of the type.
-        arrayDimMerge(type, arraySizes);
-        declareArray(loc, identifier, type, symbol, newDeclaration);
+    if (type.isArray()) {
+        // array case
+        declareArray(loc, identifier, type, symbol, !flattenVar);
     } else {
         // non-array case
         if (! symbol)
-            symbol = declareNonArray(loc, identifier, type, newDeclaration);
+            symbol = declareNonArray(loc, identifier, type, !flattenVar);
         else if (type != symbol->getType())
             error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
     }
 
+    if (flattenVar)
+        flatten(loc, *symbol->getAsVariable());
+
     if (! symbol)
         return nullptr;
 
     // Deal with initializer
     TIntermNode* initNode = nullptr;
     if (symbol && initializer) {
+        if (flattenVar)
+            error(loc, "flattened array with initializer list unsupported", identifier.c_str(), "");
+
         TVariable* variable = symbol->getAsVariable();
         if (! variable) {
             error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
@@ -4116,10 +4775,6 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
         initNode = executeInitializer(loc, initializer, variable);
     }
 
-    // see if it's a linker-level object to track
-    if (newDeclaration && symbolTable.atGlobalLevel())
-        intermediate.addSymbolLinkageNode(linkage, *symbol);
-
     return initNode;
 }
 
@@ -4155,19 +4810,20 @@ TVariable* HlslParseContext::makeInternalVariable(const char* name, const TType&
 //
 // Return the successfully declared variable.
 //
-TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool& newDeclaration)
+TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool track)
 {
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
     // add variable to symbol table
-    if (! symbolTable.insert(*variable)) {
-        error(loc, "redefinition", variable->getName().c_str(), "");
-        return nullptr;
-    } else {
-        newDeclaration = true;
+    if (symbolTable.insert(*variable)) {
+        if (track && symbolTable.atGlobalLevel())
+            trackLinkageDeferred(*variable);
         return variable;
     }
+
+    error(loc, "redefinition", variable->getName().c_str(), "");
+    return nullptr;
 }
 
 //
@@ -4189,7 +4845,8 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
     // constructor-style subtree, allowing the rest of the code to operate
     // identically for both kinds of initializers.
     //
-    initializer = convertInitializerList(loc, variable->getType(), initializer);
+    if (initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull)
+        initializer = convertInitializerList(loc, variable->getType(), initializer);
     if (! initializer) {
         // error recovery; don't leave const without constant values
         if (qualifier == EvqConst)
@@ -4249,7 +4906,7 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
         // normal assigning of a value to a variable...
         specializationCheck(loc, initializer->getType(), "initializer");
         TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
-        TIntermNode* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc);
+        TIntermNode* initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer);
         if (! initNode)
             assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
 
@@ -4266,6 +4923,11 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
 // creating a constructor-style initializer, ensuring we get the
 // same form.
 //
+// Returns a node representing an expression for the initializer list expressed
+// as the correct type.
+//
+// Returns nullptr if there is an error.
+//
 TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type, TIntermTyped* initializer)
 {
     // Will operate recursively.  Once a subtree is found that is constructor style,
@@ -4274,8 +4936,15 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
 
     // see if we have bottomed out in the tree within the initializer-list part
     TIntermAggregate* initList = initializer->getAsAggregate();
-    if (! initList || initList->getOp() != EOpNull)
-        return initializer;
+    if (! initList || initList->getOp() != EOpNull) {
+        // We don't have a list, but if it's a scalar and the 'type' is a
+        // composite, we need to lengthen below to make it useful.
+        // Otherwise, this is an already formed object to initialize with.
+        if (type.isScalar() || !initializer->getType().isScalar())
+            return initializer;
+        else
+            initList = intermediate.makeAggregate(initializer);
+    }
 
     // Of the initializer-list set of nodes, need to process bottom up,
     // so recurse deep, then process on the way up.
@@ -4289,7 +4958,8 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
         arrayType.newArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
 
         // edit array sizes to fill in unsized dimensions
-        arrayType.changeOuterArraySize((int)initList->getSequence().size());
+        if (type.isImplicitlySizedArray())
+            arrayType.changeOuterArraySize((int)initList->getSequence().size());
         TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
         if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
             arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
@@ -4299,8 +4969,12 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
             }
         }
 
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), arrayType.getOuterArraySize());
+
+        // recursively process each element
         TType elementType(arrayType, 0); // dereferenced type
-        for (size_t i = 0; i < initList->getSequence().size(); ++i) {
+        for (int i = 0; i < arrayType.getOuterArraySize(); ++i) {
             initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped());
             if (initList->getSequence()[i] == nullptr)
                 return nullptr;
@@ -4308,6 +4982,9 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
 
         return addConstructor(loc, initList, arrayType);
     } else if (type.isStruct()) {
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), static_cast<int>(type.getStruct()->size()));
+
         if (type.getStruct()->size() != initList->getSequence().size()) {
             error(loc, "wrong number of structure members", "initializer list", "");
             return nullptr;
@@ -4323,6 +5000,9 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
             // a series of rows and columns.  We can just use the list directly as
             // a constructor; no further processing needed.
         } else {
+            // lengthen list to be long enough
+            lengthenList(loc, initList->getSequence(), type.getMatrixCols());
+
             if (type.getMatrixCols() != (int)initList->getSequence().size()) {
                 error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str());
                 return nullptr;
@@ -4335,6 +5015,10 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
             }
         }
     } else if (type.isVector()) {
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), type.getVectorSize());
+
+        // error check; we're at bottom, so work is finished below
         if (type.getVectorSize() != (int)initList->getSequence().size()) {
             error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
             return nullptr;
@@ -4344,7 +5028,7 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
             error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
             return nullptr;
         }
-   } else {
+    } else {
         error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
         return nullptr;
     }
@@ -4356,9 +5040,19 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
         emulatedConstructorArguments = initList->getSequence()[0];
     else
         emulatedConstructorArguments = initList;
+
     return addConstructor(loc, emulatedConstructorArguments, type);
 }
 
+// Lengthen list to be long enough to cover any gap from the current list size
+// to 'size'. If the list is longer, do nothing.
+// The value to lengthen with is the default for short lists.
+void HlslParseContext::lengthenList(const TSourceLoc& loc, TIntermSequence& list, int size)
+{
+    for (int c = (int)list.size(); c < size; ++c)
+        list.push_back(intermediate.addConstantUnion(0, loc));
+}
+
 //
 // Test for the correctness of the parameters passed to various constructor functions
 // and also convert them to the right data type, if allowed and required.
@@ -4370,6 +5064,10 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNod
     if (node == nullptr || node->getAsTyped() == nullptr)
         return nullptr;
 
+    // Handle the idiom "(struct type)0"
+    if (type.isStruct() && isZeroConstructor(node))
+        return convertInitializerList(loc, type, intermediate.makeAggregate(loc));
+
     TIntermAggregate* aggrNode = node->getAsAggregate();
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
@@ -4657,39 +5355,13 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
     // Build and add the interface block as a new type named 'blockName'
     //
 
-    //?? need the block name to be a typename?
-    TType blockType(&typeList, "" /* *blockName */, type.getQualifier());
+    // Use the instance name as the interface name if one exists, else the block name.
+    const TString& interfaceName = (instanceName && !instanceName->empty()) ? *instanceName : type.getTypeName();
+
+    TType blockType(&typeList, interfaceName, type.getQualifier());
     if (arraySizes)
         blockType.newArraySizes(*arraySizes);
 
-    //
-    // Don't make a user-defined type out of block name; that will cause an error
-    // if the same block name gets reused in a different interface.
-    //
-    // "Block names have no other use within a shader
-    // beyond interface matching; it is a compile-time error to use a block name at global scope for anything
-    // other than as a block name (e.g., use of a block name for a global variable name or function name is
-    // currently reserved)."
-    //
-    // Use the symbol table to prevent normal reuse of the block's name, as a variable entry,
-    // whose type is EbtBlock, but without all the structure; that will come from the type
-    // the instances point to.
-    //
-    //??TType blockNameType(EbtBlock, blockType.getQualifier().storage);
-    //??TVariable* blockNameVar = new TVariable(blockName, blockNameType);
-    //if (! symbolTable.insert(*blockNameVar)) {
-    //    TSymbol* existingName = symbolTable.find(*blockName);
-    //    if (existingName->getType().getBasicType() == EbtBlock) {
-    //        if (existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
-    //            error(loc, "Cannot reuse block name within the same interface:", blockName->c_str(), blockType.getStorageQualifierString());
-    //            return;
-    //        }
-    //    } else {
-    //        error(loc, "block name cannot redefine a non-block name", blockName->c_str(), "");
-    //        return;
-    //    }
-    //}
-
     // Add the variable, as anonymous or named instanceName.
     // Make an anonymous variable if no name was provided.
     if (! instanceName)
@@ -4705,14 +5377,15 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
         return;
     }
 
-    if (isIoResizeArray(blockType)) {
-        ioArraySymbolResizeList.push_back(&variable);
-        checkIoArraysConsistency(loc, true);
-    } else
-        fixIoArraySize(loc, variable.getWritableType());
-
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, variable);
+    trackLinkageDeferred(variable);
+}
+
+void HlslParseContext::finalizeGlobalUniformBlockLayout(TVariable& block)
+{
+    block.getWritableType().getQualifier().layoutPacking = ElpStd140;
+    block.getWritableType().getQualifier().layoutMatrix = ElmRowMajor;
+    fixBlockUniformOffsets(block.getType().getQualifier(), *block.getWritableType().getWritableStruct());
 }
 
 //
@@ -4795,7 +5468,7 @@ void HlslParseContext::fixBlockXfbOffsets(TQualifier& qualifier, TTypeList& type
 // Also, compute and save the total size of the block. For the block's size, arrayness 
 // is not taken into account, as each element is backed by a separate buffer.
 //
-void HlslParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typeList)
+void HlslParseContext::fixBlockUniformOffsets(const TQualifier& qualifier, TTypeList& typeList)
 {
     if (! qualifier.isUniformOrBuffer())
         return;
@@ -4813,19 +5486,16 @@ void HlslParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList&
         // modify just the children's view of matrix layout, if there is one for this member
         TLayoutMatrix subMatrixLayout = typeList[member].type->getQualifier().layoutMatrix;
         int dummyStride;
-        int memberAlignment = intermediate.getBaseAlignment(*typeList[member].type, memberSize, dummyStride, qualifier.layoutPacking == ElpStd140,
-            subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor : qualifier.layoutMatrix == ElmRowMajor);
+        int memberAlignment = intermediate.getBaseAlignment(*typeList[member].type, memberSize, dummyStride,
+                                                            qualifier.layoutPacking == ElpStd140,
+                                                            subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor
+                                                                                       : qualifier.layoutMatrix == ElmRowMajor);
         if (memberQualifier.hasOffset()) {
             // "The specified offset must be a multiple 
             // of the base alignment of the type of the block member it qualifies, or a compile-time error results."
             if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
                 error(memberLoc, "must be a multiple of the member's alignment", "offset", "");
 
-            // "It is a compile-time error to specify an offset that is smaller than the offset of the previous 
-            // member in the block or that lies within the previous member of the block"
-            if (memberQualifier.layoutOffset < offset)
-                error(memberLoc, "cannot lie in previous members", "offset", "");
-
             // "The offset qualifier forces the qualified member to start at or after the specified 
             // integral-constant expression, which will be its byte offset from the beginning of the buffer. 
             // "The actual offset of a member is computed as 
@@ -4897,6 +5567,53 @@ void HlslParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier
         addQualifierToExisting(loc, qualifier, *identifiers[i]);
 }
 
+//
+// Update the intermediate for the given input geometry
+//
+bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
+{
+    switch (geometry) {
+    case ElgPoints:             // fall through
+    case ElgLines:              // ...
+    case ElgTriangles:          // ...
+    case ElgLinesAdjacency:     // ...
+    case ElgTrianglesAdjacency: // ...
+        if (! intermediate.setInputPrimitive(geometry)) {
+            error(loc, "input primitive geometry redefinition", TQualifier::getGeometryString(geometry), "");
+            return false;
+        }
+        break;
+
+    default:
+        error(loc, "cannot apply to 'in'", TQualifier::getGeometryString(geometry), "");
+        return false;
+    }
+
+    return true;
+}
+
+//
+// Update the intermediate for the given output geometry
+//
+bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
+{
+    switch (geometry) {
+    case ElgPoints:
+    case ElgLineStrip:
+    case ElgTriangleStrip:
+        if (! intermediate.setOutputPrimitive(geometry)) {
+            error(loc, "output primitive geometry redefinition", TQualifier::getGeometryString(geometry), "");
+            return false;
+        }
+        break;
+    default:
+        error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(geometry), "");
+        return false;
+    }
+
+    return true;
+}
+
 //
 // Updating default qualifier for the case of a declaration with just a qualifier,
 // no type, block, or identifier.
@@ -4906,9 +5623,6 @@ void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc,
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
         assert(language == EShLangTessControl || language == EShLangGeometry);
         // const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
-
-        if (language == EShLangTessControl)
-            checkIoArraysConsistency(loc);
     }
     if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) {
         if (! intermediate.setInvocations(publicType.shaderQualifiers.invocations))
@@ -4924,26 +5638,12 @@ void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc,
             case ElgTrianglesAdjacency:
             case ElgQuads:
             case ElgIsolines:
-                if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) {
-                    if (language == EShLangGeometry)
-                        checkIoArraysConsistency(loc);
-                } else
-                    error(loc, "cannot change previously set input primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                 break;
             default:
                 error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
             }
         } else if (publicType.qualifier.storage == EvqVaryingOut) {
-            switch (publicType.shaderQualifiers.geometry) {
-            case ElgPoints:
-            case ElgLineStrip:
-            case ElgTriangleStrip:
-                if (! intermediate.setOutputPrimitive(publicType.shaderQualifiers.geometry))
-                    error(loc, "cannot change previously set output primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
-                break;
-            default:
-                error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
-            }
+            handleOutputGeometry(loc, publicType.shaderQualifiers.geometry);
         } else
             error(loc, "cannot apply to:", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), GetStorageQualifierString(publicType.qualifier.storage));
     }
@@ -5083,4 +5783,13 @@ TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* ex
     return switchNode;
 }
 
+// Potentially rename shader entry point function
+void HlslParseContext::renameShaderFunction(TString*& name) const
+{
+    // Replace the entry point name given in the shader with the real entry point name,
+    // if there is a substitution.
+    if (name != nullptr && *name == sourceEntryPointName)
+        name = new TString(intermediate.getEntryPointName().c_str());
+}
+
 } // end namespace glslang
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index 0162088321b0be323de6af52c67be1a3364c922f..3ffe35258263397735f290e7c794d83387291c06 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -41,25 +41,20 @@
 
 namespace glslang {
 
+class TAttributeMap; // forward declare
+
 class HlslParseContext : public TParseContextBase {
 public:
     HlslParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins,
                      int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&,
+                     const TString sourceEntryPointName,
                      bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
     virtual ~HlslParseContext();
     void initializeExtensionBehavior();
 
     void setLimits(const TBuiltInResource&);
     bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false);
-
-    void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
-        const char* szExtraInfoFormat, ...);
-    void C_DECL  warn(const TSourceLoc&, const char* szReason, const char* szToken,
-        const char* szExtraInfoFormat, ...);
-    void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken,
-        const char* szExtraInfoFormat, ...);
-    void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
-        const char* szExtraInfoFormat, ...);
+    virtual const char* getGlobalUniformBlockName() { return "$Global"; }
 
     void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) { }
     bool lineContinuationCheck(const TSourceLoc&, bool /*endOfComment*/) { return true; }
@@ -69,26 +64,15 @@ public:
     void handlePragma(const TSourceLoc&, const TVector<TString>&);
     TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol,  const TString* string);
     TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
+    TIntermTyped* handleBracketOperator(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
     void checkIndex(const TSourceLoc&, const TType&, int& index);
 
-    void makeEditable(TSymbol*&);
-    TVariable* getEditableVariable(const char* name);
-    bool isIoResizeArray(const TType&) const;
-    void fixIoArraySize(const TSourceLoc&, TType&);
-    void handleIoResizeArrayAccess(const TSourceLoc&, TIntermTyped* base);
-    void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false);
-    int getIoArrayImplicitSize() const;
-    void checkIoArrayConsistency(const TSourceLoc&, int requiredSize, const char* feature, TType&, const TString&);
-
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
     TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
-    bool shouldFlatten(const TType&) const;
-    void flatten(const TVariable& variable);
-    TIntermTyped* flattenAccess(TIntermTyped* base, int member);
     void assignLocations(TVariable& variable);
     TFunction& handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
-    TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
+    TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&);
     void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node);
     void remapEntryPointIO(TFunction& function);
     void remapNonEntryPointIO(TFunction& function);
@@ -98,9 +82,10 @@ public:
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
     void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
+    void decomposeGeometryMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
-    void addInputArgumentConversions(const TFunction&, TIntermNode*&) const;
-    TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const;
+    void addInputArgumentConversions(const TFunction&, TIntermNode*&);
+    TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermOperator&);
     void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
     TFunction* handleConstructorCall(const TSourceLoc&, const TType&);
     void handleSemantic(TSourceLoc, TQualifier&, const TString& semantic);
@@ -131,7 +116,7 @@ public:
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
     void mergeQualifiers(TQualifier& dst, const TQualifier& src);
     int computeSamplerTypeIndex(TSampler&);
-    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration);
+    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
     void paramFix(TType& type);
     void specializationCheck(const TSourceLoc&, const TType&, const char* op);
@@ -141,16 +126,18 @@ public:
     void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly);
     void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
 
-    const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
+    const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn, TIntermNode* args);
     void declareTypedef(const TSourceLoc&, TString& identifier, const TType&, TArraySizes* typeArray = 0);
-    TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
+    TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, TType&, TIntermTyped* initializer = 0);
+    void lengthenList(const TSourceLoc&, TIntermSequence& list, int size);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
     void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
+    void finalizeGlobalUniformBlockLayout(TVariable& block);
     void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation);
     void fixBlockXfbOffsets(TQualifier&, TTypeList&);
-    void fixBlockUniformOffsets(TQualifier&, TTypeList&);
+    void fixBlockUniformOffsets(const TQualifier&, TTypeList&);
     void addQualifierToExisting(const TSourceLoc&, TQualifier, const TString& identifier);
     void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&);
     void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&);
@@ -163,23 +150,65 @@ public:
     void unnestLooping()     { --loopNestingLevel; }
     void nestAnnotations()   { ++annotationNestingLevel; }
     void unnestAnnotations() { --annotationNestingLevel; }
+    int getAnnotationNestingLevel() { return annotationNestingLevel; }
     void pushScope()         { symbolTable.push(); }
     void popScope()          { symbolTable.pop(0); }
 
     void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
     void popSwitchSequence() { switchSequenceStack.pop_back(); }
 
+    // Apply L-value conversions.  E.g, turning a write to a RWTexture into an ImageStore.
+    TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped* node);
+    bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override;
+
+    TLayoutFormat getLayoutFromTxType(const TSourceLoc&, const TType&);
+
+    bool handleOutputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
+    bool handleInputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
+
+    // Potentially rename shader entry point function
+    void renameShaderFunction(TString*& name) const;
+
+    // Reset data for incrementally built referencing of flattened composite structures
+    void initFlattening() { flattenLevel.push_back(0); flattenOffset.push_back(0); }
+    void finalizeFlattening() { flattenLevel.pop_back(); flattenOffset.pop_back(); }
+
 protected:
+    struct TFlattenData {
+        TFlattenData() : nextBinding(TQualifier::layoutBindingEnd) { }
+        TFlattenData(int nb) : nextBinding(nb) { }
+
+        TVector<TVariable*> members;     // individual flattened variables
+        TVector<int>        offsets;     // offset to next tree level
+        int                 nextBinding; // next binding to use.
+    };
+
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
-    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool& newDeclaration);
-    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
+    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool track);
+    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool track);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
+    bool isZeroConstructor(const TIntermNode*);
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
-    void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
-                       const char* szExtraInfoFormat, TPrefixType prefix,
-                       va_list args);
+
+    // Return true if this node requires L-value conversion (e.g, to an imageStore).
+    bool shouldConvertLValue(const TIntermNode*) const;
+
+    // Array and struct flattening
+    bool shouldFlatten(const TType& type) const;
+    TIntermTyped* flattenAccess(const TSourceLoc&, TIntermTyped* base, int member);
+    bool shouldFlattenIO(const TType&) const;
+    bool shouldFlattenUniform(const TType&) const;
+    bool wasFlattened(const TIntermTyped* node) const;
+    bool wasFlattened(int id) const { return flattenMap.find(id) != flattenMap.end(); }
+    int  addFlattenedMember(const TSourceLoc& loc, const TVariable&, const TType&, TFlattenData&, const TString& name, bool track);
+    bool isFinalFlattening(const TType& type) const { return !(type.isStruct() || type.isArray()); }
+
+    void flatten(const TSourceLoc& loc, const TVariable& variable);
+    int flatten(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
+    int flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
+    int flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
 
     // Current state of parsing
     struct TPragma contextPragma;
@@ -189,7 +218,7 @@ protected:
     int controlFlowNestingLevel; // 0 if outside all flow control
     TList<TIntermSequence*> switchSequenceStack;  // case, node, case, case, node, ...; ensure only one node between cases;   stack of them for nesting
     bool inEntryPoint;           // if inside a function, true if the function is the entry point
-    bool postMainReturn;         // if inside a function, true if the function is the entry point and this is after a return statement
+    bool postEntryPointReturn;         // if inside a function, true if the function is the entry point and this is after a return statement
     const TType* currentFunctionType;  // the return type of the function that's currently being parsed
     bool functionReturnsValue;   // true if a non-void function has a return
     TBuiltInResource resources;
@@ -242,9 +271,14 @@ protected:
     //
     TVector<TSymbol*> ioArraySymbolResizeList;
 
-    TMap<int, TVector<TVariable*>> flattenMap;
+    TMap<int, TFlattenData> flattenMap;
+    TVector<int> flattenLevel;  // nested postfix operator level for flattening
+    TVector<int> flattenOffset; // cumulative offset for flattening
+
     unsigned int nextInLocation;
     unsigned int nextOutLocation;
+
+    TString sourceEntryPointName;
 };
 
 } // end namespace glslang
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index 3f725997e83b65076c92c401e69c60580eac4a38..8ecaec9dd569f0fd25ee882441fd2cd464a9b884 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -55,7 +55,7 @@
 
 namespace {  // anonymous namespace functions
 
-const bool UseHlslTypes = false;
+const bool UseHlslTypes = true;
 
 const char* BaseTypeName(const char argOrder, const char* scalarName, const char* vecName, const char* matName)
 {
@@ -67,20 +67,21 @@ const char* BaseTypeName(const char argOrder, const char* scalarName, const char
     }
 }
 
-bool IsSamplerType(const char argType)     { return argType == 'S' || argType == 's'; }
-bool IsTextureArrayed(const char argOrder) { return argOrder == '@' || argOrder == '&'; }
-bool IsTextureMS(const char argOrder)      { return argOrder == '$' || argOrder == '&'; }
-bool IsBuffer(const char argOrder)         { return argOrder == '*'; }
+bool IsSamplerType(const char argType) { return argType == 'S' || argType == 's'; }
+bool IsArrayed(const char argOrder)    { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
+bool IsTextureMS(const char argOrder)  { return argOrder == '$' || argOrder == '&'; }
+bool IsBuffer(const char argOrder)     { return argOrder == '*' || argOrder == '~'; }
+bool IsImage(const char argOrder)      { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
 bool IsTextureType(const char argOrder)
 {
-    return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder);
+    return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder) | IsImage(argOrder);
 }
 
 // Reject certain combinations that are illegal sample methods.  For example,
 // 3D arrays.
 bool IsIllegalSample(const glslang::TString& name, const char* argOrder, int dim0)
 {
-    const bool isArrayed = IsTextureArrayed(*argOrder);
+    const bool isArrayed = IsArrayed(*argOrder);
     const bool isMS      = IsTextureMS(*argOrder);
     const bool isBuffer  = IsBuffer(*argOrder);
 
@@ -153,9 +154,9 @@ int CoordinateArgPos(const glslang::TString& name, bool isTexture)
 }
 
 // Some texture methods use an addition coordinate dimension for the mip
-bool HasMipInCoord(const glslang::TString& name, bool isMS, bool isBuffer)
+bool HasMipInCoord(const glslang::TString& name, bool isMS, bool isBuffer, bool isImage)
 {
-    return name == "Load" && !isMS && !isBuffer;
+    return name == "Load" && !isMS && !isBuffer && !isImage;
 }
 
 // LOD calculations don't pass the array level in the coordinate.
@@ -219,10 +220,11 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
 {
     const bool isTranspose = (argOrder[0] == '^');
     const bool isTexture   = IsTextureType(argOrder[0]);
-    const bool isArrayed   = IsTextureArrayed(argOrder[0]);
+    const bool isArrayed   = IsArrayed(argOrder[0]);
     const bool isSampler   = IsSamplerType(argType[0]);
     const bool isMS        = IsTextureMS(argOrder[0]);
     const bool isBuffer    = IsBuffer(argOrder[0]);
+    const bool isImage     = IsImage(argOrder[0]);
 
     char type  = *argType;
 
@@ -243,20 +245,25 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
     char order = *argOrder;
 
     if (UseHlslTypes) {
-        // TODO: handle sub-vec4 returns
         switch (type) {
-        case '-': s += "void";                                            break;
-        case 'F': s += "float";                                           break;
-        case 'D': s += "double";                                          break;
-        case 'I': s += "int";                                             break;
-        case 'U': s += "uint";                                            break;
-        case 'B': s += "bool";                                            break;
-        case 'S': s += "sampler";                                         break;
-        case 's': s += "SamplerComparisonState";                          break;
-        case 'T': s += (isBuffer ? "Buffer" : "Texture");                 break;
-        case 'i': s += (isBuffer ? "Buffer <int4>" : "Texture <int4>");   break;
-        case 'u': s += (isBuffer ? "Buffer <uint4>" : "Texture <uint4>"); break;
-        default:  s += "UNKNOWN_TYPE";                                    break;
+        case '-': s += "void";                                break;
+        case 'F': s += "float";                               break;
+        case 'D': s += "double";                              break;
+        case 'I': s += "int";                                 break;
+        case 'U': s += "uint";                                break;
+        case 'B': s += "bool";                                break;
+        case 'S': s += "sampler";                             break;
+        case 's': s += "SamplerComparisonState";              break;
+        case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isBuffer ? "Buffer" : 
+                        isImage  ? "RWTexture" : "Texture");  break;
+        case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isBuffer ? "Buffer" : 
+                        isImage ? "RWTexture" : "Texture");   break;
+        case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isBuffer ? "Buffer" :
+                        isImage ? "RWTexture" : "Texture");   break;
+        default:  s += "UNKNOWN_TYPE";                        break;
         }
     } else {
         switch (type) {
@@ -274,7 +281,10 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
             if (type != 'T') // create itexture, utexture, etc
                 s += type;
 
-            s += (isBuffer ? "samplerBuffer" : "texture");
+            s += ((isImage && isBuffer) ? "imageBuffer"   :
+                  isImage               ? "image"         :
+                  isBuffer              ? "samplerBuffer" :
+                  "texture");
             break;
 
         default:  s += "UNKNOWN_TYPE"; break;
@@ -326,36 +336,55 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
     if (isArrayed)
         s += "Array";
 
+    // For HLSL, append return type for texture types
+    if (UseHlslTypes) {
+        switch (type) {
+        case 'i': s += "<int4>";   break;
+        case 'u': s += "<uint4>";  break;
+        case 'T': s += "<float4>"; break;
+        default: break;
+        }
+    }
+
     return s;
 }
 
-// TODO: the GLSL parser is currently used to parse HLSL prototypes.  However, many valid HLSL prototypes
+// The GLSL parser can be used to parse a subset of HLSL prototypes.  However, many valid HLSL prototypes
 // are not valid GLSL prototypes.  This rejects the invalid ones.  Thus, there is a single switch below
 // to enable creation of the entire HLSL space.
-inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char argOrder, char argType,
-                        int dim0, int dim1, int dim0Max, int dim1Max)
+inline bool IsValid(const char* cname, char retOrder, char retType, char argOrder, char argType, int dim0, int dim1)
 {
-    const bool isVec = dim0Max > 1 || argType == 'V';
-    const bool isMat = dim1Max > 1 || argType == 'M';
+    const bool isVec = (argOrder == 'V');
+    const bool isMat = (argOrder == 'M');
 
-    if (!IsTextureType(argOrder) &&
-        ((isVec && dim0 == 1)            ||  // avoid vec1
-         (isMat && dim0 == 1 && dim1 == 1)))  // avoid mat1x1
-        return false;
-
-    const std::string name(cname);  // for ease of comparison. slow, but temporary, until HLSL parser is online.
+    const std::string name(cname);
 
-    if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
+    // these do not have vec1 versions
+    if (dim0 == 1 && (name == "length" || name == "normalize" || name == "reflect" || name == "refract"))
         return false;
 
-    if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) ||
-        (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')))
+    if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1
         return false;
 
-    if (name == "GetRenderTargetSamplePosition" ||
-        name == "tex1D" ||
-        name == "tex1Dgrad")
-        return false;
+    if (UseHlslTypes) {
+        // NO further restrictions for HLSL
+    } else {
+        // GLSL parser restrictions
+        if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) ||
+            (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')))
+            return false;
+
+        if (isMat && dim0 == 1 && dim1 == 1)  // avoid mat1x1
+            return false;
+
+        if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
+            return false;
+
+        if (name == "GetRenderTargetSamplePosition" ||
+            name == "tex1D" ||
+            name == "tex1Dgrad")
+            return false;
+    }
 
     return true;
 }
@@ -492,6 +521,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
     static const EShLanguageMask EShLangCS     = EShLangAll;
     static const EShLanguageMask EShLangPS     = EShLangAll;
     static const EShLanguageMask EShLangHS     = EShLangAll;
+    static const EShLanguageMask EShLangGS     = EShLangAll;
 
     // This structure encodes the prototype information for each HLSL intrinsic.
     // Because explicit enumeration would be cumbersome, it's procedurally generated.
@@ -507,6 +537,9 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
     // '@' as first letter of order creates arrayed texture of given type
     // '$' / '&' as first letter of order creates 2DMS / 2DMSArray textures
     // '*' as first letter of order creates buffer object
+    // '!' as first letter of order creates image object
+    // '#' as first letter of order creates arrayed image object
+    // '~' as first letter of order creates an image buffer object
 
     static const struct {
         const char*   name;      // intrinsic name
@@ -521,12 +554,12 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "abort",                            nullptr, nullptr,   "-",              "-",             EShLangAll },
         { "abs",                              nullptr, nullptr,   "SVM",            "DFUI",          EShLangAll },
         { "acos",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
-        { "all",                              "S",    "B",        "SVM",            "BFI",           EShLangAll },
+        { "all",                              "S",    "B",        "SVM",            "BFIU",          EShLangAll },
         { "AllMemoryBarrier",                 nullptr, nullptr,   "-",              "-",             EShLangCS },
         { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",              "-",             EShLangCS },
-        { "any",                              "S",     "B",       "SVM",            "BFI",           EShLangAll },
-        { "asdouble",                         "S",     "D",       "S,",             "U,",            EShLangAll },
-        { "asdouble",                         "V2",    "D",       "V2,",            "U,",            EShLangAll },
+        { "any",                              "S",     "B",       "SVM",            "BFIU",          EShLangAll },
+        { "asdouble",                         "S",     "D",       "S,",             "UI,",           EShLangAll },
+        { "asdouble",                         "V2",    "D",       "V2,",            "UI,",           EShLangAll },
         { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll },
         { "asin",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "asint",                            nullptr, "I",       "SVM",            "FU",            EShLangAll },
@@ -539,7 +572,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "clip",                             "-",     "-",       "SVM",            "F",             EShLangPS },
         { "cos",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "cosh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
-        { "countbits",                        nullptr, nullptr,   "SV",             "U",             EShLangAll },
+        { "countbits",                        nullptr, nullptr,   "SV",             "UI",            EShLangAll },
         { "cross",                            nullptr, nullptr,   "V3,",            "F,",            EShLangAll },
         { "D3DCOLORtoUBYTE4",                 "V4",    "I",       "V4",             "F",             EShLangAll },
         { "ddx",                              nullptr, nullptr,   "SVM",            "F",             EShLangPS },
@@ -603,9 +636,9 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "log10",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "log2",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "mad",                              nullptr, nullptr,   "SVM,,",          "DFUI,,",        EShLangAll },
-        { "max",                              nullptr, nullptr,   "SVM,",           "FI,",           EShLangAll },
-        { "min",                              nullptr, nullptr,   "SVM,",           "FI,",           EShLangAll },
-        { "modf",                             nullptr, nullptr,   "SVM,>",          "FI,",           EShLangAll },
+        { "max",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll },
+        { "min",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll },
+        { "modf",                             nullptr, nullptr,   "SVM,>",          "FIU,",          EShLangAll },
         { "msad4",                            "V4",    "U",       "S,V2,V4",        "U,,",           EShLangAll },
         { "mul",                              "S",     nullptr,   "S,S",            "FI,",           EShLangAll },
         { "mul",                              "V",     nullptr,   "S,V",            "FI,",           EShLangAll },
@@ -632,7 +665,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "rcp",                              nullptr, nullptr,   "SVM",            "FD",            EShLangAll },
         { "reflect",                          nullptr, nullptr,   "V,",             "F,",            EShLangAll },
         { "refract",                          nullptr, nullptr,   "V,V,S",          "F,,",           EShLangAll },
-        { "reversebits",                      nullptr, nullptr,   "SV",             "U",             EShLangAll },
+        { "reversebits",                      nullptr, nullptr,   "SV",             "UI",            EShLangAll },
         { "round",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "rsqrt",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
         { "saturate",                         nullptr, nullptr ,  "SVM",            "F",             EShLangAll },
@@ -669,7 +702,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "texCUBEgrad",                      "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangPS },
         { "texCUBElod",                       "V4",    "F",       "V4,",            "S,F",           EShLangPS },
         { "texCUBEproj",                      "V4",    "F",       "V4,",            "S,F",           EShLangPS },
-        { "transpose",                        "^M",    nullptr,   "M",              "F",             EShLangAll },
+        { "transpose",                        "^M",    nullptr,   "M",              "FUIB",          EShLangAll },
         { "trunc",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
 
         // Texture object methods.  Return type can be overridden by shader declaration.
@@ -694,11 +727,16 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "SampleLevel",        /*!O*/        "V4",    nullptr,   "%@,S,V,S",       "FIU,S,F,",      EShLangAll },
         { "SampleLevel",        /* O*/        "V4",    nullptr,   "%@,S,V,S,V",     "FIU,S,F,,I",    EShLangAll },
 
-        { "Load",               /*!O*/        "V4",    nullptr,   "%@*,V",          "FIU,I",         EShLangAll },
+        { "Load",               /*!O*/        "V4",    nullptr,   "%@,V",           "FIU,I",         EShLangAll },
         { "Load",               /* O*/        "V4",    nullptr,   "%@,V,V",         "FIU,I,I",       EShLangAll },
         { "Load", /* +sampleidex*/            "V4",    nullptr,   "$&,V,S",         "FIU,I,I",       EShLangAll },
         { "Load", /* +samplindex, offset*/    "V4",    nullptr,   "$&,V,S,V",       "FIU,I,I,I",     EShLangAll },
 
+        // RWTexture loads
+        { "Load",                             "V4",    nullptr,   "!#,V",           "FIU,I",         EShLangAll },
+        // (RW)Buffer loads
+        { "Load",                             "V4",    nullptr,   "~*1,V",          "FIU,I",         EShLangAll },
+
         { "Gather",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
         { "Gather",             /* O*/        "V4",    nullptr,   "%@,S,V,V",       "FIU,S,F,I",     EShLangAll },
 
@@ -710,36 +748,36 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         // 
         // UINT Width
         // UINT MipLevel, UINT Width, UINT NumberOfLevels
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%1,>S",          "FUI,U",         EShLangAll },
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%1,>S",          "FUI,F",         EShLangAll },
+        { "GetDimensions",   /* 1D */         "-",     "-",       "%!~1,>S",        "FUI,U",         EShLangAll },
+        { "GetDimensions",   /* 1D */         "-",     "-",       "%!~1,>S",        "FUI,F",         EShLangAll },
         { "GetDimensions",   /* 1D */         "-",     "-",       "%1,S,>S,",       "FUI,U,,",       EShLangAll },
         { "GetDimensions",   /* 1D */         "-",     "-",       "%1,S,>S,",       "FUI,U,F,",      EShLangAll },
 
         // UINT Width, UINT Elements
         // UINT MipLevel, UINT Width, UINT Elements, UINT NumberOfLevels
-        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,>S,",         "FUI,U,",        EShLangAll },
-        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,>S,",         "FUI,F,",        EShLangAll },
+        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@#1,>S,",        "FUI,U,",        EShLangAll },
+        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@#1,>S,",        "FUI,F,",        EShLangAll },
         { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,S,>S,,",      "FUI,U,,,",      EShLangAll },
         { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,S,>S,,",      "FUI,U,F,,",     EShLangAll },
 
         // UINT Width, UINT Height
         // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels
-        { "GetDimensions",   /* 2D */         "-",     "-",       "%2,>S,",         "FUI,U,",        EShLangAll },
-        { "GetDimensions",   /* 2D */         "-",     "-",       "%2,>S,",         "FUI,F,",        EShLangAll },
+        { "GetDimensions",   /* 2D */         "-",     "-",       "%!2,>S,",        "FUI,U,",        EShLangAll },
+        { "GetDimensions",   /* 2D */         "-",     "-",       "%!2,>S,",        "FUI,F,",        EShLangAll },
         { "GetDimensions",   /* 2D */         "-",     "-",       "%2,S,>S,,",      "FUI,U,,,",      EShLangAll },
         { "GetDimensions",   /* 2D */         "-",     "-",       "%2,S,>S,,",      "FUI,U,F,,",     EShLangAll },
 
         // UINT Width, UINT Height, UINT Elements
         // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels
-        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,>S,,",        "FUI,U,,",       EShLangAll },
-        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,>S,,",        "FUI,F,F,F",     EShLangAll },
+        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@#2,>S,,",       "FUI,U,,",       EShLangAll },
+        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@#2,>S,,",       "FUI,F,F,F",     EShLangAll },
         { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,S,>S,,,",     "FUI,U,,,,",     EShLangAll },
         { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,S,>S,,,",     "FUI,U,F,,,",    EShLangAll },
 
         // UINT Width, UINT Height, UINT Depth
         // UINT MipLevel, UINT Width, UINT Height, UINT Depth, UINT NumberOfLevels
-        { "GetDimensions",   /* 3D */         "-",     "-",       "%3,>S,,",        "FUI,U,,",       EShLangAll },
-        { "GetDimensions",   /* 3D */         "-",     "-",       "%3,>S,,",        "FUI,F,,",       EShLangAll },
+        { "GetDimensions",   /* 3D */         "-",     "-",       "%!3,>S,,",       "FUI,U,,",       EShLangAll },
+        { "GetDimensions",   /* 3D */         "-",     "-",       "%!3,>S,,",       "FUI,F,,",       EShLangAll },
         { "GetDimensions",   /* 3D */         "-",     "-",       "%3,S,>S,,,",     "FUI,U,,,,",     EShLangAll },
         { "GetDimensions",   /* 3D */         "-",     "-",       "%3,S,>S,,,",     "FUI,U,F,,,",    EShLangAll },
 
@@ -813,16 +851,14 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "GatherCmpAlpha",  /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll },
         { "GatherCmpAlpha",  /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll },
 
-        // TODO: Cmp forms
+        // geometry methods
+        { "Append",                           "-",     "-",       "-",              "-",              EShLangGS  },
+        { "RestartStrip",                     "-",     "-",       "-",              "-",              EShLangGS  },
 
         // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
         { nullptr,                            nullptr, nullptr,   nullptr,      nullptr,  0 },
     };
 
-    // Set this to true to avoid generating prototypes that will be invalid for the GLSL parser.
-    // TODO: turn it off (and remove the code) when the HLSL parser can be used to parse builtins.
-    static const bool skipInvalidGlsl = true;
-    
     // Create prototypes for the intrinsics.  TODO: Avoid ranged based for until all compilers can handle it.
     for (int icount = 0; hlslIntrinsics[icount].name; ++icount) {
         const auto& intrinsic = hlslIntrinsics[icount];
@@ -836,10 +872,11 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
 
             for (const char* argOrder = intrinsic.argOrder; !IsEndOfArg(argOrder); ++argOrder) { // for each order...
                 const bool isTexture   = IsTextureType(*argOrder);
-                const bool isArrayed   = IsTextureArrayed(*argOrder);
+                const bool isArrayed   = IsArrayed(*argOrder);
                 const bool isMS        = IsTextureMS(*argOrder);
                 const bool isBuffer    = IsBuffer(*argOrder);
-                const bool mipInCoord  = HasMipInCoord(intrinsic.name, isMS, isBuffer);
+                const bool isImage     = IsImage(*argOrder);
+                const bool mipInCoord  = HasMipInCoord(intrinsic.name, isMS, isBuffer, isImage);
                 const int fixedVecSize = FixedVecSize(argOrder);
                 const int coordArg     = CoordinateArgPos(intrinsic.name, isTexture);
 
@@ -857,8 +894,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
                             const char* retOrder = intrinsic.retOrder ? intrinsic.retOrder : argOrder;
                             const char* retType  = intrinsic.retType  ? intrinsic.retType  : argType;
 
-                            if (skipInvalidGlsl && !IsValidGlsl(intrinsic.name, *retOrder, *retType, *argOrder, *argType,
-                                                                dim0, dim1, dim0Max, dim1Max))
+                            if (!IsValid(intrinsic.name, *retOrder, *retType, *argOrder, *argType, dim0, dim1))
                                 continue;
 
                             // Reject some forms of sample methods that don't exist.
@@ -1123,6 +1159,10 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
     symbolTable.relateToOperator("GatherCmpGreen",              EOpMethodGatherCmpGreen);
     symbolTable.relateToOperator("GatherCmpBlue",               EOpMethodGatherCmpBlue);
     symbolTable.relateToOperator("GatherCmpAlpha",              EOpMethodGatherCmpAlpha);
+
+    // GS methods
+    symbolTable.relateToOperator("Append",                      EOpMethodAppend);
+    symbolTable.relateToOperator("RestartStrip",                EOpMethodRestartStrip);
 }
 
 //
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index cf83ef39317f57e67092e0af7d7a2ef5b3ba3435..4e355ba7ca69ed12331dfa1120cee2d81a8b0428 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -119,6 +119,16 @@ void HlslScanContext::fillInKeywordMap()
     (*KeywordMap)["inout"] =                   EHTokInOut;
     (*KeywordMap)["layout"] =                  EHTokLayout;
 
+    (*KeywordMap)["point"] =                   EHTokPoint;
+    (*KeywordMap)["line"] =                    EHTokLine;
+    (*KeywordMap)["triangle"] =                EHTokTriangle;
+    (*KeywordMap)["lineadj"] =                 EHTokLineAdj;
+    (*KeywordMap)["triangleadj"] =             EHTokTriangleAdj;
+
+    (*KeywordMap)["PointStream"] =             EHTokPointStream;
+    (*KeywordMap)["LineStream"] =              EHTokLineStream;
+    (*KeywordMap)["TriangleStream"] =          EHTokTriangleStream;
+
     (*KeywordMap)["Buffer"] =                  EHTokBuffer;
     (*KeywordMap)["vector"] =                  EHTokVector;
     (*KeywordMap)["matrix"] =                  EHTokMatrix;
@@ -136,7 +146,7 @@ void HlslScanContext::fillInKeywordMap()
     (*KeywordMap)["min10float"] =              EHTokMin10float;
     (*KeywordMap)["min16int"] =                EHTokMin16int;
     (*KeywordMap)["min12int"] =                EHTokMin12int;
-    (*KeywordMap)["min16uint"] =               EHTokMin16int;
+    (*KeywordMap)["min16uint"] =               EHTokMin16uint;
 
     (*KeywordMap)["bool1"] =                   EHTokBool1;
     (*KeywordMap)["bool2"] =                   EHTokBool2;
@@ -159,6 +169,43 @@ void HlslScanContext::fillInKeywordMap()
     (*KeywordMap)["uint3"] =                   EHTokUint3;
     (*KeywordMap)["uint4"] =                   EHTokUint4;
 
+    (*KeywordMap)["min16float1"] =             EHTokMin16float1;
+    (*KeywordMap)["min16float2"] =             EHTokMin16float2;
+    (*KeywordMap)["min16float3"] =             EHTokMin16float3;
+    (*KeywordMap)["min16float4"] =             EHTokMin16float4;
+    (*KeywordMap)["min10float1"] =             EHTokMin10float1;
+    (*KeywordMap)["min10float2"] =             EHTokMin10float2;
+    (*KeywordMap)["min10float3"] =             EHTokMin10float3;
+    (*KeywordMap)["min10float4"] =             EHTokMin10float4;
+    (*KeywordMap)["min16int1"] =               EHTokMin16int1;
+    (*KeywordMap)["min16int2"] =               EHTokMin16int2;
+    (*KeywordMap)["min16int3"] =               EHTokMin16int3;
+    (*KeywordMap)["min16int4"] =               EHTokMin16int4;
+    (*KeywordMap)["min12int1"] =               EHTokMin12int1;
+    (*KeywordMap)["min12int2"] =               EHTokMin12int2;
+    (*KeywordMap)["min12int3"] =               EHTokMin12int3;
+    (*KeywordMap)["min12int4"] =               EHTokMin12int4;
+    (*KeywordMap)["min16uint1"] =              EHTokMin16uint1;
+    (*KeywordMap)["min16uint2"] =              EHTokMin16uint2;
+    (*KeywordMap)["min16uint3"] =              EHTokMin16uint3;
+    (*KeywordMap)["min16uint4"] =              EHTokMin16uint4;
+
+    (*KeywordMap)["bool1x1"] =                 EHTokBool1x1;
+    (*KeywordMap)["bool1x2"] =                 EHTokBool1x2;
+    (*KeywordMap)["bool1x3"] =                 EHTokBool1x3;
+    (*KeywordMap)["bool1x4"] =                 EHTokBool1x4;
+    (*KeywordMap)["bool2x1"] =                 EHTokBool2x1;
+    (*KeywordMap)["bool2x2"] =                 EHTokBool2x2;
+    (*KeywordMap)["bool2x3"] =                 EHTokBool2x3;
+    (*KeywordMap)["bool2x4"] =                 EHTokBool2x4;
+    (*KeywordMap)["bool3x1"] =                 EHTokBool3x1;
+    (*KeywordMap)["bool3x2"] =                 EHTokBool3x2;
+    (*KeywordMap)["bool3x3"] =                 EHTokBool3x3;
+    (*KeywordMap)["bool3x4"] =                 EHTokBool3x4;
+    (*KeywordMap)["bool4x1"] =                 EHTokBool4x1;
+    (*KeywordMap)["bool4x2"] =                 EHTokBool4x2;
+    (*KeywordMap)["bool4x3"] =                 EHTokBool4x3;
+    (*KeywordMap)["bool4x4"] =                 EHTokBool4x4;
     (*KeywordMap)["int1x1"] =                  EHTokInt1x1;
     (*KeywordMap)["int1x2"] =                  EHTokInt1x2;
     (*KeywordMap)["int1x3"] =                  EHTokInt1x3;
@@ -258,6 +305,13 @@ void HlslScanContext::fillInKeywordMap()
     (*KeywordMap)["TextureCubeArray"] =        EHTokTextureCubearray;
     (*KeywordMap)["Texture2DMS"] =             EHTokTexture2DMS;
     (*KeywordMap)["Texture2DMSArray"] =        EHTokTexture2DMSarray;
+    (*KeywordMap)["RWTexture1D"] =             EHTokRWTexture1d;
+    (*KeywordMap)["RWTexture1DArray"] =        EHTokRWTexture1darray;
+    (*KeywordMap)["RWTexture2D"] =             EHTokRWTexture2d;
+    (*KeywordMap)["RWTexture2DArray"] =        EHTokRWTexture2darray;
+    (*KeywordMap)["RWTexture3D"] =             EHTokRWTexture3d;
+    (*KeywordMap)["RWBuffer"] =                EHTokRWBuffer;
+
 
     (*KeywordMap)["struct"] =                  EHTokStruct;
     (*KeywordMap)["cbuffer"] =                 EHTokCBuffer;
@@ -468,7 +522,20 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
     case EHTokLayout:
         return keyword;
 
-    // template types
+    // primitive types
+    case EHTokPoint:
+    case EHTokLine:
+    case EHTokTriangle:
+    case EHTokLineAdj:
+    case EHTokTriangleAdj:
+        return keyword;
+
+    // stream out types
+    case EHTokPointStream:
+    case EHTokLineStream:
+    case EHTokTriangleStream:
+        return keyword;
+
     case EHTokBuffer:
     case EHTokVector:
     case EHTokMatrix:
@@ -511,8 +578,44 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
     case EHTokUint2:
     case EHTokUint3:
     case EHTokUint4:
+    case EHTokMin16float1:
+    case EHTokMin16float2:
+    case EHTokMin16float3:
+    case EHTokMin16float4:
+    case EHTokMin10float1:
+    case EHTokMin10float2:
+    case EHTokMin10float3:
+    case EHTokMin10float4:
+    case EHTokMin16int1:
+    case EHTokMin16int2:
+    case EHTokMin16int3:
+    case EHTokMin16int4:
+    case EHTokMin12int1:
+    case EHTokMin12int2:
+    case EHTokMin12int3:
+    case EHTokMin12int4:
+    case EHTokMin16uint1:
+    case EHTokMin16uint2:
+    case EHTokMin16uint3:
+    case EHTokMin16uint4:
 
     // matrix types
+    case EHTokBool1x1:
+    case EHTokBool1x2:
+    case EHTokBool1x3:
+    case EHTokBool1x4:
+    case EHTokBool2x1:
+    case EHTokBool2x2:
+    case EHTokBool2x3:
+    case EHTokBool2x4:
+    case EHTokBool3x1:
+    case EHTokBool3x2:
+    case EHTokBool3x3:
+    case EHTokBool3x4:
+    case EHTokBool4x1:
+    case EHTokBool4x2:
+    case EHTokBool4x3:
+    case EHTokBool4x4:
     case EHTokInt1x1:
     case EHTokInt1x2:
     case EHTokInt1x3:
@@ -529,6 +632,22 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
     case EHTokInt4x2:
     case EHTokInt4x3:
     case EHTokInt4x4:
+    case EHTokUint1x1:
+    case EHTokUint1x2:
+    case EHTokUint1x3:
+    case EHTokUint1x4:
+    case EHTokUint2x1:
+    case EHTokUint2x2:
+    case EHTokUint2x3:
+    case EHTokUint2x4:
+    case EHTokUint3x1:
+    case EHTokUint3x2:
+    case EHTokUint3x3:
+    case EHTokUint3x4:
+    case EHTokUint4x1:
+    case EHTokUint4x2:
+    case EHTokUint4x3:
+    case EHTokUint4x4:
     case EHTokFloat1x1:
     case EHTokFloat1x2:
     case EHTokFloat1x3:
@@ -581,6 +700,12 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
     case EHTokTextureCubearray:
     case EHTokTexture2DMS:
     case EHTokTexture2DMSarray:
+    case EHTokRWTexture1d:
+    case EHTokRWTexture1darray:
+    case EHTokRWTexture2d:
+    case EHTokRWTexture2darray:
+    case EHTokRWTexture3d:
+    case EHTokRWBuffer:
         return keyword;
 
     // variable, user type, ...
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index e38cb9a60330243c23abc678c884aa36f9b100e4..6902070cbe3e9e455c8c7ddc893ea3086e74e301 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -66,6 +66,18 @@ enum EHlslTokenClass {
     EHTokInOut,
     EHTokLayout,
 
+    // primitive types
+    EHTokPoint,
+    EHTokLine,
+    EHTokTriangle,
+    EHTokLineAdj,
+    EHTokTriangleAdj,
+
+    // stream out types
+    EHTokPointStream,
+    EHTokLineStream,
+    EHTokTriangleStream,
+
     // template types
     EHTokBuffer,
     EHTokVector,
@@ -108,6 +120,26 @@ enum EHlslTokenClass {
     EHTokUint2,
     EHTokUint3,
     EHTokUint4,
+    EHTokMin16float1,
+    EHTokMin16float2,
+    EHTokMin16float3,
+    EHTokMin16float4,
+    EHTokMin10float1,
+    EHTokMin10float2,
+    EHTokMin10float3,
+    EHTokMin10float4,
+    EHTokMin16int1,
+    EHTokMin16int2,
+    EHTokMin16int3,
+    EHTokMin16int4,
+    EHTokMin12int1,
+    EHTokMin12int2,
+    EHTokMin12int3,
+    EHTokMin12int4,
+    EHTokMin16uint1,
+    EHTokMin16uint2,
+    EHTokMin16uint3,
+    EHTokMin16uint4,
 
     // matrix types
     EHTokInt1x1,
@@ -209,6 +241,13 @@ enum EHlslTokenClass {
     EHTokTextureCubearray,
     EHTokTexture2DMS,
     EHTokTexture2DMSarray,
+    EHTokRWTexture1d,
+    EHTokRWTexture1darray,
+    EHTokRWTexture2d,
+    EHTokRWTexture2darray,
+    EHTokRWTexture3d,
+    EHTokRWBuffer,
+    
 
     // variable, user type, ...
     EHTokIdentifier,